基于C#+Oracle的考勤管理系统的设计与开发第1页共43页《基于C#+Oracle的考勤管理系统的设计与开发》年级:***********学号:***********姓名:***********院系:***********专业:***********基于C#+Oracle的考勤管理系统的设计与开发第2页共43页基于C#+Oracle的考勤管理系统的设计与开发一、系统设计基本情况1.系统设计目标利用计算机管理考勤信息,在很大程度上减轻了统计的工作量,实现企业员工考勤管理的规范化,考勤数据统计的自动化。2.设计思想除了能够手工录入员工的考勤记录外,还能与考勤机相配合,实现考勤信息录入自动化;考勤类型灵活设定,以便用户随时调整应具有报表功能,查询统计时能够直接生成相关员工的考勤报表,报表能导出系统应采用模块程序设计,便于组合和修改综合考虑,确定本系统采用C/S工作模式,以oracle作为后台数据库,C#为前台程序开发语言。3.系统功能模块划分3.1员工信息管理模块3.2考勤类型的设定模块基于C#+Oracle的考勤管理系统的设计与开发第3页共43页3.3员工考勤信息手工录入模块3.4员工考勤情况统计报表生成模块基于C#+Oracle的考勤管理系统的设计与开发第4页共43页二、数据库设计1.数据库需求分析与用户结合,调查用户需求操作的资料,弄清用户怎样处理各种数据资料,理清数据库中各数据之间的关系。通过分析,设计数据集和数据项如下:1.1员工信息数据集,数据项为员工号,员工姓名,员工性别,员工所属部门。1.2考勤类型数据集:数据项为类型号,类型名称1.3员工考勤情况数据集:数据项为考勤日期,员工号,考勤类型号,备注。2.数据库结构设计2.1员工信息实体E-R图2.2考勤类型实体E-R图基于C#+Oracle的考勤管理系统的设计与开发第5页共43页2.3员工考勤实体E-R图2.4实体与实体间的关系E-R图3.各表格数据库设计代码(Oracle平台)3.1考勤类型表格CREATETABLEKQLXB(BHVARCHAR(4)NOTNULLPRIMARYKEY,LXVARCHAR(20)NULL);3.2员工信息表格CREATETABLEYGB(BHVARCHAR(8)NOTNULLPRIMARYKEY,XMVARCHAR(12)NOTNULL,XBVARCHAR(2)NOTNULL,BMVARCHAR(20));基于C#+Oracle的考勤管理系统的设计与开发第6页共43页3.3考勤情况管理表格CREATETABLEKQGLB(KQRQDATENOTNULL,YGBHVARCHAR(8)NOTNULL,LXBHVARCHAR(4)NOTNULL,BZVARCHAR(60),CONSTRAINTKQGLBPRIPRIMARYKEY(KQRQ,YGBH));3.4外键设计ALTERTABLEKQGLBADD(CONSTRAINTKQGL_BH_FKFOREIGNKEY(LXBH)REFERENCESKQLXB(BH),CONSTRAINTYG_BH_FKFOREIGNKEY(YGBH)REFERENCESYGB(BH));3.5触发器CREATEorREPLACETRIGGERdelete_ygbAFTERDELETEONygbFOREACHROWBEGINDELETEFROMkqglbWHEREkqglb.ygbh=:old.bh;ENDdelete_ygb;CREATEorREPLACETRIGGERupdate_ygbBEFOREUPDATEONygbFOREACHROWBEGINUPDATEkqglbSETkqglb.ygbh=:new.bhwherekqglb.ygbh=:old.bh;ENDupdate_ygb;CREATEorREPLACETRIGGERdelete_kqlxbAFTERDELETEONkqlxbFOREACHROWBEGINDELETEFROMkqglbWHEREkqglb.lxbh=:old.bh;ENDdelete_kqlxb;CREATEorREPLACETRIGGERupdate_kqlxbBEFOREUPDATEONkqlxbFOREACHROWBEGIN基于C#+Oracle的考勤管理系统的设计与开发第7页共43页UPDATEkqglbSETkqglb.lxbh=:new.bhwherekqglb.lxbh=:old.bh;ENDupdate_kqlxb;三、系统设计页面1.主界面:2.员工信息管理界面:基于C#+Oracle的考勤管理系统的设计与开发第8页共43页3.考勤类型管理界面:4.考勤信息录入界面:5.考勤统计报表界面:基于C#+Oracle的考勤管理系统的设计与开发第9页共43页四、系统编程的实现1.主界面模块功能:打开各个操作界面。//自定义变量publicfrm_ygxxygxx=null;//员工信息窗体变量publicfrm_kqlxkqlx=null;//考勤类型窗体变量publicfrm_kqglkqgl=null;//考勤管理窗体变量publicfrm_kqtjkqtj=null;//考勤统计窗体变量///summary///窗体加载事件////summaryprivatevoidfrm_kqglxt_Load(objectsender,EventArgse){pBtn.Left=(Width-pBtn.Width)/2;}///summary///各子窗体状态处理事件////summaryprivatevoidCloseFrm()基于C#+Oracle的考勤管理系统的设计与开发第10页共43页{if(ygxx!=null)ygxx.WindowState=FormWindowState.Minimized;if(kqlx!=null)kqlx.WindowState=FormWindowState.Minimized;if(kqgl!=null)kqgl.WindowState=FormWindowState.Minimized;if(kqtj!=null)kqtj.WindowState=FormWindowState.Minimized;}///summary///员工信息按钮事件////summaryprivatevoidbtnYGXX_Click(objectsender,EventArgse){CloseFrm();if(ygxx==null){ygxx=newfrm_ygxx();ygxx.MdiParent=this;ygxx.Show();}else{ygxx.WindowState=FormWindowState.Normal;ygxx.Activate();}ygxx.Location=newPoint(0,30);}///summary///考勤类型按钮事件////summaryprivatevoidbtnKQLX_Click(objectsender,EventArgse){CloseFrm();if(kqlx==null){kqlx=newfrm_kqlx();kqlx.MdiParent=this;kqlx.Show();}基于C#+Oracle的考勤管理系统的设计与开发第11页共43页else{kqlx.WindowState=FormWindowState.Normal;kqlx.Activate();}kqlx.Location=newPoint(0,30);}///summary///考勤管理按钮事件////summaryprivatevoidbtnKQGL_Click(objectsender,EventArgse){CloseFrm();if(kqgl==null){kqgl=newfrm_kqgl();kqgl.MdiParent=this;kqgl.Show();}else{kqgl.WindowState=FormWindowState.Normal;kqgl.Activate();}kqgl.Location=newPoint(0,30);}///summary///考勤统计按钮事件////summaryprivatevoidbtnKQTJ_Click(objectsender,EventArgse){CloseFrm();if(kqtj==null){kqtj=newfrm_kqtj();kqtj.MdiParent=this;kqtj.Show();基于C#+Oracle的考勤管理系统的设计与开发第12页共43页}else{kqtj.WindowState=FormWindowState.Normal;kqtj.Activate();}kqtj.Location=newPoint(0,30);}2.员工信息管理模块功能:操作当前员工信息表,并可以进行员工信息增、改、删的操作。//自定义变量privatestringtype=;//按钮禁用判断标记privateDataTabletable=null;//封装数据privateboolisbj=false;//状态标记///summary///窗体加载事件////summaryprivatevoidfrm_ygxx_Load(objectsender,EventArgse){table=Program.ConnRead(select*fromYGB);dgvYG.DataSource=table;ChangeButton(JZ);}///summary///数据表行选择更改事件////summaryprivatevoiddgvYG_SelectionChanged(objectsender,EventArgse){try{tbBH.Text=dgvYG.SelectedRows[0].Cells[0].Value.ToString();tbXM.Text=dgvYG.SelectedRows[0].Cells[1].Value.ToString();cbXB.Text=dgvYG.SelectedRows[0].Cells[2].Value.ToString();tbBM.Text=dgvYG.SelectedRows[0].Cells[3].Value.ToString();}基于C#+Oracle的考勤管理系统的设计与开发第13页共43页catch{}}///summary///窗体按钮是否禁用处理事件////summaryprivatevoidChangeButton(stringtype){if(type==XG)tbBH.Enabled=!isbj;elsetbBH.Enabled=isbj;tbXM.Enabled=isbj;cbXB.Enabled=isbj;tbBM.Enabled=isbj;dgvYG.Enabled=!isbj;btnZJ.Enabled=!isbj;if(dgvYG.Rows.Count==0){btnXG.Enabled=false;btnSC.Enabled=false;}else{btnXG.Enabled=!isbj;btnSC.Enabled=!isbj;}btnTC.Enabled=!isbj;btnBC.Enabled=isbj;btnQX.Enabled=isbj;}///summary///编号文本框输入格式检查事件////summaryprivatevoidtbBH_TextChanged(objectsender,EventArgse){if(tbBH.Text.Length==0)return;基于C#+Oracle的考勤管理系统的设计与开发第14页共43页if(!char.IsNumber(tbBH.Text,tbBH.Text.Length-1)){tbBH.Text=tbBH.Text.Substring(