考勤管理实验报告.docx
《考勤管理实验报告.docx》由会员分享,可在线阅读,更多相关《考勤管理实验报告.docx(42页珍藏版)》请在冰点文库上搜索。
考勤管理实验报告
课程设计
总结报告
设计题目:
公司员工考勤管理系统设计
学院数学与计算科学学院
专业信息与计算科学
班级14信计四班
学号14070204**
姓名黎*文
指导老师彭*辉
时间2016年11月20日
摘要
公司考勤系统
项目描述:
开发背景:
在公司内,员工的考勤通常缺乏方便且有效的管理手段,针对此需求需要开发一套考勤管理系统。
价值:
公司考勤系统他类别与普通的系统更方便,更简洁,更容易上手,能更直观的反应出每个员工的考勤,对员工的管理就更有效率。
这个系统适用于所有公司。
开发工具:
oracle11g,Eclipse
开发语言:
Java
核心技术:
JOBC对数据库的操作,操作界面的设计,各种布局方式和插件
(1)使用JFrame控件进行界面设计
(2)使用静态字段实现窗体间的数据传递
(3)使用代码方式向容器控件中添加控件
需求分析:
(1)登录主界面
(2)功能主窗口(3)设置工作时间:
只限管理员(4)修改密码(5)员工管理信息(只限管理员):
(只限管理员)(6)考勤信息管理:
只限管理员(7)考勤登记:
只限员工(8)重新登录(9)退出(10)关于帮助
功能模块的难点技术和实现思路:
考勤信息管理:
只限管理员在界面中显示考勤信息,并作出相应更改,以及数据的输入。
一.需求分析:
公司需要存储雇员的编号、姓名、性别、所在部门,级别,。
其中,雇员分为经理、技术人员、销售人员和销售经理。
销售经理能够管理所有人的信息,其他人只能查看自己的信息,采用以往的方式,显得复杂和麻烦,现在,我们开发出员工考勤管理的系统,对员工的考勤进行动态的管理。
随着现代科技的进步,用计算机来进行考勤的管理也成为现代化企业运作必不可少的一部分。
在过去我们的考勤工作都是人工完成的,不仅浪费了很多的人力跟物力,而且无法保证其准确性和透明度;给企业的管理带来了许多的不便。
现在利用计算机来管理我们的考勤工作,大大降低了工作人员的工作量,提高了工作效率,使原本复杂和枯燥无味的工作变得简单而轻松了。
计算机技术特别是数据库技术的发展为企业建立管理信息系统,甚至对改变管理思想起着不可估量的作用。
实践证明信息技术已在企业的管理层面扮演越来越重要的角色。
二.概要设计
设计本考勤系统目的是为企业解决员工考勤的繁琐工作,减轻企业负担,减少不必要的劳动力、金钱的损耗,提高工作效率,为企业创造更多效益,实现单位考勤管理的系统化、规范化和自动化。
因此本系统主要需要实现以下几个功能:
管理员登录及信息维护,员工信息维护,数据采集,基本数据(请假类型,和数据)维护,数据库管理,查询功能,,请假、休假记录等。
具体分析见下:
2.1登录系统:
包括用户登录、修改密码、退出系统等。
登录分为两种形式,客户和管理员。
用户名或密码不知道或者错误时将自动以客户登录,除了系统模块外的所有模块都呈现不可激活状态,不能进行操作。
2.2基本操作:
(1)添加功能:
程序能够任意添加记录,,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并转化为修改。
(2)查询功能:
可根据编号、姓名等信息对已添加的员工信息和休假信息进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;
(3)显示功能:
可显示当前系统中所有记录,每条记录占据一行。
(4)编辑功能:
可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:
主要实现对已添加的人员记录和休假记录进行删除。
如果当前系统中没有相应的人员记录,则提示“记录为空!
”并返回操作。
(6)统计功能:
能对所有人员进行统计。
(7)保存功能:
可将当前系统中各类人员记录和休假记录存入文件中,存入方式任意。
(8)读取功能:
可将保存在数据库中的信息读入到当前系统中,供用户进行使用。
三.详细设计
3.1使用到的类的介绍:
(1)AddMenu:
实现添加菜单功能的类。
(2)BoxPanel:
继承JPanel类,有JLabel;JTextField两个变量,显示主界面中的变量名和内容。
(4)Boxpanelpass:
继承JPanel类,JPasswordField,有JPasswordField变量,实现密码的输入。
(5)DateBaseConn:
数据库连接类,有一个连接数据库的函数returnConn();
(6)DeleteMenu:
删除功能的实现
(7)LeaveB:
一个抽象类,继承JDialog类,显示的作用。
(8)LeaveBL:
继承LeaveB类,实现请假的功能。
(9)LeaveBV:
继承LeaveB类,实现休假的功能。
(10)Logpage:
登录界面的类。
(11)Operatepage:
操作界面的类
(12)SaveMenu:
实现保存菜单的类
(13)ShowAll:
实现统计菜单中子菜单显示所有子菜单的类
(14)ShowStaffMenu:
实现显示菜单的类
(15)Staff:
记录员工信息的类
3.2登录系统的设计:
(1)导入了以下类,
importjavax.swing.JButton;
importjavax.naming.spi.DirStateFactory.Result;
importjavax.swing.BoxLayout;
importjavax.swing.ImageIcon;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JPasswordField;
importjavax.swing.JTextField;
通过布局使界面如下:
3.3操作界面的设计:
使用以下导入的类进行界面设计:
importjavax.swing.Box;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JPanel;
最终效果如下:
3.4难点部分:
(1)登录密码的实现:
if(e.getSource()==bConfirm){
try{
//连接数据库
Connectionconn=(Connection)DateBaseConn.returnConn();
//数据库操作
PreparedStatementsts=conn.prepareStatement(
"selectENUMfromCSAS123LwhereENUM=?
andEPASSWORD=?
");
if(administratorbp.text.getText().equals("1407020415")){
sts.setString(1,administratorbp.text.getText());
}
else{
sts.setString(1,staffpb.text.getText());
}
sts.setString(2,newString(passworbp.text.getPassword()));
ResultSetrs=sts.executeQuery();
//通过查找,对应密码和编号的员工是否存在
if(rs.next())
{
//若果是管理员账号,进入管理员界面
if(rs.getString("ENUM").trim().equals("1407020415"))
{
System.out.println(rs.getString("ENUM").trim());
a=newOperatepage(rs.getString("ENUM").trim());
menuSetEnable(a,true);
}
else
{
a=newOperatepage(rs.getString("ENUM").trim());
menuSetEnable(a,false);
a.menu8.setEnabled(true);
}
}
else
JOptionPane.showMessageDialog(confpanel,"请输入正确的账号和密码!
");
}catch(InstantiationException|IllegalAccessException
|ClassNotFoundException|SQLExceptione1){
e1.printStackTrace();
System.out.println("连接失败!
!
");
}
}
(2)数据库的连接类:
(直接也有部分错误的抛出没实现)
packagecom.Listen;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.SQLException;
publicclassDateBaseConn{
publicstaticConnectionreturnConn()throwsInstantiationException,
IllegalAccessException,ClassNotFoundException,SQLException
{try{
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
neworacle.jdbc.driver.OracleDriver();
Class.forName("oracle.jdbc.driver.OracleDriver");
//这个Driver的实例化在构建过程中会自动向DriverManager自动注册
//连接数据库
Connectionconn=DriverManager.getConnection("jdbc:
oracle:
thin:
"
+"@127.0.0.1:
1521:
orcl","scott","Kyq020520");
returnconn;
}catch(SQLExceptione){
System.out.println("数据库连接失败,请联系管理员。
");
}
returnnull;
}
}
四.设计和调试分析
1.此系统只有一个管理员,能对数据进行,添加,查询,修改,显示,编辑,删除,和统计。
2.用户只能根据密码和对应账号进行登录查询,以及请假和休假操作。
五.用户手册
1.针对管理员
(1)输入账号密码即可登录,可以使用菜单中所有功能。
(2)管理员默认密码是“12345678”。
2.针对普通用户,
(1)仅可使用请假和休假功能。
(2)用户默认密码是“12345678”。
3.要使用本套需要创建数据库文件。
(1)建立表
表名字为:
CSAS123L;
(2)数据的插入。
六.测试结果
(1)登录界面:
(2)查看界面:
(3)查询界面:
(4)请假界面:
其他不在详细描述。
七.设计心得
1.操作界面过于简单,没有背景图片,应该适当插入部分图片。
2.人机交互缺乏,对错误的抛出处理不当,考虑到的情况不够全面。
3.对于数据库的连接仅限于本机,无法实现联网工作,所以对于软件的可移植性不够。
虽然用文件的方式操作能够解决这一问题,但是对于数据处理太繁琐。
4.对于系统设计方面的问题,一定要有计划和流程图,不能想一步做一步,最后会导致问题的处理不够全面。
5.应该该有一个良好的编码习惯,类的定义,方法的定义,一定要有一套规则,方便检查调试,使别人能够轻易地看懂。
八.附录
AddMenu类
packagecom.Listen;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.SQLException;
importjavax.swing.JOptionPane;
publicclassAddMenu{
//清理数据函数,清理显示的信息。
publicvoidclear(Operatepagea){
a.name.text.setText("");
a.number.text.setText("");
a.department.text.setText("");
a.post.text.setText("");
a.sickDay.text.setText("");
a.sickDayOff.text.setText("");
a.offDay.text.setText("");
a.offDayOff.text.setText("");
}
publicAddMenu(Operatepagea){
a.setEnable(a,true);
}
}
Boxpanel类:
packagecom.Listen;
importjava.awt.Font;
importjavax.swing.Box;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
publicclassBoxPanelextendsJPanel{
JTextFieldtext;
JLabellabel;
Boxbox;
publicBoxPanel(Strings,intn){
box=Box.createHorizontalBox();
label=newJLabel(s);
text=newJTextField("",n);
text.setHorizontalAlignment(JTextField.LEFT);
//设置文本格式
//text.setFont(newFont("Arial",Font.BOLD,14));
box.add(label);
box.add(text);
add(box);
}
//设置密码格式
privatevoidchangefont(){
}
}
BoxPanelll类:
packagecom.Listen;
importjavax.swing.Box;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
publicclassBoxPanelllextendsJPanel{
JLabellabel1,lable2;
Boxbox;
publicBoxPanelll(Strings,Stringn){
box=Box.createHorizontalBox();
label1=newJLabel(s);
lable2=newJLabel(n);
box.add(label1);
box.add(lable2);
add(box);
}
}
DateBaseConn类:
packagecom.Listen;
importjavax.swing.Box;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
publicclassBoxPanelllextendsJPanel{
JLabellabel1,lable2;Boxbox;
publicBoxPanelll(Strings,Stringn){
box=Box.createHorizontalBox();
label1=newJLabel(s);lable2=newJLabel(n);
box.add(label1);
box.add(lable2);add(box);
}
}
DeleteMenu类:
packagecom.Listen;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.SQLException;
importjavax.swing.JOptionPane;
publicclassDeleteMenu{
publicstaticvoiddelete(Operatepagea)throwsInstantiationException,
IllegalAccessException,ClassNotFoundException,SQLException{
Connectionconn=DateBaseConn.returnConn();
inti=0;
Stringsql="deletefromCSAS123LwhereENUM='"+a.number.text.getText().trim()+"'";
PreparedStatementsts;
try{
sts=(PreparedStatement)conn.prepareStatement(sql);
i=sts.executeUpdate();
if(i>0)
JOptionPane.showMessageDialog(a.panel1,"删除成功,请继续操作!
");
else
JOptionPane.showMessageDialog(a.panel1,"删除失败,请确认后再操作!
");
sts.close();
conn.close();
}catch(SQLExceptione){
e.printStackTrace();
}
AddMenua1=newAddMenu(a);
a1.clear(a);
}
}
LeaveB类:
packagecom.Listen;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.sql.SQLException;
importjavax.swing.JButton;
importjavax.swing.JDialog;
importjavax.swing.JPanel;
publicclassLeaveBextendsJDialogimplementsActionListener{
JPaneltopPanel;
JButtonsureB,exitB;
publicLeaveB(){
setBounds(200,350,200,100);
setVisible(true);
setLayout(newGridLayout(2,1));
topPanel=newJPanel();
sureB=newJButton("确定");
exitB=newJButton("取消");
topPanel.add(sureB);
topPanel.add(exitB);
sureB.addActionListener(this);
exitB.addActionListener(this);
add(topPanel);
}
publicvoidsave(Operatepagea){
SaveMenua1=newSaveMenu();
a.sickDay.text.getText();
try{
a1.SaveDate(null);
}catch(InstantiationException|IllegalAccessException|
ClassNotFoundException|SQLExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==exitB){
dispose();
}
}
}
LeavaBL类:
packagecom.Listen;
importjava.awt.event.ActionEvent;
importjava.sql.SQLException;
importjavax.swing.JOptionPane;
publicclassLeaveBLextendsLeaveB{
Operatepagea;
publicvoidsave(Operatepagea){
inti1,i2;
SaveMenua1=newSaveMenu();
i1=Integer.parseInt(a.sickDay.text.getText());
i1++;
a.sickDay.text.setText(String.valueOf(i1));
i2=Integer.parseInt(a.sickDayOff.text.getText());
i2--;
a.sickDayOff.text.setText(String.valueOf(i2));
try{
a1.UpdataDate(a);
}catch(InstantiationException|IllegalAccessException|
ClassNotFoundException|SQLExceptione1){
//TODOAuto-g