信息系统数据库课程设计-_职工工资管理系统.doc

上传人:哈尼dd 文档编号:5018217 上传时间:2020-01-28 格式:DOC 页数:28 大小:562.50KB
返回 下载 相关 举报
信息系统数据库课程设计-_职工工资管理系统.doc_第1页
第1页 / 共28页
信息系统数据库课程设计-_职工工资管理系统.doc_第2页
第2页 / 共28页
信息系统数据库课程设计-_职工工资管理系统.doc_第3页
第3页 / 共28页
信息系统数据库课程设计-_职工工资管理系统.doc_第4页
第4页 / 共28页
信息系统数据库课程设计-_职工工资管理系统.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《信息系统数据库课程设计-_职工工资管理系统.doc》由会员分享,可在线阅读,更多相关《信息系统数据库课程设计-_职工工资管理系统.doc(28页珍藏版)》请在三一文库上搜索。

1、信息系统数据库技术I课程设计一、实验目的通过理论与实践教学,使学生掌握关系型数据库的基本操作,理解关系型数据库的有关概念,具备一定的数据库结构设计的能力,并能综合运用所学知识,进行小型数据库应用系统的开发工作。二、实验环境CPU:至少Pentium400以上,建议使用Pentium800以上;内存:至少128M以上,建议使用256M以上;硬盘:至少20G硬盘空间;显示器:14显示器;其它:键盘、鼠标、打印机等。操作系统:Windows 7旗舰版(32位/DirectX11)开发环境:Microsoft Office Access 2007三、实验内容本职工工资管理子系统要完成对职员基本资料的管

2、理,包括对职员、删除等基本管理操作,完成对职员的各种“奖惩”信息的管理,包括“职员奖励管理”和“职员惩罚管理”,并且可以设置每个具体的“奖惩”记录是否“计入工资”,用于在“工资计算及发放”中使用。在工资管理发放中,通过它可以计算出职员的“奖金合计”、“罚款合计”、“应发金额合计”、“应扣金额合计”、“个人所得税”和“实发金额”等工资统计结果。完成对职员“工资发放历史”资料的查询,可以按“职员ID”、“职员姓名”和“月份”来查询。完成对职员“工资发放历史”资料的处理。四、数据库设计1数据模型的设计(E-R)模型 一个部门拥有多个职工,由人事部对职员进行奖惩的评定,由财务部给职工发放工资。奖励惩罚

3、发放工资人事部职工财务部111mmm图4.1:ER图2基本数据表和联系的实现 通过上面的分析,设计出“工资管理系统”流程图,如图:按月份查询按姓名查询按职员ID查询职员资料管理职员奖励管理职员惩罚管理发放职员工资打印工资条退出系统程序是否发放工资图4.2:职工工资管理系统流程图五、系统实现 1.数据表 本系统中总共有职员资料管理、职员奖励、职员惩罚和工资发放查询四张表。表5-1:“职员资料管理”数据表字段字段名称字段类型字段大小允许为空备注部门ID文本10否关键字职员ID文本10否姓名文本10否性别文本10否职务文本4是身份证ID文本18是输入掩码:身份证号码备注文本50是表5-2:“职员奖励

4、”数据表字段字段名称字段类型字段大小允许为空备注奖励ID自动编号否关键字职员ID文本10否部门ID文本10否奖励原因文本30否奖励金额数字单精度型否默认值:0奖励日期日期/时间否默认值:=Date是否计入工资是/否否默认值:=True备注文本50表5-3:“职员惩罚”数据表字段字段名称字段类型字段大小允许为空备注惩罚ID自动编号否关键字职员ID文本10否部门ID文本10否惩罚原因文本30否惩罚金额数字单精度型否默认值:0惩罚日期日期/时间否默认值:=Date是否计入工资是/否否默认值:=True备注文本50表5-4:“工资发放查询”数据表字段字段名称字段类型字段大小允许为空备注发放ID自动编号

