闲来无聊,搞搞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. vue踩坑之路--点击按钮改变div样式

    有时候,我们在做项目的时候,想通过某个按钮来改变某个div样式,那么可以通过以下代码实现: <!DOCTYPE html> <html> <head> <me ...

  2. Oracle开发常用函数 max 最大数 自动加 1 的模式

    create sequence bs_com_seq increment by 1 start with 1 minvalue 1 maxvalue 999999 cycle nocache orde ...

  3. Linux - 用户管理与文件权限

    目录 Linux - 用户管理与文件权限 创建普通用户 切换用户 userdel删除用户 sudo 命令 文件与目录权限 Linux权限的解读 目录权限 查看用户权限的命令 文件权限 修改权限的命令 ...

  4. Ac自动机基础题集合

    Ac_automaton的板子打熟以后发现碰到题不会做,而且还是比较纯的板子,只要改几处地方就可以,Ac_automation有许多优秀而fantasy的性质,下面粘几个题,来记录一下做题的心得. 1 ...

  5. OpenCV 基于超像素分割的图像区域选取方法及源码

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51386993 工程源码GitHub: ...

  6. Sencha Touch 2中如何动态添加button

    原理很简单无非就是在一个容器上面选中id,用容器的add方法将button循环加入. 现在我们来试一下 1.先定义一个Container组件用,以后在里面添加button ? 1 2 xtype:'c ...

  7. js两个整数之间求和

    const GetSum = (a, b) => { let min = Math.min(a, b), max = Math.max(a, b); return (max - min + 1) ...

  8. VBox虚拟机与主机(宿主)通讯原理以及socat(套接字猫)简单介绍

    前言 尝试虚拟机使用socat建立服务器端接口转发时,发现对虚拟机接入网络原理不是非常了解,于是乎上网查找资料想搞明白是怎么回事,于是乎有了这篇总结博文.socat可以在服务器端口间建立全双工通信通道 ...

  9. [LeetCode]Valid Sudoku解题记录

    这道题考查对二维数组的处理,哈希表. 1.最自然的方法就是分别看每一个数是否符合三个规则.所以就须要对应的数据结构来 记录这些信息,判定是否存在.显然最先想到用哈希表. 2.学会把问题抽象成一个个的子 ...

  10. UVa 642 - Word Amalgamation

    题目:给你一个单词列表.再给你一些新的单词.输出列表中又一次排列能得到此新单词的词. 分析:字符串.对每一个字符串的字母排序生成新的传f(str).总体排序,用二分来查找就可以. 说明:注意输出要满足 ...