资源描述
《数据库系统原理课程设计报告》
考勤管理系统
学生姓名:
系 别:
班 级:
专 业:
指导教师:
职工考勤管理信息系统的设计与实现
一、绪论
随着科学技术的不断发展,计算机科学日渐进步,其强大的功能耳闻目睹,它已进入人类社会的各个领域并发挥着越来越重要的作用。由于在之前学习课程像c++等的课程设计中遇到过要求实现功能与此实验相似的情况,所以选择此课题作为课程设计作业。此职工考勤管理信息系统的实现利用了计算机的相关技术,满足了单位日常考勤管理的需求,使单位考勤过程更加快速,安全,高效的信息管理系统。本系统基于C/S模式,采用java语言与SQL SERVER 2000数据库开发完成,实现了职工出差信息管理,职工请假信息管理功能。其中职工出差信息管理主要包括出差起始时间、结束时间、统计总共天数等,职工请假信息管理主要包括请假开始时间,结束时间,统计请假天数等。本系统能基本满足用户在考勤管理方面的需求,界面较简洁,符合用户使用习惯能实际地提高单位的考勤管理的效率。
二、系统分析
随着企业人事管理的日趋复杂和企业人员的增多,企业的考勤管理变得越来越复杂。规范的考勤管理是现代企业提高管理效益的重要保证,而传统的人工管理存在着效率低、不易统计、成本高和易出错等弊端,已经无法适应现代企业的需求。。
本实验实现的职工信息管理系统主要包括以下功能:
(1)提供简单、方便的操作;
(2)根据企业原来的考勤管理制度,为企业不同管理层次提供相应的功能;
(3)通过考勤管理无纸化的实现,使企业的考勤管理更加科学规范;
(4)节省考勤管理的成本;
(5)对系统提供必要的权限管理,具备一定的安全性管理功能。包括输入登录用户名和密码;
(6)为企业实现整体信息化的其他相关系统提供必要的数据支持;
(7) 完成数据的录入和修改,并提交数据库保存。其中的数据包括:出差信息、请假信息;
(8)系统功能基本要求:出差信息,包括出差起始时间、结束时间、统计总共天数等;请假信息,包括请假开始时间,结束时间,统计请假天数等;
三、系统设计
3.1功能模块设计
本系统采用C/S体系结构,客户端负责提供表达逻辑、显示用户界面信息、访问数据库服务器,采用PowerBuilder9作为开发工具;服务器端则用于提供数据服务,采用SQL Server2000作为数据库管理系统。
本系统按照功能划分为以下四个模块:职工请假信息管理(包括请假开始时间,结束时间,统计请假天数等),职工出差信息管理(包括出差起始时间、结束时间、统计总共天数等)系统的功能模块图如图1所示:
职工考勤管理信息系统
请假信息管理
出差信息管理
图1 系统的功能模块图
3.2数据库设计
3.2.1数据库概念结构设计
本系统主要有职工信息、出差信息、请假信息、加班信息、出勤信息和职工考勤信息六个实体集。一个职工考勤信息包含有一个职工信息、一个出差信息、一个请假信息、一个出勤信息和一个加班信息。每个信息中又由多个属性组成。
(1)每个本系统的E-R图如图2.1所示:
用户
口令
用户名
图2.1 系统的E-R图
(2)图2.2为出差E-R图
出差记录
职工编号
出差编号
缺勤记录
开始时间
结束时间
图2.2 系统的职工出差E-R图
(3)图2.3为请假E-R图
请假记录
请假编号
编号
请假统计
开始时间
结束时间
图2.3 系统中职工请假E-R图
3.2.2数据库逻辑结构设计
在物理结构中,数据的基本存取单位是存储记录。有了逻辑结构以后,就可以设计存储记录结构,一个存储记录可以与多个逻辑记录相对应。存储记录就包括记录的组成,数据项的类型和长度等。
根据关系模型的转换原则,上面的E—R图可转换为如下所示的关系模型:
evection(Wnum,Wname,Wleave,Wreturn,Wdays)
其中各项含义分别为:出差信息(职工编号,职工姓名,出差开始时间,出差结束时间,出差天数)
vacation(Wnum,Wname,Wstart,Wend,Wvadays)
其中各项含义分别为:请假信息(职工编号,职工姓名,请假开始时间,请假结束时间,请假天数)
load(User,psw)
其中各项含义分别为:登录(用户名,口令)
根据上面的E-R图设计及关系模型的设计,得出数据表的设计,在本系统中主要的数据表如下:
表1 出差信息表evecion的表结构
主码
列 名
数据类型
宽度
小数位
空否
备 注
Pk
Wnum
Char
20
N
职工编号
Pk
Wname
Char
20
Y
姓名
Wleave
Datetime
Y
出差开始时间
Wreturn
Datetime
Y
出差结束时间
Wdays
Smallint
Y
出差天数
创建表1的SQL语句如下:
create table evection
(
Wnum char(20),
Wname char(10),
primary key(Wnum,Wname),
foreign key (Wnum,Wname) references zhigongxinxi4(Wnum,Wname)
on delete cascade on update cascade,
Wleave datetime,
Wreturn datetime,
Wdays smallint,
)
表2 请假信息表vacation的表结构
主码
列 名
数据类型
宽度
小数位
空否
备 注
Pk
Wnum
Char
20
N
职工编号
Wname
Char
20
N
姓名
Wstart
Datetime
Y
请假开始时间
Wend
Datetime
Y
请假结束时间
Wvadays
Smallint
Y
请假天数
创建表3的SQL语句如下:
create table qingjia
(
Wnum char(20),
Wname char(10),
primary key (Wnum,Wname),
foreign key (Wnum,Wname) references zhigongxinxi4(Wnum,Wname)
on delete cascade on update cascade,
Wstart datetime,
Wend datetime,
Wvadays smallint,
)
表3 登录表load的表结构
主码
列 名
数据类型
宽度
小数位
空否
备 注
Pk
User
Char
20
N
用户名
psw
Char
20
Y
口令
创建表3的SQL语句如下:
create table load
(
User char(20) primary key,
psw char(20),
)
四、系统实现
结合Eclipse进行数据库应用开发的特点,设计过程可按如下步骤进行:
l 创建主函数,设计一个Frame框架,用来调用相关类的实例,实现操作功能;
l 创建职工请假类和出差类;
l 创建类的事件监听,用来响应添加,查询,浏览,删除等功能;
l 创建数据窗口和数据源,将数据库与应用程序相连接;
l 创建各个类的窗口中放置所需控件和可视化用户图形界面。
4.1 创建主函数,设计一个Frame框架,用来调用相关类的实例,实现操作功能;
利用Eclipse创建工程WorkManage,进一步创建包workManageg,在创建主类名为WorkManage,注释为“职工考勤信息管理系统”。按照下面的方法,编写相应代码:
⑴点击“新建类”新建一个类,名为“WorkManage”。
⑵创建主函数,并创建一个Frame容器用来添加各种组件,程序代码如下:
package workManae;
/* 职工考勤信息管理管理系统。程序名:WorkManage.java
*
*/
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import java.util.Date;
import javax.swing.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.applet.*;
class WorkManage4 {
public static void main(String args[]) throws ParseException{
dbframe db = new dbframe("职工考勤信息管理系统");
}
}
// 职工考勤信息管理系统主界面
class dbframe extends Frame implements ActionListener {
//成员变量
//登录
boolean canLogin;
Label labelLogIn = new Label("系统登录");
Label labelUser=new Label("用户名:");
Label labelPassword=new Label("口令:");
TextField textFieldUser=new TextField();
TextField textFieldPassword=new TextField();
JButton jButtonConfirm=new JButton("确定");
JButton jButtonExit=new JButton("退出");
String user = new String();
String tuser = new String();
String tpassword = new String();
// //登录
MenuBar navigation = new MenuBar(); // 建立菜单栏
// 建立“功能”菜单组
Menu menuWorkerInformation=new Menu("职工信息");
Menu menuWentOnErrands=new Menu("出差管理");
Menu menuGoToWork=new Menu("出勤管理");
Menu menuLeave=new Menu("请假管理");
Menu menuWorkOverTime=new Menu("加班管理");
Menu menuSystemManage=new Menu("系统管理");
// 建立“帮助”菜单组
}
4.2创建请假类和出差类;
1.出差类
MenuItem menuItemWentOnErrandsQuery = new MenuItem("查询出差记录");
MenuItem menumItemWentOnErrandsAddtion= new MenuItem("添加出差记录");
MenuItem menuItemWentOnErrandsDelete= new MenuItem("删除出差记录");
MenuItem menuItemWentOnErrandsModify= new MenuItem("修改出差记录");
MenuItem menuItemchuchailiulan = new MenuItem("浏览出差记录");
//出差查询
class Panelchuchaichaxun extends Panel implements ActionListener {
Choice cchaxun;
TextField tchaxun;
Button btnchaxun;
TextArea tachaxun;
Panelchuchaichaxun() {
setLayout(null);
cchaxun = new Choice(); // 创建下拉菜单
cchaxun.add("职工编号");
cchaxun.add("职工姓名");
tchaxun = new TextField();
btnchaxun = new Button("查询"); // 创建按钮
tachaxun = new TextArea(); // 创建多行文本框
add(cchaxun);
add(tchaxun);
add(btnchaxun);
add(tachaxun);
tchaxun.setText("");
cchaxun.setBounds(10, 60, 70, 20);
tchaxun.setBounds(85, 60, 180, 20);
btnchaxun.setBounds(275, 60, 40, 20);
tachaxun.setBounds(10, 90, 305, 145);
cchaxun.select(0); // 下拉菜单的初始选项
setSize(340, 250); // 设置窗口大小
setBackground(Color.white);
setVisible(true);
btnchaxun.addActionListener(this);
validate();
}
//出差修改
class Panelchuchaixiugai extends Panel implements ActionListener {
TextField textFieldWorkerName, textFieldWorkerNumber, textFieldchuchaiqishiriqi, textFieldchuchaijieshuriqi,
textFieldchuchaitianshu;
Label labelWorkerName, labelWorkerNumber, labelchuchaiqishiriqi, labelchuchaijieshuriqi, labelchuchaitianshu;
Button btn;
Panelchuchaixiugai() {
setLayout(null);
btn = new Button("添加"); // 创建“添加”按钮
textFieldWorkerName = new TextField();
textFieldWorkerNumber = new TextField();
textFieldchuchaiqishiriqi = new TextField();
textFieldchuchaijieshuriqi = new TextField();
textFieldchuchaitianshu = new TextField();
labelWorkerName = new Label("职工姓名:");
labelWorkerNumber = new Label("职工编号:");
labelchuchaiqishiriqi = new Label("出差开始日期:");
labelchuchaijieshuriqi = new Label("出差结束日期:");
labelchuchaitianshu = new Label("出差天数:");
add(labelWorkerName);
add(textFieldWorkerName);
add(labelWorkerNumber);
add(textFieldWorkerNumber);
add(labelchuchaiqishiriqi);
add(textFieldchuchaiqishiriqi);
add(labelchuchaijieshuriqi);
add(textFieldchuchaijieshuriqi);
add(labelchuchaitianshu);
add(textFieldchuchaitianshu);
add(btn); // 添加“按钮”到窗口面板上
labelWorkerName.setBounds(10, 60, 70, 25);
textFieldWorkerName.setBounds(90, 60, 220, 25);
labelWorkerNumber.setBounds(10, 90, 70, 25);
textFieldWorkerNumber.setBounds(90, 90, 220, 25);
labelchuchaiqishiriqi.setBounds(10, 120, 80, 25);
textFieldchuchaiqishiriqi.setBounds(90, 120, 220, 25);
labelchuchaijieshuriqi.setBounds(10, 150, 80, 25);
textFieldchuchaijieshuriqi.setBounds(90, 150, 220, 25);
labelchuchaitianshu.setBounds(10, 180, 70, 25);
textFieldchuchaitianshu.setBounds(90, 180, 220, 25);
btn.setBounds(130, 250, 70, 25); // 设置按钮位置
btn.addActionListener(this); // 设置按钮监听
setSize(340, 300); // 设置窗口大小
setBackground(Color.white); // 设置窗口背景颜色
setVisible(true);
validate();
}
//出差浏览
class Panelchuchailiulan extends Panel implements ActionListener {
Button btnliulan;
TextArea tachaxun;
Panelchuchailiulan() {
setLayout(null);
btnliulan = new Button("浏览职工出差记录"); // 创建按钮
tachaxun = new TextArea(); // 创建多行文本框
add(btnliulan);
add(tachaxun);
//tchaxun.setText("");
//cchaxun.setBounds(10, 60, 70, 20);
//tchaxun.setBounds(85, 60, 180, 20);
btnliulan.setBounds(75, 60, 100, 20);
tachaxun.setBounds(10, 90, 400, 200);
setSize(500, 400); // 设置窗口大小
setBackground(Color.white);
setVisible(true);
btnliulan.addActionListener(this);
validate();
}
//职工出差添加
class Panelchuchaitianjia extends Panel implements ActionListener {
TextField textFieldWorkerName, textFieldWorkerNumber, textFieldchuchaiqishiriqi, textFieldchuchaijieshuriqi;
Label labeltongjitianshu;
Label labelWorkerName, labelWorkerNumber, labelchuchaiqishiriqi, labelchuchaijieshuriqi, labelchuchaitianshu;
Button btnchuchaitianshu;
Button btn;
Panelchuchaitianjia() {
setLayout(null);
btn = new Button("添加"); // 创建“添加”按钮
btnchuchaitianshu = new Button("统计出差天数");
textFieldWorkerName = new TextField();
textFieldWorkerNumber = new TextField();
textFieldchuchaiqishiriqi = new TextField();
textFieldchuchaijieshuriqi = new TextField();
labeltongjitianshu = new Label();
labelWorkerName = new Label("职工姓名:");
labelWorkerNumber = new Label("职工编号:");
labelchuchaiqishiriqi = new Label("出差开始日期:");
labelchuchaijieshuriqi = new Label("出差结束日期:");
labelchuchaitianshu = new Label("出差天数:");
add(labelWorkerName);
add(textFieldWorkerName);
add(labelWorkerNumber);
add(textFieldWorkerNumber);
add(labelchuchaiqishiriqi);
add(textFieldchuchaiqishiriqi);
add(labelchuchaijieshuriqi);
add(textFieldchuchaijieshuriqi);
add(labelchuchaitianshu);
add(labeltongjitianshu);
add(btnchuchaitianshu);
add(btn); // 添加“按钮”到窗口面板上
labelWorkerName.setBounds(10, 60, 70, 25);
textFieldWorkerName.setBounds(90, 60, 220, 25);
labelWorkerNumber.setBounds(10, 90, 70, 25);
textFieldWorkerNumber.setBounds(90, 90, 220, 25);
labelchuchaiqishiriqi.setBounds(10, 120, 80, 25);
textFieldchuchaiqishiriqi.setBounds(90, 120, 220, 25);
labelchuchaijieshuriqi.setBounds(10, 150, 80, 25);
textFieldchuchaijieshuriqi.setBounds(90, 150, 220, 25);
labelchuchaitianshu.setBounds(10, 180, 70, 25);
labeltongjitianshu.setBounds(90, 180, 220, 25);
labeltongjitianshu.setBackground(Color.cyan);
btnchuchaitianshu.setBounds(100,220,80,25);
btn.setBounds(220, 220, 70, 25); // 设置按钮位置
btn.addActionListener(this); // 设置按钮监听
btnchuchaitianshu.addActionListener(this);
setSize(340, 300); // 设置窗口大小
setBackground(Color.white); // 设置窗口背景颜色
setVisible(true);
validate();
}
图3 出差类的图形界面
2.请假类
MenuItem menuItemLeaveQuery = new MenuItem("查询请假记录");
MenuItem menumItemLeaveAddtion= new MenuItem("添加请假记录");
MenuItem menuItemLeaveDelete= new MenuItem("删除请假记录");
MenuItem menuItemLeaveModify= new MenuItem("修改请假记录");
MenuItem menuItemqingjialiulan= new MenuItem("浏览请假记录");
//请假查询
class Panelqingjiachaxun extends Panel implements ActionListener {
Choice cchaxun;
TextField tchaxun;
Button btnchaxun;
TextArea tachaxun;
Panelqingjiachaxun() {
setLayout(null);
cchaxun = new Choice(); // 创建下拉菜单
cchaxun.add("职工编号");
cchaxun.add("职工姓名");
tchaxun = new TextField();
btnchaxun = new Button("查询"); // 创建按钮
tachaxun = new TextArea(); // 创建多行文本框
add(cchaxun);
add(tchaxun);
add(btnchaxun);
add(tachaxun);
tchaxun.setText("");
cchaxun.setBounds(10, 60, 70, 20);
tchaxun.setBounds(85, 60, 180, 20);
btnchaxun.setBounds(275, 60, 40, 20);
tachaxun.setBounds(10, 90, 305, 145);
cchaxun.select(0); // 下拉菜单的初始选项
setSize(340, 250); // 设置窗口大小
setBackground(Color.white);
setVisible(true);
btnchaxun.addActionListener(this);
validate();
}
//请假浏览
class Panelqingjialiulan extends Panel implements ActionListener {// 请假类
Button btnliulan;
TextArea tachaxun;
Panelqingjialiulan() {
setLayout(null);
btnliulan = new Button("浏览职工请假记录"); // 创建按钮
tachaxun = new TextArea(); // 创建多行文本框
tachaxun.setEditable(false);
add(btnliulan);
add(tachaxun);
btnliulan.setBounds(75, 60, 100, 20);
tachaxun.setBounds(10, 90, 400, 200);
setSize(500, 400); // 设置窗口大小
setBackground(Color.white);
setVisible(true);
btnliulan.addActionListener(this);
validate();
}
//请假修改
class Panelqingjiaxiugai extends Panel implements ActionListener {
TextField textFieldWorkerName, textFieldWorkerNumber, textFieldqingjiakaishi, textFieldqingjiajieshu,
textFieldqingjiatianshu;
Label labelWorkerName, labelWorkerNumber, labelqingjiakaishi, labelqingjiajieshu, labelqingjiatianshu;
Button btn;
Panelqingjiaxiugai() {
setLayout(null);
btn = new Button("添加"); // 创建“添加”按钮
textFieldWorkerName = new TextField();
textFieldWorkerNumber = new TextField();
textFieldqingjiakaishi = new TextField();
textFieldqingjiajieshu = new TextField();
textFieldqingjiatianshu = new TextField();
labelWorkerName = new Label("职工姓名:");
labelWorkerNumber = new Label("职工编号:");
labelqingjiakaishi = new Label("请假开始日期:");
labelqingjiajieshu = new Label("请假结束日期:");
labelqingjiatianshu = new Label("请假天数:");
add(labelWorkerName);
add(textFieldWorkerName);
add(labelWorkerNumber);
add(textFieldWorkerNumber);
add(labelqingjiakaishi);
add(textFieldqingjiakaishi);
add(labelqingjiajieshu);
add(textFieldqingjiajieshu);
add(labelqingjiatianshu);
add(textFieldqingjiatianshu);
add(btn); // 添加“按钮”到窗口面板上
labelWorkerName.setBounds(10, 60, 70, 25);
textFieldWorkerName.setBounds(90, 60, 220, 25);
labelWorkerNumber.setBounds(10, 90, 70, 25);
textFieldWorkerNumber.setBounds(90, 90, 220, 25);
labelqingjiakaishi.setBounds(10, 120, 80, 25);
textFieldqingjiakaishi.setBounds(90, 120, 220, 25);
labelqingjiajieshu.setBounds(10, 150, 80, 25);
textFieldqingjiajieshu.setBounds(90, 150, 220, 25);
labelqingjiatianshu.setBounds(10, 180, 80, 25);
textFieldqingjiatianshu.setBounds(90, 180, 220, 25);
btn.setBounds(130, 250, 70, 25); // 设置按钮位置
btn.addActionListener(this); // 设置按钮监听
setSize(340, 300); // 设置窗口大小
setBackground(Color.white); // 设置窗口背景颜色
setVisible(true);
validate();
}
//请假添加
class Panelqingjiatianjia extends Panel implements ActionListener {
TextField textFieldWorkerName, textFieldWorkerNumber, textFieldqingjiakaishi, textFieldqingjiajieshu;
展开阅读全文