




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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
38、!工资合计 = me!应发金额合计 - me!应扣金额合计 计算“个人所得税” me!个人所得税 = incometax(csng(me!工资合计) 计算“实发金额” me!实发金额 = me!工资合计 - me!个人所得税 弹出提示“计算完成”信息 msgbox 各项工资合计已经计算完成!, vbokonly, 计算完成 end if 释放系统为rs数据集分配的空间 set rs = nothingexit_计算工资_click: exit suberr_计算工资_click: msgbox err.description resume exit_计算工资_clickend sub(10)工
39、资发放管理职员id失去焦点事件代码设计private sub 职员id_lostfocus()on error goto err_职员id_lostfocus定义字符型变量dim stemp as string定义用于循环的整型变量dim i as integer定义数据集变量dim rs as adodb.recordset为定义的数据集变量分配空间set rs = new adodb.recordset为打开数据表“查询语句”字符变量赋值stemp = select * from 职员资料管理打开“职员资料”数据表rs.open stemp, currentproject.connection, adopenkeyset, adlockoptimistic 把记录集的指针指到第一条 rs.movefirst 使用for.next循环语句在rs数据集中循环判断 for i = 1 to rs.recordcount 判断记录集中的“职员id”字段值是否与窗体中“职员id”文本框内的值对应 if rs(职员id) =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025草坪修剪项目政府采购与生态修复合同
- 2025叉车租赁合同协议-仓储物流设施升级改造
- 2025版商场档口租赁合同(含品牌形象维护责任)
- 2025年泰州二手房买卖合同+智能家居设备安装服务合同
- 2025版智能通风排烟系统安装与能源审计合同样本
- 2025年度智能安防系统采购意向协议书
- 2025年大学兼职教师合作开发与成果转化协议
- 2025版核能设备监造与核安全防护合同
- 2025版农业合作社股权变更与乡村振兴战略实施协议
- 2025版房地产开发企业委托反担保合同范本
- 行为金融学案例
- 万科集团财务管理制度手册207
- “李可中医药学术流派论治厥阴病”-课件
- 通用技术作品设计报告
- 城市规划原理课件(完整版)
- 锚杆支护技术规范正式版本
- 隐形眼镜经营管理制度
- 下一代互联网技术
- 皮肤知识与问题性皮肤分析(入行必看)
- 单位消防安全评估报告(模板)
- 电子加速器辐照项目可行性研究报告写作范文
评论
0/150
提交评论