闲来无聊,搞搞C#,下面就是我写的一个Demo

员工类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 考勤管理
{
class sign
{
private string _id;//员工工号
private string _name;//员工姓名
private DateTime _gettime;//签到时间
private DateTime _outtime;//签退时间 public DateTime Outtime
{
get { return _outtime; }
set { _outtime = value; }
} public DateTime Gettime
{
get { return _gettime; }
set { _gettime = value; }
} public string Name
{
get { return _name; }
set { _name = value; }
}
public string Id
{
get { return _id; }
set { _id = value; }
} public static Dictionary<string, sign> dic = new Dictionary<string, sign>(); }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 考勤管理
{
public class SE
{
private string name; public string Name
{
get { return name; }
set { name = value; }
}
private int id; public int Id
{
get { return id; }
set { id = value; }
}
private int age; public int Age
{
get { return age; }
set { age = value; }
}
private string sex; public string Sex
{
get { return sex; }
set { sex = value; }
} public static List<SE> list = new List<SE>(); }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 考勤管理
{
public partial class FrmqdTable : Form
{
public FrmqdTable()
{
InitializeComponent();
} public Form1 table;
private void FrmqdTable_Load(object sender, EventArgs e)
{ label1.Text = string.Format("你好,共有{0}条打卡记录", sign.dic.Count);
dataGridView1.AutoGenerateColumns = false;
BindingSource bs = new BindingSource();
bs.DataSource = sign.dic.Values;
dataGridView1.DataSource = bs;
} private void button1_Click(object sender, EventArgs e)
{
// string id = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
// MessageBox.Show(sign.dic[id].Outtime.ToString()); Form1 f = new Form1();
f.table = this;
this.Hide();
f.Show();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 考勤管理
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} public FrmqdTable table;
private void 新增ToolStripMenuItem_Click(object sender, EventArgs e)
{
FrmAdd a = new FrmAdd();
a.main = this;
a.Show();
} private void Form1_Load(object sender, EventArgs e)
{
Initial();
} public void Initial() {
SE s1 = new SE();
s1.Name = "二狗子";
s1.Age = ;
s1.Sex = "男";
s1.Id = ; SE.list.Add(s1); SE s2 = new SE();
s2.Name = "三狗子";
s2.Age = ;
s2.Sex = "女";
s2.Id = ; SE.list.Add(s2); SE s3 = new SE();
s3.Name = "五狗子";
s3.Age = ;
s3.Sex = "男";
s3.Id = ; SE.list.Add(s3);
BindGrid(SE.list);
dataGridView1.DataSource = SE.list; } private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text=="")
{
dataGridView1.DataSource = SE.list;
return;
} List<SE> searchList = new List<SE>(); //定义打卡记录的Dictionary
if (isNaN(textBox1.Text) == true)
{
string id = this.textBox1.Text;
int myid = Convert.ToInt32(id); foreach (SE item in SE.list)
{
if (item.Id==myid)
{
searchList.Add(item);
}
else
{
BindGrid(SE.list);
}
} if (textBox1.Text != "")
{
//刷新dgvlist
BindGrid(searchList);
} }
else {
MessageBox.Show("不好意思,您输入的不是数字!");
}
} public bool isNaN(string temp)
{ for (int i = ; i < temp.Length; i++)
{
byte tempByte = Convert.ToByte(temp[i]); //设置byte格式
if ((tempByte < ) || (tempByte > )) //如果改tempByte不在范围内
{
return false;
} } return true;
} public void BindGrid(List<SE> list)
{
dataGridView1.DataSource = new BindingList<SE>(list);
} private void 签到ToolStripMenuItem_Click(object sender, EventArgs e)
{ //确保有选中的行
if (dataGridView1.SelectedRows.Count != )
{
MessageBox.Show("请选择一行");
return;
} string num = dataGridView1.SelectedRows[].Cells["id"].Value.ToString(); foreach (string item in sign.dic.Keys)
{
if (item==num)
{
MessageBox.Show("你已经签到过了");
return;
}
} sign s = new sign();
s.Id = num;
s.Name = dataGridView1.SelectedRows[].Cells["name"].Value.ToString();
s.Gettime = DateTime.Now;
sign.dic.Add(s.Id,s);
opt = true;
MessageBox.Show("你已经成功签到了!!!");
} public static int i=;
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count != )
{
MessageBox.Show("请选择一行");
}
else
{
DialogResult dr = MessageBox.Show("确认删除该条员工信息吗?", "温馨提示", MessageBoxButtons.OKCancel);
if (dr == DialogResult.OK)
{
int num = Convert.ToInt32(dataGridView1.Rows[i].Cells["id"].Value); for (int j = ; j <SE.list.Count; j++)
{
//如果存在员工号则删除
if (SE.list[j].Id == num)
{
SE.list.RemoveAt(j);
}
} }
//刷新dgvlist
BindGrid(SE.list);
}
} public static int counter = ;
public static bool opt = false;
private void 签退ToolStripMenuItem_Click(object sender, EventArgs e)
{ if (dataGridView1.SelectedRows.Count != )
{
MessageBox.Show("请选择一行");
}
else
{
string id = dataGridView1.SelectedRows[].Cells["id"].Value.ToString();
//bool result=sign.dic.ContainsKey(id); bool flag = false; foreach (var item in sign.dic.Keys)
{
if (item==id)
{
sign.dic[item].Outtime = DateTime.Now; //MessageBox.Show(sign.dic[item].Outtime.ToString());
if (!(sign.dic[item].Gettime.AddSeconds() < sign.dic[item].Outtime))
{
// MessageBox.Show(sign.dic[item].Gettime.AddSeconds(1).ToString());
MessageBox.Show("还没工作完,不许签退");
counter = ; return;
} if(counter==){
//证明已经执行签到,设置签退时间
sign.dic[item].Outtime = DateTime.Now;
MessageBox.Show("签退成功!");
opt = true;
i++;
flag = true;
i = ;
counter++;
break;
} else
{
MessageBox.Show("已经签到了");
return; }
} }
}
} private void 打卡记录ToolStripMenuItem_Click(object sender, EventArgs e)
{
FrmqdTable t = new FrmqdTable();
t.table = this;
t.Show();
this.Hide(); } private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{ }
}
}

