数据库系统与应用课程设计论文职工工资管理系统.doc
数据库系统与应用课程设计论文职工工资管理系统学生姓名: 学生学号: 200810801042 院(系): 计算机系 年级专业: 2008级计算机科学与技术专业 指导教师: 二一年十二月攀枝花学院本科学生课程设计任务书题目职工工资管理系统(2人)1、课程设计的目的使学生掌握数据库的基本概念,结合实际的操作和设计,巩固课堂教学内容;使学生掌握数据库系统的基本概念、原理和技术,将理论与实际相结合,应用现有的数据建模工具和数据库管理系统软件,规范、科学地完成一个小型数据库的设计与实现;把理论课与实验课所学内容做一综合,并在此基础上强化学生的实践意识、提高其实际动手能力。2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)某单位员工分为管理员、财务员、技术员和销售员等。该单位下设经理室、财务科、技术科和销售科4个科室。工资由基本工资、福利补贴和奖励工资构成,失业保险和住房公积金在工资中扣除。每个员工的基本资料有姓名、性别、年龄、单位和职业(如经理、工程师等)。工资按月发放,1)职工的基本信息管理:录入、修改与删除职工信息。2)职工的基本工资管理:录入、修改与删除职工工资信息3)职工的工资计算:计算每个人的实际发放工资。实际发放的工资金额为工资减去扣除。4)工资的查询:按职工所在的部门、职工名及职工编号等条件查询每个职工的工资5)工资的统计:按科室、职业分类统计人数和工资金额。3、主要参考文献1张莉 SQL SEVER数据库原理及应用 2萨师煊 王珊著.数据库系统概论第三版.高等教育出版社3 施伯乐 丁宝康 汪卫.数据库系统教程 高等教育出版社2003年第2版4庄成三等.数据库系统原理及其应用.电子工业出版社4、课程设计工作进度计划第1天 :选题、完成需求分析第2天 :数据库概念结构设计第3天:数据库逻辑结构设计及物理实现第4天:应用程序开发第5天: 程序调试分析和结果、编写课程设计报告指导教师(签字)日期年 月 日教研室意见: 年 月 日学生(签字): 接受任务时间: 年 月 日注:任务书由指导教师填写。课程设计(论文)指导教师成绩评定表题目名称职工工资管理系统评分项目分值得分评价内涵工作表现20%01学习态度6遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。02科学实践、调研7通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。03课题工作量7按期圆满完成规定的任务,工作量饱满。能力水平35%04综合运用知识的能力10能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。05应用文献的能力5能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。06设计(实验)能力,方案的设计能力5能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。07计算及计算机应用能力5具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。08对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)10具有较强的数据收集、分析、处理、综合的能力。成果质量45%09插图(或图纸)质量、篇幅、设计(论文)规范化程度5符合本专业相关规范或规定要求;规范化符合本文件第五条要求。10设计说明书(论文)质量30综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。11创新10对前人工作有改进或突破,或有独特见解。成绩指导教师评语指导教师签名: 年月日摘 要随着网络应用技术的飞速发展,基于网络的应用系统给人们带来了诸多便利建立高校工资管理系统是为了适应现代化校园管理的需要,方便管理职工工资情况和职工个人信息;同时也方便职工可以上网查询自己的工资信息,还有利于提高办公效率,改善办公质量,规范高校职工工资的常规管理工作高校工资管理系统的开发是基于B/S结构,采用VC编程技术及SQL Server 2000数据库进行开发本文首先对网站开发环境和运行平台数据库VC编程技术做了简要的介绍,并对工资管理系统的设计进行了详细的需求分析;然后给出了高校工资管理系统的设计方案及系统的具体实现,实现了高校工资管理系统的构建,主要包括系统工资管理模块职工信息查询模块和系统信息管理及维护模块;最后,通过测试与分析,说明该系统运行稳定可靠,具有一定的实用价值关键词 工资管理系统,信息查询,信息管理,信息维护,网络数据库目 录摘要 41 需求分析 7 1.1需求背景7 1.2系统需求7 1.3子系统需求72概要设计 92.1系统流程图 92.2本系统的各功能模块 102.3 数据库设计102.3.1实体联系(E-R)图112.3.2 管理员登录表112.3员工登录表112.3.4 登录用户信息表112.3.5 工资情况表112.3.6 工资设置表112.3.7 部门信息表122.3.8 职称信息表122.3.9 其它工资来源信息表122.3.10其它工资信息表132.3.11 加班时间表132.3.12职工出勤记录表132.3.13 计数器表133.详细设计 143.1系统管理模块143.2 职工信息管理模块 153.3 工资管理模块 164.调试分析 214.1 问题与解决办法215.用户使用说明 235.1管理员和职工登录 235.2登录系统后的界面23 6.测试结果256.1界面设置256.2 数据库结果257.总结 26参考文献 27职工工资管理系统1 需求分析1.1 需求背景职工工资管理是任何企事业单位都面临的问题,由于各个公司的工资处理方式总是有所区别,因此目前还没有一个通用的工资管理系统,只能针对公司情况去开发适合本公司需求的工资管理系统。早期的工资管理是人工化的,工作量大时,出现错误的机率也会随之升高,这会导致会计人员花费更多的时间去改正错误,延误工资发放的时间,或出现工资发放错误的现象。而企业工资管理系统就是使用电脑代替大量的人工统计和计算,完成企业工资信息的处理,而且还可以用电脑安全完整地保存企业工资记录。1.2 系统需求本系统模拟了公司组织的整体信息,包括员工信息和员工工资信息。通过对系统特点进行调查和分析,得到本系统的主要实现功能如下:(1) 企业职工人员管理模块:实现对企业人员的查询、增加、修改、删除等操作。(2) 部门管理模块:对企业的部门进行查询、增加、修改、删除等操作。(3) 工资管理模块:对工资发放情况进行查询和统计。本系统使用Visual C+编程语言,采用Access作为数据库,主要使用Visual C+中的Ado Data控件来对数据库进行各种操作。使用Ado Data控件操作简单,可以使用最少的代码创建数据库应用程序。而对数据库的操作,既可以使用Ado Data控件直接进行,也可以使用Ado Data控件结合代码操纵。本系统实现了一般工资管理系统对员工工资信息的浏览、添加、删除、修改和查询功能,能够完成对员工当月工资的结算,节省了大量的人工操作的工作量,自动完成众多的信息处理,减少了数据出现错误的几率,加强了工资记录的安全性和完整性。1.3 子系统需求系统中的工资管理模块是我做的重点,了解到工资的不同种类,需要设定不同的参数去记录工资的情况。其中基本工资可以由工作小时计算得出确定,也可直接人工设定。此外,还包含其它工资来源:如福利来源,奖金来源,津贴来源,当然了,还有扣罚。员工职务工资的设定,是工资管理系统的基础,可以实现工资的基本管理。这样可以减少出错,提高效率。 其他工资的设置,是对员工基本工资的补充。系统还应该提供强大的数据统计、查询功能。系统应有比较好的可操作性、稳定性和可扩展性。2 概要设计2.1 系统流程图 工资管理系统数据流程图 S1管理员P1P3S2员工编制工资表P2S1管理员工资表D2月度工资条D4职工信息表D1工资设置表P4输入职工信息F1员工基本信息1计算工资F 2实发工资2.2 本系统的各功能模块系统管理模块、工资管理模块、职工信息管理模块和帮助模块组成。工资管理系统系统管理模块工资管理模块职工信息管理帮助模块工资管理系统模块图系统管理模块: 这一模块主要完成一些用户管理和员工信息的管理以及系统的退出和重新登录。系统管理模块用户管理员工信息管理重新登录退出用户管理注册用户注销用户密码修改系统管理模块结构图工资管理模块: 这一模块主要实现个人工资管理、工资批量设置和工资计算公式的功能。工资管理个人工资管理工资批量设置工资计算公式工资管理模块结构图2.4 数据库设计base_payprizesalaryBOUNDSYEARMOOedu_level2.4.1 实体联系(E-R)图sexDepartment员工信息员工工资信息empIDheadshipname管理员系统用户用户名密码权限管理JobaddrNAMEID 2.4.2管理员登录表2.4.3员工登录2.4.4 登录用户信息表2.4.5 工资情况表2.4.6 工资设置表(管理员权限)2.4.7部门信息表2.4.8 职称信息表2.4.9 其它工资来源信息表2.4.10 其它工资信息表2.4.11 加班时间表2.4.12 职工出勤记录表2.4.13 计数器表3 详细设计3.1 系统管理模块(代码实现及界面)void CLoginDlg:OnOK() /响应按钮连接数据库CString str,strPasswd;_RecordsetPtr pRS; / Recordset对象UpdateData();/ 更新数据/ 打开数据库if(pTheConn->GetState()=adStateClosed)pTheConn->Open(m_strDSN.AllocSysString(),"","",-1);pRS.CreateInstance(_uuidof(Recordset); / 创建Recordset对象实例strPasswd=CCrypt:Encrypt(m_strPasswd,123); / 密码加密/ 设置过滤条件str="ID='" + m_strUser+ "' and PASSWD='" + strPasswd+ "' and AUTHORITY='5'"trypRS->Filter=str.AllocSysString();pRS->Open("PERSON",pTheConn.GetInterfacePtr(),adOpenStatic,adLockReadOnly,adCmdTable);catch(_com_error *e)CString Error = e->ErrorMessage();AfxMessageBox(e->ErrorMessage();catch(.)AfxMessageBox("打开数据集对象出错!");int a=pRS->RecordCount;if(pRS->RecordCount=1) / 判断认证是否通过EndDialog(IDOK); / 关闭对话框elseMessageBox("请确认用户名和密码,注意大小写!", "认证失败");void CSalaryDlg:OnSystemConnect() / 显示用户登录窗口CLoginDlg LoginDlg;if(LoginDlg.DoModal()=IDOK) / 认证通过m_wndStatusBar.SetPaneText(1, "已连接到数据库: " + LoginDlg.m_strDSN);void CSalaryDlg:OnSystemDisconnect() / 断开连接/ 关闭Connetion对象if(pTheConn->GetState()=adStateOpen)pTheConn->Close();m_wndStatusBar.SetPaneText(1, "尚未登录数据库,请按F2登录");界面:3.2 职工信息管理模块void CSalaryDlg:OnBtnAddList() /增加职工信息函数UpdateData(); / 更新数据_variant_t Value;CString strPersonID;/ 判断数据库是否连接if(pTheConn->GetState()=adStateClosed) return;if(m_pDG1rs->GetState()=adStateClosed) return;m_pDG1rs->MoveFirst(); / 移动到头while(!m_pDG1rs->adoEOF) / 遍历员工列表Value=m_pDG1rs->GetCollect("ID"); / 得到员工号strPersonID=(char*)_bstr_t(Value);AddRecord(strPersonID);m_pDG1rs->MoveNext();/ 刷新各列表UpdateDG(m_pDG2rs,m_cDG2,2);UpdateDG(m_pDG3rs,m_cDG3,3);UpdateDG(m_pDG4rs,m_cDG4,4);UpdateDG(m_pDG5rs,m_cDG5,5);3.3 工资管理模块void CSalaryDlg:OnCalculateStat() CString str; / 临时变量int Rate_overtime,Money_errand,Money_late,Money_absent; / 记录中间结果long counter; / 保存计数值CString strYearMonth,strPerson,strAddDetail,strSubDetail; / 保存说明信息float basic,bonus,add_total,sub_total,total,temp; / 保存中间结果_RecordsetPtr pRS; / 临时Recordset对象/ 数据库未连接则返回if(pTheConn->GetState()=adStateClosed) return;UpdateData(); / 更新数据/ 读取参数CString strFileName=".formula.ini" / INI文件名Rate_overtime=GetPrivateProfileInt("Formula", "OverTime", 150, strFileName);Money_errand=GetPrivateProfileInt("Formula", "Errand", 100, strFileName);Money_late=GetPrivateProfileInt("Formula", "Late", 10, strFileName);Money_absent=GetPrivateProfileInt("Formula", "Absent", 50, strFileName);strYearMonth=m_strYearMonth; / 获取统计月份/ 遍历员工列表_RecordsetPtr pRS_person;pRS_person.CreateInstance(_uuidof(Recordset); / 创建Recordset对象/ 打开Recordset对象pRS_person->Open("select ID from PERSON where STATE='T'",pTheConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);while(!pRS_person->adoEOF) / 遍历员工列表strPerson=(char*)_bstr_t(pRS_person->GetCollect("ID"); / 获取员工号strAddDetail.Empty(); / 清除附加金额说明strSubDetail.Empty(); / 清除扣除金额说明basic=0; / 初始化基本工资bonus=0; / 初始化红利奖金add_total=0; / 初始化附加金额sub_total=0; / 初始化扣除金额total=0;pRS.CreateInstance(_uuidof(Recordset); / 创建Recordset对象/ 获取员工基本工资str="select SALARY from SALARY_SET where PERSON='" + strPerson + "'"if(pRS->GetState()=adStateOpen) pRS->Close();pRS->Open(str.AllocSysString(),pTheConn.GetInterfacePtr(),adOpenStatic,adLockReadOnly,adCmdText);basic=pRS->GetCollect("SALARY").fltVal; / 获取员工基本工资pRS->Close(); / 关闭Recordset对象/ 获取员工出勤记录,计算相关工资额str="select * from ATTENDANCE_STAT where YEAR_MONTH='"+ strYearMonth+ "' and PERSON='" +strPerson + "'"pRS->Open(str.AllocSysString(),pTheConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);basic*=pRS->GetCollect("WORK_HOUR").iVal; / 计算基本工资/ 计算加班费temp=basic*pRS->GetCollect("OVER_HOUR").iVal*Rate_overtime/100.0;if(temp>0) / 判断是否有加班费add_total+=temp; / 增加附加金额str.Format("%.f",temp); / 转换temp为字符串strAddDetail+="加班费:"+str+"" / 增加附加金额说明/ 计算出差费temp=Money_errand*pRS->GetCollect("ERRAND_HDAY").iVal;if(temp>0) / 判断是否有加班费add_total+=temp; / 增加附加金额str.Format("%.f",temp); / 转换temp为字符串strAddDetail+="差旅费:"+str+"" / 增加附加金额说明/ 计算误工费temp=Money_late*(pRS->GetCollect("LATE_TIMES").bVal+pRS->GetCollect("EARLY_TIMES").bVal)+Money_absent*pRS->GetCollect("ABSENT_TIMES").bVal;if(temp>0) / 判断是否有误工费sub_total+=temp; / 增加扣除金额str.Format("%.f",temp); / 转换temp为字符串strSubDetail+="误工费:"+str+"" / 增加扣除金额说明pRS->Close(); / 关闭Recordset对象/ 统计奖金记录str="select NAME,MONEY from SALARY_OTHER where (YEARMONTH='"+ strYearMonth + "' or YEARMONTH='0000000')"+ " and PERSON='" +strPerson+ "' and TYPE='0'"pRS->Open(str.AllocSysString(),pTheConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);while(!pRS->adoEOF) / 依次对所有记录进行操作bonus+=pRS->GetCollect("MONEY").fltVal; / 增加奖金额pRS->MoveNext(); / 跳到下一条记录pRS->Close(); / 关闭Recordset对象/ 统计福利记录str="select NAME,MONEY from SALARY_OTHER where (YEARMONTH='"+ strYearMonth + "' or YEARMONTH='0000000')"+ " and PERSON='" +strPerson+ "' and TYPE='1'"pRS->Open(str.AllocSysString(),pTheConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);while(!pRS->adoEOF) / 依次对所有记录进行操作temp=pRS->GetCollect("MONEY").fltVal; / 提取福利金额add_total+=temp; / 增加附加金额str.Format("%.f",temp); / 转换temp为字符串/ 增加附加金额说明CString strTmp=(char*)_bstr_t(pRS->GetCollect("NAME");strAddDetail+=strTmp + ":" + str + ""pRS->MoveNext(); / 跳到下一条记录pRS->Close(); / 关闭Recordset对象/ 统计津贴记录str="select NAME,MONEY from SALARY_OTHER where (YEARMONTH='"+ strYearMonth + "' or YEARMONTH='0000000')"+ " and PERSON='" +strPerson+ "' and TYPE='2'"pRS->Open(str.AllocSysString(),pTheConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);while(!pRS->adoEOF) / 依次对所有记录进行操作temp=pRS->GetCollect("MONEY").fltVal; / 提取津贴金额add_total+=temp; / 增加附加金额str.Format("%.f",temp); / 转换temp为字符串/ 增加附加金额说明CString strTmp=(char*)_bstr_t(pRS->GetCollect("NAME");strAddDetail+=strTmp + ":" + str + ""pRS->MoveNext(); / 跳到下一条记录pRS->Close(); / 关闭Recordset对象/ 统计扣发记录str="select NAME,MONEY from SALARY_OTHER where (YEARMONTH='"+ strYearMonth + "' or YEARMONTH='0000000')"+ " and PERSON='" +strPerson+ "' and TYPE='3'"pRS->Open(str.AllocSysString(),pTheConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);。界面:(计算工资)界面:(帮助:)总界面:4调试分析4.1 问题与解决办法首先要在stdafx.h中得加载ADO库。#import "C:program filescommon filessystemadomsado15.dll" no_namespace rename("EOF", "adoEOF")#include<adoid.h>#include<adoint.h>其中的第一个#import 语句是编译器把此指令中的动态链接库文件引入到程序中,并从库中抽取出其中的对象的类信息,并产生出两个头文件包含在工程中。其中的 no_namespace 用来对动态链接库的名称域进行隔离。最后的rename,把ADO 中的EOF 重新命名,避免和其他地方定义的EOF 产生冲突。第二、 三行引入的头文件定义了ADO 的类和接口标识。然后分别实现不同的功能模块,数据库建表,界面设计,类设计,写代码实现。4.2 经验与体会通过这次课设学到了ADO编程的一些实用方法,增强了上机调试能力,进一步理解了数据库设计,功能模块设计的能力。面对问题时也能有效的解决,增强了排错能力。5用户使用说明5.1管理员和职工登录系统设置了管理员权限,权限为5,职工员权限为0,默认权限为职工权限。所以管理员登录时要修改权限值为5。数据库里记录有管理员登录时的用户名以及密码。默认的登录名及密码分别为 :KJS,KJS 。职工登录只要求输入职工编号,及自设的密码即可登录。默认的ODBC数据源名为:BISDB 无需修改。5.2登录系统后的界面如下此时,职工可以根据自已所在的部门填写部门编号,部门编号一般为汉字的拼音首字母。系统自动显示部门名称以及所有在该部门的职工列表。员工可以从职工列表中找到自己的职工号,输入职工号后即可显示职工的姓名及基本工资等等。从而可以查看自己的工资情况。管理员则可以从中设置员工的基本工资,以及添加每个年月的职工的获得的奖金,福利,津贴或者扣发情况。实现职工工资的更改。管理员还可以通过菜单栏中的设置按钮设置基本工资的计算方式6 测试结果6.1 界面设置6.2 数据库结果7 总 结经过几个月的不断实践与探索,企业工资管理统的设计与实现己经完成,基本上达到了预期的设计要求和目的。一个完整的企业工资信息管理系统就创建完毕了。在本系统的设计与实现的过程中主要讲述了企业工资管理信息系统的系统设计部分,包括功能模块设计、数据库结构设计等。系统设计为整个程序构建了骨架,各个功能模块实现各个细节部分。系统的详细设计根据系统分析阶段的结论将系统具体化,并完成了各个模块的添加、修改、删除与查询的功能,直到最后形成一个完整的可行性的管理系统。在整个毕业设计阶段的工作和本论文的写作过程的经历将会使我终生受益,并对我今后的工作和发展产生深远的影响。由于毕业设计时间比较仓促,所以该系统还有许多不尽如意的地方,比如联机文档比较少,用户界面不够美观,出错处理不够等多方面问题。这些都有待于进一步的改善。参考文献【1】揣锦华 著 面向对象程序设计与V C+实践 :西安电子科技大学出版社,2005,1 【2】 李闽溟、吴继刚、周学明编著。Visual C+6.0数据库系统开发实例导航,北京:人民邮电出版社,2002【3】 李光明主编。Visual C+6.0经典实例大制作,北京:中国人事出版社,2000.1【4】东方人华、李秀敏、凌宇欣 编著。Visual C+6.0入门与提高,清华大学出版社,2003.11【5】李存斌主编。数据库应用技术:SQL Server 2000简明教程,北京:中国水利水电出版社,2004.8【6】 萨师煊、王珊著。数据库系统概论,第三版,北京:高等教育出版社,2002.2【7】 石树刚 郑振楣 关系数据库,北京:清华大学出版社,1993.06【8】朱元三编著 软件工程技术概论.北京:科学出版社,2002【9】计算机软件需求说明编制指南(GB9385-88).北京:电子工业出版社,1990【10】计算机软件产品开发文件编制指南(GB8657-88).北京:中国标准出版社, 2003