资源描述
小型应用系统学年设计任务书
学 院
计算机与信息工程学院
专 业
网络工程
课程名称
小型应用系统设计
题 目
职工考勤管理信息系统
完成期限
自2016年7月26日至2016年8月26日共四周
内
容
及
任
务
一、项目的目的
采用Java和MySQL数据库技术,设计一个小型应用系统实现职工考勤管理信息。锻炼在软件设计过程中的业务逻辑和业务流程设计能力、以及图形化的用户界面设计和数据库的使用能力。
二、项目任务的主要内容和要求
采用Java和MySQL数据库技术,设计一个小型的应用系统实现职工考勤信息的管理,有图形化的用户界面。内容及要求如下:
(1)职工信息,包括职工编号、职工姓名、性别、年龄、职称等;
(2)出勤记录信息,包括上班打卡时间,下班打开时间,缺勤记录等;
(3)出差信息,包括出差起始时间、结束时间、统计总共天数等;
(4)请假信息,包括请假开始时间,结束时间,统计请假天数等;
(5)加班信息,包括加班开始时间、结束时间、统计加班总时间。
三、项目设计(研究)思路
先期设计数据库,画出数据库的E-R图,设计员工表,出差表,出勤表,加班表,请假表。然后设计和制作分别完成各个小项的功能,如员工表的增加、删除、查询、修改以及其他表格的查询。在各个小功能都完善后,接入数据库,再考虑设计一个主界面,将软件的各项功能集成在一起。小系统达成后,进行调试与界面编辑设计,最终完成设计。
四、具体成果形式和要求
(1)设计完成一个职工考勤管理信息系统。要求能对 MySQL 数据库进行增、删、改、查操作,并且具备图形化的用户界面。
(2)完成和提交一份职工考勤管理信息设计报告文档。
进
度
安
排
起止日期
工作内容
2016.7.25—8.10
根据软件设计要求,查询相关Java、数据库知识。
2016.8.11—8.23
构建数据库结构,编写程序应用界面。
2016.8.24—8.26
调试程序,完善功能,完成学年设计报告。
主
要
参
考
资
料
[1].王诚.JAVA 实用编程技术[M].北京:人民邮电出版社,2012.
[2].王雨竹.MySQL入门经典[M].北京:机械工业出版社,2013.
[3].张逸.软件设计精要与模式[M].北京:电子工业出版社,2007.
[4].王德永.数据库原理与应用[M].北京:人民邮电出版社,2011.
[5].[美]Bruce Eckel.Java编程思想[M].北京:机械工业出版社,2007.
[6].[美]Herbert Schildt著.马海军,景丽等译.Java实用教程(第三版).北京:清华大学出版社.2005.
指导教师
意见
(签字): 年 月 日
系(教研室)主任意见
(签字): 年 月 日
2
职工考勤管理信息系统设计说明书
(封面)
学院名称: 计算机与信息工程学院
班级名称: 网络工程14级2班
学生姓名: 朱赛赛
学 号: 2014211585
题 目: 职工考勤管理信息系统
指导教师
姓 名: 任倩
起止日期: 2016.7.26 – 2016.8.26
目录
第一部分:正文部分 1
一、选题背景 1
二、方案论证(或设计理念) 1
三、过程论述 1
3.1相关知识介绍 1
3.2系统功能模块图 2
3.3系统流程图 2
3.4数据库设计 3
3.5系统的各部分功能模块设计 4
3.5.1系统管理部分设计 4
3.5.2职工信息管理部分设计 10
3.5.3出勤信息查询 15
3.5.4出差信息查询 17
3.5.5请假信息查询 18
3.5.6加班信息查询 19
3.5.7系统主界面集成设计 21
四、结果分析 25
4.1登录系统测试 25
4.2员工管理测试 26
4.3出勤信息查询测试 26
4.4出差信息查询测试 26
4.5请假信息查询测试 27
4.6加班信息查询测试 27
五、结论(或总结) 28
第二部分:参考文献 28
第三部分:指导教师评语 30
第四部分:成绩评定 30
第一部分:正文部分
一、选题背景
计算机网络技术的发展,给信息时代的人们带来了很大的便利。如今在互联网上,随处可见各种类型的信息管理系统。随着信息技术的发展已经深入到社会的各个角落,各个大小企业都充分认识到传统的手工管理模式已经不能顺应时代的发展,为了企业更好的发展,纷纷开发适合自己的管理系统。相对于手工管理模式的效率低,易出错,手续繁琐,耗费大量的人力,物力,财力来说,职工考勤管理信息系统能够通过电脑化管理实现职工信息增加,删除,修改,以及出勤信息,出差信息,请假信息,加班信息的查询。
二、方案论证(或设计理念)
由于该系统所要满足的硬件是计算机,软件方面是采用JDK1.8 开发环境、
Eclipse 开发工具和MySQL 数据库,这些设备和软件易于实现和满足。采用的语言是Java 语言,具有可移植性,功能易于实现,界面比较美观,操作简单,能够移植到其他计算机上运行,与平台无关,能够满足更多的用户,使得该系统能被很多家庭所接受和使用。因此采用该Java+MySQL 方案来设计职工考勤管理信息系统。
三、过程论述
3.1 相关知识介绍
MySQL是一个关系型数据库管理系统,MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,其体积小、速度快、总体拥有成本低,致使其被广泛应用。
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。
3.2 系统功能模块图
在该小型应用系统中,用户可以直接执行管理员权限,对员工信息进行增删,修改,保存,实现出勤信息,出差信息,加班信息,请假信息的查询。系统功能如图3-1所示。
图3-1系统功能模块图
3.3 系统流程图
在该系统中,用户可以通过可以运行程序进入主界面,在主界面中可以管理各个功能模块,进而通过各个功能模块对后台数据库进行数据操作和管理。系统流程图如图3-2所示。
图3-2 系统流程图
3.4数据库设计
根据实体类型、属性和联系的方法,绘制职工,出勤,出差,加班,请假实体集间的实体-联系图。如图3-3所示。
图3-3 E-R图
本系统的基本功能是设计职工考勤管理信息,因此设置了5张表,分别是表Yuangong、表Chuqin、表Chuchai、表Qingjia、表Jiaban。对数据的增、删、改、查,主要在这四个表上进行。
(1) 员工表用来记录员工的基本信息,表结构如表3-1所示。
表3-1 员工表
属性名
类型
长度
字段约束
含义
Id
int
5
not null
编号
Name
char
4
not null
姓名
Sex
char
2
check
性别
Age
int
2
not null
年龄
Zhichen
char
4
null
职称
(2) 出勤表用来记录出勤的基本信息,表结构如表3-2所示。
表3-2 出勤表
属性名
类型
长度
字段约束
含义
Id
int
5
not null
编号
Am0
date
0
null
上午开始打卡
Pm0
date
0
null
下午开始打卡
Am1
date
0
null
上午结束打卡
Pm1
date
0
null
下午结束打卡
Judge
int
5
null
缺勤记录
(3) 出差表用来记录出差的基本信息,表结构如表3-3所示。
表3-3 出差表
属性名
类型
长度
字段约束
含义
Id
int
5
not null
编号
Beginday
date
0
null
开始时间
Endday
date
0
null
结束时间
Days
int
5
null
总时间
(4) 请假表用来记录请假的基本信息,表结构如表3-4所示。
表3-4请假表
属性名
类型
长度
字段约束
含义
Id
int
5
not null
编号
Beginday
date
0
null
开始时间
Endday
date
0
null
结束时间
Days
int
5
null
总时间
(5) 加班表用来记录加班的基本信息,表结构如表3-5所示。
表3-5 加班表
属性名
类型
长度
字段约束
含义
Id
int
5
not null
编号
BeginTime
date
0
null
开始时间
EndTime
date
0
null
结束时间
SumTime
double
6
null
总时间
3.5 系统的各部分功能模块设计
3.5.1系统管理部分设计
系统管理模块的主要功能有:用户登录、退出。该模块可以实现用户的登录,在程序中主要涉及的类为CheckPassword,在系统核对用户名和密码时需对数据库test中的user1表进行查询对比。登录界面如图3-4所示。
图3-4 用户登录界面
具体代码如下:
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
}
catch (Throwable e) {
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ExpandFrame frame = new ExpandFrame();
frame.setVisible(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}
public ExpandFrame() {
this.setTitle("登录窗体");
addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
do_this_windowOpened(e);
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 0, 221);
contentPane = new JPanel();
contentPane.setBackground(new Color(135, 206, 250));
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel label = new JLabel("登录模块");
label.setOpaque(true);
label.setBackground(new Color(245, 222, 179));
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setFont(new Font("SansSerif", Font.PLAIN, 30));
label.setBounds(6, 6, 422, 72);
contentPane.add(label);
JLabel label_1 = new JLabel("用户名:");
label_1.setBounds(31, 90, 55, 18);
contentPane.add(label_1);
JLabel label_2 = new JLabel("密码:");
label_2.setBounds(31, 134, 55, 18);
contentPane.add(label_2);
textField = new JTextField();
textField.setBounds(83, 84, 184, 30);
contentPane.add(textField);
textField.setColumns(10);
textField_1 = new JTextField();
textField_1.setBounds(83, 128, 184, 30);
contentPane.add(textField_1);
textField_1.setColumns(10);
JButton button = new JButton("登录");
button.setBounds(304, 84, 90, 30);
contentPane.add(button);
button.addActionListener(new Enter());
JButton button_1 = new JButton("关闭");
button_1.setBounds(304, 128, 90, 30);
contentPane.add(button_1);
setLocationRelativeTo(null);
button_1.addActionListener(new Close());
}
class Enter implements ActionListener{
public void actionPerformed(ActionEvent e) {
setVisible(false);
try{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e1){System.out.println("加载驱动程序失败!");}
try{
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
Statement sql=con.createStatement();
String uname=textField.getText().trim();
String Mima=textField_1.getText().trim();
String queryMima="select * from user1 where 用户名='"+uname+"' and 密码='"+Mima+"'";
ResultSet rs=sql.executeQuery(queryMima);
if(rs.next())
{
JOptionPane.showMessageDialog(null,"登录成功!","",JOptionPane.YES_NO_OPTION);
MainFrame sf=new MainFrame();
sf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sf.show();
}else{
JOptionPane.showMessageDialog(null,"该用户不存在","提示!",JOptionPane.YES_NO_OPTION);
}
textField.setText("");
textField_1.setText("");
} catch(SQLException g)
{
System.out.println("E Code"+g.getErrorCode());
System.out.println("E M"+g.getMessage());
}
}
}
class Close implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
}
class winClose extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
(e.getWindow()).dispose();
System.exit(0);
}
}
protected void do_this_windowOpened(WindowEvent e) {
final int height = getHeight();// 记录窗体高度
new Thread() {// 创建新线程
public void run() {
Rectangle rec = getBounds();
for (int i = 0; i < frameWidth; i += 10) {// 循环拉伸窗体
setBounds(rec.x - i / 2, rec.y, i, height);// 不断
try {
Thread.sleep(10);// 线程休眠10毫秒
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
}.start();// 启动线程
}
public static void DISPOSE_ON_CLOSE() {
// TODO Auto-generated method stub
}
}
3.5.2职工信息管理部分设计
职工信息管理部分有员工信息增添、查询、职工出差信息查询、职工请假信息查询、职工加班信息查询四个主模块。如图3-5所示。
图3-5 职工信息查询选项
员工资料管理部分有查看所有员工信息,添加员工信息,修改员工信息,删除员工信息五个模块。主要通过类来对数据库进行操作,如添加员工信息。如图3-6所示。
图3-6 添加员工信息
具体代码如下:
public static int InsertYuangongInfo(Yuangong yuangong) {
Connection conn = getConn();
int i = 0;
String sql = "Insert into Yuangong (ID,Name,Sex,Age,Zhichen) values(?,?,?,?,?)";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setInt(1, yuangong.getId());
pstmt.setString(2, yuangong.getName());
pstmt.setString(3, yuangong.getSex());
pstmt.setInt(4, yuangong.getAge());
pstmt.setString(5, yuangong.getZhichen());
i = pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
查询员工信息。如图3-7所示。
图3-7 查询员工信息
具体代码如下:
public static Yuangong getYuangongInfo(int id) {
Connection conn = getConn();
String sql = "Select * from Yuangong where id = '" + id + "'";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement)conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
Yuangong yuangong = new Yuangong();
while (rs.next()) {
yuangong.setId(rs.getInt("ID"));
yuangong.setName(rs.getString("Name"));
yuangong.setSex(rs.getString("Sex"));
yuangong.setAge(rs.getInt("Age"));
yuangong.setZhichen(rs.getString("Zhichen"));
}
return yuangong;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
删除员工信息。如图3-8所示。
图3-8 删除员工信息
具体代码如下:
public static int DeleteYuangongInfo(int id) {
Connection conn = getConn();
int i = 0;
String sql = "Delete from Yuangong where ID='" + id + "'";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
i = pstmt.executeUpdate();
System.out.println("resutl: " + i);
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
修改员工信息。如图3-9所示。
图3-9修改员工信息
具体代码如下:
public static int UpdateYuangongInfo(Yuangong yuangong) {
Connection conn = getConn();
int i = 0;
String sql = "Update Yuangong set Name = '" + yuangong.getName() + "',Sex = '"+ yuangong.getSex() + "',Age = '" + yuangong.getAge() + "',Zhichen = '" + yuangong.getZhichen() + "' where ID='" + yuangong.getId() + "'";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
i = pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();}
return i;
}
查询所有员工信息。如图3-10所示。
图3-10 查询所有员工信息
具体代码如下:
public static Yuangong[] getAllYuangongInfo() {
Connection conn = getConn();
String sql = "Select * from Yuangong";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement)conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
rs.last(); //移到最后一行
int rows = rs.getRow(); //得到当前行号,也就是记录数
rs.beforeFirst(); //如果还要用结果集,就把指针再移到初始化的位置
Yuangong[] yuangong = new Yuangong[rows];
int i = 0;
while (rs.next()) {
yuangong[i] = new Yuangong();
yuangong[i].setId(rs.getInt("ID"));
yuangong[i].setName(rs.getString("Name"));
yuangong[i].setSex(rs.getString("Sex"));
yuangong[i].setAge(rs.getInt("Age"));
yuangong[i].setZhichen(rs.getString("Zhichen"));
i++;
}
return yuangong;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
3.5.3出勤信息查询
查询所有员工的出勤信息。如图3-11所示。
图3-11 出勤信息查询
具体代码如下:
public static Chuqin[] getAllChuqinInfo() throws ParseException {
Connection conn = getConn();
String sql = "SELECT a.Name,b.AM0,b.AM1,b.PM0,b.PM1,b.Judge,a.ID FROM Yuangong a,Chuqin b WHERE a.ID = b.ID";
PreparedStatement pstmt;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
pstmt = (PreparedStatement)conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
rs.last(); //移到最后一行
int rows = rs.getRow(); //得到当前行号,也就是记录数
rs.beforeFirst(); //如果还要用结果集,就把指针再移到初始化的位置
Chuqin[] chuqin = new Chuqin[rows];
int i = 0;
while (rs.next()) {
chuqin[i] = new Chuqin();
chuqin[i].setId(rs.getInt(7));
chuqin[i].setAMdate0(sdf.parse(rs.getDate(2) + " " + rs.getTime(2)));
chuqin[i].setAMdate1(sdf.parse(rs.getDate(3) + " " + rs.getTime(3)));
chuqin[i].setPMdate0(sdf.parse(rs.getDate(4) + " " + rs.getTime(4)));
chuqin[i].setPMdate1(sdf.parse(rs.getDate(5) + " " + rs.getTime(5)));
chuqin[i].setJudge(rs.getString(6));
i++;
}
return chuqin;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
3.5.4 出差信息查询
查询所有员工的出差信息。如图3-12所示。
图3-12 出差信息查询
具体代码如下:
public static Chuchai[] getAllChuchaiInfo() throws ParseException {
Connection conn = getConn();
String sql = "SELECT a.Name,b.BeginDay,b.EndDay,b.Days,a.ID FROM Yuangong a,Chuchai b WHERE a.ID = b.ID";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement)conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
rs.last(); //移到最后一行
int rows = rs.getRow(); //得到当前行号,也就是记录数
rs.beforeFirst(); //如果还要用结果集,就把指针再移到初始化的位置
Chuchai[] chuchai = new Chuchai[rows];
int i = 0;
while (
展开阅读全文