5、否关键字部门ID文本10否职员ID文本10否姓名文本10否发放日期日期/时间否输入掩码:短日期月份数字整型是默认值:0基本工资数字单精度型是默认值:0浮动工资数字单精度型是默认值:0房补数字单精度型是默认值:0餐补数字单精度型是默认值:0职务工资数字单精度型是默认值:0工龄工资数字单精度型是默认值:0奖金合计数字单精度型否默认值:0应发金额合计数字单精度型是默认值:0请假扣款数字单精度型是默认值:0考勤扣款数字单精度型是默认值:0罚款合计数字单精度型否默认值:0住房公积金数字单精度型是默认值:0医疗保险数字单精度型是默认值:0养老保险数字单精度型是默认值:0失业保险数字单精度型是默认值:0生育

6、保险数字单精度型是默认值:0应扣金额合计数字单精度型否默认值:0工资合计数字单精度型否默认值:0个人所得税数字单精度型否默认值:0实发金额数字单精度型否默认值:0是否发放是/否否默认值:=Ture备注文本50是 2.“实际工资发放查询”查询表代码SELECT 工资发放查询.职员ID, 工资发放查询.姓名, 工资发放查询.月份, 工资发放查询.奖金合计, 工资发放查询.罚款合计, 工资发放查询.应发金额合计, 工资发放查询.应扣金额合计, 工资发放查询.工资合计, 工资发放查询.个人所得税, 工资发放查询.实发金额, 工资发放查询.是否发放, 工资发放查询.备注FROM 工资发放查询WHERE

7、(工资发放查询.职员ID)=Forms!工资发放查!职员ID) And (工资发放查询.姓名)=Forms!工资发放查询!姓名) And (工资发放查询.月份)=Forms!工资发放查询!月份) Or (Forms!工资发放查!职员ID Is Null) And (Forms!工资发放查询!姓名 Is Null) And (Forms!工资发放查询!月份 Is Null) Or (工资发放查询.职员ID)=Forms!工资发放查!职员ID) Or (工资发放查询.姓名)=Forms!工资发放查询!姓名) Or (工资发放查询.月份)=Forms!工资发放查询!月份) Or (instr(工资发

8、放查询.职员ID,Forms!工资发放查!职员ID)0) Or (Instr(工资发放查询.姓名,Forms!工资发放查询!姓名)0)ORDER BY 工资发放查询.职员ID; 3.数据表关系设计图5-1:数据表关系图 4.窗体设计 (1)职员资料管理窗体图5-2:职员资料管理窗体图 (2)职员奖励管理窗体图5-3:职员奖励管理窗体图 (3)职员惩罚管理窗体图5-4:职员惩罚管理窗体图 (4)工资发放管理窗体图5-5:工资发放管理窗体图(5)工资发放查询窗体图5-6:工资发放查询窗体图 (6)工资发放报表图5-7:工资发放报表图六、程序运行、调试和结果分析1程序运行中出现的问题及调试手段在运行

9、中主要出现两大错误一是拼写错误,比如:将ADODB.RecordCount拼写成ADODB.Recordset;二是未引用Microsoft ActiveX Data Objects 2.1 Library。第一类错误通过系统检查更正,第二类错误由于设计程序使用的是Microsoft Office Access 2007,系统没有默认引用Microsoft ActiveX Data Objects 2.1 Library,在查阅相关书籍后,引用Microsoft ActiveX Data Objects 2.1 Library,问题解决。2程序运行结果分析以职员资料管理修改职员为例:在职员ID

10、和部门ID中输入A001与A,后系统直接在各信息框和子窗体中显示相关信息。图6-1:运行结果分析1 在职务一栏输入“客户总监”,在备注中输入“无”,单击修改职员。可见如图:图6-2:运行结果分析2在职员资料管理数据表中可见如图:图6-3:运行结果分析3 可见,程序运行无误。七、实验总结系统的开发工作到目前已告一段落了,已基本达到了既定的系统开发目标和实现了设计功能。但由于开发时间较短加上本身技术水平的局限,本系统还有许多需要完善和扩展的部分。具体表现在如下几个方面:(1)划分系统登录用户的具体权限在该系统中,并没有设置系统登录用户的权限。可以为每个用户设定具体可操作的功能权限。(2)美化窗体该

