资源描述
数据库课程实训(2017)
数据库课程实训报告
题目: 职工工资管理系统
专业
学生姓名
班级
学号
指导教师
完成日期
1
目 录
1 课题内容和要求 1
1.1课题描述 1
1.2 课题要求 1
2 需求分析 1
2.1 功能需求分析 1
2.2 数据需求分析 1
3 系统设计 4
3.1 功能模块设计 4
3.2 数据库概念设计 6
3.3 数据库逻辑设计 6
3.4 数据库物理设计 6
3.5 数据库表间联系 8
4系统实现 9
4.1 登录模块实现 9
4.2 添加信息/工资模块实现 9
4.3 查询职工信息模块实现 11
5 代码调试与功能测试 12
5.1 测试方案 12
5.2 测试结果 12
6 收获与体会 17
参考文献 18
附 录 19
附录1源程序部分清单 19
附录1.1登陆代码 19
附录1.2修改职工工资代码 22
附录1.3删除职工工资代码 25
3
职工工资管理系统
1 课题内容和要求
1.1课题描述
职工工资管理系统可定位于企业会计系统的一个子系统,该系统主要完成的工作为:录入各职工自身及工资情况、对已经存在的数据的修改、删除、可查询、统计系统中的数据等。为此因此职工工资管理系统的功能:读取文件信息、数据输入、显示、查找、增加、删除、修改、计算、列表等。
1.2 课题要求
1) 可以按照科室(经理室、财务科、技术科和销售科)增加、修改、删除职工的基本资料。
2) 职工信息应包含职称,分为高级、中级、初级,同一职称职工基本工资相同。
3) 职工工资由基本工资、奖金、扣除金额组成,其中奖金、扣除金额可每月输入不同数据。
4) 可以计算职工每月工资。
5) 可以按照科室、职称、月份统计职工工资。
6) 可以按照科室、职工号、职工名称查询职工工资。
2 需求分析
2.1 功能需求分析
1) 职工管理:职工管理可以包含两大模块档案管理和奖惩管理,其中档案管理可以管理职工的基本信息,管理员可以增加职工的信息,删除职工的信息,修改职工的信息和最基本的查看职工的信息,通过这一功能可以让管理者掌控职工的全部信息和人事变动信息。奖惩管理中管理员可以管理职工的奖惩信息,添加职工的奖惩信息,查看,修改和删除职工的奖惩信息。
2) 工资管理:管理员可以查看职工的工资情况,设置工资结构,通过学历,职称,教龄等一系列的信息来发放工资,规定到达哪一个级别需要发放多少的基本工资。管理员到每个月末的时候根据职工的基本工资和得到的福利津贴来结算职工的可得工资,并以此为依据来给职工发放。
3) 系统管理:系统管理管理包括部门管理和数据备份,通过部门管理让管理者通过计划,组织,激励,控制和领导等环节来协调人力,物力和财力资源,以期达成组织目标。数据备份是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。随着技术的不断发展,数据的海量增加,不少的企业开始采用网络备份。一般通过专业的数据存储管理软件结合相应的硬件和存储设备来实现。数据是一个系统运行的血液,是一个公司能否正常运行的关键,因此数据备份至关重要,因一些不可抗力因数而使数据丢失将造成非常严重的后果,为了保障生产、销售、开发的正常运行,企业用户应当采取先进、有效的措施,对数据进行备份、防范于未然。
2.2 数据需求分析
数据流图(图2.2.1-2.2.3):
退出系统
系统验证
查找用户登陆信息
用户
系统验证
员工信息管理
用户信息库
员工工资表
员工信息表
考勤信息表
用户名和密码
登陆失败
用户登陆信息
获取员工工资
员工工资信息
员工信息
获取员工信息
获取考勤信息
图2.2.1工资管理流图
保存到数据库
管理员
增加信息
添加数据库
修改信息
删除信息
数据备份
是否实现
Y
N
图2.2.2员工管理数据流图
基本信息
按员工编号查询
按员工姓名查询
提交数据
是否激活
显示查询信息
Y
N
图2.2.3员工信息查询数据流图
数据字典(图2.2.4-2.2.9):
图2.2.4档案信息数据项卡 图2.2.5部门信息数据项卡
图2.2.6职务信息数据项卡 图2.2.7变动信息数据项卡
图2.2.8登录信息数据项卡 图2.2.9工资信息数据项卡
3 系统设计
3.1 功能模块设计
1) 用户管理模块添加、编辑、删除登录用户。
2) 基本信息设置模块包括员工基本信息管理企业工资的管理津贴的管理。
3) 查询模块可组合各种条件查找各个部门的员工的基本信息和工资信息。
4) 打印报表模块工资报表的打印预览、打印。
职工工资管理系统
职工管理
工资管理
系统管理
用户管理
退出
档案管理
奖罚管理
考勤津贴
工资总结
部门管理
数据备份
操作员管理
修改密码
退出系统
图3.1系统功能模块图
3.2 数据库概念设计
部 门
部门名
经理名
经理编号
部门编号
任职
年份
性别
员工
学历
电话
员工编号
姓名
年龄
服务
管理员
用户编号
密码
用户名
发放
工资
发放时间
福利
发放地点
图3.2 总体E-R图
3.3 数据库逻辑设计
1) 部门关系模式(部门编号,部门名,经理编号,经理姓名)
2) 员工关系模式(员工编号,姓名,年龄,性别,学历,电话,部门编号)
3) 工资关系模式(发放地点,发放时间,福利,员工编号)
4) 管理员关系模式(用户编号,密码,用户名,员工编号)
5) 任职关系模式(部门编号,员工编号,年份)
3.4 数据库物理设计
列名
数据类型
允许空
默认值
是否主键
用户名
Varchar(50)
Not null
主键
密码
Int
Not null
权限
Varchar(50)
Not null
表3.4.1用户登录表(User)
列名
数据类型
允许空
默认值
是否主键
部门编号
Int
Not null
主键
部门名称
Varchar(50)
No null
表3.4.2部门表(department)
列名
数据类型
允许空
默认值
是否主键
员工编号
Int
Not null
主键
员工姓名
Varchar(50)
Not null
员工性别
Varchar(50)
Not null
‘男’
部门编号
Int
No null
出生日期
Varchar(50)
员工民族
Varchar(50)
婚姻状况
Varchar(50)
职务名称
Varchar(50)
No null
联系电话
Int
Not null
基本工资
Varchar(50)
Not null
表3.4.3员工表(employee)
列名
数据类型
允许空
默认值
是否主键
员工编号
int
Not null
是
部门编号
Int
Not null
基本工资
Varchar(50)
Not null
职务津贴
Varchar(50)
Not null
奖励金额
Varchar(50)
Not null
罚款金额
Varchar(50)
Not null
全勤奖金
Varchar(50)
Not null
加班工资
Varchar(50)
Not null
个人所得税
Varchar(50)
Not null
表3.4.4工资表(pay)
列名
数据类型
允许空
默认值
是否主键
考勤编号
Int
Not null
是
员工编号
Int
Not null
奖罚类型
Varchar(50)
Not null
奖罚内容
text
Not null
奖励金额
Varchar(50)
Not null
罚款金额
Varchar(50)
Not null
奖罚日期
Varchar(50)
Not null
撤销日期
Varchar(50)
Not null
表3.4.5考勤表(prize)
3.5 数据库表间联系
图3.5 数据关系图
4系统实现
4.1登录模块实现
系统用户登录模块主要用于完成对登录系统的用户的验证,只有合法的用户和正确的数据库配置才可以进入系统,否则给与相应的错误提示
登录窗体:验证用户名和密码是否正确,通过用户名和密码判断出改用户是否是本系统的合法用户,并且通过用户名和密码判断用户的权限是超级管理员还是一般用户,根据不同的用户权限授予相应的管理和使用本系统的权限。
控件:lblField控件数组,2个JLabel控件,2个JButton控件,2个TextBox控件,1个GroupBox控件,1个PictureBox控件。
属性:用户名,密码,管理员,普通用户。
事件:用户进行登陆。
数据库连接:import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class DBConnection public static Connection getConnection(){ Connection conn = null; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; String url = "jdbc:odbc:schoolData"; String username = "sa"; String password = "123456"; try { Class.forName(driver);
conn = DriverManager.getConnection(url,username,password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } }工具:SQL Server Management Studio,eclipse。
图4.1 登陆模块图
4.2 添加信息/工资模块实现
添加信息/工资模块主要用于完成对信息和工资的添加。
添加信息/工资模块包含2个控件数组,lblField是一个Label控件数组,用于显示字段名称,txtValue 用于输入这些字段的值;另外还有一个“添加”按钮和“取消”按钮,分别实现添加员工和退出窗体的功能
添加信息模块属性:工号,基本工资,扣除金额,奖金工资,补助;
添加工资模块属性:工号,姓名,性别,年龄,生日,所在科室。
事件:用户对系统进行对(信息/工资)添加操作。
数据库连接:import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnection { public static Connection getConnection(){ Connection conn = null; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; String url = "jdbc:odbc:schoolData"; String username = "sa"; String password = "123456"; try { Class.forName(driver);
conn = DriverManager.getConnection(url,username,password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } }工具:SQL Server Management Studio,eclipse。
图4.2.1添加职工工资模块图
图4.2.2 添加职工信息模块图
4.3 查询职工信息模块实现
控件:DataGrid控件,lblField控件,2个JLabel控件,2个JButton控件,1个TextBbox控件,JMenu控件,1个GroupBox控件,1个PictureBox控件。
属性:工号,姓名,性别,年龄,生日,科室。
事件:用户通过系统查询信息。
数据库连接:import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnection { public static Connection getConnection(){ Connection conn = null; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; String url = "jdbc:odbc:schoolData"; String username = "sa"; String password = "123456"; try { Class.forName(driver);
conn = DriverManager.getConnection(url,username,password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } }工具:SQL Server Management Studio,eclipse。
图4.3 查询职工信息图
5 代码调试与功能测试
5.1 测试方案
登陆系统添加职工信息输入工号1,姓名张,性别选男,年龄32,生日911122,所在科室财务科;
查询职工信息,输入工号20,查询;
修改职工信息,修改工号20,修改工号对应的值年龄,输入新值34;
删除职工信息,输入要删除的工号20,选择只删除职工信息
添加职工工资,输入工号20,基本工资100,扣除金额工资100,奖金工资500,补助100.
查询职工工资,输入工号20;
修改职工信息,输入要修改工号20,值选择扣除,输入新的值10;
删除职工工资,输入要删除的工号20,选择只删除职工工资。
5.2 测试结果
5.2.1添加职工信息
图5.2.1 添加职工信息
5.2.2查询职工信息
图5.2.2查询职工信息图
5.2.3修改职工信息
图5.2.3修改职工信息图
5.2.4删除职工信息
图5.2.4删除职工信息图
5.2.5添加职工工资
图5.2.5添加职工工资图
5.2.6查询职工工资
图5.2.6 查询职工工资图
5.2.7修改职工信息
图5.2.7修改职工信息图
5.2.8删除职工工资
图5.2.8删除职工工资图
6 收获与体会
通过这几周的课程设计实践,让我感觉收获颇多。刚开始的时候觉得无处下手,连该做什么都没有头绪,是老师和同学们给了我很大的帮助,老师提示我们先进行需求分析,了解用户的需求,根据用户的需求和《数据库原理课程设计报告模版》来设计程序。在不断的课程设计过程中,使我受到了一次用专业知识、专业技能分析和解决问题的全面系统的锻炼。使我在综合知识的选用方面,在应用软件开发的基本思想、方法方面,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。
在开发这个工资管理系统过程中我深刻地体会到了自学能力的重要性。毕竟在学校学习到的知识是有限的,而在开发系统的过程中仅凭原有的一点点知识是远远不够的,只有翻阅大量的资料才能学到更多的知识,才能实现其预期的功能。在开发过程中,遇到困难是在所难免的,期间通过指导教师的测评和给出的建议并和同学进行交流,从中明白了很多。开发一个系统,恒心和毅力也是不可缺少的,如果一遇到难题就心慌,想要放弃,那这样就不可能完成系统。同样,在开发过程当中,细心也是非常重要的,由于很多事项都要很注意才行,如果没有做到这一点,就会出错。
在这次的课程设计中,让我深深地体现到进行软件开发不是一件简单的事情,它需要设计者具有全面的专业知识、缜密的思维、严谨的工作态度以及较高的分析问题、解决问题的能力,而我在很多方面还有欠缺。最后,我要衷心感谢老师和我的同学在我的设计过程中给予我的极大帮助,使我能够及时、顺利地完成此次的设计。
27
参考文献
[1] 钱雪忠,王燕玲,林挺.数据库原理及技术[M].北京:清华大学出版社,2011.
[2] 钱雪忠,罗海驰,陈国俊.数据库原理及技术课程设计[M].北京:清华大学出版社,2014.
[3] 陈志泊,李冬梅,王春玲.数据库原理及应用教程.北京:人民邮电出版社,2002.
[4] 施伯乐,丁宝康.数据库技术.北京:科学出版社,2002.
[5] 王能斌.数据库系统教程.北京:电子工业出版社,2002.
[6] 吴晨、胡书敏、蔡威.Visual C# 2005 数据库通用模块开发与系统移植.北京:清华大学出版社.
附 录
附录1源程序部分清单
附录1.1登陆代码
package student;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
public class denglu implements ActionListener{
static String dbdriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
static String dburl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=students";
static String user="sa";
static String pass="123456";
String type="管理员";
JFrame f;
JLabel j1,j2,j3;
JTextField tf1;
JPasswordField tf2;
JButton b1,b2;
JRadioButton rb1,rb2;
denglu(){
f=new JFrame("登 陆");
f.setLayout(null);
tf1=new JTextField(20);
tf2=new JPasswordField(20);
tf2.setEchoChar('*');
b1=new JButton("确定");
b2=new JButton("退出");
j1=new JLabel("请输入用户名");
j2=new JLabel("请输入密码");
j3=new JLabel(" ");
rb1=new JRadioButton("管理员");
rb2=new JRadioButton("普通用户");
ButtonGroup g1=new ButtonGroup();
g1.add(rb1);
g1.add(rb2);
rb2.addActionListener(this);
rb1.addActionListener(this);
b1.addActionListener(this);
b2.addActionListener(this);
f.add(j1);
f.add(tf1);
f.add(j2);
f.add(tf2);
f.add(b1);
f.add(b2);
f.add(j3);
f.add(rb1);
f.add(rb2);
j1.setBounds(45,40,80,20);
j2.setBounds(45,90,80,20);
j3.setBounds(50,200,200,20);
b1.setBounds(60,180,70,30);
b2.setBounds(180,180,70,30);
tf1.setBounds(130,40,120,20);
tf2.setBounds(130,90,120,20);
rb1.setBounds(70,130,80,20);
rb2 .setBounds(180,130,80,20);
f.setSize(350,270);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(final WindowEvent e) {
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(rb2)){
type="普通用户";
}
if(e.getSource().equals(rb1)){
type="管理员";
}
if(e.getSource().equals(b1)){
String s1=String.valueOf(tf2.getPassword());
if(tf1.getText().equals("")||s1.equals(""))
{
// new JOptionPane().showMessageDialog(null,"用户名或密码不能为空!");
j3.setText("用户名或密码不能为空!");
}
else{
try{
Class.forName(dbdriver);
Connection con = DriverManager.getConnection(dburl,user,pass);
Statement stm=con.createStatement();
ResultSet res=stm.executeQuery(sql);
while (res.next()) {
if (tf1.getText().trim().equals(res.getString("sid")))
{/ if (tf2.getText().equals(res.getString("spw")))
{
javax.swing.JOptionPane.showMessageDialog(null, "登陆成功");
new Student1();
}
else {
// javax.swing.JOptionPane.showMessageDialog(null,"密码不正确");
j3.setText("密码输入有误!");
tf1.setText("");
tf2.setText("");
}
}
else{
j3.setText("用户名不存在!");
}
}
ResultSet res = stm.executeQuery("select * from suser where sid = '" + tf1.getText() + "'"); //读取数据库
if (!res.next())
{
JOptionPane.showMessageDialog(null, "不存在此用户!");
}
else if (! (res.getString("spw").trim().equals(s1))) {
JOptionPane.showMessageDialog(null, "密码错误!");
}
else if(!res.getString("type").trim().equals("普通用户")){
if(type.equals("普通用户")){
javax.swing.JOptionPane.showMessageDialog(null, "这是是管理员帐户 请使用管理员权限!!");
}
else {
javax.swing.JOptionPane.showMessageDialog(null, "管理员账户 登陆成功!!");
String sasa=res.getString("sid");
f.setVisible(false);
new Star(type,sasa);
}
}
else{
if(type.equals("管理员")){
javax.swing.JOptionPane.showMessageDialog(null, "这是普通用户 请使用普通用户权限!!");
}
else{
javax.swing.JOptionPane.showMessageDialog(null, "普通用户账户 登陆成功!!");
String sasa=res.getString("sid");
f.setVisible(false);
new Star("普通用户",sasa);
}
}
con.close();
}catch(Exception z){
z.printStackTrace();
System.out.println(z.getMessage());
}
}
}
if(e.getSource().equals(b2)){
System.exit(0);
}
}
public static void main(String []args)
{ new denglu();
}
}
附录1.2 修改职工工资代码
package student;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
public class xiugaichengji extends JInternalFrame implements ActionListener{
int n=0;
JLabel j1,j2,j3;
JTextField tf1,tf2;
JButton b1,b2;
JRadioButton rb1,rb2,rb3,rb4;
String ss1="";
xiugaichengji(){
super("修改职工信息");
setLayout(null);
j1=new JLabel("输入要修改的工号");
j2=new JLabel("在下列选择要修改的工号对应的值,一次只能修改一项");
j3=new JLabel("输入新的值");
tf1=new JTextField(20);
tf2=new JTextField(20);
b1=new JButton("修改");
b2=new JButton("取消");
展开阅读全文