[计算机]可视化与面向对象程序设计-----工资管理系统报告.doc

上传人:音乐台 文档编号:1990887 上传时间:2019-01-28 格式:DOC 页数:27 大小:1.46MB
返回 下载 相关 举报
[计算机]可视化与面向对象程序设计-----工资管理系统报告.doc_第1页
第1页 / 共27页
[计算机]可视化与面向对象程序设计-----工资管理系统报告.doc_第2页
第2页 / 共27页
[计算机]可视化与面向对象程序设计-----工资管理系统报告.doc_第3页
第3页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[计算机]可视化与面向对象程序设计-----工资管理系统报告.doc》由会员分享,可在线阅读,更多相关《[计算机]可视化与面向对象程序设计-----工资管理系统报告.doc(27页珍藏版)》请在三一文库上搜索。

1、可视化与面向对象程序设计课程设计报告 题目 工资管理系统指导老师 学号 姓名 目 录一、课题背景及意义2二、需求分析21. 业务需求32. 功能需求33. 数据需求4三、系统体系结构及功能设计51. 系统组成52. 数据库设计5(一)概念结构设计5(二)逻辑结构设计6(三)数据库模式定义6四、数据库详细设计81. 触发器列表82. 存储过程列表8五、系统实现91. 模块简述92. 模块设计10六、参考文献26一、 课题背景及意义工资管理既是企业劳动人事管理的重要方面,同时也是企业财务管理的重要方面,因为它是和人、资都相关的方面。工资管理需要和员工人事管理连接,同时连接工时考勤和加班情况等等,来

2、生成企业每个职工的基本工资、津贴、实际发放工资等。工资管理是一项琐碎、复杂而又十分细致的工作,一般不允许发生差错。手工进行工资发放工作,需要反复地进行抄写、计算,不仅花费财务人员大量的时间,而且往往由于抄写不慎,出现张冠李戴,或者由于计算机的疏忽,出现工资发放错误的现象。同时工资的发放具有较强的时间限制,必须严格按照单位规定的时间完成计算和发放工作。正是工资管理的这种重复性、规律性、时间性,使得工资管理计算机化成为可能。计算机进行工资发放工作,不仅能够保证工资核算正确无误、快速输出,而且还可以利用工资数据库对有关工资的各种信息进行统计,服务于财务部门其他方面的核算和财务处理。不同的企业有着不同

3、的人事制度、财务制度,也就决定了不同的企业具有不同的工资制度。本系统运用了一般公司的工资计算公式,即根据员工的职务工种来确定基本工资,根据出工情况来扣除缺勤费,根据加班情况发放津贴。由于是一个人在做系统,时间上也有限制,所以在保险,年终奖金等方面没有涉及到。但总体上是按照的工资管理的有关原理和技术来做的。二、 需求分析在构造系统时,首先从需求出发构造数据库表,然后再由数据库表结合需求划分系统功能模块。这样,就把一个大的系统分解成了几个小系统。这里把系统的层次划分为了四个部分:系统用户管理,员工信息管理,工资有关信息设置,月工资管理。主要能够实现以下功能: 实现用户登录,进行系统用户的管理,判断

4、; 能够实现对公司员工的基本信息的查询和编辑管理; 能够修改工资的标准和员工的工作情况; 能够对工资实行查询,简单的统计1. 业务需求从系统用户角度考虑的业务流程图:这里用户是指包括相关部门的所有用户图2.1 业务流程图2. 功能需求表1 系统功能列表编号功能名称功能说明1.1登录用户输入用户名和密码登录系统1.2.1增加用户增加一个系统用户1.2.2删除或修改用户等级修改用户的基本等级或删除用户1.3修改密码用户密码的修改2.1员工信息添加添加员工记录2.2员工信息删改删除或者修改员工的信息2.3.1按姓名检索模糊查询,输入员工姓名查询员工信息2.3.2按部门检索按照部门查询员工信息3.1工