11、系统的各个窗体界面设计不是很美观,可以把窗体的界面设计得更加美观、人性化。(3)扩展系统的功能该系统借助其内置的VBA 编程, 可以满足更高级用户的管理需求, 进行更加复杂的操作。附:部分核心代码(1)职员资料管理新建职员代码设计如下:Private Sub 新建职员_Click()On Error GoTo Err_新建职员_Click 把窗体中所有控件都置空 Me!职员ID = Null Me!部门ID = Null Me!姓名 = Null Me!性别 = Null Me!职务 = Null Me!身份证ID = Null Me!备注 = NullExit_新建职员_Click: Exi

12、t SubErr_新建职员_Click: MsgBox Err.Description Resume Exit_新建职员_ClickEnd Sub(2)职员资料管理修改职员代码设计如下:Private Sub 修改职员_Click()On Error GoTo Err_修改职员_Click定义用于循环的整形变量Dim i As Integer定义字符型变量Dim STemp As String定义数据集变量Dim Rs As ADODB.Recordset为定义的数据集变量分配空间Set Rs = New ADODB.Recordset为打开数据表“查询语句”字符变量赋值STemp = Sel

13、ect * From 职员资料管理打开“职员资料管理”数据表Rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic 判断“职员ID”等文本框是否为空 If IsNull(Me!职员ID) = True Then 弹出提示“职员ID”文本框不可以为空信息 MsgBox 请输入“职员ID”,它不可以为空!, vbOKOnly, 输入“职员ID” 把光标至于“职员ID”文本框内 Me!职员ID.SetFocus ElseIf IsNull(Me!部门ID) = True Then MsgBox 请输入“部门ID

14、”,它不可以为空!, vbOKOnly, 输入“部门ID” Me!部门ID.SetFocus ElseIf IsNull(Me!姓名) = True Then MsgBox 请输入“姓名”,它不可以为空!, vbOKOnly, 输入“姓名” Me!姓名.SetFocus ElseIf IsNull(Me!性别) = True Then MsgBox 请输入“性别”,它不可以为空!, vbOKOnly, 输入“性别” Me!性别.SetFocus ElseIf IsNull(Me!职务) = True Then MsgBox 请输入“职务”,它不可以为空!, vbOKOnly, 输入“职务” M

15、e!职务.SetFocus ElseIf IsNull(Me!身份证ID) = True Then MsgBox 请输入“身份证ID”,它不可以为空!, vbOKOnly, 输入“身份证ID” Me!身份证ID.SetFocus ElseIf IsNull(Me!备注) = True Then MsgBox 请输入“备注”,它不可以为空!, vbOKOnly, 输入“备注” Me!备注.SetFocus Else Rs.MoveFirst 把数据集指针指向第一记录 使用For.Next循环在数据集中搜索相同“职员ID”的记录 For i = 1 To Rs.Recordset If Rs(职员

16、ID) = Me!职员ID Then 修改“职员资料”数据表字段值 Rs(部门ID) = Me!部门ID Rs(姓名) = Me!姓名 Rs(性别) = Me!性别 Rs(职务) = Me!职务 Rs(身份证ID) = Me!身份证ID Rs(备注) = Me!备注 使用记录集的Update方法来刷新记录集 Rs.Update 弹出“修改完成”的提示信息 MsgBox 职员档案记录已经修改完成!, vbOKOnly, 修改完成 Exit Sub 退出子过程 Else Rs.MoveNext 把记录指针移到下一条记录 End If Next i End If 刷新“职员资料管理 子窗体”子窗体

17、Me!职员资料管理 子窗体.Requery 释放系统为Rs数据集分配的空间 Set Rs = NothingExit_修改职员_Click: Exit SubErr_修改职员_Click: MsgBox Err.Description Resume Exit_修改职员_ClickEnd Sub(3)职员资料管理 子窗体代码Private Sub Form_Current()On Error GoTo Err_Form_Current 把子窗体中当前记录值赋予主窗体对应的文本框内 Forms!职员资料管理!职员ID = Me!职员ID Forms!职员资料管理!部门ID = Me!部门ID Fo

