用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来管理项目的,在创建的项目的时候, ...
随机推荐
- NFS 文件系统
NFS的安装是非常简单的,只需要两个软件包即可,而且在通常情况下,是作为系统的默认包安装的. NFS服务的主要配置文件 /etc/exports /etc/exports文件内容格式: <输出目 ...
- 电子线路 PCB 中大电流 接口 和 布线问题;
问题1:电流 大小 和 PCB 中 布线线宽的 关系,电源和信号 稳定性? 问题2:大电流中 接口问题,如microUSB 充电接口中,2A等 快充时接口 会 发热,如果 接口的 布线 太细和 不妥善 ...
- c++语言友元函数和成员函数对运算符重载
#include<iostream> using namespace std; /******************************************/ /*use mem ...
- Spring配置文件集成Hibernate配置文件
Spring对hibernate配置文件hibernate.cfg.xml的集成,来取代hibernate.cfg.xml的配置. spring对hibernate配置文件hibernate.c ...
- Google的Protobuf协议分析
protobuf和thrift类似,也是一个序列化的协议实现,简称PB(下文出现的PB代表protobuf). Github:https://github.com/google/protobuf 上图 ...
- 关于C#联接数据库是出现'未在本地计算机上注册'错误的解决办法
今天在用c#连接access数据库处理数据的时候遇到了一个诡异的问题, 未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序 我们的部分代码如下: st ...
- Markdown精简版个人语法
一.标题用#号 一级标题 二级标题 四级标题 二.分割线用3个 - ,或者3个.多个 * 均可 三.强调用 低调 高调 四.无序排列使用 * 号,或者 + 号,还有 - 号 加号 减号 星号 五.有序 ...
- poj 1737男人八题之一 orz ltc
这是楼教主的男人八题之一.很高兴我能做八分之一的男人了. 题目大意:求有n个顶点的连通图有多少个. 解法: 1. 用总数减去不联通的图(网上说可以,我觉得时间悬) 2. 用动态规划(数学递推) ...
- 百度地图多点路径加载以及调整页面js
$(document).ready(function () { /*用正则表达式获取url传递的地址参数,split后获得地址数组*/ bmap = new BMap.Map('mapcontaine ...
- JS trim
JS 去掉左右两边空格 /** * 去掉左右两边空格 * @param str * @returns {*} */function myTrim(str){ return str.replace(/( ...