• 41.73 KB
  • 2022-05-17 13:47:29 发布

考勤管理系统实验报告(附源代码)

  • 45页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
目录第一章信息系统概况21.1选题介绍21.2课程设计小组基本情况介绍错误!未定义书签。课程设计小组成员的基本情况介绍错误!未定义书签。课程设计小组前期的准备情况错误!未定义书签。课程设计小组各成员所承担的课程设计的任务错误!未定义书签。第二章信息系统分析32.1可行性分析32.1.1技术可行性分析32.1.3社会因素可行性分析42.1.4可行性分析结论42.2客户需求分析42.3系统分析部分62.3.1业务流程图62.3.2数据流程图62.3.3E-R图62.3.4数据字典6第三章信息系统设计63.1功能结构图设计63.2输入输出设计73.3数据库结构设计83.3.1概念设计83.3.1逻辑结构设计设计83.4代码设计10第四章信息系统实施114.1源程序114.1.1添加用户114.1.2修改密码114.1.3出差情况114.1.4添加部门134.1.5部门管理144.1.6更新部门164.1.7员工考勤登记174.1.8请假情况294.1.9上班时间设置304.1.10上班情况314.1.11用户登入334.1.12添加员工33 3员工管理354.1.14修改员工394.1.15主界面414.3模拟运行数据444.4系统使用说明书44第五章参考书籍45第一章信息系统概况1.1选题介绍当今社会,计算机已经十分普及,性能也日趋完善。它已经被应用于许多领域。比如说,小到图书馆的图书管理,超市或网吧的收费管理,KTV的点歌系统,大到航空、铁路的售票,全国人口户籍的管理等等。随着现代科技的进步,用计算机来进行考勤的管理也成为现代化企业运作必不可少的一部分。在过去我们的考勤工作都是人工完成的,不仅浪费了很多的人力跟物力,而且无法保证其准确性和透明度,给企业的管理带来了许多的不便。现在利用计算机来管理我们的考勤工作,大大降低了工作人员的工作量,提高了工作效率,使原本复杂和枯燥无味的工作变得简单而轻松了,而且也实用、安全。计算机技术特别是数据库技术的发展为企业建立管理信息系统,甚至对改变管理思想起着不可估量的作用。实践证明信息技术已在企业的管理层面扮演越来越重要的角色。通过考勤系统我们能很容易地对公司员工的信息有一个基本的了解,可以很方便地知道员工的出勤情况,通过对员工出勤信息的了解,就能计算出员工的实际工资。一切的统计和计算都由计算机代为管理了,考勤信息管理系统对企业的合理化管理起到了很大的作用,它为企业信息化的建设打响了头炮,而企业的信息化建设已成为现代各个企业发展的需要。所以说,考勤管理系统的开发具有非常重要的意义。 第二章信息系统分析2.1可行性分析目前,计算机在我国的考勤管理工作中,主要可用来进行报表处理,档案管理,文书编辑,信息查询,综合分析。查询统计作为考勤管理的一个重要组成部分,是通过对考勤情况的调查,整理和分析,了解考勤情况的发展趋势,为各级领导机关制定考出勤的方针,政策,加强干部管理,改革干部制度提供准确数字的依据。其工作除涉及到干部的基本情况统计之外,还包括职工的工资统计,职工的考勤情况统计,职工的奖惩情况统计,职工的出差情况统计,职工的请假情况统计等方面,其涉及的面之广,数据量之大可想而知,若利用手工进行考勤的统计工作,大致要经过考勤统计查询,考勤的统计资料的整理,考勤统计分析三个过程,但这种手工统计过程,存在着几个明显的问题,比如说统计资料缺乏准确性,及时性,需要花费大量的人力,物力,财力等。手工方法所表现出来的种种劣势,使人们慢慢意识到管理现代化已成为当代社会发展的一股不可抗拒的洪流。在管理现代化的浪潮中,考勤管理现代化也势在必行。实现考勤管理现代化是一个复杂的系统工程,需要采取科学的管理方法和先进的科技手段。科学的管理方法在管理中一般是指数学方法、系统方法、信息方法、控制论方法、社会学方法、心理学方法等科学方法,而先进的科技手段主要是运用当代最新科学技术之一的电子计算机来为考勤管理现代化服务。而且一个完善的考勤系统应做到以下几点:•提高了考勤管理效率,减轻劳动强度;•提高信息处理速度和准确性;•为考勤负责人提供更方便、科学的服务项目技术可行性分析系统开发环境:Windowsxpsp3+vs2005+sqlserver2000技术已经比较成熟,和其他应用开发语言比起来有很大的优势,所以利用这些技术是完全可以完成这些功能的。同时由于逻辑不是太复杂,估计可以按时完成此项目。考勤管理系统是工作主要是在职工和管理都有之间架起一座桥梁,能相互沟通信息和处理信息。这一特点非常适合计算机特点,通过网络internet技术,发挥计算机的信息传输速度快、准确度高的优势。计算机硬件和软件技术的飞速发展,为系统的建议提供了技术条件。 2.1.2经济可行性分析(1)支出A、在基建投资上,只需要配置一台DELL服务器,大概2万左右;B、软件设计和开发费用:2.5万元C、经常性指出:(主要是指软件的维护费用)(2)收益进一步实现办公自动化,减少人力投资和办公费用,极大提高办公效率,同时更好地控制考勤制度,降低成本。(3)投资回收周期根据经验算法,收益的累计数开始超过支出的累计数的时间为1年。社会因素可行性分析对所建议系统的社会因素方面的可行性分析:(1)法律可行性新系统的研制和开发,所有软件都选用正版,将不会侵犯他、集体和国家的利益,不会违反国家政策和法律。(2)使用方面的可行性由于新系统的客户端只要求用浏览器,管理者与人员完全有能力使用此系统,并且新系统的研制和开发是充分考虑工作人员对考勤的易于管理,提高工作效率,界面友好,操作简单方便,能完全满足职工的使用要求。对传统管理理念的冲击,可能引起管理层的变动和人员调整。对于企业管理人员的要求提高,使企业在一定的可能下进行机构精简,迫使工作人员继续学习新知识,拓宽企业在市场竞争环境下的生存空间。对于企业的管理者与职工之间管理方式的转变和扩充。可行性分析结论结论意见:经上述可行性分析,系统研制和开发可以立即开始进行2.2客户需求分析考勤系统应该便于管理者的查询、修改、更新、统计以及高层管理人员的查询等操作。能从整体上体现去每个员工每日,每月的出勤情况。基本信息管理包括节假日日期设置、部门信息管理和员工信息管理。 (1)主要功能a.员工考勤签到:员工每天上班时需要登陆系统进行签到,如果当天已经签到了,则不执行重复操作!考勤签退:员工每天下班时需要登陆系统进行签退,如果当天还没有签过到,则不执行签退操作,如果当天还没有到下班时间,也不执行签退操作!节假日查看:员工可以登录查看节假日加班安排系统管理:修改自己的密码,查看系统简介.b.管理员员工信息管理:管理员登陆系统后可以添加新的员工信息,可以对现有员工的信息进行修改和查询!可以删除某些员工信息,当删除员工信息时同时将删除他们的考勤信息职位类别及上下班时间管理:不同的职位类别拥有不同的上下班时间,管理员可以添加新的职位类别,修改已经存在的职位类别的名称和上下班时间,部门信息管理:管理员可以添加和删除部门信息,当部门下面存在员工信息时不执行删除操作.系统管理:修改自己的登陆密码,查看系统简介。节假日管理:节假日的设置和查看;(2)特点实现了管理员和员工登陆信息的自动判断!根据不同的身份显示不同的功能菜单。程序使用三层架构思想,采用完全面向对象的思想方法设计。系统在进行相关操作如删除员工信息时使用了存储过程。(3)数据输入:通过登录系统输入职工上班下班,以及请假、出差等信息。输出:职工考勤情况。(用户对相关职工的查询结果和报表)(4)安全保密系统对不同权限的用户提供不同的功能模块,对历史数据的更改和新数据的添加只有一定权限的用户才能操作,一般用户只能进行查询操作。对数据库的关键数据应要求保密。系统默认管理员登陆信息:帐号admin密码admin 2.3系统分析部分2.3.1业务流程图图2-1业务流程图2.3.2数据流程图图2-2顶层数据流程图图2-3一层数据流程图2.3.3E-R图图2-5E-R图2.3.4数据字典名字:上班时间数据描述:关于每日上班时间的信息,用于员工对上班时间的确认名字:部门数据定义:上班时间数据=上午工作开始时间+上午工作离开时间+下午工描述:部门的信息,用于对部门的确认作开始时间+下午工作离开时间定义:部门资料数据=部门代号+部门名称位名置字:输上入班到类上型班数时据间表位置:输入到部门表描述:上班类型的信息,用于对员工上班时间类型的确认名定字义::个上人班资类料型数数据据=类型代号+类型名称描名位述字置:::职职输工工入的列到个表上人数班信据类息型,表用于对职工的确认名字:用户名名字定:义操:作个用人户资表料数据=员工ID+员工姓名+员工性别+出生日期描名述字:职考工勤的数部据门信息,用于对职工部门的别确名认:别名:操作用户信息+职务+个人工作资料档案定描义述:职工列的表考数勤据信=息员工ID+员工姓名+部描门述代:码惟+一部标门识名本称系统的用户描述位:置是:对输使入用到本员系工统表的用户进行定义:考勤数据=员工I+D员+年工月类+别迟+到员+工早职退位++请查假询+密旷身码工份身份和权限验证用的位置:输入到部请门假表、用上户班表、出差表定义:用户名=5{字符}5定义:用户名+密码+所属单位+权限一+权限二+操作员位置:所有表单名字:密码别名:名第字三:章权限信一息系统设计描名述字:验:证权本限系二统的用户身份别名:定别义名::密码=5{字符}5描述:标识本系统的用户对本系统位描置述::用标户识表本系统的用户对3.1功管能理权结使构用图权设限计本系统登记权的使用定义:权限一=5{字符}5权限位置:用户表定义:权限二=5{字符}5图3-1功能结构图位置:用户表 3.2输入输出设计表3-1登录名称、标识符登录输入填写用户的ID号和密码,点击确认按钮。输出提示登录成功进入系统主页面表3-2员工上班名称、标识符上班输入选择部门、姓名,点击上班输出提示上班成功信息表3-3员工下班名称、标识符下班输入输入部门、姓名,点击上班输出提示下班成功信息表3-4修改密码名称、标识符修改密码输入管理员输入用户名、原始密码、新设定的密码输出提示修改密码成功信息表3-5申请请假名称、标识符申请请假输入输入请假人姓名、所属部门、请假时间、请假时长、请假原因输出提示请假申请已经提交信息表3-6申请出差名称、标识符申请出差输入申请人姓名、所属部门、出差的开始时间、出差地点、出差原因输出提示出差申请已经提交信息表3-7员工添加名称、标识符添加员工输入输入部门、姓名、性别、年龄、进公司时间、个人密码输出提示添加已完成表3-8部门添加名称、标识符部门添加输入输入部门名称输出提示添加已完成表3-9上下班时间设定名称、标识符上、下班时间设定输入上、下班时间输出提示设置成功 3.3数据库结构设计3.3.1概念设计数据库一般分为三级模式:外模式、概念模式和内模式。在这里我们将要设计的是数据库的概念模式。通过对职工出勤管理系统的内容和数据流程分析及E-R图,设计如下数据项和数据结构:1.部门信息。包括部门编号、部门名称、部门人数等。2.超级用户信息。包括用户名、密码、姓名、性别、出生日期、籍贯等。3.普通用户信息。包括编号、部门名称、姓名、性别、出生日期、籍贯等信息。4.考勤信息。包括序列号、编号、签到时间、签离时间等信息。5.员工状态。包括员工请假、出差、早退、迟到、上班。6.考勤历史信息。包括记录号、编号、日期、签到时间、签离时间、迟到、缺勤、早退等信息。7.用户信息。包括用户名称、密码、所在单位、用户权限信息、操作员、最后修改时间。3.3.1逻辑结构设计设计根据职工考勤管理系统的功能要求,选取SQLServer2000作为后台数据库。在上面的实体和实体之间的E-R图设计基础上,将ER图转化为关系模型,形成数据库中的表格及表格之间的关系。该数据库由5个表组成,部门表、超级用户表、用户表、考勤表、考勤历史表。分别如下表所示:表3-10出差表名称字段类型为空性备注部门代号departmentId数字否员工IDworkerId数字否出差时间ccTime日期/时间否出差地点ccArea文本是出差天数ccLength数字是登记时间dcTime日期/时间是销差时间xcTime日期/时间是出差备注ccContent文本是表3-11部门表 名称字段类型为空性备注部门代号departmentId数字否唯一表示部门部门名称departmentName文本否部门名称表3-12请假表名称字段类型为空性备注部门代号departmentId数字否员工IDworkerId数字否请假时间qjTime日期/时间否请假天数qjLength数字是登记时间djTime日期/时间是请假原因qjReason文本是销假时间xjTime日期/时间是是否旷工ynKg是/否是表3-13上班表名称字段类型为空性备注部门代号departmentId数字否员工IDworkerId数字否工作日期workday日期/时间否上午上班时间mstartTime日期/时间是下午上班时间astartTime日期/时间是上午下班时间mleaveTime日期/时间是下午下班时间aleaveTime日期/时间是上班类型1workmsType数字是存放工作类型表中的typeId0:正常上班1:请假2:出差3:早退4:迟到上班类型2workmlType数字是默认值为0,作为是否已经登记的标记上班类型3workasType数字是默认值为0,作为是否已经登记的标记上班类型4workalType数字是默认值为0,作为是否已经登记的标记表3-14用户表名称字段类型为空性备注用户名username文本否密码password文本否真实姓名realname文本否 注册时间regtime日期/时间否权限permission数字否0:管理员1:普通用户表3-15员工表名称字段类型为空性备注部门代号departmentId数字否员工IDworkerId数字否员工姓名workerName文本是员工性别workerSex文本是员工年龄workerAge数字是进入公司时间intoCompanyTime日期/时间否员工密码workerPsw文本否进行出勤输入的最后验证表3-16上班时间表名称字段类型为空性备注上午工作开始时mstartTime日期/时间否间上午工作离开时mleaveTime日期/时间否间下午工作开始时astartTime日期/时间否间下午工作离开时aleaveTime日期/时间否间表3-17上班类型表名称字段类型为空性备注类型代号typeId数字否类型名称typeName文本是3.4代码设计部门代号为两位数,按照创建时间早晚排行。例如:生产部为第七个创建的部门,所以他的编号为07。员工ID一共分成6位,前两位表示部门代号,中间两位表示进入部门年份,后两位表示员工编号。例如:娄京兆是2021年生产部招收的第一位员工,那么他的ID就是071301。上班类型代号为一位数,按照上班类型分为五类,0:正常上班1:请假2:出差3:早退4:迟到。 第四章信息系统实施4.1源程序添加用户Dimm_clsUserAsclsUserPrivateSubcmdReg_Click()Setm_clsUser=NewclsUserm_clsUser.DoAddUsertxtUserName,txtPassword,txtPasswordConfirm,txtRealName,comboPermission,txtRegTime,frmAddUserEndSubPrivateSubForm_Load()comboPermission.AddItem"管理员",0comboPermission.AddItem"普通用户",1comboPermission.ListIndex=0EndSubPrivateSubcmdClose_Click()UnloadMeEndSub修改密码Dimm_clsUserAsclsUserPrivateSubcmdChPwdOk_Click()Setm_clsUser=NewclsUserm_clsUser.DoChPwdtxtChUser,txtOldPwd,txtNewPwd,txtNewPwdagain,frmChPwdEndSubPrivateSubForm_Load()EndSubPrivateSubcmdChPwdCancel_Click()UnloadMeEndSub出差情况DimstrSqlAsStringDimrsAsNewRecordsetPrivateSubcboDept_Click() cboName.ClearstrSql="Select*fromTWorkerwheredepartmentId="&cboDept.ItemData(cboDept.ListIndex)&"orderbyworkerId"Setrs=TransactSQL(strSql)DoWhileNotrs.EOFcboName.AddItem(rs.Fields(2).Value)cboName.ItemData(cboName.NewIndex)=rs.Fields(1).Valuers.MoveNextLooprs.ClosecboName.ListIndex=0cboName.RefreshEndSubPrivateSubcmdPrint_Click()SetdrChuChai.DataSource=adodcChuChai.RecordsetdrChuChai.Sections(1).Controls(1).Caption="请假情况统计表"drChuChai.Sections(2).Controls(1).Caption="部门名称"drChuChai.Sections(2).Controls(2).Caption="员工名称"drChuChai.Sections(2).Controls(3).Caption="出差时间"drChuChai.Sections(2).Controls(4).Caption="出差地点"drChuChai.Sections(2).Controls(5).Caption="出差天数"drChuChai.Sections(2).Controls(6).Caption="登记时间"drChuChai.Sections(2).Controls(7).Caption="销差时间"drChuChai.Sections(2).Controls(8).Caption="出差备注"drChuChai.Sections(3).Controls(1).DataField="部门名称"drChuChai.Sections(3).Controls(2).DataField="员工名称"drChuChai.Sections(3).Controls(3).DataField="出差时间"drChuChai.Sections(3).Controls(4).DataField="出差地点"drChuChai.Sections(3).Controls(5).DataField="出差天数"drChuChai.Sections(3).Controls(6).DataField="登记时间"drChuChai.Sections(3).Controls(7).DataField="销差时间"drChuChai.Sections(3).Controls(8).DataField="出差备注"drChuChai.ShowEndSubPrivateSubcmdQuery_Click()strSql="selecta.departmentNameas部门名称,b.workerNameas员工名称,c.ccTimeas出差时间,c.ccAreaas出差地点,c.ccLengthas出差天数,c.dcTimeas登记时间,c.xcTimeas销差时间,c.ccContentas出差备注fromTDepartmenta,TWorkerb,TChuChaicwhereb.departmentId="&cboDept.ItemData(cboDept.ListIndex)&"andb.workerId="&cboName.ItemData(cboName.ListIndex)&"anda.departmentId=b.departmentIdandb.departmentId=c.departmentIdandb.workerId=c.workerIdandc.ccTimebetween#"&dtpStartDate&"#and#"&dtpEndDate&"#"ConnectToDB RefushDataGridadodcChuChai,dgChuChai,strSqlDisConnectEndSubPrivateSubForm_Load()strSql="Select*fromTDepartmentorderbydepartmentId"Setrs=TransactSQL(strSql)DoWhileNotrs.EOFcboDept.AddItem(rs.Fields(1).Value)cboDept.ItemData(cboDept.NewIndex)=rs.Fields(0).Valuers.MoveNextLooprs.ClosecboDept.ListIndex=0cboDept.RefreshEndSub添加部门DimdepartIdAsIntegerDimdepartNameAsStringIftxtbmName.Text=""ThenMsgBox"部门名称不能有空值"ExitSubElsedepartId=Trim(txtaddbmId.Text)departName=Trim(txtbmName.Text)strSql="insertintoTDepartment(departmentId,departmentName)values("_&departId&",""&departName&"")"TransactSQL(strSql)MsgBox"添加成功"EndIfEndSubPublicSubinit()txtbmName.Text=""num=0strSql="select*fromTDepartmentorderbydepartmentId"Setrs=TransactSQL(strSql)IfNotrs.EOFAndNotrs.BOFThenrs.MoveLastnum=rs(0)num=num+1Me.txtaddbmId.Text=CStr(num)ElseMe.txtaddbmId.Text=1 EndIfEndSubPrivateSubcmdreadd_Click()CallinitEndSubPrivateSubForm_Load()num=0strSql="select*fromTDepartmentorderbydepartmentId"Setrs=TransactSQL(strSql)IfNotrs.EOFAndNotrs.BOFThenrs.MoveLastnum=rs(0)num=num+1Me.txtaddbmId.Text=CStr(num)ElseMe.txtaddbmId.Text=1EndIfEndSub部门管理DimstrSqlAsStringDimRowNumberAsIntegerPrivateSubcmdadd_Click()frmDepAdd.ShowvbModalEndSubPrivateSubcmddel_Click()IfConnectToDB()=FalseThenMsgBox"数据库连接失败!"ExitSubEndIfIfMsgBox("你真的要删除吗",vbInformation+vbYesNo,App.Title)=vbYesThenstrSql="deletefromTDepartmentwheredepartmentId="&RowNumberTransactSQL(strSql)DisConnectMsgBox"删除成功",vbInformation,App.TitlestrSql="selectdepartmentIdas部门编号,departmentNameas部门名称fromTDepartment"RefreshDataadodcDepManage,dgDepManage,strSqlExitSubEndIfEndSubPrivateSubcmdUpdate_Click() IfRowNumber=-1ThenMsgBox"请先选择要修改的数据!"ExitSubEndIffrmDepUpdate.ShowvbModalEndSubPrivateSubComselect_Click()Dimm_txtdepartIDAsStringDimm_txtdepartNameAsStringm_txtdepartID=Trim(txtDepartId.Text)m_txtdepartName=Trim(txtDepartName.Text)If(m_txtdepartID=""Andm_txtdepartName="")ThenstrSql="selectdepartmentIdas部门编号,departmentNameas部门名称fromTDepartment"ElseIf(m_txtdepartID<>""Andm_txtdepartName<>"")ThenstrSql="selectdepartmentIdas部门编号,departmentNameas部门名称"_&"fromTDepartmentwheredepartmentId="&m_txtdepartID&"anddepartmentNamelike"%"&m_txtdepartName&"%""ElseIf(m_txtdepartID<>"")ThenstrSql="selectdepartmentIdas部门编号,departmentNameas部门名称fromTDepartmentwheredepartmentId="&m_txtdepartIDElseIfm_txtdepartName<>""ThenstrSql="selectdepartmentIdas部门编号,departmentNameas部门名称"_&"fromTDepartmentwheredepartmentNamelike"%"&m_txtdepartName&"%""EndIfRefreshDataadodcDepManage,dgDepManage,strSqlEndSubPrivateSubdgDepManage_Click()OnErrorGoToShowErr:IfIsNull(dgDepManage.Bookmark)ThenRowNumber=-1ExitSubElseRowNumber=dgDepManage.Columns("0").CellValue(dgDepManage.Bookmark)EndIffrmDepUpdate.SetRowNumberRowNumberShowErr:ExitSubEndSubPrivateSubdgDepManage_DblClick() OnErrorGoToShowErr:IfIsNull(dgDepManage.Bookmark)ThenRowNumber=-1ExitSubElseRowNumber=dgDepManage.Columns("0").CellValue(dgDepManage.Bookmark)EndIffrmDepUpdate.SetRowNumberRowNumberfrmDepUpdate.ShowvbModalShowErr:ExitSubEndSubPrivateSubForm_Load()RowNumber=-1EndSub更新部门OptionExplicitDimstrSqlAsStringDimrsDepAsNewADODB.RecordsetDimm_irownumberAsIntegerDimm_iDepartIdAsIntegerDimm_strDepartNameAsStringPrivateSubcmdOk_Click()IftxtDepartName.Text=""ThenMsgBox"登记项目不能有空值"ExitSubElsem_iDepartId=CInt(txtDepartId.Text)m_strDepartName=Trim(txtDepartName.Text)strSql="updateTDepartmentsetdepartmentName=""&m_strDepartName&""wheredepartmentId="&m_iDepartIdIfConnectToDB()=FalseThenMsgBox"数据库连接失败!"ExitSubEndIfTransactSQL(strSql)MsgBox"修改成功"cmdok.Enabled=FalseDisConnectstrSql="selectdepartmentIdas部门编号,departmentNameas部门名称fromTDepartment" RefreshDatafrmDepManage.adodcDepManage,frmDepManage.dgDepManage,strSqlEndIfEndSubPrivateSubForm_Load()m_iDepartId=GetRowNumberIfConnectToDB()=FalseThenMsgBox"数据库连接失败!"ExitSubEndIfstrSql="select*fromTDepartmentwheredepartmentId="&m_iDepartIdSetrsDep=TransactSQL(strSql)txtDepartId.Text=rsDep.Fields(0)txtDepartId.RefreshtxtDepartName.Text=rsDep.Fields(1)txtDepartName.RefreshtxtDepartId.Enabled=FalseDisConnectEndSubPublicFunctionSetRowNumber(ByValp_irownumberAsInteger)m_irownumber=p_irownumberEndFunctionPublicFunctionGetRowNumber()AsIntegerGetRowNumber=m_irownumberEndFunction员工考勤登记DimstrSqlAsStringDimrsAsNewADODB.RecordsetDimtodayAsStringDimqjLengthAsDoubleDimqjTimeAsStringDimdjTimeAsStringDimqjReasonAsStringDimccLengthAsDoubleDimccTimeAsStringDimdcTimeAsStringDimccAreaAsStringDimccContentAsStringDimnowtimeAsStringPrivateSubcboDept_Click()cboName.Clear strSql="Select*fromTWorkerwheredepartmentId="&cboDept.ItemData(cboDept.ListIndex)&"orderbyworkerId"Setrs=TransactSQL(strSql)DoWhileNotrs.EOFcboName.AddItem(rs.Fields(2).Value)cboName.ItemData(cboName.NewIndex)=rs.Fields(1).Valuers.MoveNextLooprs.ClosecboName.ListIndex=0cboName.RefreshEndSubPrivateSubcboYourDepCC_Click()cboYourNameCC.ClearstrSql="Select*fromTWorkerwheredepartmentId="&cboYourDepCC.ItemData(cboYourDepCC.ListIndex)&"orderbyworkerId"Setrs=TransactSQL(strSql)DoWhileNotrs.EOFcboYourNameCC.AddItem(rs.Fields(2).Value)cboYourNameCC.ItemData(cboYourNameCC.NewIndex)=rs.Fields(1).Valuers.MoveNextLooprs.ClosecboYourNameCC.ListIndex=0cboYourNameCC.RefreshEndSubPrivateSubcboYourDepQJ_Click()cboYourNameQJ.ClearstrSql="Select*fromTWorkerwheredepartmentId="&cboYourDepQJ.ItemData(cboYourDepQJ.ListIndex)&"orderbyworkerId"Setrs=TransactSQL(strSql)DoWhileNotrs.EOFcboYourNameQJ.AddItem(rs.Fields(2).Value)cboYourNameQJ.ItemData(cboYourNameQJ.NewIndex)=rs.Fields(1).Valuers.MoveNextLooprs.ClosecboYourNameQJ.ListIndex=0cboYourNameQJ.RefreshEndSubPrivateSubcmdOk_Click()DimpswAsString DimworktypeAsIntegerDimworkerPswAsStringDimpwdCountAsIntegerpwdCount=0DimdepartIdAsIntegerDimworkerIdAsIntegerdepartId=cboDept.ItemData(cboDept.ListIndex)workerId=cboName.ItemData(cboName.ListIndex)strSql="selectworkerPswfromTWorkerwheredepartmentId="&departId&"andworkerId="&workerIdSetrs=TransactSQL(strSql)Ifrs.EOF=FalseThenworkerPsw=rs.Fields(0)EndIfIfFrame1.Visible=TrueThenIfoptmstart.Value=TrueThenIfMsgBox("确定要"&optmstart.Caption&"么?",vbOKCancel)=vbOKThenpsw=InputBox("请输入员工密码:","输入密码")IfyanzhengPWD(labwelcome,psw,workerPsw)=FalseThenExitSublabwelcome.Visible=FalseElseCallgetTimeIfDateDiff("s",nowtime,mstart)>=0Thenworktype=6Elseworktype=4EndIfIfyanzheng(departId,workerId,today)ThenMsgBox"你已经上班,不必再登记!"ElsestrSql="insertintoTShangBan(departmentId,workerId,workday,mstartTime,workmsType)"&_"values("&departId&","&workerId&",#"&today&"#,#"&nowtime&"#,"&worktype&")"TransactSQL(strSql)cmdok.Enabled=Falselabwelcome.Visible=True labwelcome.Caption="欢迎"&cboName.Text&optmstart.Caption&",祝你今天上午工作愉快!"MsgBox"登记成功!"EndIfEndIfElseMsgBox"不登记"EndIfElseIfMsgBox("确定要"&optmleave.Caption&"么?",vbOKCancel)=vbOKThenpsw=InputBox("请输入员工密码:","输入密码")IfyanzhengPWD(labwelcome,psw,workerPsw)=FalseThenExitSublabwelcome.Visible=FalseElseCallgetTimeIfDateDiff("s",nowtime,mleave)<=0Thenworktype=6Elseworktype=3EndIfIfyanzheng(departId,workerId,today)ThenIfmlrecord(departId,workerId,today)ThenstrSql="updateTShangBansetworkmlType="&worktype&",mleaveTime=""&nowtime&""wheredepartmentId="&departId&"andworkerId="&workerId&"andworkday=#"&today&"#"TransactSQL(strSql)cmdok.Enabled=Falselabwelcome.Visible=Truelabwelcome.Caption=""&cboName.Text&optmleave.Caption&",祝你生活幸福!"MsgBox"登记成功!"Else MsgBox"你已经下班,不必再登记!"EndIfElseMsgBox"对不起,你还没有上班,请先上班!",vbOKOnly+vbExclamation,"请遵守公司上下班秩序"EndIfEndIfElseMsgBox"不登记"EndIfEndIfElseIfoptastart(0).Value=TrueThenIfMsgBox("确定要"&optastart(0).Caption&"么?",vbOKCancel)=vbOKThenpsw=InputBox("请输入员工密码:","输入密码")IfyanzhengPWD(labwelcome,psw,workerPsw)=FalseThenExitSublabwelcome.Visible=FalseElseCallgetTimeIfDateDiff("s",nowtime,astart)>=0Thenworktype=6Elseworktype=4EndIfIfyanzheng(departId,workerId,today)ThenIfasrecord(departId,workerId,today)ThenstrSql="updateTShangBansetworkasType="&worktype&",astartTime=""&nowtime&""wheredepartmentId="&departId&"andworkerId="&workerId&"andworkday=#"&today&"#"TransactSQL(strSql)cmdok.Enabled=Falselabwelcome.Visible=True labwelcome.Caption=""&cboName.Text&optastart(0).Caption&",祝你今天下午工作愉快!"MsgBox"登记成功!"ElseMsgBox"你已经上班,不必再登记!"EndIfElsestrSql="insertintoTShangBan(departmentId,workerId,workday,astartTime,workasType)"&_"values("&departId&","&workerId&",""&today&"",""&nowtime&"","&worktype&")"TransactSQL(strSql)cmdok.Enabled=Falselabwelcome.Visible=Truelabwelcome.Caption="欢迎"&cboName.Text&optastart(0).Caption&",祝你今天下午工作愉快!"MsgBox"登记成功!"EndIfEndIfElseMsgBox"不登记"EndIfElseIfMsgBox("确定要"&optaleave(1).Caption&"么?",vbOKCancel)=vbOKThenpsw=InputBox("请输入员工密码:","输入密码")IfyanzhengPWD(labwelcome,psw,workerPsw)=FalseThenExitSublabwelcome.Visible=FalseElseCallgetTimeIfDateDiff("s",nowtime,aleave)<=0Thenworktype=6Elseworktype=3EndIfIfyanzheng(departId,workerId,today)ThenIfalrecord(departId,workerId,today)Then strSql="updateTShangBansetworkalType="&worktype&",aleaveTime=""&nowtime&""wheredepartmentId="&departId&"andworkerId="&workerId&"andworkday=#"&today&"#"TransactSQL(strSql)cmdok.Enabled=Falselabwelcome.Visible=Truelabwelcome.Caption=""&cboName.Text&optaleave(1).Caption&",祝你生活幸福!"MsgBox"登记成功!"ElseMsgBox"你已经下班,不必再登记!"EndIfElseMsgBox"对不起,你还没有上班,请先上班!",vbOKOnly+vbExclamation,"请遵守公司上下班秩序"EndIfEndIfElseMsgBox"不登记"EndIfEndIfEndIfEndSubPrivateSubcmdOKCC_Click()DimdepartIdAsIntegerDimworkerIdAsIntegerdepartId=cboYourDepCC.ItemData(cboYourDepCC.ListIndex)workerId=cboYourNameCC.ItemData(cboYourNameCC.ListIndex)IftxtccTime.Text=""OrtxtccLength.Text=""OrtxtccArea.Text=""OrtxtccContent.Text=""ThenMsgBox"登记项目不能有空值"ExitSubElseIfIsDate(txtccTime.Text)=FalseThenMsgBox"时间格式不对!"yTimeCC.Visible=TrueyTimeCC.Caption="时间格式:"&Now()ExitSubElseyTimeCC.Caption="" yTimeCC.Visible=FalseccArea=Trim(txtccArea.Text)ccContent=Trim(txtccContent.Text)strSql="insertintoTChuChai(departmentId,workerId,ccTime,ccArea,ccLength,dcTime,ccContent)values("_&departId&","&workerId&",""&ccTime&"",""&ccArea&"","&ccLength&",""&dcTime&"",""&ccContent&"")"TransactSQL(strSql)MsgBox"登记成功"EndIfEndSubPrivateSubcmdOKQJ_Click()DimdepartIdAsIntegerDimworkerIdAsIntegerdepartId=cboYourDepQJ.ItemData(cboYourDepQJ.ListIndex)workerId=cboYourNameQJ.ItemData(cboYourNameQJ.ListIndex)IftxtqjTime.Text=""OrtxtqjLength.Text=""OrtxtqjReason.Text=""ThenMsgBox"登记项目不能有空值"ExitSubElseIfIsDate(txtqjTime)=FalseThenMsgBox"时间格式不对!"yTime.Visible=TrueyTime.Caption="时间格式:"&Now()ExitSubElseyTime.Visible=FalseqjReason=Trim(txtqjReason.Text)strSql="insertintoTQingJia(departmentId,workerId,qjTime,qjLength,djTime,qjReason)values("_&departId&","&workerId&",""&qjTime&"","&qjLength&",""&djTime&"",""&qjReason&"")"TransactSQL(strSql)MsgBox"登记成功"EndIfEndSubPrivateSubcmdokUserLogin_Click()Dimm_clsUserAsclsUserDimp_enumUserLoginAsUSERLOGINSetm_clsUser=NewclsUserp_enumUserLogin=m_clsUser.DoUserLogin(Trim(txtUserName.Text),Trim(txtPassword.Text),frmUserLogin)Ifp_enumUserLogin=LOGERRORThenExitSubElseIfp_enumUserLogin=LOGSUPERThen UnloadfrmNormalUserMainMDIfrmAdminMain.ShowElseIfp_enumUserLogin=LOGNORMALThenUnloadMDIfrmAdminMainfrmNormalUserMain.ShowEndIfEndSubPrivateSubForm_Load()DimnowtimeAsStringlabwelcome.Visible=Falsenowtime=Time()IfHour(nowtime)<13ThenFrame1.Visible=TrueFrame2.Visible=FalseElseFrame1.Visible=FalseFrame2.Visible=TrueEndIfstrSql="Select*fromTDepartmentorderbydepartmentId"Setrs=TransactSQL(strSql)DoWhileNotrs.EOFcboDept.AddItem(rs.Fields(1).Value)cboDept.ItemData(cboDept.NewIndex)=rs.Fields(0).ValuecboYourDepQJ.AddItem(rs.Fields(1).Value)cboYourDepQJ.ItemData(cboYourDepQJ.NewIndex)=rs.Fields(0).ValuecboYourDepCC.AddItem(rs.Fields(1).Value)cboYourDepCC.ItemData(cboYourDepCC.NewIndex)=rs.Fields(0).Valuers.MoveNextLooprs.ClosecboDept.ListIndex=0cboYourDepQJ.ListIndex=0cboYourDepCC.ListIndex=0cboDept.RefreshcboYourDepQJ.RefreshcboYourDepCC.RefreshtxtqjTime.Text=Now()labdjTime.Caption=""yTime.Visible=FalsetxtccTime.Text=Now()labdcTime.Caption=""yTimeCC.Caption="" yTimeCC.Visible=FalseEndSubPrivateSubForm_Unload(CancelAsInteger)UnloadfrmUserLoginEndSubPublicFunctionmlrecord(cdepartIdAsInteger,cworkerIdAsInteger,ctodayAsString)AsBooleanstrSql="selectworkmlTypefromTShangBanwheredepartmentId="&cdepartId&"andworkerId="&cworkerId&"andworkday=#"&ctoday&"#"Setrs=TransactSQL(strSql)Ifrs.Fields(0).Value=0Thenmlrecord=TrueElsemlrecord=FalseEndIfrs.CloseEndFunctionPublicFunctionasrecord(cdepartIdAsInteger,cworkerIdAsInteger,ctodayAsString)AsBooleanstrSql="selectworkasTypefromTShangBanwheredepartmentId="&cdepartId&"andworkerId="&cworkerId&"andworkday=#"&ctoday&"#"Setrs=TransactSQL(strSql)Ifrs.Fields(0).Value=0Thenasrecord=TrueElseasrecord=FalseEndIfrs.CloseEndFunctionPublicFunctionalrecord(cdepartIdAsInteger,cworkerIdAsInteger,ctodayAsString)AsBooleanstrSql="selectworkalTypefromTShangBanwheredepartmentId="&cdepartId&"andworkerId="&cworkerId&"andworkday=#"&ctoday&"#"Setrs=TransactSQL(strSql)Ifrs.Fields(0).Value=0Thenalrecord=TrueElsealrecord=FalseEndIfrs.CloseEndFunctionPublicSubgetTime()strSql="Select*fromTWorkTime"Setrs=TransactSQL(strSql) IfNotrs.EOFThenmstart=rs.Fields(0)mleave=rs.Fields(1)astart=rs.Fields(2)aleave=rs.Fields(3)EndIfnowtime=Time()today=DateEndSubPublicFunctionyanzheng(cdepartIdAsInteger,cworkerIdAsInteger,ctodayAsString)AsBooleanstrSql="select*fromTShangBanwheredepartmentId="&cdepartId&"andworkerId="&cworkerId&"andworkday=#"&ctoday&"#"Setrs=TransactSQL(strSql)Ifrs.EOF=FalseThenyanzheng=TrueElseyanzheng=FalseEndIfrs.CloseEndFunctionPublicFunctionyanzhengPWD(ByVallabwelcomeAsLabel,ByValpswAsString,workerPswAsString)AsBooleanDoWhilepsw<>workerPswlabwelcome.Visible=Truelabwelcome.Caption="你的身份被怀疑啦,请再次输入你的员工密码!"pwdCount=pwdCount+1IfpwdCount=3ThenMsgBox"你已经是三次输错,系统将关闭啦!",vbOKOnly+vbExclamation,"通知"yanzhengPWD=FalseExitFunctionEndIfpsw=InputBox("请输入员工密码:","输入密码")LoopyanzhengPWD=TrueEndFunctionPrivateSubtabDJ_Click(PreviousTabAsInteger)cmdok.Enabled=TrueEndSubPrivateSubtxtccLength_Change()labdcTime.Caption=""ccTime=txtccTime.Text IftxtccLength.Text=""ThenMsgBox"请输入请假时长!"ElseIfAsc(txtccLength.Text)<48OrAsc(txtccLength.Text)>57ThenMsgBox"请输入数字!"txtccLength.Text=""ExitSubElseccLength=txtccLength.TextEndIfIfIsDate(ccTime)=FalseThenMsgBox"时间格式不对!"yTimeCC.Visible=TrueyTimeCC.Caption="时间格式:"&Now()txtccLength=""ExitSubElseyTimeCC.Caption=""yTimeCC.Visible=FalsedcTime=DateAdd("d",ccLength,ccTime)EndIflabdcTime.Caption=dcTimeEndSubPrivateSubtxtqjLength_Change()labdjTime.Caption=""qjTime=txtqjTime.TextIftxtqjLength.Text=""ThenMsgBox"请输入请假时长!"ElseIfAsc(txtqjLength.Text)<48OrAsc(txtqjLength.Text)>57ThenMsgBox"请输入数字!"txtqjLength.Text=""ExitSubElseqjLength=txtqjLength.TextEndIfIfIsDate(qjTime)=FalseThenMsgBox"时间格式不对!"yTime.Visible=TrueyTime.Caption="时间格式:"&Now()txtqjLength=""ExitSubElseyTime.Caption=""yTime.Visible=FalsedjTime=DateAdd("h",qjLength,qjTime) EndIflabdjTime.Caption=djTimeEndSub4.1.8请假情况DimstrSqlAsStringDimrsAsNewRecordsetPrivateSubcboDept_Click()cboName.ClearstrSql="Select*fromTWorkerwheredepartmentId="&cboDept.ItemData(cboDept.ListIndex)&"orderbyworkerId"Setrs=TransactSQL(strSql)DoWhileNotrs.EOFcboName.AddItem(rs.Fields(2).Value)cboName.ItemData(cboName.NewIndex)=rs.Fields(1).Valuers.MoveNextLooprs.ClosecboName.ListIndex=0cboName.RefreshEndSubPrivateSubcmdPrint_Click()SetdrQingJia.DataSource=adodcQingJia.RecordsetdrQingJia.Sections(1).Controls(1).Caption="请假情况统计表"drQingJia.Sections(2).Controls(1).Caption="部门名称"drQingJia.Sections(2).Controls(2).Caption="员工名称"drQingJia.Sections(2).Controls(3).Caption="请假时间"drQingJia.Sections(2).Controls(4).Caption="请假天数"drQingJia.Sections(2).Controls(5).Caption="登记时间"drQingJia.Sections(2).Controls(6).Caption="请假原因"drQingJia.Sections(2).Controls(7).Caption="销假时间"drQingJia.Sections(3).Controls(1).DataField="部门名称"drQingJia.Sections(3).Controls(2).DataField="员工名称"drQingJia.Sections(3).Controls(3).DataField="请假时间"drQingJia.Sections(3).Controls(4).DataField="请假天数"drQingJia.Sections(3).Controls(5).DataField="登记时间"drQingJia.Sections(3).Controls(6).DataField="请假原因"drQingJia.Sections(3).Controls(7).DataField="销假时间"drQingJia.ShowEndSubPrivateSubcmdQuery_Click()strSql="selecta.departmentNameas部门名称,b.workerNameas员工名称,c.qjTimeas请假时间,c.qjLengthas请假天数,c.djTimeas登记时 间,c.qjReasonas请假原因,c.xjTimeas销假时间fromTDepartmenta,TWorkerb,TQingjiacwhereb.departmentId="&cboDept.ItemData(cboDept.ListIndex)&"andb.workerId="&cboName.ItemData(cboName.ListIndex)&"anda.departmentId=b.departmentIdandb.departmentId=c.departmentIdandb.workerId=c.workerIdandc.qjtimebetween#"&dtpStartDate&"#and#"&dtpEndDate&"#"ConnectToDBRefushDataGridadodcQingJia,dgQingJia,strSqlDisConnectEndSubPrivateSubForm_Load()strSql="Select*fromTDepartmentorderbydepartmentId"Setrs=TransactSQL(strSql)DoWhileNotrs.EOFcboDept.AddItem(rs.Fields(1).Value)cboDept.ItemData(cboDept.NewIndex)=rs.Fields(0).Valuers.MoveNextLooprs.ClosecboDept.ListIndex=0cboDept.RefreshEndSub4.1.9上班时间设置PrivateSubcmdOk_Click()DimstrSqlAsStringIfIsDate(Me.mstartTime.Text)=FalseOrMe.mstartTime.Text=""ThenMsgBox"请正确地输入时间!",vbOKOnly+vbExclamation,"警告!"ElseIfIsDate(Me.mleaveTime.Text)=FalseOrMe.mleaveTime.Text=""ThenMsgBox"请正确地输入时间!",vbOKOnly+vbExclamation,"警告!"ElseIfIsDate(Me.astartTime.Text)=FalseOrMe.aleaveTime.Text=""ThenMsgBox"请正确地输入时间!",vbOKOnly+vbExclamation,"警告!"ElseIfIsDate(Me.aleaveTime.Text)=FalseOrMe.aleaveTime.Text=""ThenMsgBox"请正确地输入时间!",vbOKOnly+vbExclamation,"警告!"ElsestrSql="deletefromTWorkTime"TransactSQL(strSql)strSql="InsertintoTWorkTime(mstartTime,mleaveTime,astartTime,aleaveTime)Values(""_&mstartTime.Text&"",""&mleaveTime.Text&"",""&astartTime.Text&"",""&aleaveTime.Text&"")"TransactSQL(strSql) MsgBox"时间已经设置!",vbOKOnly+vbExclamation,"设置成功!"UnloadMeEndIfDisConnectEndSubPrivateSubForm_Load()DimsqlAsStringDimrs1AsNewADODB.RecordsetIfConnectToDB()=FalseThenMsgBox"数据库连接失败!"Elsesql="select*fromTWorkTime"Setrs1=QueryData(sql)Ifrs1.EOF=FalseThenMe.mstartTime.Text=rs1.Fields(0)Me.mleaveTime.Text=rs1.Fields(1)Me.astartTime.Text=rs1.Fields(2)Me.aleaveTime.Text=rs1.Fields(3)EndIfEndIfDisConnectEndSub0上班情况DimstrSqlAsStringDimrsAsNewRecordsetPrivateSubcboDept_Click()cboName.ClearstrSql="Select*fromTWorkerwheredepartmentId="&cboDept.ItemData(cboDept.ListIndex)&"orderbyworkerId"Setrs=TransactSQL(strSql)DoWhileNotrs.EOFcboName.AddItem(rs.Fields(2).Value)cboName.ItemData(cboName.NewIndex)=rs.Fields(1).Valuers.MoveNextLooprs.ClosecboName.ListIndex=0cboName.RefreshEndSubPrivateSubcmdPrint_Click()SetdrShangBan.DataSource=adodcShangBan.RecordsetdrShangBan.Sections(1).Controls(1).Caption="上班情况统计表" drShangBan.Sections(2).Controls(1).Caption="部门名称"drShangBan.Sections(2).Controls(2).Caption="员工名称"drShangBan.Sections(2).Controls(3).Caption="工作日"drShangBan.Sections(2).Controls(4).Caption="上午上班时间"drShangBan.Sections(2).Controls(5).Caption="上午下班时间"drShangBan.Sections(2).Controls(6).Caption="下午上班时间"drShangBan.Sections(2).Controls(7).Caption="下午下班时间"drShangBan.Sections(2).Controls(8).Caption="上班类型"drShangBan.Sections(3).Controls(1).DataField="部门名称"drShangBan.Sections(3).Controls(2).DataField="员工名称"drShangBan.Sections(3).Controls(3).DataField="工作日"drShangBan.Sections(3).Controls(4).DataField="上午上班时间"drShangBan.Sections(3).Controls(5).DataField="上午下班时间"drShangBan.Sections(3).Controls(6).DataField="下午上班时间"drShangBan.Sections(3).Controls(7).DataField="下午下班时间"drShangBan.Sections(3).Controls(8).DataField="上班类型"drShangBan.ShowEndSubPrivateSubcmdQuery_Click()strSql="selecta.departmentNameas部门名称,b.workerNameas员工名称,c.workdayas工作日,c.mstartTimeas上午上班时间,c.mleaveTimeas上午下班时间,c.astartTimeas下午上班时间,c.aleaveTimeas下午下班时间,c.workmsTypeas上班类型fromTDepartmenta,TWorkerb,TShangBancwhereb.departmentId="&cboDept.ItemData(cboDept.ListIndex)&"andb.workerId="&cboName.ItemData(cboName.ListIndex)&"anda.departmentId=b.departmentIdandb.departmentId=c.departmentIdandb.workerId=c.workerIdandc.workdaybetween#"&dtpStartDate&"#and#"&dtpEndDate&"#"ConnectToDBRefushDataGridadodcShangBan,dgShangBan,strSqlDisConnectEndSubPrivateSubForm_Load()strSql="Select*fromTDepartmentorderbydepartmentId"Setrs=TransactSQL(strSql)DoWhileNotrs.EOFcboDept.AddItem(rs.Fields(1).Value)cboDept.ItemData(cboDept.NewIndex)=rs.Fields(0).Valuers.MoveNextLooprs.ClosecboDept.ListIndex=0cboDept.RefreshEndSub 1用户登入Dimm_clsUserAsclsUserDimp_enumUserLoginAsUSERLOGINPrivateSubcmdOk_Click()Setm_clsUser=NewclsUserp_enumUserLogin=m_clsUser.DoUserLogin(Trim(txtUserName.Text),Trim(txtPassword.Text),frmUserLogin)Ifp_enumUserLogin=LOGERRORThenExitSubElseIfp_enumUserLogin=LOGSUPERThenUnloadfrmNormalUserMainMDIfrmAdminMain.ShowElseIfp_enumUserLogin=LOGNORMALThenUnloadMDIfrmAdminMainfrmNormalUserMain.ShowEndIfEndSubPrivateSubcmdCancel_Click()UnloadMeEndSub2添加员工DimstrSqlAsStringDimrsAsNewADODB.RecordsetDimnumAsIntegerPrivateSubcmdadd_Click()DimdepartIdAsIntegerDimworkerIdAsIntegerDimworkersexAsStringDimworkerageAsIntegerDimintocompanytimeAsStringDimpswAsStringyTime.Visible=FalseIftxtworkerAge.Text=""OrtxtintocompanyTime.Text=""OrtxtworkerPsw.Text=""OrtxtworkerName.Text=""ThenMsgBox"登记项目不能有空值"ExitSubElseIfIsDate(txtintocompanyTime.Text)=FalseThenMsgBox"时间格式不对!"yTime.Visible=TrueyTime.Caption="时间格式:"&Date ExitSubElseyTime.Visible=FalsedepartId=cboDept.ItemData(cboDept.ListIndex)workerId=CInt(txtworkerId.Text)workerName=Trim(txtworkerName.Text)workersex=Trim(cbogender.Text)workerage=CInt(Trim(txtworkerAge.Text))intocompanytime=Trim(txtintocompanyTime.Text)psw=Trim(txtworkerPsw.Text)sql="insertintoTWorker(departmentId,workerId,workerName,workerSex,workerAge,intoCompanyTime,workerPsw)values("_&departId&","&workerId&",""&workerName&"",""&workersex&"","&workerage&",""&intocompanytime&"",""&psw&"")"TransactSQL(sql)MsgBox"添加成功"EndIfEndSubPrivateSubcmdreadd_Click()CallinitEndSubPrivateSubForm_Load()num=0strSql="Select*fromTDepartmentorderbydepartmentId"Setrs=TransactSQL(strSql)DoWhileNotrs.EOFcboDept.AddItem(rs.Fields("departmentName").Value)cboDept.ItemData(cboDept.NewIndex)=rs.Fields("departmentId").Valuers.MoveNextLooprs.ClosecboDept.ListIndex=0cboDept.RefreshtxtintocompanyTime.Text=DateWithcbogender.AddItem("男").AddItem("女")EndWithcbogender.ListIndex=0strSql="select*fromTWorkerwheredepartmentId="&cboDept.ItemData(cboDept.ListIndex)&"orderbyworkerId"Setrs=TransactSQL(strSql) IfNotrs.EOFAndNotrs.BOFThenrs.MoveLastnum=rs("workerId")num=num+1Me.txtworkerId.Text=CStr(num)ElseMe.txtworkerId.Text=1EndIfDisConnectEndSubPrivateSubcboDept_Click()CallinitEndSubPublicSubinit()txtworkerId.Text=""txtworkerName.Text=""txtworkerAge.Text=""txtworkerPsw.Text=""num=0strSql="select*fromTWorkerwheredepartmentId="&cboDept.ItemData(cboDept.ListIndex)&"orderbyworkerId"Setrs=TransactSQL(strSql)IfNotrs.EOFAndNotrs.BOFThenrs.MoveLastnum=rs(1)num=num+1Me.txtworkerId.Text=CStr(num)ElseMe.txtworkerId.Text=1EndIftxtintocompanyTime.Text=DateDisConnectEndSub3员工管理OptionExplicitDimstrSqlAsStringDimrsWorkerAsNewADODB.RecordsetDimRowNumberAsIntegerDimm_iDepartmentIDAsIntegerDimm_iworkerIDAsIntegerPrivateSubcmdadd_Click()frmWorkerAdd.ShowvbModal EndSubPrivateSubcmddelete_Click()IfRowNumber=-1ThenMsgBox"请先选择要删除的数据!"ExitSubEndIfIfMsgBox("你真的要删除吗",vbInformation+vbYesNo,App.Title)=vbYesThenstrSql="deletefromTWorkerwheredepartmentId="&GetDepartmentID&"andworkerId="&GetWorkerIDTransactSQL(strSql)strSql="selecta.departmentIdas部门编号,departmentNameas部门,workerIdas员工编号,workerNameas姓名,workerSexas性别,workerAgeas年龄,intoCompanyTimeas进公司时间,workerPswas密码"_&"fromTWorkerasa,TDepartmentasbwherea.departmentId=b.departmentIdanda.departmentId="&GetDepartmentIDRefreshDataadodcWorker,dgWorker,strSqlDisConnectEndIfEndSubPrivateSubcmdQuery_Click()Dimm_txtWorkerNameAsStringDimm_txtWorkerIdAsIntegerDimm_cboDeptIdAsIntegerm_txtWorkerName=Trim(txtworkerName.Text)IfTrim((txtworkerId.Text)<>"")Thenm_txtWorkerId=CInt(Trim(txtworkerId.Text))EndIfm_cboDeptId=cboDept.ItemData(cboDept.ListIndex)If(txtworkerId.Text=""AndtxtworkerName.Text="")ThenstrSql="selecta.departmentIdas部门编号,departmentNameas部门,workerIdas员工编号,workerNameas姓名,workerSexas性别,workerAgeas年龄,intoCompanyTimeas进公司时间,workerPswas密码"_&"fromTWorkerasa,TDepartmentasbwherea.departmentId=b.departmentIdanda.departmentId="&m_cboDeptIdElseIf(txtworkerId.Text<>""AndtxtworkerName.Text<>"")ThenstrSql="selecta.departmentIdas部门编号,departmentNameas部门,workerIdas员工编号,workerNameas姓名,workerSexas性别,workerAgeas年龄,intoCompanyTimeas进公司时间,workerPswas密码"_&"fromTWorkerasa,TDepartmentasbwherea.departmentId=b.departmentIdanda.departmentId="&m_cboDeptId&"andworkerId="&m_txtWorkerId&"andworkerNamelike"%"&m_txtWorkerName&"%"" ElseIf(txtworkerId.Text<>"")ThenstrSql="selecta.departmentIdas部门编号,departmentNameas部门,workerIdas员工编号,workerNameas姓名,workerSexas性别,workerAgeas年龄,intoCompanyTimeas进公司时间,workerPswas密码"_&"fromTWorkerasa,TDepartmentasbwherea.departmentId=b.departmentIdanda.departmentId="&m_cboDeptId&"andworkerId="&m_txtWorkerIdElseIftxtworkerName.Text<>""ThenstrSql="selecta.departmentIdas部门编号,departmentNameas部门,workerIdas员工编号,workerNameas姓名,workerSexas性别,workerAgeas年龄,intoCompanyTimeas进公司时间,workerPswas密码"_&"fromTWorkerasa,TDepartmentasbwherea.departmentId=b.departmentIdanda.departmentId="&m_cboDeptId&"andworkerNamelike"%"&m_txtWorkerName&"%""EndIfRefreshDataadodcWorker,dgWorker,strSqlEndSubPrivateSubcmdUpdate_Click()IfRowNumber=-1ThenMsgBox"请先选择要修改的数据!"ExitSubEndIffrmWorkerUpdate.ShowvbModalEndSubPrivateSubdgWorker_Click()OnErrorGoToShowErr:IfIsNull(dgWorker.Bookmark)ThenRowNumber=-1ExitSubElseRowNumber=dgWorker.Columns("0").CellValue(dgWorker.Bookmark)EndIffrmWorkerUpdate.SetDepartmentIDRowNumberMe.SetDepartmentIDRowNumberRowNumber=dgWorker.Columns("2").CellValue(dgWorker.Bookmark)frmWorkerUpdate.SetWorkerIDRowNumberMe.SetWorkerIDRowNumberShowErr:ExitSubEndSubPrivateSubdgWorker_DblClick()OnErrorGoToShowErr: IfRowNumber=-1ThenMsgBox"请先选择要修改的数据!"ExitSubEndIfIfIsNull(dgWorker.Bookmark)ThenRowNumber=-1ExitSubElseRowNumber=dgWorker.Columns("0").CellValue(dgWorker.Bookmark)EndIffrmWorkerUpdate.SetDepartmentIDRowNumberMe.SetDepartmentIDRowNumberRowNumber=dgWorker.Columns("2").CellValue(dgWorker.Bookmark)frmWorkerUpdate.SetWorkerIDRowNumberMe.SetWorkerIDRowNumberfrmWorkerUpdate.ShowvbModalShowErr:ExitSubEndSubPrivateSubForm_Load()strSql="Select*fromTDepartmentorderbydepartmentId"SetrsWorker=TransactSQL(strSql)DoWhileNotrsWorker.EOFcboDept.AddItem(rsWorker.Fields("departmentName").Value)cboDept.ItemData(cboDept.NewIndex)=rsWorker.Fields("departmentId").ValuersWorker.MoveNextLooprsWorker.CloseDisConnectcboDept.ListIndex=0cboDept.RefreshRowNumber=-1EndSubPublicFunctionSetDepartmentID(ByValp_iDepartmentIDAsInteger)m_iDepartmentID=p_iDepartmentIDEndFunctionPublicFunctionGetDepartmentID()AsIntegerGetDepartmentID=m_iDepartmentIDEndFunctionPublicFunctionSetWorkerID(ByValp_iworkerIDAsInteger)m_iworkerID=p_iworkerID EndFunctionPublicFunctionGetWorkerID()AsIntegerGetWorkerID=m_iworkerIDEndFunction4修改员工DimdepartIdAsIntegerDimm_iDepartmentIDAsIntegerDimm_iworkerIDAsIntegerDimstrSqlAsStringDimrsAsNewADODB.RecordsetPrivateSubcmdUpdate_Click()DimworkerIdAsIntegerDimworkersexAsStringDimworkerageAsIntegerDimintocompanytimeAsStringDimpswAsStringyTime.Visible=FalseIftxtworkerAge.Text=""OrtxtintocompanyTime.Text=""OrtxtworkerPsw.Text=""OrtxtworkerName.Text=""ThenMsgBox"登记项目不能有空值"ExitSubElseIfIsDate(txtintocompanyTime.Text)=FalseThenMsgBox"时间格式不对!"yTime.Visible=TrueyTime.Caption="时间格式:"&DateExitSubElseyTime.Visible=FalseworkerId=CInt(txtworkerId.Text)workerName=Trim(txtworkerName.Text)workersex=Trim(cbogender.Text)workerage=CInt(Trim(txtworkerAge.Text))intocompanytime=Trim(txtintocompanyTime.Text)psw=Trim(txtworkerPsw.Text)strSql="updateTWorkersetworkerName=""&workerName&"",workerSex=""&workersex&"",workerAge="&workerage&",intoCompanyTime=""&intocompanytime&"",workerPsw=""&psw&""wheredepartmentId="&departId&"andworkerId="&workerIdTransactSQL(sql)MsgBox"修改成功"cmdupdate.Enabled=FalsecmdCancel.SetFocus EndIfDisConnectEndSubPrivateSubcmdCancel_Click()UnloadMeEndSubPrivateSubcmdreadd_Click()CallinitEndSubPrivateSubForm_Load()Withcbogender.AddItem("男").AddItem("女")EndWithstrSql="select*fromTWorkerwheredepartmentID="&GetDepartmentID&"andworkerId="&GetWorkerIDIfConnectToDB()=FalseThenMsgBox"数据库连接失败!"ExitSubEndIfSetrs=TransactSQL(strSql)Ifrs.Fields("workerSex").Value="男"Thencbogender.ListIndex=0Elsecbogender.ListIndex=1EndIfIf(rs.Fields("workerName")=Null)ThentxtworkerName.Text=""ElsetxtworkerName.Text=rs.Fields("workerName").ValueEndIfIf(rs.Fields("workerAge").Value=Null)ThentxtworkerAge.Text=""ElsetxtworkerAge.Text=rs.Fields("workerAge").ValueEndIfIf(rs.Fields("intoCompanyTime")=Null)ThentxtintocompanyTime.Text=""ElsetxtintocompanyTime.Text=rs.Fields("intoCompanyTime").ValueEndIfMe.txtworkerId.Text=rs.Fields("workerId").ValueIf(rs.Fields("workerPsw").Value=Null)ThentxtworkerPsw.Text="" ElsetxtworkerPsw.Text=rs.Fields("workerPsw").ValueEndIfstrSql="selectdepartmentNamefromTDepartmentwheredepartmentId="&GetDepartmentIDSetrs=TransactSQL(strSql)cboDept.AddItem(rs.Fields(0))cboDept.ListIndex=0cboDept.RefreshcboDept.Enabled=FalseDisConnectEndSubPublicFunctionSetDepartmentID(ByValp_iDepartmentIDAsInteger)m_iDepartmentID=p_iDepartmentIDEndFunctionPublicFunctionGetDepartmentID()AsIntegerGetDepartmentID=m_iDepartmentIDEndFunctionPublicFunctionSetWorkerID(ByValp_iworkerIDAsInteger)m_iworkerID=p_iworkerIDEndFunctionPublicFunctionGetWorkerID()AsIntegerGetWorkerID=m_iworkerIDEndFunction5主界面PrivateSubMDIForm_Load()DimX0AsLongDimY0AsLongX0=Screen.WidthY0=Screen.HeightX0=(X0-Me.Width)/2Y0=(Y0-Me.Height)/2Me.MoveX0,Y0EndSubPrivateSubMDIForm_Unload(CancelAsInteger)UnloadfrmUserLoginEndSubPrivateSubmnAbout_Click()frmAbout.ShowEndSubPrivateSubmnAddUser_Click()frmAddUser.ShowvbModal EndSubPrivateSubmnBaoXiu_Click()EndSubPrivateSubmnBaoXiuTg_Click()EndSubPrivateSubmnCascade_Click()MDIfrmAdminMain.ArrangevbCascadeEndSubPrivateSubmnChPwd_Click()frmChPwd.ShowvbModalEndSubPrivateSubmnClient_Click()EndSubPrivateSubmnEmp_Click()EndSubPrivateSubmnEquipment_Click()EndSubPrivateSubmnEquipTg_Click()EndSubPrivateSubmnChuChai_Click()frmChuChai.ShowEndSubPrivateSubmnDepManager_Click()frmDepManage.ShowEndSubPrivateSubmnExit_Click()UnloadMeUnloadfrmUserLoginEndSubPrivateSubmnFee_Click()EndSubPrivateSubmnFeeTg_Click()EndSubPrivateSubmnHouse_Click()EndSubPrivateSubmnHorizontal_Click()MDIfrmAdminMain.ArrangevbTileHorizontalEndSubPrivateSubmnLogin_Click()UnloadMefrmUserLogin.ShowvbModalEndSubPrivateSubmnPark_Click()EndSub PrivateSubmnRepair_Click()EndSubPrivateSubmnRepairTg_Click()EndSubPrivateSubmnTousu_Click()EndSubPrivateSubmnTouSuTg_Click()EndSubPrivateSubmnYibiao_Click()EndSubPrivateSubmnYiBiaoTg_Click()EndSubPrivateSubmnQingJia_Click()frmQingJia.ShowEndSubPrivateSubmnSetTime_Click()frmSetTime.ShowEndSubPrivateSubmnShangBan_Click()frmShangBan.ShowEndSubPrivateSubmnVertical_Click()MDIfrmAdminMain.ArrangevbTileVerticalEndSubPrivateSubmnWorkerManager_Click()frmWorkerManage.ShowEndSubPrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)EndSubPrivateSubNormalUserMain_Click()frmNormalUserMain.ShowEndSubPrivateSubtoolbarMain_ButtonClick(ByValButtonAsMSComctlLib.Button)SelectCaseButton.IndexCase1frmSetTime.ShowCase2frmDepManage.ShowCase3frmWorkerManage.ShowCase4UnloadMeCase5Case6 IfMsgBox("真的要对出本系统吗?",vbQuestion+vbYesNo+vbDefaultButton2,"退出")=vbNoThenCancel=1ElseEndEndIfEndSelectEndSub4.3模拟运行数据添加用户:修改密码:上下班设置:部门管理:员工管理:考勤管理:上班情况:请假情况:出差情况:帮助:4.4系统使用说明书一.后台(管理员)(账号:admin密码:admin)1.系统用户登录修改密码添加用户上下班时间设置2.管理部门管理员工管理考勤管理3.窗口水平平铺垂直平铺层叠4.报表 上班情况请假情况出差情况二.前台(普通用户)(账号:ljz密码:loujingzhao)1.上下班登记2.请假登记3.出差登记第五章参考书籍[1]沈洪,施明利.VB程序设计[M].清华大学出版社,2021.8[2]陈恭和.Access数据库基础(第二版).浙江大学出版社,2021.8[3]陈承欢,彭勇.管理信息系统基础与开发技术[M].人民邮电出版社,2005.2