数据库原理及应用课程设计报告题目:考勤管理系统---课程设计报告所在学院:信息工程学院班级:计科1001学号:**********名:**指导教师:才扣2012年1月4日目录一、概述二、需求分析三、概念设计四、逻辑设计五、系统实现六、小结一、概述1.1系统开发的背景与意义1.1.1系统开发背景现在不论哪个企业,都要进行考勤,考勤管理系统利用计算机管理考勤工作, 提高工作效率,一些企业在考勤管理方面用了大量的人力和财力,不说准确度和可信度如何,其效率很低,而且容易出错,不利于管理。
所以人工考勤已经很难再满足企业规化管理的要求,随着数据库技术的发展和企业信息化建设的进行,使用计算机管理考勤成为一种主流趋势,它不仅为企业减少了人力财力的付出,而且也大大减轻了考勤工作人员的工作量。
对于员工们的出勤率有个明显的记录,对于公司的职员也有基本了解根据出勤情况可以计算员工的实际工资。
本文系统的阐述了企业考勤管理设计开发的全过程。
包括系统需求调查分析,概念结构设计,逻辑结构设计等部分。
1.1.2系统开发意义开发本系统的目的,就是要解决目前企业中关于员工出勤管理中所面临的一系列问题。
考勤系统进行企业管理越来越适应企业的需要,集信息的输入,显示,修改,删除等各种处理,信息维护方便,给公司可以带来很大的便利。
开发出企业考勤管理系统能有效地提高企业办事效率,解决目前员工出勤管理问题,实现员工请出勤信息和缺勤信息对企业领导透明,使管理人员及时把握员工的情况,及时与员工沟通,提高生产质量。
二、需求分析作为一个考勤系统.最重要的功能当数考勤了.也就是能够将员工上班签到的日期与时间记录下来。
当然.记录下签到信息后,应该具有其他的辅助功能.比~II1"查询员工某天的签到情况”、”修改签到情况”、”员工的维护”、”公司上班时间的设置”等.下面就本系统完成的功能做一个简单的需求分析。
2.1系统功能要求2.1.1功能划分(1)记录每个员工每天所有进入公司的时刻和离开公司的时刻。
(2)每天结束时自动统计当天的工作时间(3)每天结束时自动统计当天迟到或早退的次数。
(4)对于弹性工作制,每天结束时自动统计当月的工时,并自动算出当月欠缺或富余的时间(5)每个月末统计该月的工作时间判断是否足够(6)每个月末统计该月的工作天数并判断是否足够(7)管理人员查询并修改工作时间(特殊情况下修改)(8)管理人员账户管理(如设置密码等)(9)管理人员设定早退及迟到的条件,每个月的工作时间(10)管理人员设定每个月的工作日期及放假日期1.1.2 功能描述实际的管理和记录工作非常需要快速获知各个部门员工的每日出勤情况,以便于及时向高层管理者反映员工的出勤,缺勤情况。
目前,由于负责考勤的员工,工作任务比较多,而且还都是重复数据,让工作者没有办法及时的向上报告。
工作问题不能及时处理。
针对以上的情况,我们提出企业考勤管理系统,实现网上考勤任务,以减轻考勤人员的工作量。
我公司准备开发员工考勤管理系统,完成员工基本信息维护、企业的部门信息维护、企业基本考勤类型的维护、员工考勤的管理、员工考勤的查询与分析。
实现人事考勤的需要,包括员工迟到、早退的情况的记录,在每个月底计算工资对员工和对员工进行绩效评估的时候,对员工整个月的考勤记录进行查询和统计。
2.2性能需求此工资管理系统对工资数据精度的计算能在默认情况之下精确到小数点后3位小数,即是精确到分的计算。
但在用户使用过程中,能自行根据实际情况进行小数计算精度的设定,最大能允许保留小数点后5位的精度。
在时间特性上,当用户发出命令请求时的服务器的响应时间、对数据更新处理、工资数据的查询检索等上,同样要求系统响应时间不会超过0.5秒时间。
系统支持多种操作系统的运行环境,多不同操作系统,不同文件格式的磁盘上的数据均能实现信息的互通,及共享。
2.3系统层次划分2.4数据流图顶层数据流图2.5数据字典(1),数据项描述数据项描述表(2)数据结构描述数据结构描述(3)数据流描述数据流描述(4)数据存储数据存储三、概念设计员工属性图管理员属性图n四、逻辑设计4.1关系模式员工信息(工号,,性别,年龄,职位,密码,入职时间)记录数据(工号,上班的小时,下班的小时,上班的分钟,下班的分钟,每天工作时间)统计数据(工号,剩余的时间,迟到的次数,早退的次数,工作天数)管理员(管理员号,,性别,年龄)每天统计信息表(工号,,小时,分钟,动作,时间)其中动作指的时入或离开公司员工表(employee)员工表记录数据表(data_record):记录数据表统计信息表月统计数据表(everymonth_statistics):统计数据表管理员表(Administrator)管理员表五、系统实现一、登陆界面package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.sql.*;public class Main_login extends JFrame implements ActionListener {public Main_login(){super("选择用户类型");this.setSize(300,300);this.setContentPane(new JPanel());create();}private void create(){JButton b1,b2,b3;Box box1,box2,box3,box;b1=new JButton("系统管理员");b2=new JButton("普通用户");b3=new JButton("退出登陆");b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);box1=Box.createHorizontalBox();box2=Box.createHorizontalBox();box3=Box.createHorizontalBox();box1.add(b1);box2.add(b2);box3.add(b3);box=Box.createVerticalBox();box.add(box1);box.add(Box.createVerticalStrut(20));box.add(box2);box.add(Box.createVerticalStrut(40));box.add(box3);this.add(box);}public void actionPerformed(ActionEvent e){if(e.getActionCommand()=="系统管理员"){login frame=new login();dispose();}else if(e.getActionCommand()=="普通用户"){login1 frame=new login1();dispose();}else if(e.getActionCommand()=="退出登陆"){System.exit(0);}}public static void main(String args[]){//ConnectionDB myDB=new ConnectionDB();int flag=0; //判断是否创建过数据库的标志File file=new File("SQL.txt");try {//读入标志FileReader in=new FileReader(file);int len;if((len=in.read())!=-1)flag=1; //已创建了数据库,置1in.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}//没有创建过数据库if(flag==0){ConnectionDB myDB=new ConnectionDB();myDB.createTable();myDB.breakDB();try {//写入标志FileWriter out=new FileWriter(file);out.write("1");out.close();} catch (IOException e) {e.printStackTrace();}}Main_login frame1=new Main_login();frame1.setVisible(true);}}}}二、管理员登陆界面class login extends JFrame //管理员登陆界面{public login(){t his.setTitle("管理员登陆界面");t his.setSize(300,300);this.setContentPane(new JPanel());t his.setVisible(true);init();}JTextField jTextField1;JPasswordField jPasswordField1;private void init(){JLabel jLabel1=new JLabel("管理员登陆");JLabel jLabel2=new JLabel("用户名");JLabel jLabel3=new JLabel("密码");jTextField1=new JTextField(10);jPasswordField1=new JPasswordField(10); JButton button1=new JButton("确定");JButton button2=new JButton("取消");JButton button3=new JButton("修改密码");B ox box,box1,box2,box3,box4,box5;b ox1=Box.createHorizontalBox();b ox1.add(jLabel1);b ox1.add(Box.createHorizontalStrut(10));b ox2=Box.createHorizontalBox();b ox2.add(jLabel2);b ox2.add(Box.createHorizontalStrut(20));b ox2.add(jTextField1);b ox3=Box.createHorizontalBox();b ox3.add(jLabel3);b ox3.add(Box.createHorizontalStrut(20));b ox3.add(jPasswordField1);b ox4=Box.createHorizontalBox();b ox4.add(button1);b ox4.add(Box.createHorizontalStrut(20));b ox4.add(button2);b ox5=Box.createHorizontalBox();b ox5.add(button3);b ox=Box.createVerticalBox();b ox.add(box1);b ox.add(Box.createVerticalStrut(20));b ox.add(box2);b ox.add(Box.createVerticalStrut(20));b ox.add(box3);b ox.add(Box.createVerticalStrut(20));b ox.add(box4);b ox.add(Box.createVerticalStrut(20));b ox.add(box5);t his.add(box);b utton1.addActionListener(new ActionListener(){Overridepublic void actionPerformed(ActionEvent e) {// TODO自动生成的方法存根// login im=new login();Stringname=jTextField1.getText(),password=jPasswordField1.getText();if(name.equals("admin")&&password.equals("123456")){MFrame mi=new MFrame();dispose();}else{JOptionPane.showMessageDialog(new JFrame("WARNING"), "用户名或密码错误");}}});b utton2.addActionListener(new ActionListener(){Overridepublic void actionPerformed(ActionEvent e) {// TODO自动生成的方法存根Main_login frame=new Main_login();dispose();}});b utton3.addActionListener(new ActionListener(){Overridepublic void actionPerformed(ActionEvent e) {// TODO自动生成的方法存根MPwd f1=new MPwd();dispose();}});}}三、主功能界面class MFrame extends JFrame //主功能界面{public MFrame(){this.setTitle("主要功能");this.setContentPane(new JPanel());this.setSize(350,200);this.setVisible(true);init();}private void init(){JButton button1=new JButton("员工信息管理");JButton button2=new JButton("员工出勤信息");JButton button3=new JButton("配置信息");JButton button4=new JButton("退出登陆");Box box1=Box.createHorizontalBox();Box box2=Box.createHorizontalBox();Box box3=Box.createVerticalBox();box1.add(button1);box1.add(Box.createHorizontalStrut(10));box1.add(button2);box1.add(Box.createHorizontalStrut(10));box1.add(button3);box2.add(button4);box3.add(box1);box3.add(Box.createVerticalStrut(30));box3.add(box2);this.add(box3);button1.addActionListener(new ActionListener() // {Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根Worker_Frame frame=new Worker_Frame();dispose();}});button2.addActionListener(new ActionListener() // {Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根AttendFrame frame=new AttendFrame();dispose();}});button3.addActionListener(new ActionListener() // {Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根Equ_Frame frame=new Equ_Frame();dispose();}});button4.addActionListener(new ActionListener() // {Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根Main_login frame=new Main_login();dispose();}});}}四、员工信息管理class Worker_Frame extends JFrame //员工信息管理{public Worker_Frame(){this.setTitle("员工信息管理");this.setVisible(true);this.setSize(400,400);init();}JButton button1,button2,button3,button4,button5;private void init(){button1=new JButton("员工信息添加");button2=new JButton("员工信息修改");button3=new JButton("员工信息删除");button4=new JButton("员工信息查询");button5=new JButton("返回");Box box1=Box.createHorizontalBox();Box box2=Box.createHorizontalBox();Box box4=Box.createHorizontalBox();Box box3=Box.createVerticalBox();box1.add(button1);box1.add(Box.createHorizontalStrut(20));box1.add(button2);box2.add(button3);box2.add(Box.createHorizontalStrut(20));box2.add(button4);box4.add(button5);box3.add(box1);box3.add(box2);box3.add(Box.createVerticalStrut(30));box3.add(box4);this.add(box3);button1.addActionListener(new ActionListener() //添加员工信息{Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根WoAddFrame frame=new WoAddFrame();dispose();}});button2.addActionListener(new ActionListener() //修改员工信息{Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根WoAltFrame frame=new WoAltFrame();dispose();}});button3.addActionListener(new ActionListener() //删除员工信息{Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根WoDelFrame frame=new WoDelFrame();dispose();}});button4.addActionListener(new ActionListener() //查询员工信息{Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根WoSerFrame frame=new WoSerFrame();dispose();}});button5.addActionListener(new ActionListener() //返回{Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根MFrame frame=new MFrame();dispose();}});}}五、添加员工class WoAddFrame extends JFrame//添加员工{private ConnectionDB myCon=new ConnectionDB();private JButton YesBtn,NoBtn;private static JTextFieldwoName,woNo,woAge,woYear,woPosition,woSex,woPassword;private JLabelwoNameLabel,woNoLabel,woAgeLabel,woYearLabel,woPositionLabel,woSexLabel,woP asswordLabel;//提示区private static Font font=new Font("楷体",Font.BOLD,14);public WoAddFrame(){this.setTitle("添加员工");this.setBounds(200, 200, 400, 300);this.setLayout(null);this.setResizable(false);this.setVisible(true);this.addCompnents();this.add(getwoName());this.add(getwoNo());this.add(getwoAge());this.add(getwoYear());this.add(getwoPosition());this.add(getwoSex());this.add(getwoPassword());}private void addCompnents(){woNameLabel=new JLabel("员工:");woNameLabel.setFont(font);woNameLabel.setBounds(70, 10, 70, 20);this.add(woNameLabel);woNoLabel=new JLabel("员工编号:");woNoLabel.setFont(font);woNoLabel.setBounds(70, 30, 70, 20);this.add(woNoLabel);woAgeLabel=new JLabel("员工年龄:");woAgeLabel.setFont(font);woAgeLabel.setBounds(70, 50, 70, 20);this.add(woAgeLabel);woYearLabel=new JLabel("入职时间:");woYearLabel.setFont(font);woYearLabel.setBounds(70, 70, 70, 20);this.add(woYearLabel);woPositionLabel=new JLabel("员工职位:");woPositionLabel.setFont(font);woPositionLabel.setBounds(70, 90, 70, 20);this.add(woPositionLabel);woSexLabel=new JLabel("员工性别:");woSexLabel.setFont(font);woSexLabel.setBounds(70,110,70, 20);this.add(woSexLabel);woPasswordLabel=new JLabel("员工密码:");woPasswordLabel.setFont(font);woPasswordLabel.setBounds(70, 130, 70, 20);this.add(woPasswordLabel);YesBtn = new JButton("确定");YesBtn.setFont(font);YesBtn.setBounds(100,180,70, 20);this.add(YesBtn);NoBtn = new JButton("取消");NoBtn.setFont(font);NoBtn.setBounds(180,180,70, 20);NoBtn.addActionListener(new ActionListener(){Overridepublic void actionPerformed(ActionEvent e) {// TODO自动生成的方法存根Worker_Frame frame=new Worker_Frame();dispose();}});this.add(NoBtn);YesBtn.addActionListener(new ActionListener() //添加确认按钮响应{Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根String sql="insert intostaff_info(Sno,Sname,Sage,enter_time,position,sex,password)values('"+woNo.getText() +"','"+woName.getText()+"','"+woAge.getText()+"','"+woYear.getText()+"','"+woPosition.getText()+"','"+woSex.getText()+"','"+woPassword.getText()+"');";try {myCon.getStatement().executeUpdate(sql);myCon.breakDB();} catch (SQLException e1) {e1.printStackTrace();}OperatSFrame frame=new OperatSFrame();}});}public static JTextField getwoName(){if(woName==null){woName=new JTextField();woName.setBounds(150,10,150,20);woName.setFont(font);woName.setForeground(Color.blue);}return woName;}public static JTextField getwoNo(){if(woNo==null){woNo=new JTextField();woNo.setBounds(150,30,150,20);woNo.setFont(font);woNo.setForeground(Color.blue);}return woNo;}public static JTextField getwoAge(){if(woAge==null){woAge=new JTextField();woAge.setBounds(150,50,150,20);woAge.setFont(font);woAge.setForeground(Color.blue);}return woAge;}public static JTextField getwoYear(){if(woYear==null){woYear=new JTextField();woYear.setBounds(150,70,150,20);woYear.setFont(font);woYear.setForeground(Color.blue);}return woYear;}public static JTextField getwoPosition(){if(woPosition==null){woPosition=new JTextField();woPosition.setBounds(150,90,150,20);woPosition.setFont(font);woPosition.setForeground(Color.blue);}return woPosition;}public static JTextField getwoSex(){if(woSex==null){woSex=new JTextField();woSex.setBounds(150,110,150,20);woSex.setFont(font);woSex.setForeground(Color.blue);}return woSex;}public static JTextField getwoPassword(){if(woPassword==null){woPassword=new JTextField();woPassword.setBounds(150,130,150,20);woPassword.setFont(font);woPassword.setForeground(Color.blue);}return woPassword;}}六、删除员工class WoDelFrame extends JFrame{private ConnectionDB myCon=new ConnectionDB();private JButton YesBtn,NoBtn;private JLabel woNoLabel;private static JTextField woNo;private static Font font=new Font("楷体",Font.BOLD,14);public WoDelFrame(){t his.setTitle("删除员工");this.setSize(400,400);this.setLayout(null);this.setResizable(false);this.setVisible(true);this.addCompnents();this.add(getwoNo());}private void addCompnents(){woNoLabel=new JLabel("员工编号:");woNoLabel.setFont(font);woNoLabel.setBounds(100, 80, 70, 20);this.add(woNoLabel);YesBtn = new JButton("确定");YesBtn.setFont(font);YesBtn.setBounds(130,150,80, 30);this.add(YesBtn);NoBtn = new JButton("取消");NoBtn.setFont(font);NoBtn.setBounds(220,150,80, 30);this.add(NoBtn);NoBtn.addActionListener(new ActionListener(){Overridepublic void actionPerformed(ActionEvent e) {// TODO自动生成的方法存根Worker_Frame frame=new Worker_Frame();dispose();}});YesBtn.addActionListener(new ActionListener() //添加确认按钮响应{Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根String sql="delete from staff_info where Sno="+woNo.getText()+"";try {myCon.getStatement().executeUpdate(sql);myCon.breakDB();} catch (SQLException e1) {e1.printStackTrace();}OperatSFrame frame=new OperatSFrame();}});}public static JTextField getwoNo(){if(woNo==null){woNo=new JTextField();woNo.setBounds(180,80,150,20);woNo.setFont(font);woNo.setForeground(Color.blue);}return woNo;}}七、删除员工class WoSerFrame extends JFrame//管理员查询{private ConnectionDB myCon=new ConnectionDB();private JButton YesBtn,NoBtn;private static JTextFieldwoName,woNo,woAge,woYear,woPosition,woSex,woPassword;private JLabelwoNameLabel,woNoLabel,woAgeLabel,woYearLabel,woPositionLabel,woSexLabel,woP asswordLabel;//提示区private static Font font=new Font("楷体",Font.BOLD,14);public WoSerFrame(){this.setTitle("查询员工");this.setSize(400,600);this.setLayout(null);this.setResizable(false);this.setVisible(true);this.addCompnents();this.add(getwoNo());this.add(getwoName());this.add(getwoAge());this.add(getwoYear());this.add(getwoPosition());this.add(getwoSex());this.add(getwoPassword());}private void addCompnents(){woNameLabel=new JLabel(":");woNameLabel.setFont(font);woNameLabel.setBounds(100, 120, 60, 20);this.add(woNameLabel);woNoLabel=new JLabel("编号:");woNoLabel.setFont(font);woNoLabel.setBounds(100, 10, 60, 20);this.add(woNoLabel);woAgeLabel=new JLabel("年龄:");woAgeLabel.setFont(font);woAgeLabel.setBounds(100, 160, 70, 20);this.add(woAgeLabel);woYearLabel=new JLabel("时间:");woYearLabel.setFont(font);woYearLabel.setBounds(100, 200, 70, 20);this.add(woYearLabel);woPositionLabel=new JLabel("职位:");woPositionLabel.setFont(font);woPositionLabel.setBounds(100, 240, 70, 20);this.add(woPositionLabel);woSexLabel=new JLabel("性别:");woSexLabel.setFont(font);woSexLabel.setBounds(100,280,70, 20);this.add(woSexLabel);woPasswordLabel=new JLabel("密码:");woPasswordLabel.setFont(font);woPasswordLabel.setBounds(100, 320, 70, 20);this.add(woPasswordLabel);YesBtn = new JButton("确定");YesBtn.setFont(font);YesBtn.setBounds(130,50,80, 30);this.add(YesBtn);NoBtn = new JButton("取消");NoBtn.setFont(font);NoBtn.setBounds(220,50,80, 30);this.add(NoBtn);NoBtn.addActionListener(new ActionListener(){Overridepublic void actionPerformed(ActionEvent e) {// TODO自动生成的方法存根Worker_Frame frame=new Worker_Frame();dispose();}});YesBtn.addActionListener(new ActionListener() //添加确认按钮响应{Overridepublic void actionPerformed(ActionEvent e){// TODO自动生成的方法存根Connection con=myCon.getConnection();try{PreparedStatement ps=con.prepareStatement("select Sname,Sage,enter_time,position,sex,password from staff_info where Sno=?");String s=woNo.getText();ps.setString(1,woNo.getText());ResultSet rs=ps.executeQuery();while(rs.next()){String name=rs.getString("Sname");String age=rs.getString("Sage");String year=rs.getString("enter_time");String position=rs.getString("position");String sex=rs.getString("sex");String password=rs.getString("password");woName.setText(name);woAge.setText(age);woYear.setText(year);woPosition.setText(position);woSex.setText(sex);woPassword.setText(password);}}catch(SQLException ex){ex.printStackTrace();}OperatSFrame frame=new OperatSFrame();}});}public static JTextField getwoNo(){if(woNo==null){woNo=new JTextField();woNo.setBounds(150,10,150,20);woNo.setFont(font);woNo.setForeground(Color.blue);}return woNo;}public static JTextField getwoName(){if(woName==null){woName=new JTextField();woName.setBounds(150,120,150,20);woName.setFont(font);woName.setForeground(Color.blue);}return woName;}public static JTextField getwoAge(){if(woAge==null){woAge=new JTextField();woAge.setBounds(150,160,150,20);woAge.setFont(font);woAge.setForeground(Color.blue);}return woAge;}public static JTextField getwoYear(){if(woYear==null){woYear=new JTextField();woYear.setBounds(150,200,150,20);woYear.setFont(font);woYear.setForeground(Color.blue);}return woYear;}public static JTextField getwoPosition(){if(woPosition==null){woPosition=new JTextField();woPosition.setBounds(150,240,150,20);woPosition.setFont(font);woPosition.setForeground(Color.blue);}return woPosition;}public static JTextField getwoSex(){if(woSex==null){woSex=new JTextField();woSex.setBounds(150,280,150,20);woSex.setFont(font);woSex.setForeground(Color.blue);}return woSex;}public static JTextField getwoPassword(){if(woPassword==null){woPassword=new JTextField();woPassword.setBounds(150,320,150,20);woPassword.setFont(font);woPassword.setForeground(Color.blue);}return woPassword; }}六、小结。