工资管理系统报告
- 格式:doc
- 大小:212.50 KB
- 文档页数:12
工资管理系统 - 1 - 《数据库系统》 课程设计
课题 工资管理系统 班级 信息安全二班 学号 1305030227 姓名 李兰君 指导老师 张黎
时间:2015.6.15-2015.6.26 工资管理系统
- 2 - 简介:工资管理系统用于每个月员工工资的实发工资的计算,计算的项目包括基本工资、奖金、福利、津贴等。本系统中计算工资的基本依据是考勤管理系统的统计结果、同时,需要用到人事管理系统中员工信息和部门信息,但是由于此次课程设计条件有限,就自己造了几个表。
一、系统需求分析
1.1 系统功能分析
本系统主要有以下几项功能: ⑴员工基本工资的设定 (2)奖励及惩罚的设置 (3)根据实发工资计算公式及本月出勤统计结果计算更新并查询各个年月的工资表 (4)输出工资报表
1.2 系统功能模块设计
根据系统功能要求,可以将系统分解成几个模块来分别设计应用程序界面。如下图所示
二、数据库设计 2.1数据库需求分析
工资管理系统 用户查询 个人基本信息 工资查询 考勤查询 奖罚设置 基本工资设定 月度工资显示/更新 用户/管理员登录 查看考勤表 信息查询 工资设置 工资管理系统
- 3 - ●员工工资设置:员工号、姓名、小时工资(元小时)、加班工资 ●其他工资:记录编号、年月、员工号、类型代码、名称、金额 ●月度工资统计:记录编号、年月、员工号、基本工资、奖金、其他应发总额、扣发总额、实发金额 ●类型代码表:代码,说明,金额 ●人员信息:员工号、密码、权限、姓名、部门、当前状态 ●部门设置:部门编号、名称、部门经理、经理姓名 ●月度考勤统计:记录号、员工号、年月、累计工作时间、累计加班时间、累计请假时间、累计出差时间、迟到次数、早退次数、旷工次数
2.2数据库概念结构设计(E-R图)
1 1 1 1 1 1 1 N 1 N 1 N 1 N 1 N 1 部门 工资设置 其他工资表 类型代码表 统计 部门编号 部门名称 部门经理 员工号 姓名 部门 用户权限 密码 员工号 记录编号 累计工作时间 员工号 小时工资 加班工资 代码 说明 金额 记录编号 员工号 年月 基本工资 实发金额 奖金 记录编号 类型 金额 考勤 年月 员工号 发放 员工信息 隶属 对应 考勤表 统计 计算 对应 对应 1 月度工资统计 工资管理系统
- 4 - 2.3数据库逻辑结构设计
数据库实现: 根据前面的需求分析以及E-R图,利用SQL2005实现数据库,创建表格,记录类型,根据各个表之间的联系设置主键和外键。
本系统总共涉及7个数据表,其中三个表用于保存员工信息,部门设置和考勤统计,;另外需要建立3个数据表用于保存工资设置、福利津贴、扣发记录和工资统计结果。另外福利津贴扣发记录中,需要用到一个记录了类别代码表,用于标识记录数据福利津贴和扣发项,这7个需要建立的数据表结构如下 工资管理系统
- 5 - 三、各个功能模块的实现 1、用户界面设计以及各个功能模块实现及其部分实现代码 (1) 登录界面: 用户输入密码并从数据库读取密码,判断用户权限及输入密码是否正确,若为普通用户则进入用户查询界面,若为管理员则进入主界面。插入新的对话时要给新对话建立类向导,并在要使用它对话中,加上类名的头文件,再创建对象,使用DoModal()函数,调用。
//连接数据库后,利用SQL语句进行用户输入账号和密码的匹配,以及权限识别 sql.Format("select * from 员工信息 where 员工号 = '%s' and 密码= '%s ' and 用户权限='管理员'",this->m_edit2,this->m_edit1); m_pRecordset= m_pConnection->Execute((_bstr_t)sql,&RecordsAffected,adCmdText); //执行SQL查询 //如果找到 if(!m_pRecordset->adoEOF) { admin sc; sc.DoModal(); //进入管理员界面 id=m_edit2;} else //否则进入用户查询界面 { sql.Format("select * from 员工信息 where 员工号 = '%s' and 密码= '%s ' and 用户权限='用户'",this->m_edit2,this->m_edit1); m_pRecordset = m_pConnection->Execute((_bstr_t)sql,&RecordsAffected,adCmdText);
if(!m_pRecordset->adoEOF) { extern CString id; id=m_edit2; ordinary s; s.DoModal(); //进入普通用户界面 } else MessageBox("用户名或密码有误");} 工资管理系统
- 6 - (2)用户界面: 用户仅能看到自己的扣发明细,考勤情况
(3)管理员界面: 管理员能修改奖惩设置和扣发记录,更新工资表等。
①员工基本工资的修改 //更新,利用SQL语句修改基本工资 _bstr_t strAdd="UPDATE 工资设置 SET 姓名='"; strAdd=strAdd+m_name+"',小时工资="; strAdd=strAdd+m_salary+",加班工资="; strAdd=strAdd+m_extra; strAdd=strAdd+"WHERE 员工号="+m_num; m_pConnection->Execute(strAdd,&ra,adCmdText); 工资管理系统 - 7 - m_pConnection->Close(); m_ado1.SetRecordSource("SELECT * FROM 工资设置"); m_ado1.Refresh(); AfxMessageBox("更新成功"); UpdateData(FALSE);
②奖金及福利补贴设置 //插入一条新的记录
_bstr_t strAdd="INSERT INTO 类型代码表 VALUES('"; strAdd=strAdd+m_num+"','"; strAdd=strAdd+m_name+"',"; strAdd=strAdd+m_salary+")";// m_pConnection->Execute(strAdd,&ra,adCmdText); m_pConnection->Close();
//更新(修改)原记录 _bstr_t strAdd="UPDATE 类型代码表 SET 说明='"; strAdd=strAdd+m_name+"',金额="; strAdd=strAdd+m_salary+""; strAdd=strAdd+"WHERE 代码="+m_num; strAdd=strAdd+" UPDATE 其他工资 SET 金额=(SELECT 金额 FROM 类型代码表 WHERE 其他工资.类型=类型代码表.代码)"; m_pConnection->Execute(strAdd,&ra,adCmdText); m_pConnection->Close(); m_ado1.SetRecordSource("SELECT * FROM 类型代码表"); m_ado1.Refresh(); AfxMessageBox("更新成功"); UpdateData(FALSE); 工资管理系统 - 8 - ③查看考勤记录 //管理员能查看各个月份的考勤记录 CString tmpStr,strSQL="SELECT * FROM 考勤表 WHERE 年月="; strSQL+="'"+m_ym+"'";
④奖惩记录(其他工资)的添加,添加的初始时间为系统时间 //插入新记录并更新 _bstr_t strAdd="INSERT INTO 其他工资(记录编号,年月,员工号,类型) VALUES('"; strAdd=strAdd+m_num+"','"; strAdd=strAdd+m_year+"','"; strAdd=strAdd+m_ynum+"','"; strAdd=strAdd+m_type+"')";// strAdd=strAdd+" UPDATE 其他工资 SET 名称=(SELECT 说明 FROM 类型代码表 WHERE 其他工资.类型=类型代码表.代码),金额=(SELECT 金额 FROM 类型代码表 WHERE 其他工资.类型=类型代码表.代工资管理系统 - 9 - 码)"; //获取系统时间:添加头文件“afx.h”,建立虚函数,并添加以下代码 tm=CTime::GetCurrentTime(); str=tm.Format("%Y%m"); m_year=str;//置编辑框的初值为系统时间 UpdateData(FALSE);
⑤根据实发工资计算公式及本月出勤统计结果计算更新并查询各个年月的工资表: 实发工资=累计工作时间*小时工资+加班工资*加班时间 - 扣发总额+奖金 其中,扣发总额包括迟到、早退等的扣发。
//更新工资表,计算各项金额 _bstr_t strAdd="UPDATE 月度工资统计 SET 奖金=(SELECT SUM(金额) FROM 其他工资 WHERE 金额>0 AND 月度工资统计.员工号=其他工资.员工号 AND 月度工资统计.年月=其他工资.年月), 实发金额=基本工资+其他应发总额+(SELECT 累计加班时间 FROM 考勤表 WHERE 月度工资统计.员工号=考勤表.员工号 AND 月度工资统计.年月=考勤表.年月)*(SELECT 小时工资 FROM 工资设置 WHERE 月度工资统计.员工号=工资设置.员工号),
扣发总额=(SELECT SUM(金额) FROM 其他工资 WHERE 金额<0 AND 月度工资统计.员工号=其他工资.员工号 AND 月度工资统计.年月=其他工资.年月),
其他应发总额=(SELECT SUM(金额) FROM 其他工资 WHERE 月度工资统计.员工号=其他工资.员工号 AND 月度工资统计.年月=其他工资.年月),