2022年员工管理系统Java课程设计 .pdf
课程设计(论文)任务书学院*学院专业* 学生姓名班级学号* 课程名称Java语言程序设计课程设计(论文)题目员工信息管理系统设计目的:1)复习、巩固 Java 语言的基础知识,进一步加深对Java 语言的理解和掌握;2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力;3)培养学生在项目开发中的团队合作精神、创新意识及能力。设计要求(技术参数) :1)对系统进行需求分析及可行性分析系统实现的目的,项目开发的背景,系统要达到的目标,开发系统所用的开发环境,预期使用的用户等。2)对系统进行总体设计分析系统的功能结构模块,并给出系统的功能结构图,设计要符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理。3)详细设计设计所需的数据表,给出所需数据表的字段名称,数据类型,字符长度,字段说明,约束条件。编码实现每个子功能模块,并进行测试。计划与进度安排:周一全天:设计解决问题方法周四 14节:调试程序周一全天:调试程序周四 14节:完成论文,答辩成绩:指导教师(签字) :年月日专业负责人(签字) :年月日主管院长(签字) :年月日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 24 页 - - - - - - - - - 摘要Java 语言是当前最为流行的程序设计语言之一,诸多优秀的的特性使其成为被业界广泛认可和采用的工具。随着目前公司规模的渐渐扩大, 员工管理将成为意见不得不总是的问题。有些公司人员流动较大,而且人数动辄上百人,若采用传统的方式进行管理,不仅易出错更是一件令人痛疼的事。随着计算机的诞生, 在此领域产生众多的信息管理系统来管理信息, 不仅信息处理方便, 而且简单强大。 本系统正事其中的一项,针对员工信息管理, 方便公司对员工的信息进行处理,极大减少了人事管理的工作量。另一方面,本系统中所涉及到图形用户界面设计是我们学习程序设计这门课的难点兼重点, 通过审计本系统不仅巩固了我们的基础,以及程序设计能力,还锻炼了我们对程序设计的流程及大体上的把握不仅如此,在设计过程中,我们的调试能力也得到增强。使我们对设计“大程序”有了经验。目前,无论是机关、事业单位、 还是企业单位, 员工管理对于组织生存与长远发展所具备的重要性都已经有了明确的认识,而员工管理水平的提升不仅需要高素质的管理人员,而且也需要信息化工具进行辅助. 在现代化的企业管理中,员工管理系统有着十分重要的作用 ! 关键词: 文件和流界面设计 GUI 异常处理 Hashtable类名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 24 页 - - - - - - - - - 目录一、设计目的 . 错误!未定义书签。二、设计问题 . 错误! 未定义书签。2.1 课设问题 . 错误! 未定义书签。2.2 设计思路 . 错误! 未定义书签。三、概要设计 . 6 3.1 程序功能模块设计的实现 . 错误! 未定义书签。3.2 系统总体结构 . 错误! 未定义书签。3.3 员工信息面板功能的实现 . 错误! 未定义书签。3.4 员工界面功能模块设计的实现. 错误! 未定义书签。四、详细设计 . 错误! 未定义书签。4.1 定义程序变量 . 错误! 未定义书签。4.2 程序面板设计 . 错误! 未定义书签。4.3 录入员工信息 . 错误! 未定义书签。4.4 查询员工信息 . 错误! 未定义书签。4.5 修改员工信息 . 错误! 未定义书签。4.6 删除员工信息 . 错误! 未定义书签。4.7 显示员工信息 . 错误! 未定义书签。五、设计总结 . 错误!未定义书签。六、参考文献 . 错误! 未定义书签。七、致谢 . 错误! 未定义书签。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 24 页 - - - - - - - - - 一、设计目的随着现代社会的快速发展, 我们已进入信息化时代, 管理系统在人们的生活中的应用越来越广泛,它已深入到我们工作、学习、生活的各个方面。为了适应时代的发展,本次课程设计的主要任务是设计一个学生员工系统并完成一些基本操作。其目的是:(1)提高员工信息管理的运作效率,通过对雇员全面的信息采集和处理;(2)运用已学的 java 知识编一些简单使用的程序,使我们初步具备综合运用所学 Java语言基础知识,面向对象程序设计的基本思想、方法与技术;(3)由计算机来代替人工执行一系列诸如增加新员工、删除、修改、查询、显示等操作。这样就使管理人员轻松快捷的完成员工信息的管理工作。二、设计问题2.1 课设问题:员工管理系统要求完成:(1)完成员工的添加、删除、查询、修改功能(2)使用界面操作(3)使用文件完成2.2 设计思路:首先设计面板,然后往面板里添加组件,点击各个组件来实现要求的对员工信息的添加、删除、查询、修改功能。三、概要设计3.1 程序功能模块设计的实现本段代码中主要的类有EmployeeManager和 ActionEvent,设置了监听接口由 ActionEvent 类来实现,并且用if 语句来为变量服务。后面设置了一个异常处理,使用 try 和 catch来捕获异常。使用GUI 技术实现员工的图形界面。3.2 系统总体结构名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 24 页 - - - - - - - - - 系统总体结构3.3 员工信息面板功能的实现首先构造两个面板( JPanel ) ,分别为界面以及显示,并将其加入到容器中.主界面员工信息管理系统信息添加信息查询信息修改信息删除信息显示名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 24 页 - - - - - - - - - 显示界面3.4 员工界面功能模块设计的实现录入:提示员工信息是否被录入,选择是(Y) ,则员工信息录入到文件中查询:在主界面中输入员工号,点击查找,若员工信息不存在则显示如图若文本文件中存在所要查找的员工信息(例如工号0801) ,则在主界面中显示该员工信息(员工号、姓名和性别)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 24 页 - - - - - - - - - 删除:在主界面中输入员工号,点击删除按钮,弹出对话框,选择是(Y) 程序将删除词员工的所有信息。四、详细设计4.1 定义程序变量自 定 义 employee 类 , 其 中 定 义 number,name,sex 三 个 变 量 , 分 别 包 含setNumber 、getNumber 、setName 、getName 、 setSex 、getSex 方法。class employee implements java.io.Serializable String number , name, sex ; public employee(); publicvoid setNumber(String number) this. number =number; public String getNumber() returnnumber ; publicvoid setName(String name) this. name=name; public String getName() returnname; publicvoid setSex(String sex) this. sex =sex; Public String getSex () returnsex ; 4.2 程序面板设计定义 EmployeeManager类继承 JFrame, 使用 JLabel 、 JTextField 、 JRadioBUtton 、ButtonGroup 、JButton 等类构造各组件,使用。使用Hashtable 类创建散列表对象“员工表” 存放 employee 对象,每个 employee 对象用该对象的学号作为关键字。使用exists()方法判断文本文件是否存在。若存在则进行数据的写入操作。使用 addActionListener()方法对 JButton 进行注册监听。 GridLayout 布局管理器对面板进行设计如下所示。publicclass EmployeeManager extends JFrame JLabel lb =new JLabel( 录入请先输入记录,查询、删除请先输入工号,修改是对查询 + 内容改后的保存! ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 24 页 - - - - - - - - - JTextField 工号, 姓名; JRadioButton 男, 女; ButtonGroup group =null; JButton 录入, 查询, 删除, 修改, 显示; JPanel a, b, c, d, f ; employee 员工=null; Hashtable 员工表 =null; File file=null; FileInputStream inOne =null; ObjectInputStream inTwo =null; FileOutputStream outOne =null; ObjectOutputStream outTwo =null; public employee 工人; public EmployeeManager() super ( 沈阳理工员工基本信息管理系统 ); 工号=new JTextField(10); 姓名=new JTextField(10); group =new ButtonGroup(); 男=new JRadioButton( 男 , true); 女=new JRadioButton( 女 , false); group .add(男); group .add(女); 录入=new JButton( 录入 ); 查询=new JButton( 查询 ); 删除=new JButton( 删除 ); 修改=new JButton( 修改 ); 显示=new JButton( 显示 ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 24 页 - - - - - - - - - 录入.addActionListener(new LRAct(); 查询.addActionListener(new CXAct(); 修改.addActionListener(new XGAct(); 删除.addActionListener(new SCAct(); 显示.addActionListener(new XSAct(); 修改.setEnabled(false); a=new JPanel(); a.add(new JLabel( 工号: ,JLabel.CENTER ); a.add(工号); b=new JPanel(); b.add(new JLabel( 姓名: ,JLabel.CENTER ); b.add(姓名); c=new JPanel(); c.add(new JLabel( 性别: ,JLabel.CENTER ); c.add(男); c.add(女); d=new JPanel(); d.setLayout(new GridLayout(6,1); d.add(a); d.add(b); d.add(c); f =new JPanel(); f .add(录入); f .add(查询); f .add(修改); f .add(删除); f .add(显示); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 24 页 - - - - - - - - - file=new File( 员工信息 .txt); Hashtable 员工表 =new Hashtable(); if (! file.exists() try FileOutputStream out=newFileOutputStream(file); ObjectOutputStream objectOut=newObjectOutputStream(out); objectOut.writeObject(员工表 ); objectOut.close(); out.close(); catch(IOException e) Container con=getContentPane(); con.setLayout(new BorderLayout(); con.add(lb , BorderLayout.NORTH ); con.add(d, BorderLayout.CENTER ); con.add(f , BorderLayout.SOUTH ); setDefaultCloseOperation(EXIT_ON_CLOSE); setBounds(200,200,600,300); setVisible(true); 4.3 录入员工信息以 员 工 的 员 工 号 作 为 关 键 字 , 调 用ObjectInputStream(new FileInputStream () 中的 readObject()方法读取文本文件中的数据。使用员工表.containsKey(number)对关键字进行检测, 如果数据中包含该员工号, 则弹出对话框提示该员工信息已存在, 请到修改页面进行信息的修改, 如果数据中不包含该关键字,则弹出确认对话框,点击确定,程序调用put() 方法写入信息到散列表中。调用 writeObject()方法将散列表写入文本文件中。如果程序在获取员工号时为空时,提示用户输入员工号。用try ,catch 对异常进行处理。以下为具体代码:class LRAct implements ActionListener publicvoid actionPerformed(ActionEvent e) 修改.setEnabled(false); / 功能尚未实现 String number= ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 24 页 - - - - - - - - - number=工号.getText(); if (number.length()0) try inTwo =new ObjectInputStream(newFileInputStream(file); 员工表 =(Hashtable)inTwo .readObject(); inOne .close(); inTwo .close(); catch (Exception ee)System.out .println( 创建表出现问题! ); if ( 员工表 .containsKey(number) String warning= 该员工信息已存在,请到修改页面修改! ; JOptionPane.showMessageDialog( null,warning, 警告 , JOptionPane.WARNING_MESSAGE ); else String m= 确定该员工被录入? ; intok=JOptionPane.showConfirmDialog( null,m, 确认 , JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE); if (ok=JOptionPane.YES_OPTION) String name=姓名.getText(); String sex=null; if ( 男.isSelected()sex=男.getText(); else sex= 女.getText(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 24 页 - - - - - - - - - 员工=new employee(); 员工.setNumber(number); 员工.setName(name); 员工.setSex(sex); try outOne =new FileOutputStream(file); outTwo =newObjectOutputStream(outOne ); 员工表 .put(number,员工); outTwo .writeObject(员工表 ); outTwo .close(); outOne .close(); catch(Exception ee)System.out .println( 输出出现问题! ); 工号.setText(null); 姓名.setText(null); else String warning= 必须输入工号! ; JOptionPane.showMessageDialog( null,warning, 警告 ,JOptionPane.WARNING_MESSAGE ); 4.4 查询员工信息构造 CXAct类实现 ActionListener接口,对事件监听。在该类中以员工的员工号 作 为 关 键 字 , 调 用ObjectInputStream(new FileInputStream ()中 的readObject()方法读取文本文件中的数据。使用员工表.containsKey(number) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 24 页 - - - - - - - - - 对关键字进行检测, 如果文本框中的员工号和文本文件中的数据相同,程序调用setText()方法把散列表中的员工信息显示在文本框中,如果文本框中的员工号和文本文件中的数据不相同, 则程序调用 JOptionPane.showMessageDialog() 方法提示该员工信息不存在。 如果程序获取到员工号文本框中的内容为空,则提示用户输入员工号。以下程序实现为代码:class CXAct implements ActionListener publicvoid actionPerformed(ActionEvent e) String number= ; number=工号.getText(); if (number.length()0) try inOne =new FileInputStream(file); inTwo =new ObjectInputStream(inOne ); 员工表 =(Hashtable)inTwo .readObject(); inOne .close(); inTwo .close(); catch (Exception ee)System.out .println( 员工表有问题! ); if ( 员工表 .containsKey(number) 修改.setEnabled(true); employee stu=(employee)员工表 .get(number); 姓名.setText(stu.getName(); if (stu.getSex().equals( 男 )男.setSelected(true); else 女.setSelected(true); else 修改.setEnabled(false); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 24 页 - - - - - - - - - String warning= 该员工不存在! ; JOptionPane.showMessageDialog( null,warning, 警告 ,JOptionPane.WARNING_MESSAGE ); else 修改.setEnabled(false); String warning= 必须输入工号! ; JOptionPane.showMessageDialog( null,warning, 警告 ,JOptionPane.WARNING_MESSAGE ); class XGAct implements ActionListener publicvoid actionPerformed(ActionEvent e) String number=工号.getText(); String name=姓名.getText(); String sex=null; if ( 男.isSelected()sex=男.getText(); else sex= 女.getText(); employee 员工=new employee(); 员工.setNumber(number); 员工.setName(name); 员工.setSex(sex); try outOne =new FileOutputStream(file); outTwo =new ObjectOutputStream(outOne ); 员工表 .put(number,员工); outTwo .writeObject(员工表 ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 24 页 - - - - - - - - - outTwo .close(); outOne .close(); 工号.setText(null); 姓名.setText(null); catch(Exception ee) System.out .println( 录入修改出现异常 ! ); 修改.setEnabled(false); class SCAct implements ActionListener publicvoid actionPerformed(ActionEvent e) 修改.setEnabled(false); String number=工号.getText(); if (number.length()0) try inTwo =new ObjectInputStream(newFileInputStream(file); 员工表 =(Hashtable)inTwo .readObject(); inOne .close(); inTwo .close(); catch (Exception ee) if ( 员工表 .containsKey(number) employee stu=(employee)员工表 .get(number); 姓名.setText(stu.getName(); if (stu.getSex().equals( 男 )男.setSelected(true); else 女.setSelected(true); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 24 页 - - - - - - - - - String m= 确定要删除该员工的记录吗? ; int ok=JOptionPane.showConfirmDialog( null,m, 确认 , JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE ); if (ok=JOptionPane.YES_OPTION) 员工表 .remove(number); try outOne =new FileOutputStream(file); outTwo =new ObjectOutputStream(outOne ); outTwo .writeObject(员工表 ); outTwo .close(); outOne .close(); 工号.setText(null); 姓名.setText(null); catch(Exception ee)System.out .println(ee); elseif (ok=JOptionPane.NO_OPTION) 工号.setText(null); 姓名.setText(null); else String warning= 该号不存在! ; JOptionPane.showMessageDialog( null,warning, 警告 ,JOptionPane.WARNING_MESSAGE ); else String warning= 必须输入工号! ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 24 页 - - - - - - - - - JOptionPane.showMessageDialog( null,warning, 警告 ,JOptionPane.WARNING_MESSAGE ); 4.5 修改员工信息和添加员工信息方法类似,定义number、name 、sex 三个局部变量,并使用getText()方 法初始化变量。调用isSelected()方法设置单选按钮。创建employee 类型的“员工”局部变量, 调用 Hastable类中的 put() 方法将要修改的员 工 信 息 写 入 到 散 列 表 “ 员 工 表 ”中 。 调 用ObjectInputStream(new FileInputStream ()中的 writeObject()把散列表中的数据信息写入到文本文件中。使用 trycatch来捕获异常,并进行处理。以下是程序实现修改功能的代码:class XGAct implements ActionListener publicvoid actionPerformed(ActionEvent e) String number=工号.getText(); String name=姓名.getText(); String sex=null; if ( 男.isSelected()sex=男.getText(); else sex= 女.getText(); employee 员工=new employee(); 员工.setNumber(number); 员工.setName(name); 员工.setSex(sex); try outOne =new FileOutputStream(file); outTwo =new ObjectOutputStream(outOne ); 员工表 .put(number,员工); outTwo .writeObject(员工表 ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 24 页 - - - - - - - - - outTwo .close(); outOne .close(); 工号.setText(null); 姓名.setText(null); catch(Exception ee) System.out .println( 录入修改出现异常 ! ); 修改.setEnabled(false); 4.6 删除员工信息构造 SCAct类实现 ActionListener接口,在该类中也是以员工信息中的员工号作为关键字,调用ObjectInputStream(new FileInputStream ()中的readObject()方法读取文本文件中的数据。使用员工表.containsKey(number) 对关键字进行检测, 如果文本框中的员工号和文本文件中的数据相同,程序调用remove() 方法把散列表中的该项员工的信息删除,如果文本框中的员工号和文本文件中的数据不相同, 则程序调用 JOptionPane.showMessageDialog() 方法提示该员工信息不存在。 如果程序获取到员工号文本框中的内容为空,则提示用户输入员工号。以下程序实现为代码:class SCAct implements ActionListener publicvoid actionPerformed(ActionEvent e) 修改.setEnabled(false); String number=工号.getText(); if (number.length()0) try inTwo =new ObjectInputStream(newFileInputStream(file); 员工表 =(Hashtable)inTwo .readObject(); inOne .close(); inTwo .close(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 24 页 - - - - - - - - - catch (Exception ee) if ( 员工表 .containsKey(number) employee stu=(employee)员工表 .get(number); 姓名.setText(stu.getName(); if (stu.getSex().equals( 男 )男.setSelected(true); else 女.setSelected(true); String m= 确定要删除该员工的记录吗? ; int ok=JOptionPane.showConfirmDialog( null,m, 确认 , JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE ); if (ok=JOptionPane.YES_OPTION) 员工表 .remove(number); try outOne =new FileOutputStream(file); outTwo =new ObjectOutputStream(outOne ); outTwo .writeObject(员工表 ); outTwo .close(); outOne .close(); 工号.setText(null); 姓名.setText(null); catch(Exception ee)System.out .println(ee); elseif (ok=JOptionPane.NO_OPTION) 工号.setText(null); 姓名.setText(null); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 24 页 - - - - - - - - - else String warning= 该号不存在! ; JOptionPane.showMessageDialog( null,warning, 警告 ,JOptionPane.WARNING_MESSAGE ); else String warning= 必须输入工号! ; JOptionPane.showMessageDialog( null,warning, 警告 ,JOptionPane.WARNING_MESSAGE ); 4.7 显示员工信息实现 ActionListener接口对构造的XSAct类用于接收操作事件的侦听器接口。而使用该类创建的对象可使用组件的addActionListener方法向该组件注册。 在发生操作事件时, 调用该对象的actionPerformed方法。 从而调用 SShow()方法实现显示员工信息的功能。class XSAct implements ActionListener publicvoid actionPerformed(ActionEvent e) new SShow( file); 编写 SShow类继承 JDialog ,定义 Hashtable类的“员工表”、JTextArea类的“显示”和处理字符流的FileInputStream和 ObjectInputStream类型的inOne 与 inTwo,并对他们初始化。在SShow()方法中使用 JTextArea 类设置显示面板,调用 JScrollPane方法管理视口、 可选的垂直和水平滚动条以及可选的行 和 列 标 题 视 口 , 最 终 设 置 如 图 所 示 的 显 示 面 板 。 inTwo=new ObjectInputStream(new FileInputStream(file); 员工表=(Hashtable)inTwo.readObject(); inTwo.close();对文本文件的读取,使用 isEmpty()名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 24 页 - - - - - - - - - 和 append() 方法判断散列表中的内容是否为空并把信息显示在JTextArea 文本显示区中。 实现 Enumeration 接口的对象, 它生成一系列元素, 一次生成一个。连 续 调 用nextElement方 法 将 返 回 一 系 列 的 连 续 元 素 。 使 用 “ 显示.append(str)” 方法将这些元素追加到显示区域中。以下为程序功能实现的代码:class SShow extends JDialog Hashtable 员工表 = null; JTextArea 显示=null; FileInputStream inOne =null; ObjectInputStream inTwo =null; File file=null; public SShow(File file) super ( new JFrame(), 显示对话框 ); this. file=file; 显示=new JTextArea(16,30); try inTwo =new ObjectIn