5、作情况更改更改员工的加班,缺勤记录3.2增加加班记录增加一条员工的加班记录3.3增加缺勤记录增加一条员工的缺勤记录4.1更改工资标准更改各职称相应的工资标准4.2增加工资记录向数据库中增加一条工资记录4.3生成工资按月查询工资记录4.4工资统计按部门统计工资情况4.5个人工资查询实现对单个人的工资查询3. 数据需求系统处理的对象有:系统用户信息:用户名,登录密码,用户等级,说明公司员工信息:员工编号,员工姓名,性别,部门编号,职称编号,参加工作时间部门信息:部门编号,部门名称,备注工资标准:职称号,职称名,职称基本工资,职称补贴员工加班信息:员工编号,年月,加班天数,加班补贴员工缺勤信息:员工

6、编号,年月,缺勤天数,缺勤扣除月工资:员工编号,年月,职称基本工资,职称补贴,津贴,扣除,实发工资数据流图和数据字典如下: 顶层数据流图:图2.2 顶层数据流程图 0层数据流图:图2.3 0层数据流程图三、 系统体系结构及功能设计1. 系统组成系统开发的总体目标是实现工资管理的系统化和自动化,保证工资核算正确无误、快速输出。主要任务是对系统用户信息、员工信息、工资信息等操作及外理。本系统为C/S结构、运行平台为微软vc+6.0以上版本。以及SQL Sever2000以上版本。下图为系统结构图:图3.1 系统结构图2. 数据库设计(一)概念结构设计 概念设计阶段主要是将需求分析阶段得到的用户需求

7、抽象为信息结构(概念模型)的过程。根据之前的分析,数据库应该主要的实体有员工,职称(工资标准),月工资以及工作信息,以及系统用户信息。 最后得到的实体关系图如下: 图3.2 实体关系图 (二)逻辑结构设计 将E-R图转化为关系模式:在设计时,将一个1:n联系的单方主码加至多方。一个实体单独转化成一张表。根据设计原则和以上E-R图,转化为下面四张表:员工表:employees(employee_id, employee_name, sex, department_id, title_id, work_time)部门表: department(department_id,department_na

8、me,note)(职称表)工资标准表:standard(title_id,title_name,title_salary,title_allowance)考勤情况表:attendance(employee_id, absent_month, absent_daynumber,losemoney)加班情况表:jiaban(employee_id, jiaban_month, jiaban_daynumber, getmoney)月工资表:salary(employee_id,salary_date, title_salary,title_allowance,jintie ,kouchu ,rea

9、l_salary)(三)数据库模式定义表3.1:员工信息表列名数据类型取值约束索引否主键/外键可否为空说明employee_idChar(6)0001-9999Clustered主键not null员工编号employee_nameChar(10)not null员工姓名sexChar(10)男或女not null员工性别department_idChar(10)外键not null所在部门号title_idChar(10)外键not null员工职称号work_timeVarchar(50)1990.01 not null参加工作时间 表3.2:部门信息表列名数据类型取值约束索引否主键/外键

10、可否为空说明department_idChar(10)001-050Clustered主键not null部门编号department_nameChar(10)not null部门名称noteVarchar(50)null说明 表3.3:加班情况表列名数据类型取值约束索引否主键/外键可否为空说明employee_idChar(6)Clustered外键not null员工编号jiaban_monthVarchar(50)Clustered主键not null年月jiaban_daynumberInt(4)0-7not null加班天数getmoneyMoney(8) not null补贴表3.

11、4:缺勤信息表列名数据类型取值约束索引否主键/外键可否为空说明employee_idChar(6)Clustered外键not null员工编号absent_monthVarchar(50)Clustered主键not null年月absent_daynumberInt(4)0-20not null缺勤天数losemoneyMoney(8) not null扣除表3.5:工资标准表列名数据类型取值约束索引否主键/外键可否为空说明title_idChar(10)001-020Clustered主键not null职称编号title_nameChar(10)not null职称名称title_sa