18、rms!职员资料管理!姓名 = Me!姓名 Forms!职员资料管理!性别 = Me!性别 Forms!职员资料管理!身份证ID = Me!身份证ID Forms!职员资料管理!备注 = Me!备注Exit_Form_Current: Exit SubErr_Form_Current: MsgBox Err.Description Resume Exit_Form_CurrentEnd Sub(4)职员奖励管理新建记录代码Private Sub 新建记录_Click()On Error GoTo Err_新建记录_Click 把窗体中所有控件都置空 Me!奖励ID = Null Me!职员ID

19、 = Null Me!部门ID = Null Me!奖励原因 = Null Me!奖励金额 = Null Me!奖励日期 = Null Me!备注 = NullExit_新建记录_Click: Exit SubErr_新建记录_Click: MsgBox Err.Description Resume Exit_新建记录_ClickEnd Sub(5)职员奖励管理修改记录代码Private Sub 修改记录_Click()On Error GoTo Err_修改记录_Click定义用于循环的整形变量Dim i As Integer定义字符型变量Dim STemp As String定义数据集变量

20、Dim Rs As ADODB.Recordset为定义的数据集变量分配空间Set Rs = New ADODB.Recordset为打开数据表“查询语句”字符变量赋值STemp = Select * From 职员奖励打开“职员资料管理”数据表Rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic 判断“职员ID”等文本框是否为空 If IsNull(Me!奖励ID) = True Then 弹出提示“职员ID”文本框不可以为空信息 MsgBox 请输入“奖励ID”,它不可以为空!, vbOKOnly,

21、 输入“奖励ID” 把光标至于“职员ID”文本框内 Me!奖励ID.SetFocus ElseIf IsNull(Me!职员ID) = True Then MsgBox 请输入“职员ID”,它不可以为空!, vbOKOnly, 输入“职员ID” Me!职员ID.SetFocus ElseIf IsNull(Me!部门ID) = True Then MsgBox 请输入“部门ID”,它不可以为空!, vbOKOnly, 输入“部门ID” Me!部门ID.SetFocus ElseIf IsNull(Me!奖励原因) = True Then MsgBox 请输入“奖励原因”,它不可以为空!, vb

22、OKOnly, 输入“奖励原因” Me!奖励原因.SetFocus ElseIf IsNull(Me!奖励金额) = True Then MsgBox 请输入“奖励金额”,它不可以为空!, vbOKOnly, 输入“奖励金额” Me!奖励金额.SetFocus ElseIf IsNull(Me!奖励日期) = True Then MsgBox 请输入“奖励日期”,它不可以为空!, vbOKOnly, 输入“奖励日期” Me!奖励日期.SetFocus ElseIf IsNull(Me!备注) = True Then MsgBox 请输入“备注”,它不可以为空!, vbOKOnly, 输入“备注

23、” Me!备注.SetFocus Else Rs.MoveFirst 把数据集指针指向第一记录 使用For.Next循环在数据集中搜索相同“职员ID”的记录 For i = 1 To Rs.Recordset If Rs(奖励ID) = Me!奖励ID Then 修改“职员资料”数据表字段值 Rs(职员ID) = Me!职员ID Rs(部门ID) = Me!部门ID Rs(奖励原因) = Me!奖励原因 Rs(奖励金额) = Me!奖励金额 Rs(奖励日期) = Me!奖励日期 Rs(备注) = Me!备注 使用记录集的Update方法来刷新记录集 Rs.Update 弹出“修改完成”的提示信

24、息 MsgBox 职员奖励档案记录已经修改完成!, vbOKOnly, 修改完成 Exit Sub 退出子过程 Else Rs.MoveNext 把记录指针移到下一条记录 End If Next i End If 释放系统为Rs数据集分配的空间 Set Rs = NothingExit_修改记录_Click: Exit SubErr_修改记录_Click: MsgBox Err.Description Resume Exit_修改记录_ClickEnd Sub(6)职员惩罚管理新建记录代码Private Sub 新建记录_Click()On Error GoTo Err_新建记录_Click

