• 用WinForm写的员工考勤项目!!!!!!


    先说几句,作为一个还在学习的程序员,掌握的知识有限;但我利用自身所学,给一些像我一样还在学习的码农提供我的绵薄之力!

    写的不好,但是尽力了,希望大牛指点。多多吐槽!!!

       好了开始说项目需求: 实现新增员工;使用DataGridView控件展示员工信息;实现根据员工工号进行模糊查询;实现删除员工信息;每天只能签到一次;签退前必须已经签到

    看到这些需求,我们先要思考下该做什么,理清思路才能更快的完成项目。我通常先搭建窗体,然后根据要求逐步实现项目要求!

    这是我们所要用的到的三个窗体

    我们建一个辅助类,初始化一个单列的泛型集合,给单列的泛型集合付个初值

    class Worker
        {
            private string id;
            private string name;
            private int age;
            private string sex;
            public string ID
            {
                get
                {
                    return id;
                }
    
                set
                {
                    id = value;
                }
            }
    
            public string Name
            {
                get
                {
                    return name;
                }
    
                set
                {
                    name = value;
                }
            }
    
            public int Age
            {
                get
                {
                    return age;
                }
    
                set
                {
                    age = value;
                }
            }
    
            public string Sex
            {
                get
                {
                    return sex;
                }
    
                set
                {
                    sex = value;
                }
            }
            
            public static List<Worker> list = new List<Worker>();
            public static void Insert()
            {
                Worker w1 = new Worker();
                w1.ID = "20090101";
                w1.Name = "王小毛";
                w1.Age = 20;
                w1.Sex = "男";
                list.Add(w1);
                Worker w2 = new Worker();
                w2.ID = "20090102";
                w2.Name = "周新雨";
                w2.Age = 19;
                w2.Sex = "女";
                list.Add(w2);
            }
        }
    

     这是员工信息维护窗体的Load事件的代码

     private void FrmSecond_Load(object sender, EventArgs e)
            {
    如果list没有数据就添加数据,确保调用这个窗体是,只有在没有数据时才能添加数据! if (Worker.list.Count==0) { Worker.Insert(); }
    清除datagridview的英文列,并且绑定数据 dgvList.AutoGenerateColumns = false; dgvList.DataSource = Worker.list; }

     这是新增里的代码

    private void toolStripButton1_Click(object sender, EventArgs e)
            {
    调用添加员工员工信息窗体 FrmFirst ff = new FrmFirst(); this.Hide(); ff.Show(); }
    private void btn1_Click(object sender, EventArgs e)
            {
    确保一个工号只能添加一次 foreach (Worker item in Worker.list) { if (item.ID==txt01.Text) { MessageBox.Show("工号已存在!!!!"); return; } }
    添加一个员工信息 Worker w1 = new Worker(); w1.ID = txt01.Text; w1.Name = txt03.Text; w1.Age = Convert.ToInt32(txt02.Text); w1.Sex =cob01.Text; Worker.list.Add(w1); FrmSecond fs = new FrmSecond(); this.Close(); fs.Show(); }

     

    这是删除的代码
    private void toolStripButton3_Click(object sender, EventArgs e) {
    提示点击是才会删除 DialogResult result = MessageBox.Show("提示","是否删除",MessageBoxButtons.YesNo,MessageBoxIcon.Question); if(result==DialogResult.Yes) {
    string id = dgvList.SelectedRows[0].Cells[0].Value.ToString(); //string id = dgvList.SelectedCells[0].Value.ToString();
    如果ID和我选中的ID相等才会删除 foreach (Worker item in Worker.list) { if(item.ID==id) { Worker.list.Remove(item); break; } } } //dgvList.AutoGenerateColumns = false; dgvList.DataSource = new BindingList<Worker>(Worker.list); }

     

    这段是重点难点在写这段之前先建好另一个辅助类
      class Record
        {
            public string id { get; set; }
            public string name { get; set; }
            public DateTime SignInTime { get; set; }
            public DateTime SignOutTime { get; set; }
            创建一个双列泛型集合
            public static Dictionary<string, Record> relist = new Dictionary<string, Record>();
          
        }

    public int num; private void 签到ToolStripMenuItem_Click(object sender, EventArgs e) {
    给num赋值,把你选中的type值付给num Worker w = new Worker(); foreach (Worker item in Worker.list) { if (item.Name == dgvList.SelectedCells[1].Value.ToString()) { w = item; break; } } num = w.type;
    判断如果num是0才可以签到 if (num == 0) { Record r = new Record(); r.id = dgvList.SelectedRows[0].Cells[0].Value.ToString(); r.name = dgvList.SelectedRows[0].Cells[1].Value.ToString(); r.SignInTime = DateTime.Now; Record.relist.Add(r.name, r);
    给你选中的type赋值一个1 w.type = 1; MessageBox.Show("签到成功"); } else { MessageBox.Show("您已经签到过了"); } } private void 签退ToolStripMenuItem_Click(object sender, EventArgs e) { Worker w = new Worker(); foreach (Worker item in Worker.list) { if (item.Name == dgvList.SelectedCells[1].Value.ToString()) { w = item; break; } }
    把你选中的type赋值给num num = w.type;
    如果num是1,才可以签退 if (num == 1) { foreach (string item in Record.relist.Keys) { if (item == dgvList.SelectedRows[0].Cells[1].Value.ToString()) { Record.relist[dgvList.SelectedRows[0].Cells[1].Value.ToString()].SignOutTime = DateTime.Now; w.type = 2; MessageBox.Show("签退成功"); break; } } }
    如果是0证明没有签到 else if (num == 0) { MessageBox.Show("没有签到,无法签退"); }
    否则已经签退过了 else { MessageBox.Show("您已经签退过了"); } //dgvList.AutoGenerateColumns = false; //dgvList.DataSource = new BindingList<Worker>(Worker.list); }

      


    把员工的签到信息展示在DataGridView上

    private void FrmThisd_Load(object sender, EventArgs e) { dgvList.AutoGenerateColumns = false; BindingSource bs = new BindingSource(); bs.DataSource = Record.relist.Values; dgvList.DataSource = bs; lbl1.Text = dgvList.RowCount.ToString(); }

      

     

     

      

     

     

  • 相关阅读:
    Ant-编译构建(2)-第3方jar包引入、log4j2
    Ant-编译构建(1)-HelloWorld
    java List的初始化
    传入json字符串的post请求
    HttPclient 以post方式发送json
    cron表达式详解,cron表达式写法,cron表达式例子
    深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
    Java两种延时——thread和timer
    List<List<Object>> list = new ArrayList<List<Object>>(); 求回答补充问题 list.get(position).add(Object);为什么会报错啊我想在对应的list里面添加对象
    关于 charset 的几种编码方式
  • 原文地址:https://www.cnblogs.com/wei-91/p/5811413.html
Copyright © 2020-2023  润新知