选择“工资信息设置”—>“基本工资设置”菜单设置员工的基本工资,可以根据员工的编号,或者根据员工职务设置基本工资,设置的基本工资为每个小时的工资。
Set rs = getrs(sql, "salary")
If rs.EOF = False Then
sql = "delete from salarysetting where stuffid='" & Me.comstuffid.Text & "'"
Call transactsql(sql, "salary")
End If
rs.Close
id = Me.comstuffid.Text
Call addrecord
MsgBox "已经设置基本工资", vbOKOnly + vbExclamation, "添加结果"
Call init
sql = "select * from salarysetting"
Call frmresult.basictopic
Call frmresult.showbasic(sql)
frmresult.Show
frmresult.ZOrder 0
Me.ZOrder 0 选择“工资信息设置”—>“其他项目设置”菜单,在其他项目设置的窗体中,设置员工当月的奖金、津贴、福利等项目。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='" & Me.comid.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 If
选择“工资信息管理”—>“出勤统计”菜单,在统计出勤记录窗体中选择需要统计记录的月份。firstday = Year(Date) & "-" & Me.commonth.Text & "-1"days = DateDiff("d", Year(Date) & "-" & Me.commonth.Text & "-1", _ Year(Date) & "-" & Me.commonth.Text + 1 & "-1")lastday = Year(Date) & "-" & Me.commonth.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.Refresh_PBSet Me.DataGrid1.DataSource = Me.Adodc1.RecordsetMe.DataGrid1.Refresh_PBElsesql = "select * from attendancestatistics"Me.Adodc1.ConnectionString="provider=microsoft.jet.oledb.4.0;Datasource="& App.Path & "salary.mdb"Me.Adodc1.RecordSource = sqlMe.Adodc1.Refresh_PBSet Me.DataGrid1.DataSource = Me.Adodc1.RecordsetMe.DataGrid1.Refresh_PB End If
选择“工资信息管理”—>“计算实发工资”菜单,在这个窗体中选择需要统计的月份。选择统计月份后,单击“开始统计”按钮,系统如果已经统计了该月份的工资,系统会显示工资信息列表窗体。如果系统还没有统计工资,那么系统开始统计工资,然后在信息结果列表窗体中显示统计结果。If Me.commonth.Text = 4 Then firstday = Year(Date) & "-" & Me.commonth.Text & "-1" days = DateDiff("d", Year(Date) & "-" & Me.commonth.Text & "-1", _ Year(Date) & "-" & Me.commonth.Text + 1 & "-1") lastday = Year(Date) & "-" & Me.commonth.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选择“工资信息管理”—>“查询工资”菜单,系统显示如图的查询信息窗体,系统默认的是查询出数据库中所有的记录(当管理员进入的时候),当从“员工编号”下拉列表中选择一个员工编号后,单击“查询单人”按钮,就会查询出符合这个员工编号的记录;如果需要返回查询所有信息,单击“查询所有”按钮,系统就会返回所有员工的信息。在“员工工资统计列表”中单击鼠标右键,会弹出下图的菜单,在“员工其他项目列表”中单击鼠标右键也会出现下图的菜单。如果要选择“删除基本工资设置”,出现如下的提示:具体的操作这里就不详细介绍。选择“工资信息管理”—>“导出工资表”菜单,会出现下图的“导出记录”窗体中选择需要导出工资的月份。选择月份和保存位置后,单击“导出”按钮,系统会开始导出数据。单击“确定”按钮打开导出的文件,单击“取消”按钮回到系统。 导出的工资记录3.4 各项子模块编写要点在登录的这个窗体里,我做的特点是:只要在数据库里有用户信息的,都可以登录,然后显示相关自己的信息,而管理员显示所有的信息。当输入的用户名或密码不正确的时候,会出现如下的对话框:
或者在主窗体的设计中,我在系统的下拉菜单里包括有添加用户、修改密码和退出系统。在这个模块里普通用户只有修改自己的密码的权利。在添加用户的窗体里:添加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控件是用来记录添加其他项目的时间,我觉得这个控件非常好。还有就是每次添加成功后,系统需要初始化,更新一下。在设置完这个窗体后将会弹出查询工资的窗体。在建立工资计算公式的窗体时,输入内容后,单击“确定”按钮,设置计算公式中使用的数字。在计算公式设置的窗体里,单击“恢复默认值”按钮系统将会恢复公式中的默认值。这里的恢复默认值功能采用的方法比较简单,就是在一个函数中设置了固定的默认值。如果需要使用可变的默认值,可以在数据库中设置一项默认值字段,这样可以方便的更改默认值。当输入的格式与设定的格式不一致的时候,会弹出相关的对话框。建立出勤统计窗体,选择月份后,单击“确定”按钮,开始统计出勤记录。在统计出勤信息的窗体里,这要和出勤记录的数据库相连,如果输入的月份没有统计将如下的对话框:
如果输入的月份有统计记录则弹出如下的对话框:
然后弹出出勤结果的窗体,显示数据库中统计信息相关的记录。
管理员能看到的界面
这是用户登录所显示的用户信息建立计算实发工资的窗体,这个窗体的建立和统计出勤记录的窗体比较相似,选择月份后,单击“开始统计”按钮,即可统计员工工资。在计算实发工资的窗体里,如果输入的月份的工资没统计会弹出如下的对话框:否则会出现如下的对话框:
单击“确定”后,就会出现工资信息列表,这时你将看见所有关于你想要的信息。建立工资查询的窗体,在选择员工编号后,单击“查询单人”按钮,返回选择员工的相关信息。单击“查询全部”按钮,系统返回全部员工的信息。在建立工资查询(即工资统计结果列表)的窗体时,我觉得这是一个最难的窗体。不仅是因为它的设置,还有就是它的代码和数据库相连的操作。在这个窗体中使用了SSTab控件,在每一个标签上添加一个MSFlexGrid控件。当你是管理员登录的时候,他的权限是所有,当你是用户登录的时候,窗体只显示登录用户本人的相关信息。他没有任何权限,只能看到自己的信息,这是我做这个窗体的特色。 窗体的部分代码为:If strusername = "admin" Then ’管理员的权限 sql = "select stuffid from salarysetting" Set rs = getrs(sql, "salary") If rs.EOF = False Then While Not rs.EOF Me.comid.AddItem rs(0) rs.MoveNext Wend rs.Close End If Me.comid.ListIndex = 0 Select Case Me.SSTab1.Tab Case 0 sql = "select * from salarysetting" Call basictopic Call showbasic(sql) Case 1 sql = "select * from salaryother" Call othertopic Call showother(sql) Case 2 sql = "select * from salarystatistics order by id desc" Call listtopic Call showdata(sql) End Select Else ’ 用户的权限 sql = "select sid from stuffinfo where sname='" & strusername & "'" Set rs = getrs(sql, "salary") While Not rs.EOF Me.comid.AddItem rs(0) rs.MoveNext Wend rs.MoveFirst sd = rs(0) rs.Close Me.comid.ListIndex = 0 Select Case Me.SSTab1.Tab Case 0 sql = "select * from salarysetting where stuffid='" & sd & "'" Call basictopic Call showbasic(sql) Case 1 sql = "select * from salaryother where stuffid='" & sd & "'" Call othertopic Call showother(sql) Case 2 sql = "select * from salarystatistics where stuffid='" & sd & "'" Call listtopic Call showdata(sql) End Select End IfEnd Sub
这是用户登录所显示的用户信息建立导出工资表窗体的时候,这是工资管理的最重要的一步。这个窗体中使用了CommondDialog控件,通过设置Flags属性,使CommondDialog控件的对话框中显示一个帮助按钮,但是,程序员必须在这个位置提供相关的帮助主题。对于所有的公共对话框,当CancelError属性为true,而且用户单击了对话框的“取消”按钮时将生成一个错误。可以在显示对话框的同时捕获此错误以检验是否按下了“取消”按钮。这个控件可以显示“打开”和“另存为”对话框,可以在打开对话框之前用Filter属性指定在“文件类型”列表框中显示的文件过滤器列表。这个窗体还引用了Microsoft Excel 9.0 Object Library,目的是为了把建立的工资表导入到Excel表格中。这个窗体的制作是非常复杂的,尤其是从VB导入到表格中。建立导出工资表的窗体,当单击“保存为”文本框右边的按钮,会提示用户选择保存路径,然后单击“导出”,会导到你所要保存的文件夹里。这样就可以在你保存的路径里看到导出的Excel表格了。第四章 结 束 语 企业工资管理系统是一个典型的信息管理系统,其主要通过软件工程方面的选择课题、需求分析、总体设计、选用工具、程序模块、系统测试等几个步骤来实现。开发本系统的过程中,首先要对企业工资管理进行系统调研,熟悉企业财务、人事、工资发放管理的流程、步骤;其次在系统需求分析过程中,要透过现象看本质,敏锐观察到企业工资管理中存在的各种问题,并在总体设计把握好对问题的分析、理解,进而解决问题;选用开发工具要选用自己最熟悉、应用较多的开发工具,本系统开发选用MS Visual Basic 6.0,其具有语言简单、功能强大、组件众多的优点。程序模块的编制中,重点把握系统内部完整性、功能性、实用性、便捷性,使其能够协调统一、运行无误。运行结果证明,本企业工资管理系统极大提高了工作效率,节省了人力和物力,最终满足企业财务管理、员工工资发放的需要,同时也成为现代化企业管理的标志
参考文献:[1] Visual Basic 6.0 程序设计教程(高等教育出版社) 龚沛曾 陆慰民 杨志强 编著
[2] MSDN - Microstft Developers'NetWork Microstft 1998Microstft 编著[3]Visual Basic 企业办公系统开发实例导航(人民邮电出版社) 刘萌 周学明 郭安源 编著[4]Visual Basic 程序设计教程(北方交通大学出版社) 李振亭 编著 [5]Visual Basic 用户编程手册(人民邮电出版社) 林永 张乐强 编著[6]数据库系统概论(高等教育出版社) 萨师煊 王珊 编著[7]现代软件工程(北京希望电子出版社) 孙涌 编著[8]Visual Basic数据库系统开发实例导航(人民邮电出版社)[9]VB控件应用编程实例教程(北京希望电子出版社) 张学忠 王福成 编著[10]Office 2000中文版(清华大学出版社) 东方人华 编著[11]VB数据库程序设计高手(科学出版社) 温贤发 编著[12]软件需求(电子工业出版社) Soren Lauesen 编著 刘晓晖 译[13]VB6.0中文版教程(电子工作出版社) 新智工作室 12.VB编程技巧280例(上海科学普及出版社) 源江科技 13.数据库设计与编程实例详解——使用Access、SQL与VB [英] John Carter 著 张淮野 袁怡 译14.VB6.0程序设计教程(青岛出版社)