三个窗体的全部代码,但是一直点签退的时候,唯独这里有漏洞,如果有大牛解决的话,希望能在下面留言,方便大家交流学习,谢谢!!!!

C#之考勤系统的更多相关文章

  1. 考勤系统代码分析——主页布局easyui框架

    考勤系统主页的布局用的是easyui的Layout控件 Layout:布局容器有5个区域:北.南.东.西和中间.中间区域面板是必须的,边缘的面板都是可选的.每个边缘区域面板都可以通过拖拽其边框改变大小 ...

  2. 企业办公3D指纹考勤系统解决方案(一)

    员工准时.正常出勤是企业考勤制度的基本要求,然而目前签名式.卡钟式.IC卡考勤系统均存在代打卡.人情卡.不易统计等漏洞,而市面上的光学指纹考勤机存在识别能力差.识别速度慢.使用寿命短.不能完全杜绝指纹 ...

  3. 连锁机构3D指纹考勤系统解决方案

    信息技术的高速发展加速了商业零售业连锁经营的信息化和全球化的进程,同时也推动了商业管理的变革.尽管人们对它的认识是被动与滞后的,但这种变革依然伴随着商业业态的转变和信息技术的发展或快或慢地在悄然进行着 ...

  4. 工厂食堂3D指纹考勤系统解决方案

    指纹考勤就餐管理系统利用3D活体指纹技术完成对正式员工就餐管理.就餐者只需办理完入职手续,并登记考勤指纹,就可通过考勤指纹在工厂食堂领餐. 大多数工厂食堂就餐是福利性的,只准员工就餐,不准员工带亲戚朋 ...

  5. 企业办公3D指纹考勤系统解决方案

    员工准时.正常出勤是企业考勤制度的基本要求,然而目前签名式.卡钟式.IC卡考勤系统均存在代打卡.人情卡.不易统计等漏洞,而市面上的光学指纹考勤机存在识别能力差.识别速度慢.使用寿命短.不能完全杜绝指纹 ...

  6. RE:考勤系统的复盘

     一大早看了 <美团旅行前端技术体系的思考与实践> 这篇文,恰巧又在昨天完成了一个项目.确实让我忍不住码篇总结,为自己做一个复盘. 历时两个月,考勤系统 这个项目总算能够称得上完成了.项目 ...

  7. 【UML】NO.50.EBook.5.UML.1.010-【UML 大战需求分析】- 考勤系统

    1.0.0 Summary Tittle:[UML]NO.50.EBook.1.UML.1.010-[UML 大战需求分析]- 考勤系统 Style:DesignPattern Series:Desi ...

  8. 基于SSH框架的在线考勤系统开发的质量属性

    我要开发的是一个基于SSH框架的在线考勤系统. 质量属性是指影响质量的相关因素,下面我将分别从6个系统质量属性(可用性,易用性,可修改性,性能,安全性,可测试性)来分析我的系统,以及如何实现这些质量属 ...

  9. 写一个小demo过程中遇到的各种问题 学生管理考勤系统(网页模拟)

    添加与新增一些小玩意的1.0.3版本:传送门 各位带哥,这不是你们要的c++.java.c#作业哈 课上要求做个小作业,学生管理考勤系统,原本想着是个练手的好机会,结果只证实了我还是个弟中弟. 设想的 ...

  10. 第二次团队作业-PANTHER考勤系统需求分析

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 这个作业要求在哪里 https://edu.cnblo ...

