资源描述
数据库课程设计报告
课题名称: 工资管理系统
指导教师: 魏善沛
专业班级: 14级软件工程一班
小组成员: 学号 姓名 (组长)
20234612 冯婷婷
20234619 李建华(组长)
20234630 杨美梅
20234632 张艺瀚
20234633 赵飞
完毕日期:2023 年 6 月 8 日
目录
1. 设计目的 1
2. 开发环境 1
3. 系统设计 1
3.1需求分析 1
3.1.1数据需求 1
3.1.2事物需求 2
3.2系统流程图 2
4. 数据库设计 4
4.1数据流图 4
4.2数据字典 5
4.2.1数据结构描述 5
4.2.2数据流的描述 5
4.2.3重要数据存储的定义 6
4.3概念模型设计(E-R图) 7
4.4逻辑结构设计 11
4.4.1关系模式 11
4.4.2基本表 12
5. 应用程序设计 13
5.1主窗体模块 13
5.2员工信息模块 14
5.3部门信息模块 15
结 论 16
参 考 文 献 16
附录A(源代码) 16
SQL亮点语句: 16
源代码: 17
评分表: 37
1. 设计目的
数据库原理概述及应用课程设计是软件工程专业集中实践性环节之一,是学习完《数据库原理概述及应用》课程后进行的一次全面的综合练习。其目的在于加深对数据库基础理论和基本知识的理解,掌握使用数据库进行软件设计的基本方法,提高运用数据库解决实际问题的能力,最终实现对于给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之可以有效地存储数据,满足各种用户的应用需求(信息规定和解决规定)。同时,本次设计对于同学将来的毕业设计和具体工作实践将有重要的意义。针对于本次设计的课题工资管理系统,通过E-R图,逻辑结构、物理结构、概念结构三方面分析该系统的实体、属性、以及之间的联系,从各个方面全面了解分析课题,同时,也更掌握了基础知识,进一步了解各部分含义。
2. 开发环境
SQL Server 2023 ,JDK1.8,Eclipse EE版本。
3. 系统设计
3.1需求分析
3.1.1数据需求
工资管理系统系是为了更好地实现工资各种信息的管理以及各种信息的安全性管理。本系统重要对查看员工的各种工资信息需求所设计的,可以很好的管理数据。 本系统的重要功能由以下几个部分组成:
⑴ 系统功能的基本规定:
① 员工每个工种基本工资的设定。
② 加班津贴管理,根据加班时间和类型给予不同的加班津贴。
③ 按照不同工种的基本工资情况、员工的考勤情况产生员工的每月的月工资。
④ 员工年终奖金的生成,员工的年终奖金计算公式=(员工本年度的工资总和+津贴的总和)/12。
⑤ 公司工资报表。可以查询单个员工的工资情况、每个部门的工资情况、按月的工资记录,并可以打印。
⑥ 各类单项和多条件组合查询。
⑦ 导出查询和记录的结果,形成Excel表。
⑵ 数据库规定:在数据库中至少应当包含下列数据表:
① 员工考勤情况表。
② 员工工种情况表,反映员工的工种、等级,基本工资等信息。
③ 员工津贴信息表,反映员工的加班时间,加班类别、加班天数、津贴情况等。
④ 员工基本信息表。
⑤ 员工月工资表。
3.1.2事物需求
(1)在员工信息管理部分,规定:
A.可以查询员工信息
B.可以对员工信息进行添加删除的操作
(2) 在部门信息管理部分,规定:
A.可以查询部门信息
B.可以对部门信息进行添加删除的操作
3.2系统流程图
图3.2 系统流程图
4. 数据库设计
4.1数据流图
图4.1数据流图
4.2数据字典
4.2.1数据结构描述
名称:员工
含义说明:员工信息
组成结构:员工编号+员工姓名+性别+所属部门+职称
名称:工资
含义说明:工资信息
组成结构:员工编号+基本工资+岗位工资+津贴工资+扣除薪酬+实发工资
名称:部门
含义说明:部门信息
组成结构:部门编号+部门名称+部门人数
4.2.2数据流的描述
数据流名称:员工信息添加 简述:新员工信息录入
数据流来源:公司管理者
数据流去向:员工信息
数据流组成:员工编号+员工姓名+性别+所属部门+职称
数据流名称:员工信息修改 简述:员工信息错误或员工调动
数据流来源:公司管理者
数据流去向:员工信息
数据流组成:员工编号+员工姓名+性别+所属部门+职称
数据流名称:员工信息删除 简述:员工离职
数据流来源:公司管理者
数据流去向:员工信息
数据流组成:员工编号+员工姓名+性别+所属部门+职称
数据流名称:工资添加 简述:公司对工资进行添加
数据流来源:公司管理者
数据流去向:工资信息
数据流组成:员工编号+基本工资+岗位工资+津贴工资+扣除薪酬+实发工资
数据流名称:工资修改 简述:公司对工资进行修改
数据流来源:公司管理者
数据流去向:工资信息
数据流组成:员工编号+基本工资+岗位工资+津贴工资+扣除薪酬+实发工资
4.2.3重要数据存储的定义
存储名称:员工记录
输入:员工基本信息
输出:员工所有信息
数据结构:员工编号+员工姓名+性别+所属部门+职称
存储名称:部门记录
输入:部门基本信息
输出:部门所有信息
数据结构:部门编号+部门名称+部门人数
存储名称:工资记录
输入:员工工资信息
输出:员工所有工资信息
数据结构:员工编号+基本工资+岗位工资+津贴工资+扣除薪酬+实发工资
存储名称:考勤记录
输入:员工考勤信息
输出:员工所有考勤信息
数据结构:员工编号+迟到次数+缺席次数
存储名称:津贴记录
输入:员工津贴信息
输出:员工所有津贴信息
数据结构:员工编号+加班时间+加班天数+加班类型+津贴资金
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关系模式
员工信息(员工编号,员工姓名,性别,所属部门,职称)
部门信息(部门编号,部门名称,部门人数)
基本工资(工资级别,基本工资,岗位工资)
考勤信息(员工编号,迟到次数,缺席次数)
津贴信息(员工编号,加班时间,加班天数,加班类型,津贴资金)
工种情况(工资级别,岗位工资)
工资信息(员工编号,基本工资,岗位工资,津贴工资,扣除薪酬,实发工资)
4.4.2基本表
表1员工基本信息表(dbo.employee)
员工编号
e_id
varchar(8)
主键,不允许反复
员工姓名
e_name
varchar(8)
性别
e_sex
varchar(2)
所属部门
b_id
varchar(4)
外键
职称
j_name
varchar(12)
表2部门信息表(dbo.brank)
部门编号
b_id
varchar(8)
主键,不允许反复
部门名称
b_name
varchar(20)
部门人数
b_number
int
表3基本工资表(dbo.basesalary)
工资级别
bs_lev
varchar(2)
主键,不允许反复
基本工资
bs_sal
numeric(8, 2)
表4考勤信息表(dbo.check)
员工编号
e_id
varchar(8)
主键,不允许反复
迟到次数
latetimes
numeric(3, 0)
缺席次数
offtimes
numeric(3, 0)
表5津贴信息表(dbo.bonusinformation)
员工编号
e_id
varchar(8)
主键,不允许反复
加班时间
etr_time
numeric(8, 1)
加班天数
etr_day
numeric(2, 1)
加班类型
etr_type
varchar(8)
津贴资金
bonus_sal
numeric(8, 2)
表6工种情况表(dbo.jobsalary)
工资级别
js_lev
varchar(2)
主键,不允许反复
岗位工资
js_sal
numeric(8, 2)
表7工资信息表(dbo.salaryinfomation)
员工编号
e_id
varchar(8)
主键,不允许反复;外键
基本工资
bs_sal
numeric(8, 2)
岗位工资
js_sal
numeric(8, 2)
津贴工资
bonus_sal
numeric(8, 2)
扣除薪酬
check_sal
numeric(8, 2)
实发工资
get_sal
numeric(8, 2)
5. 应用程序设计
5.1主窗体模块
进入登陆页面,如下图:
图5.1.1 登录
登陆后进入系统主界面,如下图:
图5.1.2 系统主界面
5.2员工信息模块
(1) 查询,分别点击“编辑”“删除”按钮可修改、删除员工信息,如下图:
图5.2.1 查询修改员工信息
图5.2.2 修改员工信息
5.3部门信息模块
(1)查询.删除所有部门信息,如下图:
图5.3.1 查询删除部门信息
结 论
通过两周的不断实践与探索,人力资源-工资管理统的设计与实现己经完毕,基本上达成了预期的设计规定和目的。 一个完整的人力资源-工资管理统就创建完毕了。在本系统的设计与实现的过程中重要讲述了工资管理系统的系统设计部分,涉及功能模块设计、数据库结构设计等。系统设计为整个程序构建了骨架,各个功能模块实现各个细节部分。 系统的具体设计根据系统分析阶段的结论将系统具体化,并完毕了各个模块的添加、修改、删除与查询的功能,直到最后形成一个完整的可行性的管理系统。 在整个设计阶段的工作和本实验报告的写作过程的经历将会使我们小组终生受益,并对我们此后的工作和发展产生深远的影响。由于设计时间比较仓促,所以该系统尚有许多不尽如意的地方,比如用户界面不够美观,犯错解决不够等多方面问题。这些都有待于进一步的改善。
参 考 文 献
1. 《数据库原理概述及应用》,作者是魏善沛,张艳。
2. 《JSP实用教程》清华大学出版社。
3. 访问的链接:
附录A(源代码)
SQL亮点语句:
1) --双重 左外连接,员工表数据全查出
select employee.e_id,employee.e_name,employee.e_sex,branch.b_name,employee.j_name,bs_lev,bonus_sal
from (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 employee --监听员工表的增删,自动更新部门表的人数
for insert,delete --监听employee表的增删 操作
as
update branch set b_number=b_number+1
where b_id=(select b_id from inserted)
update branch set b_number=b_number-1
where b_id=(select b_id from deleted)
Go
3) 设立津贴默认值
alter table bonusinformation --津贴默认0
add constraint default_bonus default 0 for bonus_sal
4) 创建触发器
ALTER trigger add_checkSal --创建触发器
on checkTime
for insert,update --监听
as
update checkTime set check_sal=latetimes*40+offtimes*60 --计算考勤 where e_id=(select e_id from inserted)
Go
源代码:
Index.jsp
<%@ page language="java" import="java.util.*,com.ljheee.bean.Employee,com.ljheee.db.DbUtil" pageEncoding="UTF-8"%>
<html>
<head>
<title>index page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<style media="screen">
* {
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;
text-align: center;
background-color: #4a4;
color: #fff;
width: 100%;
clear: both;
}
.content {
width: 75%;
overflow: auto;
float: right;
min-height: 600px;
}
.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;
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: 2m auto;
}
th, td {
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #f2f200;
}
</style>
</head>
<body>
<header>
<div style="float:right;font-size:18px;"><a href=':8080/DB1/Exit.jsp'>点击退出</a></div>
人力资源--工资管理<span>员工基本信息列表</span>
</header>
<div class="nav">
<ul>
<li><a href="new.html">添加员工</a></li>
<li><a href="sal.jsp">员工工资信息</a></li>
<li><a href="branch.jsp">部门信息</a></li>
<li><a href="aboutus.jsp">其他</a></li>
</ul>
</div>
<div class="content">
<table>
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>部门</th>
<th>职位</th>
<th>基本工资等级</th>
<th>津贴</th>
</tr>
<tr>
<td>2023321</td>
<td>Bob</td>
<td>男</td>
<td>市场部</td>
<td>经理</td>
<td>F</td>
<td>3620</td>
<td>
<form action="#" method="get">
<input type="hidden" name="id" value="">
<input type="submit" value="编辑">
</form>
</td>
<td>
<form action="#" method="post">
<input type="hidden" name="id" value="">
<input type="submit" value="删除">
</form>
</td>
</tr>
<tr>
<td>2023327</td>
<td>Jack</td>
<td>男</td>
<td>市场部</td>
<td>职工</td>
<td>D</td>
<td>1500</td>
<td>
<form action="#" method="get">
<input type="hidden" name="id" value="">
<input type="submit" value="编辑">
</form>
</td>
<td>
<form action="#" method="post">
<input type="hidden" name="id" value="">
<input type="submit" value="删除">
</form>
</td>
</tr>
<%
List<Employee> list = DbUtil.getALL();
for(Employee e : list){
pageContext.setAttribute("e",e);
%>
<tr>
<td><%=e.getEid() %></td>
<td>${e.ename}</td>
<td>${e.esex}</td>
<td>${e.dname}</td>
<td>${e.job}</td>
<td>${e.sal_level}</td>
<td>${e.bonusSal}</td>
<td>
<form action="treat" method="get">
<input type="hidden" name="eid" value="${e.eid}">
<input type="hidden" name="yemian" value="updateE" />
<input type="submit" value="编辑">
</form>
</td>
<td>
<form action="treat" method="post">
<input type="hidden" name="deleteE_id" value="${e.eid}">
<input type="hidden" name="yemian" value="deleteE" />
<input type="submit" value="删除">
</form>
</td>
</tr>
<%} %>
</table>
</div>
<footer>Copyright (c) 2023 DB1 All Rights Reserved.</footer>
</body>
</html>
Edit.jsp
<%@ page language="java" import="java.util.*,com.ljheee.bean.Employee" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<style media="screen">
* {
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;
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;
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%;
}
input[type=submit] {
padding: 0 4em;
margin-left: 6em;
}
form span {
font-size: 80%;
color: red;
margin-left: 1em;
}
</style>
</head>
<body>
<header>
人力资源--工资管理<span>编辑员工信息</span>
</header>
<div class="nav">
<ul>
<li><a href="index.jsp">员工基本信息</a></li>
<li><a href="sal.jsp">员工工资信息</a></li>
<li><a href="branch.jsp">部门信息</a></li>
<li><a href="aboutus.jsp">其他</a></li>
</ul>
</div>
<div class="content">
<form action="treat" method="post">
<div>
<label>编号</label>
<input name="id" value="${ee.eid}" readonly="readonly"><span>只读</span>
</div>
<div>
<label>姓名</label>
<input name="name" value="${ee.ename}" readonly="readonly"><span>只读</span>
</div>
<div>
<label>性别</label>
<input name="sex" value="${ee.esex}" readonly="readonly"><span>只读</span>
</div>
<div>
<label>部门编号</label>
<input name="dep" placeholder="department,如b4" required="required">
</div>
<div>
<label>职位</label>
<input name="job" placeholder="job,如:经理" required="required">
</div>
<div>
<label>基础工资等级</label>
<input name="sal_level" placeholder="base salary level,如:F" required="required">
</div>
<div>
<input type="hidden" name="yemian" value="update" />
<input type="submit" value="更新">
</div>
</form>
</div>
<footer>Copyright (c) 2023 DB1 All Rights Reserved.</footer>
</body>
</html>
DbUtil.java
package com.ljheee.db;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import com.ljheee.bean.Branch;
import 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;integratedSecurity=true; DatabaseName=salarymanagement";
static{
try {
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 = null;
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
展开阅读全文