1、数据库课程设计报告课题名称: 工资管理系统 指导教师: 魏善沛 专业班级: 14级软件工程一班 小组成员: 学号 姓名 (组长) 20234612 冯婷婷 20234619 李建华(组长) 20234630 杨美梅 20234632 张艺瀚 20234633 赵飞 完毕日期:2023 年 6 月 8 日目录1. 设计目的12. 开发环境13. 系统设计13.1需求分析13.1.1数据需求13.1.2事物需求23.2系统流程图24. 数据库设计44.1数据流图44.2数据字典54.2.1数据结构描述54.2.2数据流的描述54.2.3重要数据存储的定义64.3概念模型设计(E-R图)74.4逻辑
2、结构设计114.4.1关系模式114.4.2基本表125. 应用程序设计135.1主窗体模块135.2员工信息模块145.3部门信息模块15结 论16参 考 文 献16附录A(源代码)16SQL亮点语句:16源代码:17评分表:371. 设计目的数据库原理概述及应用课程设计是软件工程专业集中实践性环节之一,是学习完数据库原理概述及应用课程后进行的一次全面的综合练习。其目的在于加深对数据库基础理论和基本知识的理解,掌握使用数据库进行软件设计的基本方法,提高运用数据库解决实际问题的能力,最终实现对于给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之可以有效地存储数据,满足各种用户的
3、应用需求(信息规定和解决规定)。同时,本次设计对于同学将来的毕业设计和具体工作实践将有重要的意义。针对于本次设计的课题工资管理系统,通过E-R图,逻辑结构、物理结构、概念结构三方面分析该系统的实体、属性、以及之间的联系,从各个方面全面了解分析课题,同时,也更掌握了基础知识,进一步了解各部分含义。2. 开发环境 SQL Server 2023 ,JDK1.8,Eclipse EE版本。3. 系统设计3.1需求分析3.1.1数据需求工资管理系统系是为了更好地实现工资各种信息的管理以及各种信息的安全性管理。本系统重要对查看员工的各种工资信息需求所设计的,可以很好的管理数据。 本系统的重要功能由以下几
4、个部分组成: 系统功能的基本规定: 员工每个工种基本工资的设定。 加班津贴管理,根据加班时间和类型给予不同的加班津贴。 按照不同工种的基本工资情况、员工的考勤情况产生员工的每月的月工资。 员工年终奖金的生成,员工的年终奖金计算公式(员工本年度的工资总和津贴的总和)/12。 公司工资报表。可以查询单个员工的工资情况、每个部门的工资情况、按月的工资记录,并可以打印。 各类单项和多条件组合查询。 导出查询和记录的结果,形成Excel表。数据库规定:在数据库中至少应当包含下列数据表: 员工考勤情况表。 员工工种情况表,反映员工的工种、等级,基本工资等信息。 员工津贴信息表,反映员工的加班时间,加班类别
5、、加班天数、津贴情况等。 员工基本信息表。 员工月工资表。3.1.2事物需求(1)在员工信息管理部分,规定: A可以查询员工信息 B可以对员工信息进行添加删除的操作 (2) 在部门信息管理部分,规定: A.可以查询部门信息B.可以对部门信息进行添加删除的操作 3.2系统流程图 图3.2 系统流程图 4. 数据库设计4.1数据流图图4.1数据流图4.2数据字典4.2.1数据结构描述名称:员工含义说明:员工信息组成结构:员工编号+员工姓名+性别+所属部门+职称名称:工资含义说明:工资信息组成结构:员工编号+基本工资+岗位工资+津贴工资+扣除薪酬+实发工资名称:部门含义说明:部门信息组成结构:部门编
6、号+部门名称+部门人数4.2.2数据流的描述数据流名称:员工信息添加 简述:新员工信息录入数据流来源:公司管理者数据流去向:员工信息数据流组成:员工编号+员工姓名+性别+所属部门+职称数据流名称:员工信息修改 简述:员工信息错误或员工调动数据流来源:公司管理者数据流去向:员工信息数据流组成:员工编号+员工姓名+性别+所属部门+职称数据流名称:员工信息删除 简述:员工离职数据流来源:公司管理者数据流去向:员工信息数据流组成:员工编号+员工姓名+性别+所属部门+职称数据流名称:工资添加 简述:公司对工资进行添加数据流来源:公司管理者数据流去向:工资信息数据流组成:员工编号+基本工资+岗位工资+津贴
7、工资+扣除薪酬+实发工资数据流名称:工资修改 简述:公司对工资进行修改数据流来源:公司管理者数据流去向:工资信息数据流组成:员工编号+基本工资+岗位工资+津贴工资+扣除薪酬+实发工资4.2.3重要数据存储的定义存储名称:员工记录输入:员工基本信息输出:员工所有信息数据结构:员工编号+员工姓名+性别+所属部门+职称存储名称:部门记录输入:部门基本信息输出:部门所有信息数据结构:部门编号+部门名称+部门人数存储名称:工资记录输入:员工工资信息输出:员工所有工资信息数据结构:员工编号+基本工资+岗位工资+津贴工资+扣除薪酬+实发工资存储名称:考勤记录输入:员工考勤信息输出:员工所有考勤信息数据结构:
8、员工编号+迟到次数+缺席次数存储名称:津贴记录输入:员工津贴信息输出:员工所有津贴信息数据结构:员工编号+加班时间+加班天数+加班类型+津贴资金4.3概念模型设计(E-R图) 图4.3.1员工信息E-R图 图4.3.2部门信息E-R图 图4.3.3基本工资E-R图 图4.3.4考勤情况E-R图 图4.3.5津贴情况E-R图 图4.3.6工种情况E-R图图4.3.7月工资信息E-R图 图4.3.8工作管理系统总E-R图4.4逻辑结构设计4.4.1关系模式员工信息(员工编号,员工姓名,性别,所属部门,职称)部门信息(部门编号,部门名称,部门人数)基本工资(工资级别,基本工资,岗位工资)考勤信息(员
9、工编号,迟到次数,缺席次数)津贴信息(员工编号,加班时间,加班天数,加班类型,津贴资金)工种情况(工资级别,岗位工资)工资信息(员工编号,基本工资,岗位工资,津贴工资,扣除薪酬,实发工资)4.4.2基本表 表1员工基本信息表(dbo.employee)员工编号e_idvarchar(8)主键,不允许反复员工姓名e_namevarchar(8)性别e_sexvarchar(2)所属部门b_idvarchar(4)外键职称j_namevarchar(12) 表2部门信息表(dbo.brank)部门编号b_idvarchar(8)主键,不允许反复部门名称b_namevarchar(20)部门人数b_
10、numberint 表3基本工资表(dbo.basesalary)工资级别bs_levvarchar(2)主键,不允许反复基本工资bs_salnumeric(8, 2) 表4考勤信息表(dbo.check)员工编号e_idvarchar(8)主键,不允许反复迟到次数latetimesnumeric(3, 0)缺席次数offtimesnumeric(3, 0) 表5津贴信息表(dbo.bonusinformation)员工编号e_idvarchar(8)主键,不允许反复加班时间etr_timenumeric(8, 1)加班天数etr_daynumeric(2, 1)加班类型etr_typevar
11、char(8)津贴资金bonus_salnumeric(8, 2) 表6工种情况表(dbo.jobsalary)工资级别js_levvarchar(2)主键,不允许反复岗位工资js_salnumeric(8, 2) 表7工资信息表(dbo.salaryinfomation)员工编号e_idvarchar(8)主键,不允许反复;外键基本工资bs_salnumeric(8, 2)岗位工资js_salnumeric(8, 2)津贴工资bonus_salnumeric(8, 2)扣除薪酬check_salnumeric(8, 2)实发工资get_salnumeric(8, 2)5. 应用程序设计5.1
12、主窗体模块 进入登陆页面,如下图: 图5.1.1 登录 登陆后进入系统主界面,如下图: 图5.1.2 系统主界面5.2员工信息模块(1) 查询,分别点击“编辑”“删除”按钮可修改、删除员工信息,如下图: 图5.2.1 查询修改员工信息 图5.2.2 修改员工信息5.3部门信息模块(1)查询.删除所有部门信息,如下图: 图5.3.1 查询删除部门信息结 论通过两周的不断实践与探索,人力资源-工资管理统的设计与实现己经完毕,基本上达成了预期的设计规定和目的。 一个完整的人力资源-工资管理统就创建完毕了。在本系统的设计与实现的过程中重要讲述了工资管理系统的系统设计部分,涉及功能模块设计、数据库结构设
13、计等。系统设计为整个程序构建了骨架,各个功能模块实现各个细节部分。 系统的具体设计根据系统分析阶段的结论将系统具体化,并完毕了各个模块的添加、修改、删除与查询的功能,直到最后形成一个完整的可行性的管理系统。 在整个设计阶段的工作和本实验报告的写作过程的经历将会使我们小组终生受益,并对我们此后的工作和发展产生深远的影响。由于设计时间比较仓促,所以该系统尚有许多不尽如意的地方,比如用户界面不够美观,犯错解决不够等多方面问题。这些都有待于进一步的改善。 参 考 文 献 1 数据库原理概述及应用,作者是魏善沛,张艳。2 JSP实用教程清华大学出版社。3 访问的链接: 附录A(源代码)SQL亮点语句:1
14、) -双重 左外连接,员工表数据全查出select employee.e_id,employee.e_name,employee.e_sex,branch.b_name,employee.j_name,bs_lev,bonus_salfrom (employee left join branch on employee.b_id=branch.b_id) left join bonusinformation on employee.e_id=bonusinformation.e_id 2) 创建触发器create trigger department_person -创建触发器on emplo
15、yee -监听员工表的增删,自动更新部门表的人数for insert,delete -监听employee表的增删 操作asupdate branch set b_number=b_number+1where b_id=(select b_id from inserted)update branch set b_number=b_number-1where b_id=(select b_id from deleted)Go3) 设立津贴默认值alter table bonusinformation -津贴默认0add constraint default_bonus default 0 for
16、 bonus_sal4) 创建触发器 ALTER trigger add_checkSal -创建触发器 on checkTime for insert,update -监听 asupdate checkTime set check_sal=latetimes*40+offtimes*60 -计算考勤 where e_id=(select e_id from inserted) Go源代码:Index.jsp index page !-* margin: 0;padding: 0;header padding: 1em 0;text-align: center;background-color
17、: #4a4;color: #fff;font-size: 300%;header span font-size: 50%;margin-left: 1em;color: #eee;footer position: absolute;bottom: 0;padding: 2em 0;text-align: center;background-color: #4a4;color: #fff;width: 100%;clear: both;.content width: 75%;overflow: auto;float: right;min-height: 600px;.nav float: le
18、ft;background-color: #eee;width: 25%;position: fixed;height: 100%;overflow: auto;ul list-style-type: none;margin-top: 1em;li a display: block;color: #000;padding: 8px 0 8px 16px;text-decoration: none;li a:hover background-color: #4a4;color: white;table width: 100%;border-collapse: collapse;margin: 2
19、m auto;th, td text-align: left;padding: 8px;tr:nth-child(even) background-color: #f2f200; 点击退出人力资源-工资管理员工基本信息列表添加员工员工工资信息部门信息其他编号姓名性别部门职位基本工资等级津贴2023321Bob男市场部经理F36202023327Jack男市场部职工D1500%List list = DbUtil.getALL();for(Employee e : list)pageContext.setAttribute(e,e); %$e.ename$e.esex$e.dname$e.job
20、$e.sal_level$e.bonusSalCopyright (c) 2023 DB1 All Rights Reserved. Edit.jsp !-* margin: 0;padding: 0;header padding: 1em 0;text-align: center;background-color: #4a4;color: #fff;font-size: 300%;header span font-size: 50%;margin-left: 1em;color: #eee;footer position: absolute;bottom: 0;padding: 2em 0;
21、text-align: center;background-color: #4a4;color: #fff;width: 100%;clear: both;.content width: 75%;overflow: auto;float: right;min-height: 300px;.nav float: left;background-color: #eee;width: 25%;position: fixed;height: 100%;overflow: auto;ul list-style-type: none;margin-top: 1em;li a display: block;
22、color: #000;padding: 8px 0 8px 16px;text-decoration: none;li a:hover background-color: #4a4;color: white;form margin: 2em 4em;form div margin-bottom: 1em;label display: inline-block;width: 6em;text-align: right;margin-right: 2em;input, select font-size: 150%;inputtype=submit padding: 0 4em;margin-le
23、ft: 6em;form span font-size: 80%;color: red;margin-left: 1em; 人力资源-工资管理编辑员工信息员工基本信息员工工资信息部门信息其他编号只读姓名只读性别只读部门编号职位基础工资等级Copyright (c) 2023 DB1 All Rights Reserved. DbUtil.javapackage com.ljheee.db;import java.sql.*;import java.util.ArrayList;import java.util.List;import com.ljheee.bean.Branch;import
24、com.ljheee.bean.Employee;/* * DB * author ljhee * */public class DbUtil static Connection con = null;static PreparedStatement stmt = null;static ResultSet rs = null; static String driver = com.microsoft.sqlserver.jdbc.SQLServerDriver; static String dbURL = jdbc:sqlserver:/localhost:1433;integratedSe
25、curity=true; DatabaseName=salarymanagement; statictry Class.forName(driver); con = DriverManager.getConnection(dbURL); catch (SQLException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace(); public static Employee getByID(String id)if(id.equals() return null; Employee e = n
26、ull;String sql = select * from employee where e_id=?;try stmt = con.prepareStatement(sql);stmt.setString(1, id);rs = stmt.executeQuery();while(rs.next()String e_id = rs.getString(1);String e_name = rs.getString(2);String e_sex = rs.getString(3);String b_name = rs.getString(4);String j_name = rs.getString(5);String bs_lev = rs.getString(6);/float bonus_sal = Float.parseFloat(rs.getString(7);e = new Employee(e_id, e_name, e_sex, b_name, j_name, bs_lev); catch (SQLException e1) e1.printStackTrace();return e;public static void saveEmployee(Employee e)if(e=null) return;String sql = insert into