收藏 分销(赏)

基于JAVA职工档案管理系统.doc

上传人:仙人****88 文档编号:11990445 上传时间:2025-08-26 格式:DOC 页数:21 大小:246.04KB 下载积分:10 金币
下载 相关 举报
基于JAVA职工档案管理系统.doc_第1页
第1页 / 共21页
基于JAVA职工档案管理系统.doc_第2页
第2页 / 共21页


点击查看更多>>
资源描述
苏州科技学院电子信息与智能化实验中心 面向对象课程设计 报告 --职工档案管理系统 专业年级 计算机科学与技术 班 级 学 号 姓 名 成 绩 指导教师 2016年3月19日 -19- 目录 职工档案管理系统设计报告 1 1.1目的 2 1.2主要完成的任务 2 1.3使用的开发工具 2 1.3.1 Eclipse 2 1.3.2 MySQL 3 1.4解决的主要问题 3 2.1 系统功能分析 4 2.1.1 系统需求分析 4 2.1.2 可行性分析 4 2.2 用例图及用例说明 4 3.1 系统类图 6 3.1.1 表现层 6 3.2.2 业务逻辑层 6 3.2.3 数据访问层 7 3.2 系统时序图 7 3.3 数据库设计 8 4 系统实现 9 5 系统测试 17 职工档案管理系统设计报告 职工档案的管理是企业管理中的一个重要内容,随着时代的进步,企业也逐渐变得庞大起来。如何管理好企业内部员工的信息,成为企业管理中的一个大问题。在这种情况下,开发一个职工档案管理系统就显得非常必要。 本系统结合公司实际的职工、制度,经过实际的需求分析,采用eclipse作为开发工具而开发出来的职工档案管理系统。整个系统从符合操作简便、灵活、实用、安全的要求出发,本企业职工档案管理系统具有如下功能:主要实现对员工的职工档案资料进行有效的录入、删除、修改和查询,根据职工编号对符合条件的员工档案资料进行修改以及根据职工编号对符合条件的员工档案资料进行删除,根据职工编号查询符合条件的员工档案资料,并打印查询结果等功能。1 课程设计任务概述 1.1目的 现代信息技术的发展,在改变着我们的生活方式的同时,也改变着我们的工作方式,使传统意义上的职工档案管理的形式和内涵都在发生着根本性的变化。在过去,一支笔和一张绘图桌,可能就是进行办公的全部工具。今天,电脑、扫描仪和打印机等,已基本取代了旧的办公用具。如今,职工档案管理己完全可以通过电脑进行,并在计算机辅助下准确快速地完成许多复杂的工作,不仅能够大大降低企业在职工档案管理方面的成本,而且能大大缩短档案管理的时间。而今天,职工档案管理的内容己经转变为对更为广泛的系统价值的追求。信息管理,如今已是一个热门话题,它已为许多企业所采用。因此,在现代化的进程中,引入现代管理的思想,建立一套可面向企事业单位职工档案管理系统,也是十分必要的。 1.2主要完成的任务 随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业职工档案管理势在必行。对于大中型企业来说,利用计算机支持企业高效率完成职工档案管理的日常事务,是适应现代企业制度要求、推动企业劳动职工档案管理走向科学化、规范化的必要条件;计算机管理所无法比拟的优点检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高职工管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。 合理的利用有助于企业发展的管理系统是企业改革的一种优越的体现,不仅保证了核算准确度,还成倍的提高了工作效率,而且便于查询。作为计算机应用的一部分,使用计算机对职工档案信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高职工档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。因此,开发这样一套适用的职工档案管理软件成为很有必要的事。 1.3使用的开发工具 1.3.1 Eclipse Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。 虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。 这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用Java语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如C/C++、COBOL、PHP、Android等编程语言的插件已经可用,或预计将会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。 1.3.2 MySQL MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。 与其他的大型数据库例如 Oracle、DB2、SQL Server等相比,MySQL 自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQ L是开放源码软件,因此可以大大降低总体拥有成本。Linux作为操作系统,Apache和 Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP“或“LNMP”组合。 1.4解决的主要问题 职工档案管理系统是一个企业单位不可缺少的部分,它的内容对于企业的决策者和管理者来说都至关重要,所以职工档案管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。2 系统分析与建模 2.1 系统功能分析 2.1.1 系统需求分析 当前企业信息管理系统正在从US结构向B/S结构转移,但是由于安全性等方面的因素,C/S结构的管理信息系统仍然占据企业管理信息系统的主流。职工档案管理系统是现代企业管理工作不可缺少的一部分,是适应现代企业制度要求、推动企业劳动职工档案管理走向科学化、规范化的必要条件。 职工档案管理系统是一个典型的数据库开发应用程序,它由系统登录、员工信息管理、文件管理组成,具体规划如下: (1)系统管理: 只有管理员用户可以对系统的各个模块进行添加,删除,修改,查询,其他普通用户只能查看自己的个人信息,若有误可以联系管理员进行档案信息的修改。 (2)员工信息管理: 员工信息管理包括对员工基本信息和情况的记录进行浏览和按照姓名顺序排序。。 (3)文件管理: 将文件在本地保存,需要时读取,保障了数据的安全性。 2.1.2 可行性分析 职工管理系统后台数据库采用目前应用十分广泛的关系数据库MySQL,由于其具有快速、方便、灵活和可移植性等特点被很多软件开发者所使用;前台采用myeclipse作为主要的开发工具,其可与MySQL数据库结合的很好,并且 MyEclipse,是一个十分优秀的用于开发Java, J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。 2.2 用例图及用例说明 (1)职工档案管理用例描述 通过档案系统管理员工档案,是系统提供的一项基本服务。在职工档案管理系统的建模过程中,将这一行为抽象为一个用例。在不考虑软件的具体实现细节基础上,给出如下的用例描述。 表1 职工档案管理用例描述 Use Case 名称 档案管理 执行者 档案管理员 前置条件 管理员通过系统验证后,成功登陆档案管理系统 事件流 A.输入管理员的工号; 若输入不正确,则提示“参数不合法,请重新输入!” B.输入管理员密码; 若输入不正确,则提示“您输入的用户名或密码有误,请重新输入!” 成功登陆系统后,管理及操作菜单为编辑状态; C.选择要处理的事件进行处理; 若事件处理成功,提示操作成功的信息; 若事件处理失败,则提示操作失败的信息; E. 处理完成,点击“退出”,退出系统。 后置条件 管理员成功操作管理用户,职工档案管理系统保存档案记录并修改档案中职工信息。 (2)管理职工档案用例图 根据(1)的用例描述,画出借阅图书用例图,见图1。 图1 管理职工档案用例图 3 系统设计 3.1 系统类图 3.1.1 表现层 位于最外层(最上层),离用户最近。 用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。对流入的数据的正确性和有效性负责,对呈现样式负责,对呈现友好的错误信息负责。 位于表现层是职工类,它具有工号,姓名,出生日期,性别和职位这些属性,还有各自的相应的Sett、Gett方法,同时还有toString方法。如图2。 图2 职工类 3.2.2 业务逻辑层 它处于数据访问层与表示层中间,在数据交换中起到了承上启下的作用。 业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上。它负责系统领域业务的处理,负责逻辑性数据的生成、处理及转换。如图3。 图3 业务控制类 3.2.3 数据访问层 有时候也称为是持久化层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。 简单地说就是实现对数据表的Select、Insert、Update、Delete的操作。如果要加入ORM(Object Relation Mapping)的元素,那么就会包括对象和数据表之间的Mapping(映射),以及对象实体的持久化。对数据的正确性和可用性不负责,对数据的用途不了解,不负担任何业务逻辑。如图4。 图4 数据访问类 3.2 系统时序图 用例“职工档案管理”时序图,如图5。 图5 职工档案管理顺序图 3.3 数据库设计 职工档案管理系统的数据库采用MySQL ,系统数据库的名称为“EmpFile”。数据库EmpFile中包含了一张数据表。下面分别给出数据表概要说明和数据表的结构。如表2。 表2 职工档案表 Field Type Null Key Default 中文备注 id Int(10) unsigned NO PRI NULL 工号 name Varchar(20) YES NULL 姓名 password Varchar(20) YES NULL 登录密码 birthday Varchar(20) YES NULL 出生日期 sex Varchar(5) YES NULL 性别 position Varchar(10) YES NULL 职位 4 系统实现 本系统采用了MVC分层设计,实现本系统功能最重要的模块是业务逻辑层与数据访问层的设计,现将其代码分别贴出,EmployeeServiceImp实现的是业务逻辑的处理,。 public class EmpolyeeServiceImp implements IService { private IBaseDao employeeDao; public void setDao(IBaseDao employeeDao) { this.employeeDao = employeeDao;; } public boolean register(Employee employee) { return employeeDao.insert(employee); } public boolean login(Employee employee) { boolean result = false; Employee e = employeeDao.findById(employee.getId()); if(e != null) { if(employee.getPassword().equals(e.getPassword())) { result = true; } } return result; } public boolean update(Employee employee) { return employeeDao.update(employee); } public boolean delete(int id) { if(id == 101) { return false; } return employeeDao.delete(id); } public List<Employee> browse() { return employeeDao.findAll(); } public Employee findById(int id) { return employeeDao.findById(id); } public boolean close() { return employeeDao.close(); } } public class EmployeeDaoImp implements IBaseDao { private final String configFile = "jdbc.conf"; private final String FILENAME = "employees.dat"; private Connection conn = null; private List<Employee> empLists = null; public EmployeeDaoImp() { File file = new File(FILENAME); if(file.exists()) { try { FileInputStream fin = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fin); empLists = (List<Employee>)ois.readObject(); } catch(IOException e ) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } catch(ClassNotFoundException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } } if(empLists == null) { empLists = new ArrayList<Employee>(); empLists.add(new Employee(101, "admin", "123", "2012/12/21", true, "经理")); } } private Connection connect() { String URL = null; Properties prop = new Properties(); try { prop.load(new FileInputStream(configFile)); String driverName = prop.getProperty("dbDriver"); String db = prop.getProperty("dbDataBase"); String ip = prop.getProperty("dbIP"); String port = prop.getProperty("dbPort"); String username = prop.getProperty("dbUserName"); String passwd = prop.getProperty("dbPassword"); String defaultDB = prop.getProperty("defaultDbName"); URL = "jdbc:" + db + "://" + ip + ":" + port + "/" + defaultDB + "?user=" + username + "&password=" + passwd + "&useUnicode=true&characterEncoding=gb2312"; Class.forName(driverName).newInstance(); conn = DriverManager.getConnection(URL); } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } return conn; } public boolean insert(Employee employee) { boolean result = false; if (conn == null) { connect(); } if (conn != null) { String sql = "Insert Into employee(id, password, name, birthday, sex, position) value(?,?,?,?,?,?)"; PreparedStatement pst = null; try { pst = conn.prepareStatement(sql); pst.setInt(1, employee.getId()); pst.setString(2, employee.getPassword()); pst.setString(3, employee.getName()); pst.setString(4, employee.getBirthday()); pst.setString(5, employee.isSex()?"男":"女"); pst.setString(6, employee.getPosition()); int count = pst.executeUpdate(); if (count >= 1) { result = true; } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } finally { try { pst.close(); } catch (SQLException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } } } return result; } public boolean delete(int id) { boolean result = false; if(conn == null) { connect(); } if(conn != null) { String sql = "Delete From employee where id=? "; PreparedStatement pst = null; try { pst = conn.prepareStatement(sql); pst.setInt(1, id); int count = pst.executeUpdate(); if (count >= 1) { result = true; } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } finally { try { pst.close(); } catch (SQLException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } } } return result; } public boolean update(Employee employee) { boolean result = false; if(conn == null) { connect(); } if(conn != null) { String sql = "Update employee Set password=?, name=?, birthday=?, sex=?, position=? Where id=?"; PreparedStatement pst = null; try { pst = conn.prepareStatement(sql); pst.setString(1, employee.getPassword()); pst.setString(2, employee.getName()); pst.setString(3, employee.getBirthday()); pst.setString(4, employee.isSex()?"男":"女"); pst.setString(5, employee.getPosition()); pst.setInt(6, employee.getId()); int count = pst.executeUpdate(); if(count >= 1) { result = true; } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } finally { try { pst.close(); } catch(SQLException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } } } return result; } public List<Employee> findAll() { List<Employee> list = null; Employee employee = null; if(conn == null) { connect(); } if(conn != null) { String sql = "Select * From employee"; PreparedStatement pst = null; ResultSet rs = null; try { pst = conn.prepareStatement(sql); rs = pst.executeQuery(); if(rs != null) { list = new ArrayList<Employee>(); while(rs.next()) { employee = new Employee(rs.getInt("id"), rs.getString("password"), rs.getString("name"), rs.getString("birthday"), rs.getString("sex").equals("男") ? true:false, rs.getString("position")); list.add(employee); } } } catch(Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } finally { try { rs.close(); pst.close(); } catch(SQLException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } } } return list; } public Employee findById(int id) { Employee employee = null; if(conn == null) { connect(); } if(conn != null) { String sql = "Select * From employee Where id=?"; PreparedStatement pst = null; ResultSet rs = null; try { pst = conn.prepareStatement(sql); pst.setInt(1, id); rs = pst.executeQuery(); if(rs.next()) { employee = new Employee(rs.getInt("id"), rs.getString("password"), rs.getString("name"), rs.getString("birthday"), rs.getString("sex").equals("男") ? true:false, rs.getString("position")); } } catch(Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } finally { try { rs.close(); pst.close(); } catch(SQLException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } } } return employee; } public boolean close() { boolean result = false; File file = new File(FILENAME); ObjectOutputStream oos = null; FileOutputStream fos = null; try { fos = new FileOutputStream(file); oos = new ObjectOutputStream(fos); oos.writeObject(empLists); result = true; } catch(IOException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } finally { try { oos.close(); fos.close(); } catch(IOException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.toString()); } } return result; } } 5 系统测试 为了确保本系统能够正常运行,需要在发布之后做一次较全面的测试。 (1)测试是为了发现程序中的错误而执行的过程; (2)好的测试方案实际可能发现迄今为止尚为发现的错误的测试方案;成功的测试是发现了至今为止尚未发现的错误测试。 软件测试的过程: (1)测试用户登陆是否成功 打开职工档案管理系统,在“用户名”里填入“101”,“密码”框里我们填入“123”作为用户登录密码。填写完成点击“确定”按钮,将会出现操作程序页面,即该用户已经登陆成功了。如果输入的信息在数据库中比对后没有该用户,那么会提示“用户或密码错误,请重新登录”。 (2)测试注册新用户 在首页管理下拉菜单点击添加后,我们跳转到注册页面,填写完相应的职工个人信息后,点击提交,然后提示添加新职工档案成功,说明测试成功。 (3)测试查询功能是否成功 查询功能:在登录成功之后,点击“查询”,在弹出的文本框,在里面输入想要查找职工的工号ID,点击“查询”按钮,查询成功后页面内即可显示查询出来的员工资料内容,表示测试成功。 (4)测试修改功能是否成功 修改功能:在管理下拉菜单点击修改,即可进入相应的修改页面,可以修改员工的个人信息资料,最后确定。 (5)测试删除功能是否成功 删除功能:在管理下拉菜单点击删除,即可进入相应的删除页面,输入工号后先点击检测,检查拥有此工号的职工是否存在,然后文本框会出现相应的信息。若存在,点击删除,如果显示删除成功,说明测试成功。 (6)用户登出系统的测试 在管理操作已全部完成,需要退出程序的时候,在系统页面“系统”下拉菜单的有一个“退出”的选项,点击之后便可退出。6 课程设计总结 通过对职工系统的设计,更系统性的增加了对面向对象认识,充分理解了其相对于面向过程的优点。尽管只是设计了一个功能简单的小系统,却发现自己在JAVA面向对象课程学习中的严重不足,有些功能可以想到,然而依靠自己的能力却无法实现。如把用户分成两类系统管理员和普通管理员,所以自己还有极长的一段路要走。在设计系统时,用到了MVC分层架构,了解了用它设计软件的好处。 在实现系统功能时,主要用到数据库增删改查及文件读取和保存,复习了上学期关于数据库、文件方面的知识。在编写代码过程中发现ID项如果输入字符型数据会报错,然后通过查找网上的资料,发现KeyAdapter可以解决这个问题。 作为一个计算机专业的学生,我深刻的体会了学好面向对象程序设计的重要性。在完成课程设计过程中,让我更加深刻了解课本知识,以往对知识的疏忽也得以补充。,总之,最真挚的感谢老师精心的辅导和无私的奉献。7 参考文献 [1]Bruce Eckel.Java编程思想[M] .北京:机械工业出版社,2007.539~541. [2]陈利平.数据库原理[M].北京:中国铁道出版社, 2007.118~138. [3]吕凤翥,马皓.Java语言程序设计.[M].北京:清华大学出版社, 2006.19~127. [4]耿祥义,张跃平.Java面向对象程序设计[M].北京:清华大学出版社,2013.230~232. [5]王珊,萨师煊.数据库概论[M].北京:高等教育出版社,2006.33~35.
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服