VB+access企业工资管理系统课程设计.doc
VB+access企业工资管理系统-课程设计VB+access企业工资管理系统参考文献:1 Visual Basic 6.0 程序设计教程(高等教育出版社) 龚沛曾 陆慰民 杨志强 编著2 MSDN - Microstft Developers'NetWork Microstft 1998Microstft 编著3Visual Basic 企业办公系统开发实例导航(人民邮电出版社) 刘萌 周学明 郭安源 编著4Visual Basic 程序设计教程(北方交通大学出版社) 李振亭 编著 5Visual Basic 用户编程手册(人民邮电出版社) 林永 张乐强 编著6数据库系统概论(高等教育出版社) 萨师煊 王珊 编著7现代软件工程(北京希望电子出版社) 孙涌 编著8Visual Basic数据库系统开发实例导航(人民邮电出版社)9VB控件应用编程实例教程(北京希望电子出版社) 张学忠 王福成 编著10Office 2000中文版(清华大学出版社) 东方人华 编著11VB数据库程序设计高手(科学出版社) 温贤发 编著12软件需求(电子工业出版社) Soren Lauesen 编著 刘晓晖 译13VB6.0中文版教程(电子工作出版社) 新智工作室 12.VB编程技巧280例(上海科学普及出版社) 源江科技 13.数据库设计与编程实例详解使用Access、SQL与VB 英 John Carter 著 张淮野 袁怡 译14.VB6.0程序设计教程(青岛出版社) 韩耀军 编著 15.VB问答式教程(清华大学出版社) 庞一鸣 编著企业工资管理系统是一个典型的信息管理系统,其主要通过软件工程方面的选择课题、需求分析、总体设计、选用工具、程序模块、系统测试等几个步骤来实现。开发本系统的过程中,首先要对企业工资管理进行系统调研,熟悉企业财务、人事、工资发放管理的流程、步骤;其次在系统需求分析过程中,要透过现象看本质,敏锐观察到企业工资管理中存在的各种问题,并在总体设计把握好对问题的分析、理解,进而解决问题;选用开发工具要选用自己最熟悉、应用较多的开发工具,本系统开发选用MS Visual Basic 6.0,其具有语言简单、功能强大、组件众多的优点。程序模块的编制中,重点把握系统内部完整性、功能性、实用性、便捷性,使其能够协调统一、运行无误。运行结果证明,本企业工资管理系统极大提高了工作效率,节省了人力和物力,最终满足企业财务管理、员工工资发放的需要,同时也成为现代化企业管理的标志摘 要 第一章 绪 论 1.1 数据库管理系统简介 1.2 图书管理系统 1.3 开发工具简介 第二章 企业工资管理系统设计分析 2.1 应用需求分析 2.2 系统功能模块划分 2.3 系统数据库设计 第三章 企业工资管理系统应用程序设计 3.1 “登录”模块详细设计3.2 “主窗体”模块详细设计3.3 各项子模块详细设计3.4 各项子模块编写要点第四章 结束语 致 谢 参考书目 928VB+access企业工资管理系统企业的工资管理是公司管理的一个重要内容。随着企业人员数量增加,企业的工资管理工作也变得越来越复杂。工资管理既涉及到企业劳动人事的管理,同时也是企业财务管理的重要组成部分。工资管理需要和人事管理相联系,同时连接工时考勤和医疗保险等等,来生成企业每个职工的基本工资、津贴、医疗保险、保险费、实际发放工资等。资金是企业生存的主要元素,资金的流动影响到企业的整体运作,企业员工的工资是企业资金管理的一个重要的组成部分。早期的工资统计和发放都是使用人工方式处理纸质材料,不仅花费财务人员大量的时间且不易保存,往往由于个人的因素抄写不慎或计算疏忽,出现工资发放错误的现象。早期工资管理多采取纸质材料和具有较强的时间限制。基于以上原因,企业工资管理系统使用电脑安全保存、快速计算、全面统计,实现工资管理的系统化、规范化、自动化。企业工资管理系统是典型的信息管理系统(MIS),前台程序开发工具采用微软的VB6,后台数据库采用Access数据库。VB6是一种面向对象的开发工具,具有组件丰富、语言简单、功能强大的优点。 Access数据库具有与VB6无缝连接、操作简单、易于使用的优点。运行结果证明,本企业工资管理系统极大提高了工作效率,节省了人力和物力,最终满足企业财务管理、员工工资发放的需要,同时也成为现代化企业管理的标志关键词:工资管理 信息管理 数据查询 数据库第一章 绪论1.1数据库管理系统数据库管理系统(DBMS)是指数据库系统中管理数据的软件系统。DBMS是数据库系统的核心组成部分。对数据库的一切操作,包括定义、更新及各种控制,都是通过DBMS进行的。DBMS总是基于某种数据模型,可以把DBMS看成是某种数据模型在计算机系统上的具体实现。根据数据模型的不同,DBMS可以分成层次型、网状型、关系型、面向对象型等。MS Access 2000就是一种关系型数据库管理系统。关系模型主要是用二维表格结构表达实体集,用外键表示实体间联系。关系模型是由若干个关系模式组成的集合。关系模式相当于前面提到的记录类型,每个关系实际上是一张二维表格。关系模型和层次、网状模型的最大判别是用关键码而不是用指针导航数据,表格简单用户易懂,编程时并不涉及存储结构,访问技术等细节。SQL语言是关系型数据库的标准化语言,已得到了广泛的应用。1.2 企业工资管理系统企业工资管理是一项琐碎、复杂而又十分细致的工作,一般不允许发生差错。最初的工资统计和发放都是使用人工方式处理,工作量大的时候,出现错误的机率也随之升高,不仅花费财务人员大量的时间,而且往往由于抄写不慎,或者由于计算的疏忽,出现工资发放错误的现象。同时工资的发放具有较强的时间限制,必须严格按照单位规定的时间完成计算和发放工作。正是企业工资管理的这种重复性、规律性、时间性,使得企业工资管理计算机化成为可能。企业工资管理系统就是使用电脑代替大量的人工统计和计算,完成众多企业工资信息的处理,同时使用电脑还可以安全地、完整地保存大量的企业工资记录。1.3 开发工具简介微软公司的Visual Basic 6.0是Windows应用程序开发工具,是目前最为广泛的、易学易用的面向对象的开发工具。Visual Basic提供了大量的控件,这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。因此,本系统使用MS Visual Basic 6.0开发。第二章 企业工资管理系统设计分析2.1 应用需求分析需求分析的过程可以说是一个对具体问题的反复理解和抽象的过程。理解就是对现实问题的理解,要弄清楚究竟需要解决什么问题。抽象就是除去问题的表面,提取问题的本质,建立问题的逻辑模型,以便于以后阶段的系统的设计实现。需求分析阶段是软件产品生存命期中的一个重要阶段,其根本任务是确定用户对软件系统的需求。所谓需求是指用户对软件的功能和性能的要求,就是用户希望软件能什么事情,完成什么样的功能,达到什么性能。通常需求分为两种类型:一种是功能性需求,一种是非功能性需求,这一点也需要有一种清楚的认识。功能性需求是指需要计算机系统解决的问题,也就是对数据的处理要求,这是一类最主要的需求。非功能性需求是指实际使用环境所要求的需求,往往是一些限制要求,例如:性能要求,可靠性要求,安全保密要求,等等。软件需求一般包含三个层次业务需求、用户需求和功能需求,还包括非功能需求。业务需求:反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。用户需求:描述了用户使用产品必须要完成的任务和具备的功能,这在使用实例文档或方案脚本说明中予以说明。功能需求:定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足其业务需求。2.2 系统功能模块划分开发这个系统的目的就是帮助企业的财务主管部门提高工作效率,实现企业工资信息管理的系统化、规范化和自动化。能够和认识管理系统、考勤管理系统相结合,真正实现企业高效、科学、现代化的员工管理。系统最终实现的主要功能如下。企业工资信息设置部分:包括设置员工的基本工资和其他项目的金额,如奖金等。并且负责设置员工工资的计算公式。企业工资信息管理部分:包括统计出勤、计算工资、查询工资和导出工资表。系统部分:包括添加用户和修改密码。2.3系统数据库设计数据库是信息管理系统的后台,存储着所有的信息,在信息管理系统中有着很重要的地位。数据库设计的好与坏,直接影响到这个系统的运行效率。良好的数据库设计,可以提高数据信息的存储效率,确保数据信息的完整性和一致性。针对企业工资信息管理系统的需求,通过对员工工资计算过程的内容分析VB+access企业工资管理系统为本系统设计如下的数据项和数据结构:基本工资信息:包括员工编号和基本工资(元/小时)。其他项目信息:包括员工编号、奖金、津贴、福利、扣发等。计算公式信息:包括加班费的百分比、出差工资、旷工、迟到早退扣发等。出勤统计信息:包括员工编号、姓名、统计日期、出勤天数、迟到早退次数、加班天数、加班天数等。工资统计信息:包括员工编号、姓名、统计日期、基本工资、奖金、津贴、福利,加班费、出差费、扣发、总额等。启动Access 2000,创建新的数据库,命名为Salary.mdb和Person.mdb,保存在要存放这个系统所有工程文件的文件夹中。在使用的时,要把应用程序和这两个数据库保存在同一个文件夹中。员工出勤统计信息表:字 段 类 型 长 度 是否空 说 明id 自动编号 长整型 不能空 记录编号stuffid 文本 50 不能空 员工编号stuffname 文本 50 不能空 员工姓名recordmonth 日期/时间 不能空 统计时间attendance 数字 长整型 不能空 出勤天数lateearly 数字 长整型 不能空 迟到早退次数absent 数字 长整型 不能空 旷工次数overtimecom 数字 长整型 不能空 正常加班次数overtimespe 数字 长整型 不能空 特殊加班次数errand 数字 长整型 不能空 出差次数员工工资计算公式信息表:字 段 类 型 长 度 是否空 说 明overtimecom 数字 长整型 不能空 正常加班工资百分比overtimespe 数字 长整型 不能空 特殊加班工资百分比errand 数字 长整型 不能空 出差工资absent 数字 长整型 不能空 旷工工资le 数字 长整型 不能空 迟到早退字 段 类 型 长 度 是否空 说 明id 自动编号 长整型 不能空 记录编号stuffid 文本 50 不能空 员工编号sposition 文本 50 不能空 员工职务salary 货币 货币 不能空 基本工资员工其他项目设置:字 段 类 型 长 度 是否空 说 明id 自动编号 长整型 不能空 记录编号stuffid 文本 50 不能空 员工编号yearmonth 日期/时间 不能空 年月type 数字 长整型 不能空 类型name 文本 50 能空 类型money 货币 货币 不能空 名称remark 备注 能空 备注员工工资统计信息表:字 段 类 型 长 度 是否空 说 明id 自动编号 长整型 不能空 记录编号stuffid 文本 50 不能空 员工编号stuffname 文本 50 不能空 员工姓名yearmonth 日期/时间 不能空 时间basicsalary 货币 货币 基本工资bonus 货币 货币 奖金welfare 货币 货币 福利allowance 货币 货币 津贴abatement 货币 货币 扣发lesub 货币 货币 迟到早退扣发absentsub 货币 货币 旷工扣发overtime 货币 货币 加班费errand 货币 货币 出差费others 货币 货币 其他金额total 货币 货币 总额员工信息表:字 段 类 型 长 度 是否空 说 明sid 文本 50 能空 员工编号sname 文本 50 能空 员工姓名sgender 文本 50 能空 性别splace 文本 50 能空 籍贯sage 数字 长整型 不能空 年龄sbirthday 日期/时间 不能空 生日sdegree 文本 50 能空 学历sspecial 文本 50 能空 专业saddress 文本 50 能空 住址scode 文本 50 能空 邮编stel 文本 50 能空 电话semail 文本 50 能空 EmailsworkTime 日期/时间 不能空 参加工作时间sintime 日期/时间 不能空 进入公司时间sdept 文本 50 能空 部门spaytime 日期/时间 不能空 起薪时间sposition 文本 50 能空 职务sremark 文本 50 能空 备注用户信息表:字 段 类 型 长 度 是否空 说 明userid 文本 50 不能空 用户名称userpwd 文本 50 不能空 用户密码第三章企业工资管理系统应用程序设计31 “登录模块”详细设计VB+access企业工资管理系统 登录模块的详细设计主要是用户登录的一个界面,判断登录的用户是管理员还是普通用户,进入后将面对的是主界面,从而进行相关的操作。 登录的界面主要由用户名和密码的信息,还有一些标题设置,确定和取消的按钮组成。通过标题可以知道此系统的大概内容,由此,登录界面的设计完成。 32 “主窗体”模块详细设计在这个项目中,选择使用多文档界面。使用这个窗体的好处是可以使程序更加有条理。对于一个多任务的应用程序,使用多文档窗体还可以减少占用的系统资源。主窗体设计的界面是用菜单编辑器做的,主要由系统、工资信息设置、工资信息管理和关于这四个大模块组成。主窗体是进行相关操作的主界面。在这几个里,管理员有所有的权利进行各种操作。 3.3各项子模块详细设计选择“系统”>“添加用户”菜单,在添加用户的窗体里,输入新的用户名称和密码后,单击“确定”按钮,系统将会添加新的用户。 sql = "insert into userinfo (userid,userpwd) values('" & username sql = sql & "','" & password & "')" Call transactsql(sql, "salary") MsgBox "添加成功", vbOKOnly + vbExclamation, "添加结果" username.Text = "" password.Text = "" confirmpwd.Text = "" username.SetFocus 选择“系统”>“修改密码”菜单,在修改密码的窗体里,输入旧密码和2次输入新密码后,单击“确定”按钮,系统将会更改当前用户的密码。userpassword = newpwdsql = "update userinfo set userpwd='" & newpwd & "'where userid='" & strusername & "'"Call transactsql(sql, "salary")MsgBox "密码已经修改", vbOKOnly + vbExclamation, "修改结果" 选择“工资信息设置”>“基本工资设置”菜单设置员工的基本工资,可以根据员工的编号,或者根据员工职务设置基本工资,设置的基本工资为每个小时的工资。Set rs = getrs(sql, "salary")If rs.EOF = False Thensql = "delete from salarysetting where stuffid='" & Mstuffid.Text & "'"Call transactsql(sql, "salary")End Ifrs.Closeid = Mstuffid.TextCall addrecordMsgBox "已经设置基本工资", vbOKOnly + vbExclamation, "添加结果"Call initsql = "select * from salarysetting"Call frmresult.basictopicCall frmresult.showbasic(sql)frmresult.Showfrmresult.ZOrder 0Me.ZOrder 0VB+access企业工资管理系统选择“工资信息设置”>“其他项目设置”菜单,在其他项目设置的窗体中,设置员工当月的奖金、津贴、福利等项目。sql = "select * from salaryother" If ichangeflag = 1 Then Call add MsgBox "已经添加记录", vbOKOnly + vbExclamation, "提示" Call frmresult.othertopic Call frmresult.showother(sql) frmresult.Show Unload Me Else If Me.optionbonus.Value = True Then itype = 1 ElseIf Me.optionallowance.Value = True Then itype = 2 ElseIf Me.optionwelfare.Value = True Then itype = 3 ElseIf Me.optionabatement.Value = True Then itype = 4 ElseIf Me.optionothers.Value = True Then itype = 5 resumdate = recordtime sql = "delete from salaryother where stuffid='" & Mid.Text sql = sql & "' and YearMonth=#" & recordtime & "# and " sql = sql & "Type=" & itype Call transactsql(sql, "Salary") Call add Call frmsumsalary.resumsalary(resumdate) sql = "select * from salaryother" Call frmresult.othertopic Call frmresult.showother(sql) frmresult.Show Unload Me End If 选择“工资信息设置”>“工资计算公式设置”菜单,在这个计算公式窗体中设置员工实际发放工资的计算公式。If Me.textovertimecom = "" And IsNumeric(Me.textovertimecom) = True Then MsgBox "请输入正常加班工资百分比", vbOKOnly + vbExclamation, "提示" Me.textovertimecom = "" Me.textovertimecom.SetFocus ElseIf Me.textovertimespe = "" And IsNumeric(Me.textovertimespe) = False Then MsgBox "请输入特殊加班工资百分比", vbOKOnly + vbExclamation, "提示" Me.textovertimespe = "" Me.textovertimespe.SetFocus ElseIf Me.texterrand = "" And IsNumeric(Me.texterrand) = False Then MsgBox "请输入出差工资", vbOKOnly + vbExclamation, "提示" Me.texterrand = "" Me.texterrand.SetFocus ElseIf Me.textabsent = "" And IsNumeric(Me.textabsent) = False Then MsgBox "请输入旷工扣发工资", vbOKOnly + vbExclamation, "提示" Me.textabsent = "" Me.textabsent.SetFocus ElseIf Me.textle = "" And IsNumeric(Me.textle) = False Then MsgBox "请输入迟到早退扣发工资", vbOKOnly + vbExclamation, "提示" Me.textle = "" Me.textle.SetFocus Else Call setvalue Call init End IfVB+access企业工资管理系统选择“工资信息管理”>“出勤统计”菜单,在统计出勤记录窗体中选择需要统计记录的月份。firstday = Year(Date) & "-" & Mmonth.Text & "-1"days = DateDiff("d", Year(Date) & "-" & Mmonth.Text & "-1", _ Year(Date) & "-" & Mmonth.Text + 1 & "-1")lastday = Year(Date) & "-" & Mmonth.Text & "-" & dayssql = "select * from attendancestatistics where recordmonth between #"sql = sql & firstday & "# and #" & lastday & "#"Set rsrecord = getrs(sql, "salary")If rsrecord.EOF = False Then MsgBox "已经统计", vbOKOnly + vbExclamation, "提示" frmaresult.Show frmaresult.ZOrder 0 rsrecord.Close Unload Me Exit Sub End If sql = "select * from attendanceinfo where adate between #" sql = sql & firstday & "# and #" & lastday & "#" Set rsrecord = getrs(sql, "person") If rsrecord.EOF = False Then sql = "select sid,sname from stuffinfo order by sid" Set rsperson = getrs(sql, "person") 选择月份后单击“确定”按钮,如果系统已经统计过该月份的记录,那么会出现如下图所示的统计结果信息列表。如果系统没有统计过,那么系统就会开始统计记录,然后显示如图所示的统计结果信息列表。If strusername <> "admin" Thensql = "select sid from stuffinfo where sname='" & strusername & "'"Set rs = getrs(sql, "salary")sd = rs(0)sql = "select * from attendancestatistics where stuffid='" & sd & "'"Me.Adodc1.ConnectionString ="provider=microsoft.jet.oledb.4.0;Datasource="& App.Path & "salary.mdb" Me.Adodc1.RecordSource = sqlMe.Adodc1.RefreshSet Me.DataGrid1.DataSource = Me.Adodc1.RecordsetMe.DataGrid1.RefreshElsesql = "select * from attendancestatistics"Me.Adodc1.ConnectionString="provider=microsoft.jet.oledb.4.0;Datasource="& App.Path & "salary.mdb"Me.Adodc1.RecordSource = sqlMe.Adodc1.RefreshSet Me.DataGrid1.DataSource = Me.Adodc1.RecordsetMe.DataGrid1.Refresh End If 选择“工资信息管理”>“计算实发工资”菜单,在这个窗体中选择需要统计的月份。选择统计月份后,单击“开始统计”按钮,系统如果已经统计了该月份的工资,系统会显示工资信息列表窗体。如果系统还没有统计工资,那么系统开始统计工资,然后在信息结果列表窗体中显示统计结果。VB+access企业工资管理系统If Mmonth.Text = 4 Then firstday = Year(Date) & "-" & Mmonth.Text & "-1" days = DateDiff("d", Year(Date) & "-" & Mmonth.Text & "-1", _ Year(Date) & "-" & Mmonth.Text + 1 & "-1") lastday = Year(Date) & "-" & Mmonth.Text & "-" & days Call sumsalary(firstday, lastday) sql = "select * from salarystatistics" frmresult.SSTab1.Caption = "员工工资统计列表" Call frmresult.listtopic Call frmresult.showdata(sql) frmresult.Caption = "统计结果列表" frmresult.ZOrder 0 Unload MeElse MsgBox "这个月的工资未统计", vbOKOnly + vbExclamation, "提示"End If 选择“工资信息管理”>“查询工资”菜单,系统显示如图的查询信息窗体,系统默认的是查询出数据库中所有的记录(当管理员进入的时候),当从“员工编号”下拉列表中选择一个员工编号后,单击“查询单人”按钮,就会查询出符合这个员工编号的记录;如果需要返回查询所有信息,单击“查询所有”按钮,系统就会返回所有员工的信息。在“员工工资统计列表”中单击鼠标右键,会弹出下图的菜单,在“员工其他项目列表”中单击鼠标右键也会出现下图的菜单。 如果要选择“删除基本工资设置”,出现如下的提示: 具体的操作这里就不详细介绍。 选择“工资信息管理”>“导出工资表”菜单,会出现下图的“导出记录”窗体中选择需要导出工资的月份。选择月份和保存位置后,单击“导出”按钮,系统会开始导出数据。 单击“确定”按钮打开导出的文件,单击“取消”按钮回到系统。 导出的工资记录34 各项子模块编写要点在登录的这个窗体里,我做的特点是:只要在数据库里有用户信息的,都可以登录,然后显示相关自己的信息,而管理员显示所有的信息。当输入的用户名或密码不正确的时候,会出现如下的对话框: 或者 在主窗体的设计中,我在系统的下拉菜单里包括有添加用户、修改密码和VB+access企业工资管理系统退出系统。在这个模块里普通用户只有修改自己的密码的权利。在添加用户的窗体里:添加3个标签、3个文本框和2个命令按钮,然后设置它们相关的属性。在修改密码的窗体里:添加了3个标签,用来显示信息;3个文本框用来输入用户名称和用户密码;2个按钮用来确定和取消操作,然后设置它们的属性。在工资信息设置的下拉菜单里包括有基本工资信息设置、其他项目信息设置和计算公式设置。在这个模块里,普通用户没有任何权利进行相关的操作。在基本工资窗体里:添加了2个选项按钮、2个下拉列表、2个标签、1个文本框和2个按钮,然后设置它们的属性。在其他项目设置的窗体里:使用了一个DTPicker控件获得添加记录的时间,要使用这个控件需要添加部件类库,选择“工程>部件”命令,选择Microsoft Windows Common Controls-2 6.0(sp4)项,然后设置相关的属性。在工资信息管理的下拉菜单里包括有统计出勤信息、计算实发工资、查询工资和导出工资表。在这个模块里,普通用户有统计出勤信息和查询工资的权利,但是都显示的是自己的信息。在出勤统计窗体里:添加一个下拉列表、一个标签和2个命令按钮,然后设置相关的属性。在出勤结果信息列表的窗体里:使用了Adodc控件和DataGrid控件,控件的Visible属性一定要设置为False。在计算实发工资窗体里添加的控件和统计出勤记录窗体的控件相同。在工资统计列表窗体里:使用了SSTab控件,在每一个标签上添加一个MSFlexGrid控件,然后设置它们的属性。在导出工资表的窗体中使用了CommondDialog控件,要使用这个控件需要在“控件”窗体中,选择Microsoft Common Dialog Control6.0(sp3)项,同时因为数据表格是导出到Excel,所以需要添加引用。选择“工程>引用”菜单,在“引用”窗体中选择Microsoft Excel 9.0 Object Library项,这样才能够成功导入到Excel。在这个窗体里,我做的特点是:权利分工明确。当管理员进入的时候他有所有的权利,单击哪个模块就会弹出相对应的窗体。而普通用户则不能,我把它进行了权限设置,会弹出权限的对话框。 在添加用户的窗体里,如果输入的用户密码和确认密码不一致,将出现一个警告对话框: 然后输入与用户密码相同的密码,我这里的密码都是以*的形式表达,是不可见的。添加的用户将保存在数据库的userinfo里。单击“取消”按钮就卸载此窗体,添加用户的过程到此完成。在修改密码的窗体里,我要注重讲解一下:当输入的旧密码与登录时的密码不一致将出现提示对话框(如图一),当输入的“确认新密码”和“输入新密码”的密码不一致时也将出现警告对话框(如图二)。我在做这个窗体时遇到了一个问题:就是输入的新密码确认后,当你再一次的进入修改密码窗体输入旧密码时,如果输入的是刚刚修改过的密码,就会出现错误。经过一段时间的思考,我发现原因是修改过的密码没有覆盖登录时的密码,所以会出现问题。我觉得这是一个很大的问题,在别的书上可能没注意到这一点,所以我要注重的讲一下,这是我做这个窗体时的最大体会。 图二在建立基本工资窗体时,这个窗体会在两个地方使用到,一个就是添加,另一个就是修改,在窗体载入时系统应自动判断状态。选择员工编号或选择职务,然后填写工资金额,单击“确定”按钮,系统就会按照选择的方式,设置员工的基本工资。在做基本工资这个窗体时,我的想法是:当你在修改基本工资的信息,首先都要从数据库中调出相关的信息,然后把它删除掉,再从数据库中的员工信息表中调出所要的信息,然后再一次的添加所要设置的信息。当你没输入员工编号的时候,会出现下图的对话框; 当没输入员工的职务时会出现错误的信息。在建立其他项目设置的窗体时,也在两个地方使用,即添加和修改,在载入时也需要判断状态。选择员工编号,再选择需要添加的项目和进额,单击“确定”按钮,即可添加其他项目。在其他项目设置这个窗体里,我用了一个Frame控件和几个optionButton控件,目的在于:在添加其他项目时,只能有一个设置是有效的,而且还可以添加其他的项目,还有备注等等,这些都便于记录。这里还有一个DTPicker控件是用来记录添加其他项目的时间,我觉得这个控件非常好。还有就是每次添加成功后,系统需要初始化,更新一下。在设置完这个窗体后将会弹出查询工资的窗体。在建立工资计算公式的窗体时,输入内容后,单击“确定”按钮,设置计算公式中使用的数字。在计算公式设置的窗体里,单击“恢复默认值”按钮系统将会恢复公式中的默