C#之考勤系统

员工类

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 = 28;
      s1.Sex = "男";
      s1.Id = 1;

      SE.list.Add(s1);

      SE s2 = new SE();
      s2.Name = "三狗子";
      s2.Age = 20;
      s2.Sex = "女";
      s2.Id = 2;

      SE.list.Add(s2);

      SE s3 = new SE();
      s3.Name = "五狗子";
      s3.Age = 34;
      s3.Sex = "男";
      s3.Id = 3;

      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 = 0; i < temp.Length; i++)
      {
          byte tempByte = Convert.ToByte(temp[i]);   //设置byte格式
          if ((tempByte < 48) || (tempByte > 57))   //如果改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 != 1)
      {
          MessageBox.Show("请选择一行");
          return;
      }

      string num = dataGridView1.SelectedRows[0].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[0].Cells["name"].Value.ToString();
      s.Gettime = DateTime.Now;
      sign.dic.Add(s.Id,s);
      opt = true;
      MessageBox.Show("你已经成功签到了!!!");
  }

  public static int i=0;
  private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
  {
      if (dataGridView1.SelectedRows.Count != 1)
      {
          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 = 0; j <SE.list.Count; j++)
              {
                  //如果存在员工号则删除
                  if (SE.list[j].Id == num)
                  {
                      SE.list.RemoveAt(j);
                  }
              }

          }
          //刷新dgvlist
          BindGrid(SE.list);
      }
  }

  public static int counter = 0;
  public static  bool  opt = false;
  private void 签退ToolStripMenuItem_Click(object sender, EventArgs e)
  {

      if (dataGridView1.SelectedRows.Count != 1)
      {
          MessageBox.Show("请选择一行");
      }
      else
      {
          string id = dataGridView1.SelectedRows[0].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(7) < sign.dic[item].Outtime))
                  {
                      //      MessageBox.Show(sign.dic[item].Gettime.AddSeconds(1).ToString());
                      MessageBox.Show("还没工作完,不许签退");
                      counter = 1;

                      return;
                  }

                   if(counter==0){
                  //证明已经执行签到,设置签退时间
                      sign.dic[item].Outtime = DateTime.Now;
                      MessageBox.Show("签退成功!");
                      opt = true;
                      i++;
                    flag = true;
                    i = 0;
                    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)
  {

  }
    }
}

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

时间: 2024-12-29 04:05:55

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

员工考勤系统

员工考勤系统中的主要思想是,窗体间的传递以及datagridview之间的数据绑定刷新 public class SE { public string Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } } 创建se类储存对象 public class Record { public DateTime intime { get;

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

我要开发的是一个基于SSH框架的在线考勤系统,在系统中常见的质量属性有:可用性.可修改性.性能.安全性.易用性. 可用性方面: 可用性是指系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况下能够恢复正常运行的速度来衡量的.实现可用性的战术分为三类:错误检测(用来检测故障的健康监视).错误恢复(检测到故障时的恢复).错误预防(阻止错误演变为故障).用于检测错误的3个战术是: 信号/响应.心跳.异常.用于错误恢复的战术有7种:表决.主动冗余.被动冗余.备件.shadow操作.状态再

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

员工准时.正常出勤是企业考勤制度的基本要求,然而目前签名式.卡钟式.IC卡考勤系统均存在代打卡.人情卡.不易统计等漏洞,而市面上的光学指纹考勤机存在识别能力差.识别速度慢.使用寿命短.不能完全杜绝指纹套等弊端,给企业管理增加了难度及成本,进而影响员工的工作效率及企业的经济效益. 如果您还在为如何真实.公平.公正的进行考勤而烦恼,您可以选择华本国际3D活体指纹考勤一体机,让考勤更可靠.便捷.智能. 华本国际企业办公3D指纹考勤系统特点 1. 采用3D活体指纹技术,杜绝一切假.套指模,防止员工之间代

人脸识别考勤系统解决方案

人脸识别考勤系统是由人脸识别考勤机.考勤管理软件组成.人脸识别考勤机彻底杜绝了代打卡考勤的发生,解决了传统打卡考勤系统"只认卡.不认人"的弊端,消除了指纹考勤接触使用的尴尬情况,非接触,直观,友好. 严格规范的员工考勤管理是现代企事业单位提高管理效益的重要保证, 而传统的以打卡.刷卡为代表的考勤产品,存在着替代打卡,效率低下,不易统计,管理和使用维护成本高等弊端. 指纹识别产品在考勤中的大规模应用,部分解决了代打卡的问题,但是超过5%左右的人群天生指纹很浅,无法用指纹识别.并且非典.流

河南人脸识别工地实名制考勤系统解决方案

建筑行业是一个对安全性要求很高的行业,如何做好施工现场管理,控制事故发生率,一直是施工企业.政府管理部门关注的焦点,而对工地工作人员的管理也就显得尤为重要. 目前建筑工地监管主要存在以下方面问题: 1.信息化监管缺失:因为施工工地环境复杂,工地分散,无信息化远程监管手段,人工巡检难度大,管理效率低,无法及时对施工现场情况及时反馈,造成管理的之后效应,对突发事件缺乏有效的控制和支撑: 2.人员管理难度大:工人招聘无法有效遏制黑名单甚至非法人员混入工地,违规操作多发,往往导致惨痛的事故: 3.缺乏统

期末测试javaweb 考勤系统前端

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title>

高校用哪种智慧校园考勤系统比较好

目前很多高校实现了"移动校园"的快捷办公与高效管理,教育信息化成为一种趋势,很多校园考勤软件为校园移动考勤助力,帮助实现支撑学校管理的系统化.规范化.精细化和信息化,那么高校用哪种智慧校园考勤系统比较好?信息化成为一种趋势,很多校园考勤软件为校园移动考勤助力,帮助实现支撑学校管理的系统化.规范化.精细化和信息化,那么高校用哪种智慧校园考勤系统比较好?高校用哪种智慧校园考勤系统比较好?还是签到荚比较好!(1)提供精准室内定位,定位精度可以区分不同教室.房间.(2)提供刷脸考勤,无法代签到

自动考勤系统的组成

目前很多高校实现了"移动校园"的快捷办公与高效管理,教育信息化成为一种趋势,签到荚为校园移动考勤助力.那么自动考勤系统的组成有哪些呢?真正的自动化考勤平台,能实时获取各类考勤打卡采集,完美各类请假缺勤结果,对接薪酬系统,实现从考勤获取.劳动力分析到薪酬核算的一体化操作,真正的提高考勤管理效率.自动考勤系统的组成有哪些呢? 签到荚是一个移动.基于室内定位和人脸识别技术的校园考勤系统.其室内定位精准度能区分不同房间,人脸识别服务能杜绝代签到.既能与数字化校园平台无缝对接 ( 已做好标准接口

中控考勤系统查询软件

由于方便公司员工查询自己的考勤,自己动手写了一个DELPHI小程序 有兴趣的朋友可以下载试用!很方便. 软件下载:http://files.cnblogs.com/files/loyeit/ZKtimeView.zip