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

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

好了开始说项目需求: 实现新增员工;使用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();
}

  

 

 

  

 

 

用WinForm写的员工考勤项目!!!!!!的更多相关文章

  1. HR外包系统 - 员工项目 薪资项目 考勤项目 -管理

    项目管理-包括员工项目 薪资项目 考勤项目 一 后台总公司定义项目-前台分公司选择项目,定义别名-分公司客户选择员工项目,定义别名 分公司下面-新建薪资类别-薪资类别下面选择要的薪资和考勤项目. 二 ...

  2. 用C#Winform写个简单的批量清空文件内容和删除文件的小工具

    用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013 ...

  3. WinForm多语言版本实战项目演练

    一.课程介绍 关于如何实现“WinForm多语言版本”网上有很多实现技术方案,可以说是“琳琅满目”,"包罗万象".俗话说的好:一千个读者就有一千个哈姆雷特!如果您工作中恰好也遇到这 ...

  4. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享四:部署到阿里云

    框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 阿里云开放必要端口,mysql与t ...

  5. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享三:问题2

    框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 搜索框是该项目重要的一环,由于涉及 ...

  6. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享二:问题1

    框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 添加时,如果失败,不能正确跳转 c ...

  7. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍

    这次我尝试写一个原创的项目 the_game 框架选择: SpringBoot+Mybatisplus+Shiro 首先是简单的介绍(素材灵感来自英雄联盟) 5个关键的表: admin(管理员): l ...

  8. winform 写App.config配置文件——IT轮子系列(八)

    前言 在winform项目中,常常需要读app.config文件.如: var version = System.Configuration.ConfigurationManager.AppSetti ...

  9. 手写Maven的archetype项目脚手架

    一.背景 maven是一个很好的代码构建工具,采用“约定优先于配置”的原则进行项目管理,相信很多的java开发者应该都了解maven并可能在工作当中都是通过maven来管理项目的,在创建的项目的时候, ...

随机推荐

  1. SIP学习笔记(转)

    本文转发自:http://blog.chinaunix.net/uid-20655530-id-1589483.html 学习 SIP 协议最快捷的方法是通过范例来学习, 找到了一个完整的呼叫流程,l ...

  2. oracle DML(数据管理语言)sql 基本语句

  3. 【错误总结】java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor

    运行环境      JDK1.7 64位      Window 7  64位      Ecplise Java EE IDE      Struts 2.3.9      Tomcat 7 说明: ...

  4. _weak typeof(self) weakSelf = self;

    _weak typeof(self) weakSelf = self; (一)内存管理原则 1.默认strong,可选weak.strong下不管成员变量还是property,每次使用指针指向一个对象 ...

  5. eafier 簡單易用 HTML、CSS 網頁編輯器(可自動插入 Tag 標籤)

    很久很久以前,一般人要做網頁的話大概都會用 FrontPage 之類的工具,更進階一點的會用 Dreamweaver 等軟體.雖然上述軟體提供很方便的「所見即所得」的編輯預覽模式,但寫出來的網頁程式碼 ...

  6. 轻松搞定laravel的curd操作搞定简易留言版(四)

    一:目的开发laravel简易留言板 二:路由操作routes.php <?php //GET /msg/index 展示留言列表 //GET /msg/add 展示表单 //POST /msg ...

  7. JavaScript中的 offset, client,scroll

    在js 中我们要用到的 offset, client, scroll 在这我把自己理解的给大家分享一下. offset div.offsetTop 指div距离上方或上层控件的距离,单位像素 div. ...

  8. HTML5 中的 canvas 画布(二)

    绘制图片 一.绘制图片 context.drawImage()(即把图片放到canvas里) var image = new Image();  // 先创建图片对象 image.src = '图片的 ...

  9. web页面跳转的几种方式

    可用客户端触发或服务端触发的方式来实现页面跳转. 客户端触发 方式一:使用Javascript 利用window.location对象的href属性.assign()方法或replace()方法来实现 ...

  10. R语言常用函数

    统计: mean:平均数sd:Standard Deviation 标准差var:方差median:中位数cov:协方差cor:相关系数 #环境ls/objectsrmhelp() library() ...