12、laryMoney(8)not null基本工资title_allowanceMoney(8) not null职称补助表3.6:月工资表列名数据类型取值约束索引否主键/外键可否为空说明employee_idChar(6)0001-9999Clustered外键not null员工编号salary_dateVarchar(50)Clustered主键not null年月title_salaryMoney(8)not null基本工资title_allowanceMoney(8) not null职称补助jintieMoney(8)not null补贴kouchuMoney(8)not null

13、扣除real_salaryMoney(8) not null实际工资表3.7:系统用户表列名数据类型取值约束索引否主键/外键可否为空说明user_nameChar(10)Clustered外键not null用户名passwordChar(10)not null密码GradeInt(4)1-4not null身份等级notechar(50)nul说明四、 数据库详细设计 数据库的建立是直接在企业管理器中建的,数据库中的表清单在之前已经列出,触发器的具体定义和使用原理以及部分存储过程的定义会在详细设计中做具体的说明,这里给出触发器的列表和存储过程的列表和部分存储过程的定义。1. 触发器列表触发器

14、编号表(建立在哪张表上)触发器名称触发器的作用T1attendanceinsert_attendance保证attendance中数据的准确性T2jiabaninsert_jiaban保证jiaban中数据的准确性T3salaryinsertsalary保证插入的数据与工资标准相符合T4salaryInsertsalary1保证插入的数据与工作情况相符合T5salaryInsertsalary2保证插入的数据与工作情况相符合T6salarysalaryupdate自动更新实发工资T7jiabansalaryupdatebutie更改工作情况时自动更新工资表T8attendancesalaryu

15、pdatekouchu更改工作情况时自动更新工资表T9standardstandardupdate更改工资标准时自动更新工资表T10standardStandardupdate1更改工资标准时自动更新工资表2. 存储过程列表存储过程编号存储过程名称作用P1deleteemployee删除一个员工记录P2absentadd增加一条缺勤记录P3jiabanadd增加一条加班记录P4search_by_employeename按员工名模糊查询P5employeeadd增加一条员工记录P6salaryadd增加一条工资记录存储过程deleteemployee的定义:create proc delete