25、把窗体中所有控件都置空 Me!惩罚ID = Null Me!职员ID = Null Me!部门ID = Null Me!惩罚原因 = Null Me!惩罚金额 = Null Me!惩罚日期 = Null Me!备注 = Null Exit_新建记录_Click: Exit Sub Err_新建记录_Click: MsgBox Err.Description Resume Exit_新建记录_Click End Sub(7)职员惩罚管理修改记录代码Private Sub 修改记录_Click()On Error GoTo Err_修改记录_Click定义用于循环的整形变量Dim i As Int

26、eger定义字符型变量Dim STemp As String定义数据集变量Dim Rs As ADODB.Recordset为定义的数据集变量分配空间Set Rs = New ADODB.Recordset为打开数据表“查询语句”字符变量赋值STemp = Select * From 职员奖励打开“职员资料管理”数据表Rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic 判断“职员ID”等文本框是否为空 If IsNull(Me!惩罚ID) = True Then 弹出提示“职员ID”文本框不可以为空信

27、息 MsgBox 请输入“惩罚ID”,它不可以为空!, vbOKOnly, 输入“惩罚ID” 把光标至于“职员ID”文本框内 Me!惩罚ID.SetFocus ElseIf IsNull(Me!职员ID) = True Then MsgBox 请输入“职员ID”,它不可以为空!, vbOKOnly, 输入“职员ID” Me!职员ID.SetFocus ElseIf IsNull(Me!部门ID) = True Then MsgBox 请输入“部门ID”,它不可以为空!, vbOKOnly, 输入“部门ID” Me!部门ID.SetFocus ElseIf IsNull(Me!惩罚原因) = T

28、rue Then MsgBox 请输入“惩罚原因”,它不可以为空!, vbOKOnly, 输入“惩罚原因” Me!惩罚原因.SetFocus ElseIf IsNull(Me!惩罚金额) = True Then MsgBox 请输入“惩罚金额”,它不可以为空!, vbOKOnly, 输入“惩罚金额” Me!惩罚金额.SetFocus ElseIf IsNull(Me!惩罚日期) = True Then MsgBox 请输入“惩罚日期”,它不可以为空!, vbOKOnly, 输入“惩罚日期” Me!惩罚日期.SetFocus ElseIf IsNull(Me!备注) = True Then Ms

29、gBox 请输入“备注”,它不可以为空!, vbOKOnly, 输入“备注” Me!备注.SetFocus Else Rs.MoveFirst 把数据集指针指向第一记录 使用For.Next循环在数据集中搜索相同“职员ID”的记录 For i = 1 To Rs.Recordset If Rs(惩罚ID) = Me!惩罚ID Then 修改“职员资料”数据表字段值 Rs(职员ID) = Me!职员ID Rs(部门ID) = Me!部门ID Rs(惩罚原因) = Me!惩罚原因 Rs(惩罚金额) = Me!惩罚金额 Rs(惩罚日期) = Me!惩罚日期 Rs(备注) = Me!备注 使用记录集的

30、Update方法来刷新记录集 Rs.Update 弹出“修改完成”的提示信息 MsgBox 职员惩罚档案记录已经修改完成!, vbOKOnly, 修改完成 Exit Sub 退出子过程 Else Rs.MoveNext 把记录指针移到下一条记录 End If Next i End If 释放系统为Rs数据集分配的空间 Set Rs = NothingExit_修改记录_Click: Exit SubErr_修改记录_Click: MsgBox Err.Description Resume Exit_修改记录_ClickEnd Sub(8)工资发放管理管理新建记录代码设计Private Sub

31、新建记录_Click()On Error GoTo Err_新建记录_Click 把窗体中所有控件都置空 Me!职员ID = Null Me!部门ID = Null Me!姓名 = Null Me!基本工资 = 0 Me!浮动工资 = 0 Me!房补 = 0 Me!职务工资 = 0 Me!工龄工资 = 0 Me!餐补 = 0 Me!请假扣款 = 0 Me!考勤扣款 = 0 Me!医疗保险 = 0 Me!养老保险 = 0 Me!失业保险 = 0 Me!生育保险 = 0 Me!住房公积金 = 0 Me!奖金合计 = 0 Me!应发金额合计 = 0 Me!工资合计 = 0 Me!罚款合计 = 0 M

