职工考勤管理系统.docx
《职工考勤管理系统.docx》由会员分享,可在线阅读,更多相关《职工考勤管理系统.docx(41页珍藏版)》请在冰豆网上搜索。
职工考勤管理系统
前言
20世纪90年代,随着我国市场经济的快速发展,职工考勤管理系统在企业的日常管理中发挥着越来越重要的作用。
职工考勤管理系统可以进行员工信息管理、出勤管理和密码管理等,方便处理企业内部员工的相关考勤信息。
此外Internet的迅速普及,使Intranet成为Internet技术在企业管理信息系统中的应用和延伸,形成了集计算机,计算机网络、数据库、分布式计算等于一体的信息技术综合体,它打破了时间和地域的界限,使信息交流变得快捷、准确,为建立现代企业管理信息系统提供了充足的条件。
职工考勤系统是在适应市场需求的客观前提下,为了满足中小型公司或事业单位管理自己的员工而开发的。
第一章开发背景
我们都知道,考勤管理系统是任何一个营业单位不可缺少的部分,它的内容对于单位的管理者和内部员工来说都至关重要,所以考勤管理系统应该能够为用户提供充足的信息和快捷的安全查询,及实时管理手段。
但在过去,人们一直在使用传统的人工的方式来进行考勤管理,这种落后的方式存在着许多缺点,如:
效率低,保密性差,另外时间一长,将产生大量的文件和数据,这对于查找,更新和维护都带来了不少的困难。
而使用计算机对员工出勤进行管理,具有手工作业所无法比拟的优点。
例如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高管理的效率。
此次开发了一种基于SQLServer和Java下的考勤管理系统。
其不但具有实际考勤管理系统应有的档案管理,信息安全认证等功能,且拥有用户使用更简单、界面更直观等优点。
考勤管理系统在我国任何一个单位是必需的,随着我国的发展,考勤管理系统的作用会得到更加充分的体现。
。
第二章需求分析
职工考勤管理系统,可用于企业等机构的职工考勤情况管理,查询,更新与维护,使用方便,易用性强,图形界面清晰明了。
该软件用Java语言编写,用SQLServer2005数据库作为后台的数据库进行信息的存储,用SQL语句完成职工基本信息的添加,查询,修改,删除的操作以及成绩的录入,修改,删除等。
用ODBC驱动实现前台Java与后台SQL数据库的连接。
Java语言跨平台性强,可以在windows,Linux,等系统下使用,方便简单,安全性好。
SQLServer2005数据库高效安全,两者结合可相互利用各自的优势
λ用户登陆界面。
该界面可以选择使用者的身份,“管理员,职工”。
不同的身份有不同的操作界面和功能权限。
账号和密码输入正确即可登录。
λ职工管理界面。
提供了职工基本信息的查询,打卡、出差、加班、请假的查询以及相应权限的添加、删除、修改操作。
λ管理员管理界面。
提供了对所有职工信息的查询、添加、修改、删除;职工考勤信息的录入、修改、删除、查询,修改密码等功能。
管理员拥有最高的权限,允许对职工所有信息进行查询和修改。
第三章概念结构设计
一、局部E-R图设计
(一)、确定局部范围
职工考勤管理系统分为七部分:
●管理员登录
●职工登录
●职工基本信息
●职工出勤信息
●职工加班信息
●职工出差信息
●职工请假信息
(二)、确定实体与属性
两个准则:
(1)属性不能在具有需要描述的性质,即属性必须是不可分的数据项,不能再由另一些属性组成.
(2)属性不能与其他实体具有联系,联系只发生在实体之间
根据两个准则进行分析:
在职工考勤管理系统中,职工具有属性(职工编号、职工姓名、性别、年龄、职称),其属性又是不可分的,因此将职工作为实体。
出勤、加班、出差、请假都具有属性,其属性又是不可分的,因此将他们作为实体。
管理员、用户登录也作为实体。
表1-1
实体
属性
管理员登录表
管理员Id,密码
用户登录表表
职工编号,密码
职工信息表
职工编号,职工姓名,性别,年龄,职称
职工出勤信息表
姓名,编号,上班打卡时间,下班打卡时间,缺勤记录
职工加班信息表
姓名,编号,加班开始时间,加班结束时间,统计加班天数
职工出差信息表
姓名,编号,出差开始时间,出差结束时间,统计出差天数
职工请假信息表
请假开始时间,请假结束时间,统计请假天数
(三)概念模型表示
实体型:
用矩形表示,矩形内写实体名。
属性:
用椭圆形表示,并用边将其与相应的实体型连接起来。
联系:
用菱形表示,菱形框内写明联系名,并用边与有关实体型连接起来,且在边旁标上联系的类型。
管理员信息表ER图用户信息表ER图
职工信息表ER图
职工出勤信息表ER图职工加班信息表ER图
职工出差信息表ER图请假信息表ER图
二、合并成总体E-R图
职工考勤管理系统
第四章逻辑结构设计
一、E-R图转换为关系模型
关系模式的规范化
步骤
非规范关系
是每个属性不能再分
1NF
消去非主属性対主码的部分依赖
2NF
消去非主属性対主码的传递依赖
3NF
管理员登录表(admin)
列名
数据类型
约束
是否允许为空
默认值
说明
admin
char(6)
主键
管理员
password
char(12)
NOTNULL
密码
员工登录表(admin)
列名
数据类型
约束
是否允许为空
默认值
说明
w_id
char(6)
主键
员工
Password_w
char(12)
NOTNULL
密码
职工基本信息表(worker)
列名
数据类型
约束
是否允许为空
默认值
说明
w_id
char(4)
主键
NOTNULL
职工编号
w_name
char(6)
NOTNULL
职工姓名
w_sex
char(6)
NOTNULL
性别
w_age
int
NOTNULL
年龄
w_drgee
char(4)
NOTNULL
职称
出勤记录信息表(work_note)
列名
数据类型
约束
是否允许为空
默认值
说明
w_id
char(4)
主键
NOTNULL
职工编号
s_tim
datetime
上班打卡时间
x_tim
datetime
下班打卡时间
q_not
Int
0
缺勤记录(1或0)
出差信息(out_note)
列名
数据类型
约束
是否允许为空
默认值
说明
w_id
char(4)
主键
职工编号
k_tim
datetime
出差起始时间
j_tim
datetime
出差结束时间
c_days
Int
统计总天数
请假记录信息(off_note)
列名
数据类型
约束
是否允许为空
默认值
说明
w_id
char(4)
主键
职工编号
off_tim
datetime
请假开始时间
off_e_tim
datetime
请假结束时间
off_days
int
统计请假天数
加班信息(over_note)
列名
数据类型
约束
是否允许为空
默认值
说明
w_id
char(4)
主键
NOTNULL
职工编号
jia_tim
datetime
加班开始时间
jia_e_tim
datetime
加班结束时间
jia_days
int
统计加班时间
第五章数据库实施与维护
一、定义数据库结构
分析数据库各个表的结构,在SQL中实现的创建SQL语句。
--首先创建职工考勤数据库
CREATEDATABASEzgkq
ON
(name=zg_dat,
filename='d:
\zg_dat.mdf',
size=5,
maxsize=20,
Filegrowth=1
)
LOGON
(name=zg_log,
filename='e:
\zg_dat.ldf',
size=5,
maxsize=20,
Filegrowth=1
)
--调到数据库zgkg
USEzgkq
GO
--管理员登录表
CREATETABLElogin_admin
(adminchar(6)PRIMARYKEY,
passwordchar(12)NOTNULL
)
--员工登录表
CREATETABLElogin_w
(w_idchar(6)PRIMARYKEY,
password_wchar(12)NOTNULL
)
--创建职工信息表worker
CREATETABLEworker
(w_idchar(4)PRIMARYKEY,
w_namechar(6)NOTNULL,
w_sexchar(6)check(w_sex='男'orw_sex='女')NOTNULL,
w_ageintNOTNULL,
w_drgeechar(4)NOTNULL
)
--创建出勤记录信息work_note
CREATETABLEwork_note
(w_idchar(4)PRIMARYKEY,
s_timdatetime,
x_timdatetime,
q_notintCHECK(q_not=0ORq_not=1)DEFAULT0
)
--创建出差信息out_note
CREATETABLEout_note
(w_idchar(4)PRIMARYKEY,
k_timdatetime,
j_timdatetime,
c_daysint
)
--创建请假信息off_note
CREATETABLEoff_note
(w_idchar(4)PRIMARYKEY,
off_timdatetime,
off_e_timdatetime,
off_daysint
)
--创建加班信息over_note
CREATETABLEover_note
(w_idchar(4)PRIMARYKEY,
jia_timdatetime,
jia_e_timdatetime,
jia_daysint
)
二、组织数据入库
INSERTINTOlogin_adminVALUES('admin','123456')
--
INSERTINTOlogin_wVALUES('1001','100001')
INSERTINTOlogin_wVALUES('1002','100002')
INSERTINTOlogin_wVALUES('1003','100003')
INSERTINTOlogin_wVALUES('1004','100004')
INSERTINTOlogin_wVALUES('1005','100005')
--
INSERTINTOwork_noteVALUES('1001','2010-5-2108:
00:
00','2010-5-2118:
30:
00',0)
INSERTINTOwork_noteVALUES('1002','2010-5-2108:
00:
00','2010-5-2118:
30:
00',0)
INSERTINTOwork_noteVALUES('1003','2010-5-2108:
00:
00','2010-5-2118:
30:
00',0)
INSERTINTOwork_noteVALUES('1004','2010-5-2108:
00:
00','2010-5-2118:
30:
00',0)
INSERTINTOwork_noteVALUES('1005','2010-5-2108:
00:
00','2010-5-2118:
30:
00',0)
----
INSERTINTOworkerVALUES('1001','李芳','女','28','员工')
INSERTINTOworkerVALUES('1002','王明','男','30','员工')
INSERTINTOworkerVALUES('1003','江月','女','31','员工')
INSERTINTOworkerVALUES('1004','李芳','男','27','员工')
INSERTINTOworkerVALUES('1005','李芳','男','24','员工')
--
INSERTINTOout_noteVALUES('1002','2010-3-21','2010-4-21',31)
--
INSERTINTOoff_noteVALUES('1003','2010-3-21','2010-4-21',31)
--
INSERTINTOover_noteVALUES('1004','2010-4-21','2010-4-21',1)
三、数据库试运行
1--查询所有职工信息
SELECT*FROMworker
2--查询所有出勤记录信息
SELECT*FROMwork_note
3--查询所有出差信息
SELECT*FROMout_note
4--查询所有请假信息
SELECT*FROMoff_note
5--查询所有加班信息
SELECT*FROMover_note
6--查询编号为1001的职工信息
SELECT*
FROMworker
WHEREw_id='1001'
第六章JAVA
一、JAVA代码:
(一)、登录代码
packageZGKQ;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.sql.*;
publicclassLoginextendsJFrameimplementsActionListener{
JFramejf;
Containercon=getContentPane();
JTextFieldtfName;
JPasswordFieldps;
JLabellabel;
JLabellbName;
JLabellbps;
JLabelshenfen;
JButtonbt1;
JButtonbt2;
privateStringpsword;
JComboBoxbox;
JPaneljp1;
publicLogin(){
jf=this;
setTitle("用户登录界面");
con.setBackground(Color.black);
Fontf=newFont("新宋体",Font.PLAIN,22);
/////////////////////////////////////////////////
((JPanel)this.getContentPane()).setOpaque(false);
ImageIconimg=newImageIcon("4.jpg");//添加图片
JLabelbackground=newJLabel(img);
this.getLayeredPane().add(background,newInteger(Integer.MIN_VALUE));
background.setBounds(0,0,img.getIconWidth(),img.getIconHeight());
jp1=newJPanel();
////////////////////////////////////////////////
tfName=newJTextField();
ps=newJPasswordField();
label=newJLabel("职工考勤管理系统");
lbName=newJLabel("用户名:
");
lbps=newJLabel("密码:
");
bt1=newJButton("登录");
bt2=newJButton("清空");
///////////////////////////////////////////////
con.setLayout(null);
jp1=newJPanel();
con.add(jp1);
con.add(label);
label.setFont(f);
label.setBounds(220,100,300,40);
con.add(lbName);
con.add(tfName);
lbName.setBounds(250,250,80,20);
tfName.setBounds(330,250,100,20);
shenfen=newJLabel("身份:
");
shenfen.setBounds(250,310,80,20);
con.add(shenfen);
box=newJComboBox();
box.addItem("管理员");
box.addItem("员工");
con.add(box);
box.setBounds(330,310,80,20);
con.add(lbps);
con.add(ps);
lbps.setBounds(250,280,80,20);
ps.setBounds(330,280,100,20);
con.add(bt1);
con.add(bt2);
bt1.setBounds(260,340,60,20);
bt1.setBackground(Color.gray);
bt2.setBounds(350,340,60,20);
bt2.setBackground(Color.gray);
bt1.addActionListener(this);
bt2.addActionListener(this);
setBounds(310,150,700,500);
setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
Databasedb=newDatabase();
db.OpenConn();
Stringpass=newString(ps.getPassword()).trim();
Stringname=tfName.getText().trim();
Objectsource=e.getSource();
if(box.getSelectedItem().equals("管理员")){
if(source==bt1){
try{
Stringsql="select*fromlogin_adminwhereadmin='"
+name+"'andpassword='"+pass+"'";
ResultSetres=db.executeQuery(sql);
while(res.next()){
psword=res.getString
(2).trim();
}
if(name.equals("")){
newJOptionPane().showMessageDialog(null,"用户名不能为空!
");
}elseif(pass.equals("")){
newJOptionPane().showMessageDialog(null,"密码不能为空!
");
}elseif(pass.equals(psword)){
this.dispose();
newmain_1().setVisible(true);
}else{
newJOptionPane().showMessageDialog(null,"密码错误!
");
}
}catch(SQLExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
}
}
if((box.getSelectedItem().equals("员工"))){
if(source==bt1){
try{
Stringsql="select*fromlogin_wwherew_id='"+name
+"'andpassword_w='"+pass+"'";
ResultSetres=db.executeQuery(sql);
while(res.next()){
psword=res.getString
(2).trim();
}
Stringnum=tfName.getText().trim();
if(name.equals("")){
newJOptionPane().showMessageDialog(null,"用户名不能为空!
");
}elseif(pass.equals("")){
newJOptionPane().showMessageDialog(null,"密码不能为空!
");
}elseif(pass.equals(psword)){
this.dispose();
newmain_2().setVisible(true);
}else{
newJOptionPane().showMessageDialog(null,"密码错误!
");
}
}catch(SQLExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
}
}
if(e.getSource()==bt2){
tfName.setText("");
ps.setText("");
}
}
publicstaticvoidmain(Stringargs[]){
newLogin();
}
}
(二)、管理员主界面代码
packageZGKQ;
importjava.awt.*;
importjava.awt.event.ActionEvent;
imp