16、employee(id char(6)asbegindelete from employeeswhere employee_id=idendreturn go存储过程employeeadd的定义:use salary_databasegocreate procedure employeeadd(employeeid char(6),employee_name char(10),sex char(10),department_id char(10), title_id char(10),work_time varchar(50)as begininsert into employeesvalue

17、s(employeeid,employee_name,sex,department_id,title_id,work_time)endreturngo五、 系统实现1. 模块简述本工资管理系统主要的所有模块主要是分为系统,人事管理,工资设置,工资管理,连接数据库的类五个部分,下面为这五个部分的再分类,共有20个模块。下面为系统的模块表:模块类别模块编号模块名称公共模块模块功能人事管理C1addemp增加一个员工C2yuangonggengshan更改员工的部门或职称,删除一个员工C3yuangongjiansuo按照部门检索员工信息C4searchbyemployee按照员工的姓名检索员工信息

18、C5employee是员工模块系统C6denglu登录模块,判断用户具有的权限C7user_是用户模块,含有用户表中的字段C8yh_shangeng删除或者更改用户的权限C9tianjiayonghu添加一个用户C10xiugaimima已登录的用户修改密码工资设置C11attendanceandjiaban更改员工的加班及考勤情况C12addjiabanjilu增加一条加班记录C13addqueqinjilu增加一条缺勤记录工资管理C14Standardtiaozheng工资标准调整C15addsalary增加工资记录C17gongzishengcheng按月生成工资C18gongzicha

19、xun查询员工的工资记录C19tongji按部门统计某月的工资记录连接模块C20ADOConn是连接数据库2. 模块设计下面给出模块的背景,设计思路,算法,界面以及关键代码,比较简单的模块就仅给界面设计以及算法设计,比较复杂的模块会给出相应的数据库有关触发器,存储过程和视图的设计。由于模块太多,功能类似的模块只用一个做具体说明。 (一). user_ 用户模块 User_模块是公共模块,denglu, yh_shangeng,tianjiayonghu,xiugaimima模块都用到了user_模块。user_类是为系统用户表创建的一个类:要利用ADO访问数据库,类的成员变量对应表的列,类的成

20、员函数对应表的操作。但本系统不是为每一个表都创建了类。 user_类中的成员变量和数据库中user_表中的字段是一致的,成员函数有如下五个。函数名说明void sql_insert(); 插入一个用户记录的函数,主要是在添加用户的模块中使用void sql_delete(CString icno);删除一个系统用户记录的函数,在用户更删中用到void sql_update(CString icno); 更改系统用户权限的函数,在用户更删中用到void sql_xiugaimima(CString icno1,CString icno2);修改密码的函数,修改密码模块使用int haveyh(C

21、String icno);判断用户是否存在函数,在插入用户记录模块中使用由于此模块为公共模块,所以具体的算法在一下用到这些函数的模块中给出。(二). Denglu 用户登录模块登录模块的主要目的,就是判断用户的身份,在菜单界面上显示次用户可以使用的操作。用户所有的操作都是在已经登录的情况下经行的。所以在登录前,菜单中除了“登录”为已激活状,其他所有的操作都是非激活态。(1). 界面设计: 图4.1 登录界面 图4.1为登录界面的设计。在用户输入用户名及密码之后,如果是合法用户,显示登录成功的消息。如果用户名密码不匹配或是不存在此用户显示核实用户名及密码的消息。登录成功后,在数据库中的user_

22、表中判断该用户的权限,然后更新菜单。由于存在更新激活菜单的功能,所以在view类中响应“确定”消息。在view类中还应该有一个成员变量用于记录用户的权限等级,以便更新界面。(2). 程序流程图:图4.2 登录模块程序流程图 (3). 关键代码:adoconn.OnInitADOConn();_bstr_t sql;sql=select grade from user_ where user_name=+dl.m_yhm+ and password=+dl.m_mm+ ;_RecordsetPtr m_precordset=adoconn.GetRecordSet(sql);if(m_preco

23、rdset-adoEOF=0)yh_dengji=(char *)(_bstr_t)m_precordset-GetCollect(grade);MessageBox(登录成功);if(m_precordset-adoEOF!=0)MessageBox(请核实用户名和密码);(三). yh_shangeng 用户更删模块 本模块主要是用来更改用户的权限,或者是删除此用户。采用的是列表控件显示用户信息和单选按钮控件来选择用户的身份,单击一条用户记录后删改用户的权限,更新数据酷里面的用户信息。删改之后重新刷新列表控件,由于代码比较简单,这里给出界面的设计以及程序流程图。(1). 界面设计:图4.3

24、用户删改模块界面设计(2).程序流程图:图4.4用户删改模块程序流程图 (四). Tianjiayonghu添加用户模块 添加用户模块主要是给管理人员想数据库中添加一条用户记录。在输入用户名和密码,和新用户的身份级别后才允许向数据库中添加这条新用户的记录。所以在用列表控件的值更新成员变量之后,在插入记录之前要在程序中要判断这个用户是否已存在,是否已输入密码,已输入权限。早插入记录之后,再用haveyh(CString icno)函数判断是否已经插入成功。(1). 界面设计:图4.5 添加系统用户的模块界面(2).程序流程图: 图4.6 添加系统用户模块程序流程图 (五). Xiugaimima

25、修改密码修改密码是提供给用户的修改原始密码的功能的模块。用户在登录后可以使用修改密码 的操作,用户必须输入用户名,原始密码以及新密码才能够修改密码。在修改前先判断原始密码是否与输入的用户名相匹配,以及新输入的新密码是否两次相一致,还有各个需要输入的信息是否已经输入,在输入信息达到要求之后,此模块调用denglu公共模块的void sql_xiugaimima(CString icno1,CString icno2)函数,这个函数的第一个参数是新密码,第二个参数是用户名,修改数据库的sql语句为:sqltemp=update user_ set password=+icno1+ where us

26、er_name=+icno2+ ;修改完数据库的表后向用户反馈修改成功的信息。(1). 界面设计:图4.7 修改密码界面设计 (2).程序流程图: 图4.8修改密码模块程序流程图(六). Employee,Tianjiayonghu(员工模块,添加用户模块)与user_模块类似的,employee模块是公共模块,addemp,yuangonggengshan,yuangongjiansuo,searchbyemployee模块都用到了employee中的成员函数以及成员变量。这里只对用户模块和添加用户模块做详细的说明。employee类中的成员变量和数据库中employees表中的字段是一致的

27、,成员函数有如下五个。函数名说明void sql_update(CString icno);更改员工的部门和职称,在yuangonggengshan中调用void sql_delete(CString icno);删除一个员工,在yuangonggengshan中调用void sql_insert();插入一条员工记录,在addemp中调用int haveyg(CString icno);判断是否存在这个员工,在addemp中调用由于此模块为公共模块,所以具体的算法在一下用到这些函数的模块中给出。说明:addemp(增加员工记录)模块与Tianjiayonghu(添加用户)模块相基本相类似,但

28、是先要获得的是用户选择的部门或职称信息,然后在向数据库中选择出该部门或者职称所对应的id号,插入数据库中的是id号,而不是用户选择的部门名和职称名。yuangonggengshan(员工更删)模块和yh_shangeng(用户更删)模块相类似。这里就仅给出插入员工记录的代码,其它就不一一列出了。(1).关键代码:(添加员工记录模块) 先从数据库中提取出所有的部门和职称信息:sql=select distinct department_name from department ;_RecordsetPtr m_precordset; m_precordset=adoconn.GetRecordS

29、et(sql);/填充组合框while(m_precordset-adoEOF=0)/记录集没有移动到最后m_cdepartment.AddString(char *)(_bstr_t)m_precordset-GetCollect(department_name);/下移一条记录m_precordset-MoveNext();sql=select distinct title_name from standard ; m_precordset=adoconn.GetRecordSet(sql);/填充组合框while(m_precordset-adoEOF=0)/记录集没有移动到最后m_ct

30、itle.AddString(char *)(_bstr_t)m_precordset-GetCollect(title_name);/下移一条记录m_precordset-MoveNext(); 在用户点击选择组合框之后,从数据库中提取选择用户选择的部门的id号,职称号与用户选择的部门的过程相符合的 sql=select department_id from department where department_name=+depart+ ;_RecordsetPtr m_precordset; m_precordset=adoconn.GetRecordSet(sql);departme

31、nt=(char *)(_bstr_t)m_precordset-GetCollect(department_id);(2).程序流程图(添加员工记录模块): 图4.9 添加员工信息程序流程图(七). Yuangongjiansuo按部门检索员工信息模块此模块是按照用户选择的部门使用select语句在建立的employeejiansuo视图中查询相应部门的员工信息.先要初始化控件从数据库中提取部门信息,响应的sql语句为:sql=select distinct department_name from department ,按照部门检索员工信息是在视图employeejiansuo中查询的,

32、相应的sql语句为:sql=select * from employeejiansuo where department_name=+depart+ 。(1).程序流程图: 图4.10部门检索员工信息程序流程图(2).视图employeejiansuo的建立:create view employeejiansuo asselect employee_id,employee_name,department_name,title_name,work_time, datediff(year,LEFT(work_time,4),getdate()-1 as seniority from employe

33、es,standard,departmentwhere employees.title_id=standard.title_id and employees.department_id =department.department_id(3). 界面设计: 图4.11按部门检索员工信息界面设计 (4).关键代码:CString depart;m_cdepart.GetLBText(m_cdepart.GetCurSel(),depart);ADOConn adoconn;adoconn.OnInitADOConn();_bstr_t sql;if(m_cdepart.GetCurSel()=0

34、)m_list.DeleteAllItems();sql=select * from employeejiansuo;if(m_cdepart.GetCurSel()0)m_list.DeleteAllItems();sql=select * from employeejiansuo where department_name=+depart+ ;_RecordsetPtr m_precordset;m_precordset=adoconn.GetRecordSet(sql);/根据记录集,填充列表框adoconn.ExitConnect();(八). searchbyemployee按姓名检

35、索员工信息模块 此模块的实现是在存储过程search_by_employeename(name_ char(10)的基础上实现的。此存储过程实现的是模糊查询。用户在编辑框中输入要查询的员工的姓名,不详处用”_”代替,返回所有满足模糊查询的结果集。调用存储过程的语句为sql=exec search_by_employeename %+m_name+%。关键代码与按部门检索员工信息的代码类似。这里只给出存储过程,流程图,和界面设计。(1).存储过程的定义:/*员工名模糊查询*/create procedure search_by_employeename(name_ char(10)as begi

36、nselect * from employeejiansuowhere employee_name like %+name_+%end验证:(2).程序流程图: 图4.12 按姓名检索员工信息程序流程图(3). 界面设计: 图4.13按姓名检索界面设计(九). Attendanceandjiaban更改员工的考勤情况及加班情况此模块提供让用户修改数据库中员工的考勤及加班信息的功能,用户登录后使用此模块,先从数据库中导出员工工作情况的视图,显示在列表控件上,用户单击一条记录后修改加班天数或缺勤天数。触动相关触发器操作,之后更新控件。更新数据库的SQL语句为: update jiaban set

37、jiaban_daynumber= +jbts+ where employee_id=+m_bh+ and jiaban_month=+m_time+ 以及update attendance set absent_daynumber= +qqts+ where employee_id=+m_bh+ and absent_month=+m_time+ 。注:由于时间关系以及用户编号和年月是连续的,这里做的组合框的初始化没有像之前的增加员工或者检索员工那样用数据库中提取,然后填充组合框的方法,而是手动添加。(1)视图kongzuoqinkuang的建立:create view kongzuoqin

38、kuang as select attendance.employee_id,employee_name,absent_month,absent_daynumber,jiaban_daynumberfrom attendance,jiaban,employeeswhere attendance.employee_id=jiaban.employee_id and attendance.absent_month= jiaban.jiaban_month and employees.employee_id=jiaban.employee_id(2).程序流程图: 图4.14更改工作情况程序流程图(

39、3).触发器的定义:其中,在流程图中提到了触发器,在数据库中一共定义了10个触发器,在此模块中会使用到3个触发器,下面给出这三个触发器的定义和说明。触发器Salaryupdatebutie的定义:此触发器的功能是自动更新加班表中的加班补贴字段以及工资表中的与加班补贴相对应的津贴字段,以保证数据库中数据的一致性。create trigger salaryupdatebutieon jiaban for update as beginupdate jiabanset getmoney=100*(select jiaban_daynumber from inserted)where employee

40、_id=(select employee_id from deleted) and jiaban_month=(select jiaban_month from deleted)update salaryset jintie=100*(select jiaban_daynumber from inserted)where salary.employee_id=(select employee_id from deleted)and salary.salary_date=(select jiaban_month from deleted)end触发器Salaryupdatekouchu的定义:与

41、前一个触发器类似的,Salaryupdatekouchu是在更新缺勤天数时,自动更新的是缺勤表中的缺勤扣除字段,同时也更新月工资表中的响应字段。create trigger salaryupdatekouchuon attendance for update asbeginupdate attendanceset losemoney=100*(select absent_daynumber from inserted)where employee_id=(select employee_id from deleted) and absent_month=(select absent_month from deleted)update salaryset kouchu=100

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

当前位置:首页 > 其他


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