32、e!应扣金额合计 = 0 Me!个人所得税 = 0 Me!实发金额 = 0 Me!是否发放.Value = False Me!备注 = NullExit_新建记录_Click: Exit SubErr_新建记录_Click: MsgBox Err.Description Resume Exit_新建记录_ClickEnd Sub(9)工资发放管理计算工资代买设计Private Sub 计算工资_Click()On Error GoTo Err_计算工资_ClickDim ss As Single定义字符型变量Dim STemp As String定义也能够与循环的整型变量Dim i As In

33、teger定义数据集变量Dim Rs As ADODB.Recordset为定义的数据集变量分配空间Set Rs = New ADODB.Recordset 判断“职员ID”等文本框是否为空 If IsNull(Me!职员ID) = True Then 弹出提示“职员ID”文本框不可以为空 MsgBox 请输入“职员ID”,它不可以为空!, vbOKOnly, 输入“职员ID” 把光标置于“职员ID”文本框内 Me!职员ID.SetFocus ElseIf IsNull(Me!月份) = True Then MsgBox 请输入“月份”,它不可以为为空!, vbOKOnly, 输入“月份” M

34、e!月份.SetFocus Else-计算“资金合计” 为打开数据表“查询语句”字符变量赋值 STemp = Select * From 职员奖励 打开“职员奖励”数据表 Rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic 把记录集的指针指到第一条 Rs.MoveFirst 使用For.Next循环语句在Rs数据集中循环判断 For i = 1 To Rs.RecordCount 判断记录集中的“职员ID”和“是否计入工资”字段 If Rs(职员ID) = Me!职员ID And Rs(是否计入工资)

35、.Value = True Then If Year(Rs(奖励日期) = Year(Now() And Month(Rs(奖励日期) = Me!月份 Then Me!奖金合计 = Me!奖金合计 + Rs(奖励金额) End If 把记录集指针移到下一条记录 Rs.MoveNext Else 把记录集指针移到下一条记录 Rs.MoveNext End If Next i Rs.Close 关闭当前记录及-计算“罚金合计” 为打开数据表“查询语句”字符变量赋值 STemp = Select * From 职员惩罚 打开“职员惩罚”数据表 Rs.Open STemp, CurrentProjec

36、t.Connection, adOpenKeyset, adLockOptimistic 把记录集的指针指到第一条 Rs.MoveFirst 使用For.Next循环语句在Rs数据集中循环判断 For i = 1 To Rs.RecordCount 判断记录集中的“职员ID”和“是否计入工资”字段 If Rs(职员ID) = Me!职员ID And Rs(是否计入工资).Value = True Then If Year(Rs(惩罚日期) = Year(Now() And Month(Rs(惩罚日期) = Me!月份 Then Me!罚款合计 = Me!罚款合计 + Rs(罚款金额) End

37、If 把记录集指针移到下一条记录 Rs.MoveNext Else 把记录集指针移到下一条记录 Rs.MoveNext End If Next i Rs.Close 关闭当前记录集-计算“实发金额” 计算“应发金额合计” Me!应发金额合计 = Me!奖金合计 + Me!基本工资 + Me!浮动工资 + Me!房补 + Me!职务工资 + Me!工龄工资 + Me!餐补 计算“应扣金额合计” Me!应扣金额合计 = Me!罚款合计 + Me!请假扣款 + Me!考勤扣款 + Me!医疗保险 + Me!养老保险 + Me!失业保险 + Me!生育保险 + Me!住房公积金 计算“工资合计” Me!工资合计 = Me!应发金额合计 - Me!应扣金额合计 计算“个人所得税” Me!个人所得税 = IncomeTax(CSng(Me!工资合计) 计算“实发金额” Me!实发金额 = Me!工资合计 - Me!个人所得税 弹出提示“计算完成”信息 MsgBox 各项工资合计已经计算完成!, vbOKOnly, 计算完成 End If 释放系统为Rs数据集分配的空间 Set Rs = NothingExit_计算工资_Click: Exit SubErr_计算工资_Click: MsgBox Err.Descri

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1