1、课程设计总结报告设计题目:公司员工考勤管理系统设计学院 数学与计算科学学院 专业 信息与计算科学 班级 14信计四班 学号 14070204* 姓名 黎*文 指导老师 彭*辉 时间 2016年11月20日 摘要 公司考勤系统 项目描述: 开发背景:在公司内,员工的考勤通常缺乏方便且有效的管理手段,针对此需求需要开发一套考勤管理系统。 价值:公司考勤系统他类别与普通的系统更方便,更简洁,更容易上手,能更直观的反应出每个员工的考勤,对员工的管理就更有效率。这个系统适用于所有公司。 开发工具:oracle 11g,Eclipse 开发语言:Java核心技术:JOBC对数据库的操作,操作界面的设计,各
2、种布局方式和插件 (1)使用JFrame控件进行界面设计 (2)使用静态字段实现窗体间的数据传递 (3)使用代码方式向容器控件中添加控件 需求分析: (1)登录主界面(2)功能主窗口(3)设置工作时间:只限管理员 (4)修改密码(5)员工管理信息(只限管理员):(只限管理员)(6)考勤信息管理:只限管理员 (7)考勤登记:只限员工 (8)重新登录(9)退出(10)关于帮助 功能模块的难点技术和实现思路:考勤信息管理:只限管理员 在界面中显示考勤信息,并作出相应更改,以及数据的输入。一. 需求分析: 公司需要存储雇员的编号、姓名、性别、所在部门,级别,。其 中,雇员分为经理、技术人员、销售人员和
3、销售经理。销售经理能够管理所有人的信息,其他人只能查看自己的信息,采用以往的方式,显得复杂和麻烦,现在,我们开发出员工考勤管理的系统,对员工的考勤进行动态的管理。随着现代科技的进步,用计算机来进行考勤的管理也成为现代化企业运作必不 可少的一部分。在过去我们的考勤工作都是人工完成的,不仅浪费了很多的人力跟物力,而且无法保证其准确性和透明度;给企业的管理带来了许多的不便。现在利用计算机来管理我们的考勤工作,大大降低了工作人员的工作量,提高了工作效率,使原 本复杂和枯燥无味的工作变得简单而轻松了。 计算机技术特别是数据库技术的发展为企业建立管理信息系统,甚至对改变管 理思想起着不可估量的作用。实践证
4、明信息技术已在企业的管理层面扮演越来越重 要的角色。二. 概要设计 设计本考勤系统目的是为企业解决员工考勤的繁琐工作,减轻企业负担,减少 不必要的劳动力、金钱的损耗,提高工作效率,为企业创造更多效益,实现单位考勤管理的系统化、规范化和自动化。因此本系统主要需要实现以下几个功能: 管理员登录及信息维护,员工信息维护,数据采集,基本数据(请假类型,和数据)维护,数据库管理,查询功能,请假、休假记录等。具体分析见下:2.1登录系统: 包括用户登录、修改密码、退出系统等。登录分为两种形式,客户和管理员。用户名或密码不知道或者错误时将自动以客户登录,除了系统模块外的所有模块都呈现不可激活状态,不能进行操
5、作。2.2基本操作:(1)添加功能:程序能够任意添加记录,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并转化为修改。(2)查询功能:可根据编号、姓名等信息对已添加的员工信息和休假信息进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;(3)显示功能:可显示当前系统中所有记录,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。(5)删除功能:主要实现对已添加的人员记录和休假记录进行删除。如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作。(6)统计功能:能对所有人员进行统计。(7)保存功能:可
6、将当前系统中各类人员记录和休假记录存入文件中,存入方式任意。(8)读取功能:可将保存在数据库中的信息读入到当前系统中,供用户进行使用。 三. 详细设计3.1 使用到的类的介绍:(1) AddMenu: 实现添加菜单功能的类。(2) BoxPanel: 继承JPanel类,有 JLabel ;JTextField 两个变量,显示主界面中的变量名和内容。(4) Boxpanelpass: 继承JPanel类,JPasswordField,有JPasswordField变量,实现密码的输入。(5)DateBaseConn: 数据库连接类,有一个连接数据库的函数 returnConn();(6)Del
7、eteMenu: 删除功能的实现(7)LeaveB: 一个抽象类,继承JDialog类 ,显示的作用。(8)LeaveBL: 继承LeaveB类,实现请假的功能。(9)LeaveBV: 继承LeaveB类,实现休假的功能。(10)Logpage: 登录界面的类。(11)Operatepage: 操作界面的类(12)SaveMenu: 实现保存菜单的类(13)ShowAll: 实现统计菜单中子菜单显示所有子菜单的类(14)ShowStaffMenu: 实现显示菜单的类(15)Staff: 记录员工信息的类 3.2 登录系统的设计:(1)导入了以下类,import javax.swing.JBut
8、ton;import javax.naming.spi.DirStateFactory.Result;import javax.swing.BoxLayout;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;通过布局使界面如下: 3.3 操作界
9、面的设计:使用以下导入的类进行界面设计:import javax.swing.Box;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;最终效果如下:3.4 难点部分:(1)登录密码的实现: if (e.getSource()=bConfirm) try /连接数据库Conn
10、ection conn = (Connection) DateBaseConn.returnConn(); /数据库操作 PreparedStatement sts=conn.prepareStatement( select ENUM from CSAS123L where ENUM=? and EPASSWORD = ? ); if(administratorbp.text.getText().equals(1407020415) sts.setString(1,administratorbp.text.getText() ); else sts.setString(1,staffpb.te
11、xt.getText() ); sts.setString(2,new String (passworbp.text.getPassword() ); ResultSet rs = sts.executeQuery(); /通过查找,对应密码和编号的员工是否存在 if(rs.next() /若果是管理员账号,进入管理员界面 if(rs.getString(ENUM).trim().equals(1407020415) System.out.println(rs.getString(ENUM).trim(); a = new Operatepage(rs.getString(ENUM).trim
12、(); menuSetEnable(a,true); else a = new Operatepage(rs.getString(ENUM).trim(); menuSetEnable(a,false); a.menu8.setEnabled(true); else JOptionPane.showMessageDialog(confpanel, 请输入正确的账号和密码!); catch (InstantiationException | IllegalAccessException | ClassNotFoundException | SQLException e1) e1.printSta
13、ckTrace();System.out.println(连接失败!);(2)数据库的连接类:(直接也有部分错误的抛出没实现)package com.Listen;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;public class DateBaseConn public static Connection returnConn() throws InstantiationException, Ill
14、egalAccessException,ClassNotFoundException, SQLException try Class.forName(oracle.jdbc.driver.OracleDriver).newInstance(); new oracle.jdbc.driver.OracleDriver(); Class.forName(oracle.jdbc.driver.OracleDriver); /这个Driver的实例化在构建过程中会自动向DriverManager自动注册 /连接数据库 Connection conn = DriverManager.getConnect
15、ion(jdbc:oracle:thin: + 127.0.0.1:1521:orcl,scott,Kyq020520); return conn; catch (SQLException e) System.out.println(数据库连接失败,请联系管理员。);return null; 四.设计和调试分析1. 此系统只有一个管理员,能对数据进行,添加,查询,修改,显示,编辑,删除,和统计。2. 用户只能根据密码和对应账号进行登录查询,以及请假和休假操作。五.用户手册1. 针对管理员(1) 输入账号密码即可登录,可以使用菜单中所有功能。(2) 管理员默认密码是“12345678”。2. 针
16、对普通用户,(1) 仅可使用请假和休假功能。(2) 用户默认密码是“12345678”。3. 要使用本套需要创建数据库文件。(1) 建立表 表名字为:CSAS123L;(2)数据的插入。六.测试结果(1)登录界面:(2)查看界面:(3)查询界面:(4)请假界面: 其他不在详细描述。七.设计心得1. 操作界面过于简单,没有背景图片,应该适当插入部分图片。2. 人机交互缺乏,对错误的抛出处理不当,考虑到的情况不够全面。3. 对于数据库的连接仅限于本机,无法实现联网工作,所以对于软件的可移植性不够。虽然用文件的方式操作能够解决这一问题,但是对于数据处理太繁琐。4. 对于系统设计方面的问题,一定要有计
17、划和流程图,不能想一步做一步,最后会导致问题的处理不够全面。5. 应该该有一个良好的编码习惯,类的定义,方法的定义,一定要有一套规则,方便检查调试,使别人能够轻易地看懂。八.附录AddMenu类package com.Listen;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import javax.swing.JOptionPane;public class AddMenu /清理数据函数,清理显示的信息。public void clear(Operatep
18、age a)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(); public AddMenu(Operatepage a) a.setEnable(a, true);Boxpanel类:package com.Listen;import java.a
19、wt.Font;import javax.swing.Box;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing. JTextField;public class BoxPanel extends JPanel JTextField text; JLabel label; Box box;public BoxPanel(String s,int n ) box = Box.createHorizontalBox(); label = new JLabel (s); text = new JTextFiel
20、d(,n); text.setHorizontalAlignment(JTextField.LEFT); /设置文本格式 / text.setFont(new Font(Arial, Font.BOLD, 14); box.add(label); box.add(text); add(box);/设置密码格式 private void changefont() BoxPanelll类:package com.Listen;import javax.swing.Box;import javax.swing.JLabel;import javax.swing.JPanel;public class
21、 BoxPanelll extends JPanelJLabel label1,lable2; Box box;public BoxPanelll(String s,String n ) box = Box.createHorizontalBox(); label1 = new JLabel (s); lable2 = new JLabel (n); box.add(label1); box.add(lable2); add(box);DateBaseConn类:package com.Listen;import javax.swing.Box;import javax.swing.JLabe
22、l;import javax.swing.JPanel;public class BoxPanelll extends JPanel JLabel label1,lable2; Box box;public BoxPanelll(String s,String n ) box = Box.createHorizontalBox(); label1 = new JLabel (s); lable2 = new JLabel (n); box.add(label1); box.add(lable2); add(box);DeleteMenu类:package com.Listen;import j
23、ava.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import javax.swing.JOptionPane;public class DeleteMenupublic static void delete(Operatepage a) throws InstantiationException,IllegalAccessException, ClassNotFoundException, SQLException Connection conn = DateBaseConn.r
24、eturnConn(); int i = 0; String sql = delete from CSAS123L where ENUM= + a.number.text.getText().trim() + ; PreparedStatement sts; try sts = (PreparedStatement) conn.prepareStatement(sql); i = sts.executeUpdate(); if(i0) JOptionPane.showMessageDialog( a.panel1, 删除成功,请继续操作!); else JOptionPane.showMess
25、ageDialog( a.panel1, 删除失败,请确认后再操作!); sts.close(); conn.close(); catch (SQLException e) e.printStackTrace(); AddMenu a1 = new AddMenu( a); a1.clear(a); LeaveB类:package com.Listen;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.SQLExcep
26、tion;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JPanel;public class LeaveB extends JDialog implements ActionListenerJPanel topPanel;JButton sureB,exitB;public LeaveB() setBounds(200,350,200,100);setVisible(true);setLayout(new GridLayout(2, 1);topPanel = new JPanel();sur
27、eB = new JButton(确定);exitB = new JButton(取消);topPanel.add(sureB);topPanel.add(exitB);sureB.addActionListener(this);exitB.addActionListener(this);add(topPanel);public void save(Operatepage a)SaveMenu a1 = new SaveMenu();a.sickDay.text.getText();try a1.SaveDate(null); catch (InstantiationException | I
28、llegalAccessException |ClassNotFoundException | SQLException e1) / TODO Auto-generated catch blocke1.printStackTrace();public void actionPerformed(ActionEvent e) if (e.getSource()=exitB)dispose();LeavaBL类:package com.Listen;import java.awt.event.ActionEvent;import java.sql.SQLException;import javax.
29、swing.JOptionPane;public class LeaveBL extends LeaveBOperatepage a;public void save(Operatepage a)int i1,i2;SaveMenu a1 = new SaveMenu();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.se
30、tText(String.valueOf(i2);try a1.UpdataDate(a); catch (InstantiationException | IllegalAccessException |ClassNotFoundException | SQLException e1) / TODO Auto-generated catch blocke1.printStackTrace();JOptionPane.showMessageDialog(topPanel, 病假天数:+a.sickDay.text.getText()+n+剩余病假天数:+a.sickDayOff.text.ge
31、tText();public void actionPerformed(ActionEvent e) if (e.getSource()=sureB) save(a); a.button1.setEnabled(false); dispose();else if (e.getSource()=exitB) dispose(); public static void main(String args) / TODO Auto-generated method stub new LeaveBL();LeaveBV类:package com.Listen;import java.awt.event.
32、ActionEvent;import java.sql.SQLException;import javax.swing.JOptionPane;public class LeaveBV extends LeaveB Operatepage a;public LeaveBV() public void save(Operatepage a)int i1,i2;SaveMenu a1 = new SaveMenu();i1=Integer.parseInt(a.offDay.text.getText();+i1;a.offDay.text.setText(String.valueOf(i1);i2
33、=Integer.parseInt(a.offDayOff.text.getText();-i2;a.offDayOff.text.setText(String.valueOf(i2);try a1.UpdataDate(a); catch (InstantiationException | IllegalAccessException |ClassNotFoundException | SQLException e1) e1.printStackTrace();JOptionPane.showMessageDialog(topPanel,a.name.text.getText()+n+带薪休
34、假天数:+a.offDay.text.getText()+n+剩余带薪休假天数:+a.offDayOff.text.getText();public void actionPerformed(ActionEvent e) if (e.getSource()=sureB) save(a); a.button2.setEnabled(false); dispose();else if (e.getSource()=exitB) dispose(); Logpage类:package com.Listen;import java.awt.BorderLayout;import java.awt.Co
35、lor;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GridLayout;import java.awt.Label;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java
36、.sql.SQLException;import javax.swing.JButton;import javax.naming.spi.DirStateFactory.Result;import javax.swing.BoxLayout;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import
37、javax.swing.JTextField;public class Logpage extends JFrame implements ActionListenerJPanel topPanel,confpanel,logPanel;JLabel topLabel;BoxPanel staffpb ,administratorbp;boxpanelpass passworbp;JButton bConfirm;JPanel imagePanel;Operatepage a; public Logpage() super(公司员工考勤管理系统); setLayout(new GridLayo
38、ut(3, 1); /添加上部分 topLabel = new JLabel( 公司员工考勤管理系统登录界面); topLabel.setFont(new Font(宋体, Font.BOLD, 30); topPanel = new JPanel(); topPanel.setLayout(new BorderLayout(); topPanel.add(Center,topLabel); add(topPanel); /添加中部分 logPanel = new JPanel(); logPanel.setLayout(new GridLayout(3, 1); staffpb = new
39、BoxPanel(员工账号: ,15); administratorbp = new BoxPanel(管理员账号:,15); passworbp = new boxpanelpass(账号密码: , 14); logPanel.add(staffpb); logPanel.add(administratorbp); logPanel.add(passworbp); add(logPanel); /添加下部分 bConfirm = new JButton(确定); bConfirm.addActionListener(this); confpanel = new JPanel(); confpanel.add(bConfirm); bConfirm.setBounds(30,30 , 50, 50); add(Center,confpanel); setBounds(100,100,600,400); setVisible(true); public static void menuSetEnable(Operatepage a,boolean flag) a.menu1.setEnabled(flag); a.menu2.setEnabled(flag); a.menu3.setEnabled(flag); a.menu4.setEnabled(flag); a.me