基于C21780Oracle的考勤管理系统的设计与开发21780.docx
基于C#+Oracle的考勤管理系统的设计与开发基于C#+Oracle的考勤管理系统的设计与开发年 级:*学 号:*姓 名:*院 系:*专 业:*基于C#+Oraaclee的考勤管管理系统统的设计计与开发发一、系统设设计基本本情况1 系统设计目目标利用计算机机管理考考勤信息息,在很大大程度上上减轻了了统计的的工作量量,实现现企业员员工考勤勤管理的的规范化化,考勤勤数据统统计的自自动化。2 设计思想除了能够手手工录入入员工的的考勤记记录外,还还能与考考勤机相相配合,实实现考勤勤信息录录入自动动化;考考勤类型型灵活设设定,以以便用户户随时调调整应具有报表表功能,查查询统计计时能够够直接生生成相关关员工的的考勤报报表,报报表能导导出系统应采用用模块程程序设计计,便于于组合和和修改综合考虑,确确定本系系统采用用C/SS工作模模式,以以oraaclee作为后后台数据据库,CC#为前前台程序序开发语语言。3 系统功能模模块划分分3.1 员工信息管管理模块块3.2 考勤类型的的设定模模块3.3 员工考勤信信息手工工录入模模块3.4 员工考勤情情况统计计报表生生成模块块二、数据库库设计1 数据库需求求分析与用户结合合,调查查用户需需求操作作的资料料,弄清清用户怎怎样处理理各种数数据资料料,理清清数据库库中各数数据之间间的关系系。通过过分析,设设计数据据集和数数据项如如下:1.1 员工信息数数据集,数数据项为为员工号号,员工工姓名,员员工性别别,员工工所属部部门。1.2 考勤类型数数据集:数据项项为类型型号,类类型名称称1.3 员工考勤情情况数据据集:数数据项为为考勤日日期,员员工号,考考勤类型型号,备备注。2 数据库结构构设计2.1 员工信息实实体E-R图2.2 考勤类型实实体E-R图2.3 员工考勤实实体E-R图2.4 实体与实体体间的关关系E-R图3 各表格数据据库设计计代码(OOraccle平平台)3.1 考勤类型表表格CREATTE TTABLLE KKQLXXB(BH VAARCHHAR(4) NOTT NUULL PRIIMARRY KKEY,LX VAARCHHAR(20) NUULL);3.2 员工信息表表格CREATTE TTABLLE YYGB(BH VAARCHHAR(8) NOTT NUULL PRIIMARRY KKEY,XM VAARCHHAR(12) NOOT NNULLL,XB VAARCHHAR(2) NOTT NUULL,BM VAARCHHAR(20);3.3 考勤情况管管理表格格CREATTE TTABLLE KKQGLLB(KQRQ DATTE NNOT NULLL,YGBH VARRCHAAR(88) NNOT NULLL,LXBH VARRCHAAR(44) NNOT NULLL,BZ VAARCHHAR(60) ,CONSTTRAIINT KQGGLBPPRI PRIIMARRY KKEY(KQRRQ,YYGBHH);3.4 外键设计ALTERR TAABLEE KQQGLBB ADDD(CONSTTRAIINT KQGGL_BBH_FFK FFOREEIGNN KEEY(LLXBHH) RREFEERENNCESS KQQLXBB(BHH),CONSTTRAIINT YG_BH_FK FORREIGGN KKEY(YGBBH) REFFEREENCEES YYGB(BH);3.5 触发器CREATTE oor RREPLLACEE TRRIGGGER delletee_yggbAFTERR DEELETTE OON yygb FORR EAACH ROWWBEGINNDELETTE FFROMM kqqglbb WHHEREE kqqglbb.yggbh=:olld.bbh;END ddeleete_ygbb;CREATTE oor RREPLLACEE TRRIGGGER upddatee_yggbBEFORRE UUPDAATEOON yygb FORR EAACH ROWWBEGINNUPDATTE kkqgllb SSET kqgglb.ygbbh=:neww.bhh whheree kqqglbb.yggbh=:olld.bbh;END uupdaate_ygbb;CREATTE oor RREPLLACEE TRRIGGGER delletee_kqqlxbbAFTERR DEELETTE OON kkqlxxb FFOR EACCH RROWBEGINNDELETTE FFROMM kqqglbb WHHEREE kqqglbb.lxxbh=:olld.bbh;END ddeleete_kqllxb;CREATTE oor RREPLLACEE TRRIGGGER upddatee_kqqlxbbBEFORRE UUPDAATEOON kkqlxxb FFOR EACCH RROWBEGINNUPDATTE kkqgllb SSET kqgglb.lxbbh=:neww.bhh whheree kqqglbb.lxxbh=:olld.bbh;END uupdaate_kqllxb;三、系统设设计页面面1. 主界面:2. 员工信息管管理界面面:3. 考勤类型管管理界面面:4. 考勤信息录录入界面面:5. 考勤统计报报表界面面:四、系统编编程的实实现1. 主界面模块块功能:打开开各个操操作界面面。/ 自定定义变量量publiicfrrm_yygxxx yggxx = nnulll;/ 员工信信息窗体体变量publiicfrrm_kkqlxx kqqlx = nnulll;/ 考勤类类型窗体体变量publiicfrrm_kkqgll kqqgl = nnulll;/ 考勤管管理窗体体变量publiicfrrm_kkqtjj kqqtj = nnulll;/ 考勤统统计窗体体变量/ <<summmarry>/窗体体加载事事件/ <</suummaary>>privaatevvoidd frrm_kkqgllxt_Loaad(oobjeect sennderr, EEvenntArrgs e)pBtn.Lefft = (WWidtth - pBBtn.Widdth) / 2;/ <<summmarry>/各子子窗体状状态处理理事件/ <</suummaary>>privaatevvoidd ClloseeFrmm()if (yygxxx != nuull) yggxx.WinndowwStaate = FFormmWinndowwStaate.Minnimiizedd;if (kkqlxx != nuull) kqqlx.WinndowwStaate = FFormmWinndowwStaate.Minnimiizedd;if (kkqgll != nuull) kqqgl.WinndowwStaate = FFormmWinndowwStaate.Minnimiizedd;if (kkqtjj != nuull) kqqtj.WinndowwStaate = FFormmWinndowwStaate.Minnimiizedd;/ <<summmarry>/员工工信息按按钮事件件/ <</suummaary>>privaatevvoidd bttnYGGXX_Cliick(objjectt seendeer, EveentAArgss e)CloseeFrmm();if (yygxxx = nuull)ygxx = nnewffrm_ygxxx();ygxx.MdiiParrentt = thiis;ygxx.Shoow();elseygxx.WinndowwStaate = FFormmWinndowwStaate.Norrmall;ygxx.Acttivaate();ygxx.Loccatiion = nnewPPoinnt(00, 330);/ <<summmarry>/考勤勤类型按按钮事件件/ <</suummaary>>privaatevvoidd bttnKQQLX_Cliick(objjectt seendeer, EveentAArgss e)CloseeFrmm();if (kkqlxx = nuull)kqlx = nnewffrm_kqllx();kqlx.MdiiParrentt = thiis;kqlx.Shoow();elsekqlx.WinndowwStaate = FFormmWinndowwStaate.Norrmall;kqlx.Acttivaate();kqlx.Loccatiion = nnewPPoinnt(00, 330);/ <<summmarry>/考勤勤管理按按钮事件件/ <</suummaary>>privaatevvoidd bttnKQQGL_Cliick(objjectt seendeer, EveentAArgss e)CloseeFrmm();if (kkqgll = nuull)kqgl = nnewffrm_kqggl();kqgl.MdiiParrentt = thiis;kqgl.Shoow();elsekqgl.WinndowwStaate = FFormmWinndowwStaate.Norrmall;kqgl.Acttivaate();kqgl.Loccatiion = nnewPPoinnt(00, 330);/ <<summmarry>/考勤勤统计按按钮事件件/ <</suummaary>>privaatevvoidd bttnKQQTJ_Cliick(objjectt seendeer, EveentAArgss e)CloseeFrmm();if (kkqtjj = nuull)kqtj = nnewffrm_kqttj();kqtj.MdiiParrentt = thiis;kqtj.Shoow();elsekqtj.WinndowwStaate = FFormmWinndowwStaate.Norrmall;kqtj.Acttivaate();kqtj.Loccatiion = nnewPPoinnt(00, 330);2. 员工信息管管理模块块功能:操作作当前员员工信息息表,并并可以进进行员工工信息增增、改、删的操操作。/自定义义变量privaatesstriing typpe = """/ 按钮禁禁用判断断标记privaateDDataaTabble tabble = nnulll;/ 封装数数据privaatebbooll issbj = ffalsse;/ 状态标标记/ <<summmarry>/窗体体加载事事件/ <</suummaary>>privaatevvoidd frrm_yygxxx_Looad(objjectt seendeer, EveentAArgss e)tablee = Proograam.CConnnReaad(""sellectt * froom YYGB"");dgvYGG.DaataSSourrce = ttablle;ChanggeBuuttoon(""JZ"");/ <<summmarry>/数据据表行选选择更改改事件/ <</suummaary>>privaatevvoidd dggvYGG_SeelecctioonChhangged(objjectt seendeer, EveentAArgss e)trytbBH.Texxt = dggvYGG.SeeleccteddRowws00.CCellls00.VValuue.TToSttrinng();tbXM.Texxt = dggvYGG.SeeleccteddRowws00.CCellls11.VValuue.TToSttrinng();cbXB.Texxt = dggvYGG.SeeleccteddRowws00.CCellls22.VValuue.TToSttrinng();tbBM.Texxt = dggvYGG.SeeleccteddRowws00.CCellls33.VValuue.TToSttrinng();catchh / <<summmarry>/窗体体按钮是是否禁用用处理事事件/ <</suummaary>>privaatevvoidd ChhanggeBuuttoon(sstriing typpe)if (ttypee = "XXG")tbBH.Enaableed = !iisbjj;elsetbBH.Enaableed = issbj;tbXM.Enaableed = issbj;cbXB.Enaableed = issbj;tbBM.Enaableed = issbj;dgvYGG.Ennablled = !isbbj;btnZJJ.Ennablled = !isbbj;if (ddgvYYG.RRowss.Coountt = 0)btnXGG.Ennablled = ffalsse;btnSCC.Ennablled = ffalsse;elsebtnXGG.Ennablled = !isbbj;btnSCC.Ennablled = !isbbj;btnTCC.Ennablled = !isbbj;btnBCC.Ennablled = iisbjj;btnQXX.Ennablled = iisbjj;/ <<summmarry>/编号号文本框框输入格格式检查查事件/ <</suummaary>>privaatevvoidd tbbBH_TexxtChhangged(objjectt seendeer, EveentAArgss e)if (ttbBHH.Teext.Lenngthh = 0)retturnn;if (!chaar.IIsNuumbeer(ttbBHH.Teext, tbbBH.Texxt.LLenggth - 11)tbBH.Texxt = tbbBH.Texxt.SSubsstriing(0, tbBBH.TTextt.Leengtth - 1);if (ttbBHH.Teext.Lenngthh > 0)tbBH.Sellectt(tbbBH.Texxt.LLenggth, 0);/ <<summmarry>/判断断是否清清空文本本框数据据事件/ <</suummaary>>privaatevvoidd bttnZJJ_Cllickk(obbjecct ssendder, EvventtArggs ee)type = ""ZJ""isbj = ttruee;tbBH.Texxt = """tbXM.Texxt = """cbXB.Texxt = "男男"tbBM.Texxt = """ChanggeBuuttoon(""ZJ"");/ <<summmarry>/修改改数据事事件/ <</suummaary>>privaatevvoidd bttnXGG_Cllickk(obbjecct ssendder, EvventtArggs ee)if (ttbBHH.Teext = "")retturnn;type = ""XG""isbj = ttruee;ChanggeBuuttoon(""XG"");/ <<summmarry>/保存存数据事事件/ <</suummaary>>privaatevvoidd bttnBCC_Cllickk(obbjecct ssendder, EvventtArggs ee)tbBH.Texxt = tbbBH.Texxt.TTrimm();tbXM.Texxt = tbbXM.Texxt.TTrimm();tbBM.Texxt = tbbBM.Texxt.TTrimm();if (ttbBHH.Teext = "")MessaageBBox.Shoow(""编号不不能为空空。", "提提示", MeessaageBBoxBButttonss.OKK, MMesssageeBoxxIcoon.EErroor);tbBH.Foccus();returrn;elseiif (tbBBH.TTextt.Leengtth << 8)MessaageBBox.Shoow(""编号长长度不能能少于位位。", "提提示", MeessaageBBoxBButttonss.OKK, MMesssageeBoxxIcoon.EErroor);tbBH.Foccus();returrn;elseif (ttypee != "XXG")for (intt i = 00; ii < tabble.Rowws.CCounnt; +ii)if (ttablle.RRowssi0.TooStrringg() = tbBBH.TTextt)MessaageBBox.Shoow(""该编号号已存在在。", "提提示", MeessaageBBoxBButttonss.OKK, MMesssageeBoxxIcoon.EErroor);tbBH.Foccus();returrn;if (ttbXMM.Teext = "")MessaageBBox.Shoow(""姓名不不能为空空。", "提提示", MeessaageBBoxBButttonss.OKK, MMesssageeBoxxIcoon.EErroor);tbXM.Foccus();returrn;strinng ssql = """if (ttypee = "ZZJ")sql = "iinseert intto YYGB valluess('"" + tbBBH.TTextt + "', '"" + tbXXM.TTextt + "', '"" + cbXXB.TTextt + "', '"" + tbBBM.TTextt + "')"elseiif (typpe = ""XG"")sql = "uupdaate YGBB seet XXM = '"" + tbXXM.TTextt + "', XBB = '" + ccbXBB.Teext + ""', BMM = '" + ttbBMM.Teext + ""' wwherre BBH = '"" + tbBBH.TTextt + "'""elsereturrn;if (PProggramm.CoonnNNonRReadd(sqql) > 00)if (ttypee = "ZZJ")tablee.Roows.Addd(tbbBH.Texxt, tbXXM.TTextt, ccbXBB.Teext, tbbBM.Texxt);dgvYGG.DaataSSourrce = ttablle;dgvYGG.RoowsdgvvYG.Rowws.CCounnt - 1.Seelecctedd = truue;MessaageBBox.Shoow(""添加成成功。"", "提提示", MeessaageBBoxBButttonss.OKK, MMesssageeBoxxIcoon.IInfoormaatioon);elsefor (intt i = 00; ii < tabble.Rowws.CCounnt; +ii)if (ttablle.RRowssi0.TooStrringg() = dgvvYG.SellecttedRRowss0.Ceellss0.Vaaluee.TooStrringg()tablee.Roowsi1 = ttbXMM.Teext;tablee.Roowsi2 = ccbXBB.Teext;tablee.Roowsi3 = ttbBMM.Teext;dgvYGG.DaataSSourrce = ttablle;breakk;MessaageBBox.Shoow(""修改成成功。"", "提提示", MeessaageBBoxBButttonss.OKK, MMesssageeBoxxIcoon.IInfoormaatioon);type = """isbj = ffalsse;ChanggeBuuttoon(""BC"");elseif (ttypee = "ZZJ")MessaageBBox.Shoow(""添加失失败,请请重新添添加。"", "提提示", MeessaageBBoxBButttonss.OKK, MMesssageeBoxxIcoon.IInfoormaatioon);elseMessaageBBox.Shoow(""修改失失败,请请重新修修改。"", "提提示", MeessaageBBoxBButttonss.OKK, MMesssageeBoxxIcoon.IInfoormaatioon);/ <<summmarry>/取消消事件/ <</suummaary>>privaatevvoidd bttnQXX_Cllickk(obbjecct ssendder, EvventtArggs ee)trytbBH.Texxt = dggvYGG.SeeleccteddRowws00.CCellls00.VValuue.TToSttrinng();tbXM.Texxt = dggvYGG.SeeleccteddRowws00.CCellls11.VValuue.TToSttrinng();cbXB.Texxt = dggvYGG.SeeleccteddRowws00.CCellls22.VValuue.TToSttrinng();tbBM.Texxt = dggvYGG.SeeleccteddRowws00.CCellls33.VValuue.TToSttrinng(); catchh type = """isbj = ffalsse;ChanggeBuuttoon(""QX"");/ <<summmarry>/删除除数据事事件/ <</suummaary>>privaatevvoidd bttnSCC_Cllickk(obbjecct ssendder, EvventtArggs ee)if (MMesssageeBoxx.Shhow("确定定要删除除?", "提提示", MeessaageBBoxBButttonss.YeesNoo, MMesssageeBoxxIcoon.AAsteerissk).ToSStriing() = ""Yess")strinng ssql = ""delletee frrom YGBB whheree BHH = '" + ttbBHH.Teext + ""'"if(Prrogrram.ConnnNoonReead(sqll) >> 0)for (intt i = 00; ii < tabble.Rowws.CCounnt; +ii)if (ttablle.RRowssi0.TooStrringg() = dgvvYG.SellecttedRRowss0.Ceellss0.Vaaluee.TooStrringg()tablee.Roows.RemmoveeAt(i);dgvYGG.DaataSSourrce = ttablle;breakk;if (ddgvYYG.RRowss.Coountt > 0)if (ddgvYYG.SSeleecteedRoows.Couunt <= 0)dgvYGG.RoowsdgvvYG.Rowws.CCounnt - 1.Seelecctedd = truue;tbBH.Texxt = dggvYGG.SeeleccteddRowws00.CCellls00.VValuue.TToSttrinng();tbXM.Texxt = dggvYGG.SeeleccteddRowws00.CCellls11.VValuue.TToSttrinng();cbXB.Texxt = dggvYGG.SeeleccteddRowws00.CCellls22.VValuue.TToSttrinng();tbBM.Texxt = dggvYGG.SeeleccteddRowws00.CCellls33.VValuue.TToSttrinng();ChanggeBuuttoon(""SC"");MessaageBBox.Shoow(""删除成成功。"", "提提示", MeessaageBBoxBButttonss.OKK, MMesssageeBoxxIcoon.IInfoormaatioon);elseMessaageBBox.Shoow(""删除失失败,请请重新修修改。"", "提提示", MeessaageBBoxBButttonss.OKK,MeessaageBBoxIIconn.Innforrmattionn);/ <<summmarry>/退出出事件/ <</suummaary>>privaatevvoidd bttnTCC_Cllickk(obbjecct ssendder, EvventtArggs ee)Closee();/ <<summmarry>/退出出判断事事件/ <</suummaary>>privaatevvoidd frrm_yygxxx_FoormCClossingg(obbjecct ssendder, FoormCClossinggEveentAArgss e)if (iisbjj)MessaageBBox.Shoow(""请先关关闭编辑辑。", "提提示", MeessaageBBoxBButttonss.OKK, MMesssageeBoxxIcoon.AAsteerissk);e.Canncell = truue;/ <<summmarry>/退出出后处理理主界面面变量事事件/ <</suummaary>>privaatevvoidd frrm_yygxxx_FoormCClossed(objjectt seendeer, ForrmClloseedEvventtArggs ee)Progrram.kqgglxtt.yggxx = nnulll;3. 考勤类型管管理模块块功能:操作作当前考勤勤类型表表,并可可以进行行考勤类类型增、改、删的操操作。/ 自定定义变量量privaatesstriing typpe = """/ 按钮禁禁用判断断标记privaateDDataaTabble tabble = nnulll;/ 封装数数据privaatebbooll issbj = ffalsse;/ 状态标标记/ <<summmarry>/窗体体加载事事件/ <</suummaary>>privaatevvoidd frrm_kkqlxx_Looad(objjectt seendeer, EvenntArrgs e)tablee = Proograam.CConnnReaad(""sellectt * froom KKQLXXB");dgvKQQ.DaataSSourrce = ttablle;ChanggeBuuttoon(""JZ"");/ <<summmarry>/数据据表行选选择更改改事件/ <</suummaary>>privaatevvoidd dggvKQQ_SeelecctioonChhangged(objjectt seendeer, EveentAArgss e)trytbBH.Texxt = dggvKQQ.SeeleccteddRowws00.CCellls00.VValuue.TToSttrinng();tbLX.Texxt = dggvKQQ.SeeleccteddRowws00.CCellls11.VValuue.TToSttrinng();catchh / <<summmarry>/编号号文本框框输入格格式检查查事件/ <</suummaary>>privaatevvoidd tbbBH_TexxtChhangged(objjectt seendeer, EveentAArgss e)if (ttbBHH.Teext.Lenngthh = 0)retturnn;if (!chaar.IIsNuumbeer(ttbBHH.Teext, tbbBH.Texxt.LLenggth - 11)tbBH.Texxt = tbbBH.Texxt.SSubsstriing(0, tbBBH.TTextt.Leengtth - 1);if (ttbBHH.Teext.Lenngthh > 0)tbBH.Sellectt(tbbBH.Texxt.LLenggth, 0);/ <<summmarry>/窗体体按钮是是否禁用用处理事事件/ <</suummaary>>privaatevvoidd ChhanggeBuuttoon(sstriing typpe)if (ttypee = "XXG")tbBH.Enaableed = !iisbjj;elsetbBH.Enaableed = issbj;tbLX.Enaableed = issbj;dgvKQQ.Ennablled = !isbbj;btnZJJ.Ennablled = !isbbj;if (ddgvKKQ.RRowss.Coountt = 0)btnXGG.Ennablled = ffalsse;btnSCC.Ennablled = ffalsse;elsebtnXGG.Ennablled = !isbbj;btnSCC.Ennablled = !isbbj;btnTCC.Ennablled = !isbbj;btnBCC.Ennablled = iisbjj;btnQXX.Ennablled = iisbjj;/ <<summmarry>/增加加数据事件件/ <</suummaary>>privaatevvoidd bttnZJJ_Cllickk(obbjecct ssendder, EvventtArggs ee)type = ""ZJ""isbj = ttruee;tbBH.Texxt = """tbLX.Texxt = """ChanggeBuuttoon(""ZJ"");/ <<summmarry>/修改改数据事事件/ <</suummaary>>privaatevvoidd bttnXGG_Cllickk(obbjecct ssendder, EvventtArggs ee)