登录模块
- 流程图:
◆ 职工输入用户名、密码并选择登录身份,根据选择的身份做不同的操作
◎ 若选择的是“职工”,系统将查询数据库中的用户表Users的记录,用户名密码核对正确后加载职工主界面;
◎ 若选择的是“管理员”,系统将查询数据库中的管理员表Adms的记录,用户名密码核对正确后加载管理员主界面;
◎ 若选择的是“超级管理员”,系统将查询数据库中的用户表SuperAdms的记录,用户名密码核对正确后加载超级管理员主界面;
◎ 三种身份,若用户名、密码核对不正确,弹出提示消息框:“用户名或密码错误!”。
- 界面设计及代码如下:
◎ 用到的控件字段名、方法及变量有:
※ 控件:
用户名文本框名称:Login_UserNametxt
密码文本框名称:Login_UserPWtxt
身份下拉列表名称:Login_Rolecom
登录标签名称:Login_Enterlab
退出标签名称:Login_Esclab
※ 变量:
UserChange uc = new UserChange(); //处理登录业务类的实例
※ 调用方法:
uc.GetUser(user); //核对一般职工的用户名、密码;
uc.GetAdm(adm); //核对管理员的用户名、密码;
uc.GetSupAdm(supadm); //核对超级管理员的用户名、密码。
◎ “登录”标签的单击事件:
private void Login_Enterlab_Click(object sender, EventArgs e){usertype = Login_Rolecom.Text;try{if (usertype == "职工"){User user = new User();user.StaffID = Login_UserNametxt.Text.Trim();user.UserPW = Login_UserPWtxt.Text.Trim();count = uc.GetUser(user);}else if (usertype == "管理员"){Adm adm = new Adm();adm.AdmName = Login_UserNametxt.Text.Trim();adm.AdmPW = Login_UserPWtxt.Text.Trim();count = uc.GetAdm(adm);}else if (usertype == "超级管理员"){SuperAdm supadm = new SuperAdm();supadm.SuperAdmName = Login_UserNametxt.Text.Trim();supadm.SuperAdmPW = Login_UserPWtxt.Text.Trim();count = uc.GetSupAdm(supadm);}if (count > 0){this.DialogResult = DialogResult.OK;username = Login_UserNametxt.Text;this.Close();}else{MessageBox.Show("用户或密码错误!");}}catch (Exception exc){MessageBox.Show(exc.Message);}}
◎ “退出”标签的单击事件:
private void Login_Esclab_Click(object sender, EventArgs e){this.Close();}
4.2 职工考勤模块
- 流程图:
◆ 成功登录系统后
◎ 所有的职工都可以进行上下班打卡操作,每个职工每天只允许打一次上班卡和一次下班卡;上班打卡时间为每天的am 6:00 – 12:00,12点整截止,下班打卡时间为每天的pm12:00-22:00,22点整截止。
◎ “超级管理员”登录,系统会在每天中午12点和每天晚上22点查询数据库中的职工表Staffs的记录,对未打卡的员工分别在上下班打卡记录表中标记为未打卡;必须保证每天这两个时间段超级管理员处于登录状态才能完成上下班考勤记录。
2. 打卡界面设计及代码如下:
◎ 用到的控件字段名、方法及变量有:
※ 控件:
上班打卡按钮名称:Login_UserNametxt
下班打卡按钮名称:Login_UserPWtxt
※ 变量:
staffed //登录员工的职工ID
DateTime time;//记录当前时间
ClickCardOpt Copt = new ClickCardOpt();//处理打卡业务类的实例
※ 调用方法:
Copt.AddClockRecord(“StartClockRecords”, srecord) ; //添加上班打卡记录
Copt.AddClockRecord(“EndClockRecords”, erecord) ; //添加下班打卡记录
GetWorkingTime(“上班”); //获取上班时间表WorkingTimes的上班时间
GetWorkingTime(“下班”); //获取上班时间表WorkingTimes的下班时间
◎ “上班打卡”按钮的单击事件:
private void Clock_SDKbtn_Click(object sender, EventArgs e){int hour = Convert.ToInt32(time.Hour);if (hour < 6 || hour >= 12) //6-12点打上班卡时间{MessageBox.Show("抱歉,现在不是打卡时间!");}else{string workingtime = GetWorkingTime("上班");string[] worktimes = workingtime.Split(':');int workhour = Convert.ToInt32(worktimes[0]);int workminute = Convert.ToInt32(worktimes[1]);StartClockRecord srecord = new StartClockRecord();srecord.SClockTime = time;if (time.Hour > workhour || time.Hour == workhour && time.Minute > workminute){srecord.SClockstatusID = 2;}else{srecord.SClockstatusID = 1;}srecord.StaffID = staffid;}if (Copt.AddClockRecord("StartClockRecords", srecord)){MessageBox.Show(staffid + "打卡成功!");}else{MessageBox.Show(staffid +"你已经打过上班卡了!");}}}
◎ “下班打卡”按钮的单击事件:
private void Clock_EDKBtn_Click(object sender, EventArgs e){int hour = Convert.ToInt32(time.Hour);if (hour <= 11 || hour >= 22) //12-22点打下班卡时间{MessageBox.Show("抱歉,现在不是打卡时间!");}else{string workingtime = GetWorkingTime("下班");string[] worktimes = workingtime.Split(':');int workhour = Convert.ToInt32(worktimes[0]);int workminute = Convert.ToInt32(worktimes[1]);EndClockRecord erecord = new EndClockRecord();erecord.EClockTime = time;if (time.Hour < workhour || time.Hour == workhour && time.Minute < workminute){erecord.EClockstatusID = 3;}else{erecord.EClockstatusID = 1;}erecord.StaffID = staffid; if (Copt.AddClockRecord("EndClockRecords", erecord)){MessageBox.Show(staffid + "打卡成功!");}else{MessageBox.Show(staffid + "你已经打过下班卡了!");}}}
- 超级管理员登录后主窗体处理未打卡职工的后台代码:
◎ 用到的控件字段名、方法及变量有:
※ 控件:
计时器名称:Index_timer
※ 变量:
DateTime time;//记录当前时间
ClickCardOpt Copt = new ClickCardOpt();//处理打卡业务类的实例
※ 调用方法:
Copt.PerfectSClockRecords(); //插入未打卡职工的上班打卡标记
Copt.PerfectEClockRecords(); //插入未打卡职工的下班打卡记录
◎ 主窗体的Load事件
private void index_Load(object sender, EventArgs e)
{
if (usertype == "超级管理员"){this.Index_timer.Interval = 60000;
this.Index_timer.Tick += new System.EventHandler(this.Index_timer_Tick);}
}
◎ 计时器的Tick事件
private void Index_timer_Tick(object sender, EventArgs e){time = DateTime.Now;//每天中午12点整完成上班打卡记录表的录入if (time.Hour == 12 && time.Minute == 0){Copt.PerfectSClockRecords();}//每天晚上22点整完成下班打卡记录表的录入if (time.Hour == 22 && time.Minute == 0){Copt.PerfectEClockRecords();}}
链接:https://pan.baidu.com/s/1Xwd0U_KktL0hRFPaggIOGQ?pwd=6688
提取码:6688