用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();
}
用WinForm写的员工考勤项目!!!!!!的更多相关文章
- HR外包系统 - 员工项目 薪资项目 考勤项目 -管理
项目管理-包括员工项目 薪资项目 考勤项目 一 后台总公司定义项目-前台分公司选择项目,定义别名-分公司客户选择员工项目,定义别名 分公司下面-新建薪资类别-薪资类别下面选择要的薪资和考勤项目. 二 ...
- 用C#Winform写个简单的批量清空文件内容和删除文件的小工具
用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013 ...
- WinForm多语言版本实战项目演练
一.课程介绍 关于如何实现“WinForm多语言版本”网上有很多实现技术方案,可以说是“琳琅满目”,"包罗万象".俗话说的好:一千个读者就有一千个哈姆雷特!如果您工作中恰好也遇到这 ...
- 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享四:部署到阿里云
框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 阿里云开放必要端口,mysql与t ...
- 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享三:问题2
框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 搜索框是该项目重要的一环,由于涉及 ...
- 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享二:问题1
框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 添加时,如果失败,不能正确跳转 c ...
- 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍
这次我尝试写一个原创的项目 the_game 框架选择: SpringBoot+Mybatisplus+Shiro 首先是简单的介绍(素材灵感来自英雄联盟) 5个关键的表: admin(管理员): l ...
- winform 写App.config配置文件——IT轮子系列(八)
前言 在winform项目中,常常需要读app.config文件.如: var version = System.Configuration.ConfigurationManager.AppSetti ...
- 手写Maven的archetype项目脚手架
一.背景 maven是一个很好的代码构建工具,采用“约定优先于配置”的原则进行项目管理,相信很多的java开发者应该都了解maven并可能在工作当中都是通过maven来管理项目的,在创建的项目的时候, ...
随机推荐
- SIP学习笔记(转)
本文转发自:http://blog.chinaunix.net/uid-20655530-id-1589483.html 学习 SIP 协议最快捷的方法是通过范例来学习, 找到了一个完整的呼叫流程,l ...
- oracle DML(数据管理语言)sql 基本语句
- 【错误总结】java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor
运行环境 JDK1.7 64位 Window 7 64位 Ecplise Java EE IDE Struts 2.3.9 Tomcat 7 说明: ...
- _weak typeof(self) weakSelf = self;
_weak typeof(self) weakSelf = self; (一)内存管理原则 1.默认strong,可选weak.strong下不管成员变量还是property,每次使用指针指向一个对象 ...
- eafier 簡單易用 HTML、CSS 網頁編輯器(可自動插入 Tag 標籤)
很久很久以前,一般人要做網頁的話大概都會用 FrontPage 之類的工具,更進階一點的會用 Dreamweaver 等軟體.雖然上述軟體提供很方便的「所見即所得」的編輯預覽模式,但寫出來的網頁程式碼 ...
- 轻松搞定laravel的curd操作搞定简易留言版(四)
一:目的开发laravel简易留言板 二:路由操作routes.php <?php //GET /msg/index 展示留言列表 //GET /msg/add 展示表单 //POST /msg ...
- JavaScript中的 offset, client,scroll
在js 中我们要用到的 offset, client, scroll 在这我把自己理解的给大家分享一下. offset div.offsetTop 指div距离上方或上层控件的距离,单位像素 div. ...
- HTML5 中的 canvas 画布(二)
绘制图片 一.绘制图片 context.drawImage()(即把图片放到canvas里) var image = new Image(); // 先创建图片对象 image.src = '图片的 ...
- web页面跳转的几种方式
可用客户端触发或服务端触发的方式来实现页面跳转. 客户端触发 方式一:使用Javascript 利用window.location对象的href属性.assign()方法或replace()方法来实现 ...
- R语言常用函数
统计: mean:平均数sd:Standard Deviation 标准差var:方差median:中位数cov:协方差cor:相关系数 #环境ls/objectsrmhelp() library() ...