随机推荐

  1. jquery操作元素之间相邻的元素的获取方式

    <!DOCTYPE html><html> <head> <style> .siblings * { display: block; border: 2 ...

  2. 利用WMITool解决浏览器快捷方式启动参数被篡改以及浏览器主页被劫持的问题

    先说说症状 症状①:通过快捷方式启动浏览器,首页跳转到2345以及hao123网址导航页,切系统内安装的多款浏览器(IE.Chrome.Firefox.Opera.Safari.Maxthon)症状相 ...

  3. Spring 源代码学习(一)

    一 .Spring容器最基本的功能 1. 读取配置文件 2. 校验配置文件的正确性 3. 将配置文件信息加载到内存 4. 通过反射实例化bean对象 5. 构建系统  二 .核心类关系图 图1-1 D ...

  4. hdu2001 计算两点间的距离【C++】

    计算两点间的距离 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  5. 【codeforces 510B】Fox And Two Dots

    [题目链接]:http://codeforces.com/contest/510/problem/B [题意] 让你在一个二维的方格里面找环; 两个点有相邻的边它们才是相连的; 有环YES,没环NO ...

  6. NandFlash、NorFlash、DataFlash

    1. NandFlash和NorFlash        Flash存储芯片,俗称闪存,因其具有非易失性.可擦除性.可重复编程及高密度.低功耗等特点,广泛地应用于手机.数码相机.笔记本电脑等产品.   ...

  7. 用sqlldr导入csv文件

    1.新建文件test.ctl,内容如下 load dataCHARACTERSET 'UTF16' \*指定编码格式,很重要*\ infile 'vodall.csv' append into tab ...

  8. Introduction(本书简介)

    本书简介 本书将从三个方面权威的阐述如何提高.net app 性能问题: 验证.测量性能指标,然后辨别它是否超过度量 从内存管理.网络.I/O.并发等方面提高应用程序的性能 通过CLR的详细的设计细节 ...

  9. 移动端 javascript 计算html font-size

    直接上代码  (function(doc, win) {             var docEl = doc.documentElement,                 resizeEvt ...

  10. post and get

    POST和GET是Web编程中的两个术语,他们是通过URI访问resource的两种方式.简单的说, GET 是把要访问的资源嵌入在URI中. 假设你在一个页面 http://www.myphone. ...