(JAVASwing界面)java实现简单的人事管理系统(数据库原理课程设计) ...

金歌  金牌会员 | 2022-6-26 07:56:07 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 709|帖子 709|积分 2127

题目:人事管理系统
  摘要(包含两个部分):
1、课题需要完成的内容
人事管理系统是企业管理系统中不可缺少的重要组成部分,它的内容对于企业的决策者和管理者来说都至关重要,所以人事档案管理系统应该能够为用户提供充足的信息和快捷的查询手段。我们希望设计一个人事管理系统能实现增加员工信息,删除员工信息及各种查询操作,以此提高信息管理的工作效率。人事管理系统应该拥有员工的全部信息,可以实现全部员工信息的输入,当员工离职时能实现删除该员工信息。同时,管理员可以通过登录看到所有的员工信息,也可以通过查询找到相应的员工信息。

人事管理系统

数据库:MySQL 8.0
              开发语言:java语言

人事管理系统应该解决以往手工管理的弊端,比如管理员不能及时地更新员工信息,不能及时同步员工修改的信息,也不能快捷查询员工的信息。通过对人事管理流程的分析,系统应该实现以下功能:管理员可以维护员工信息,包括员工信息的输入,员工信息的修改,删除转出、辞职、辞退、退休员工信息,按照一定条件查询员工信息。具体要求如下:
员工信息的输入:输入员工的基本信息包括员工的基本信息、学历信息、婚姻状况信息、 职称等。
员工信息的修改:修改员工的基本信息和删除转出、辞职、辞退、退休员工信息。
员工信息查询:按照一定的条件,查询、统计符合条件的员工信息;至少应该包括每个员 工详细信息的查询、按婚姻状况查询、按学历查询、按工作岗位查询等,至少应该包括按学历、婚姻状况、岗位、参加工作时间等统计各自的员工信息。

1.用户登录模块
2.系统管理模块
(1)密码修改
(2)重新登录
(3)添加/删除用户
(4)退出系统
3.信息管理模块
(1)对学校里所有员工和院系进行统一标号,将每- -位员工的信息保存在员工档案记录中
(2)对新聘的员工,将其信息加入到员工档案记录中;对于转出、退休、辞职、辞退的员工,将其信息从员工档案记录中删除
(3)当员工信息发生变动时,修改员工档案记录中相应的属性
4.信息查询模块
查询员工信息及院系信息。

(1)员工各种信息的输入,包括员工的基本信息、学历信息、婚姻状况信息、职称等
(2)员工各种信息的修改;
(3)对于转出、辞职、辞退、退休员工信息的删除;
(4)按照一定的条件,查询、统计符合条件的员工信息;至少应该包括每个员工详细信息的查询、按婚姻状况查询、按学历查询、按工作岗位查询等,至少应该包括按学历、婚姻状况、岗位、参加工作时间等统计各自的员工信息;
(5)对查询、统计的结果打印输出;


  • 数据库设计
1.1系统功能模块图


1.2信息管理模块
功能如下图所示: 1)对人事管理系统里所有员工和院系进行统一标号, 将每一位员工的信息保存在员工档案记录中
2)对新聘的员工,将其信息加入到员工档案记录中;对于转出、退休、辞职、辞退的员工,将其信息从员工档案记录中删除
3)当员工信息发生变动时,修改员工档案记录中相应的属性
1.2.3
信息查询模块 功能如下图所示:



(1)数据项
数据项名
含义说明
数据类型
长度
取值范围
姓名
员工姓名
varchar
20

编号
员工编号
int
10

性别
员工性别
char
8
男或女
年龄
员工年龄
int
2
18~100
配偶
员工另一半
varchar
20

专业
员工所学专业
varchar
10

联系方式
员工手机号码
varchar
10

住址
员工家庭住址
varchar
20

薪资
员工月薪
varchar
255

学校
毕业学校
varchar
10

部门号
部门编号
decimal
2
0~10
部门名
部门名称
varchar
10

部门人数
部门员工数
int
10

部门经理
部门经理
varchar
20

     (2)数据结构
数据结构名称
含义说明
组成
基本信息
员工的基本信息
编号,姓名,年龄,性别,联系方式,住址,薪资,所属部门
婚姻信息
员工的婚姻信息
是否结婚,配偶名字,是否有孩子
学历信息
员工的学历信息
毕业学校,毕业时间,所学专业,外语
工作岗位
员工的职位
职位
部门信息
员工所属部门
部门号,部门,部门经理,员工数

人事管理系统功能的基本要求:
(1)员工各种信息的输入,包括员工的基本信息、学历信息、婚姻状况信息、职称等
(2)员工各种信息的修改;
(3)对于转出、辞职、辞退、退休员工信息的删除;
(4)按照一定的条件,查询、统计符合条件的员工信息;至少应该包括每个员工详细信息的查询、按婚姻状况查询、按学历查询、按工作岗位查询等,至少应该包括按学历、婚姻状况、岗位、参加工作时间等统计各自的员工信息;
(5)对查询、统计的结果打印输出;
二:用到所学知识
JDBC的使用:JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
MySQL:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统(RDBMS)之一。
Java接口调用;
Jdbc的使用,以及数据连接和java语句到数据库查询语句的转化 ;
Java UI 界面设计(JLabel,JPanel,JButton,JCombox)、布局设计(GridBagLayout、GridBagConstraints、setLayoutJScrollPane);
Java 文本框的文本处理(JTextField, setText());
Java 按钮的设计以及鼠标点击事件的运用(itemStateChanged、actionPerformed)

三:设计思路
设计数据库的E-R图和实体关系,首先对人事管理系统进行需求分析,系统应该实现以下功能:管理员可以维护员工信息,包括员工信息的输入,员工信息的修改,删除转出、辞职、辞退、退休员工信息,按照一定条件查询员工信息等。分析人事管理系统的需求可以得到系统的实体,实体属性,实体的码,实体之间的联系以及联系的类型,并利用E-R图进行表示,然后就可以设计出人事管理系统的概念模型,即概念结构设计。
可以从上述需求分析中确定的实体有:员工基本信息,员工婚姻情况,员工学历信息,工作岗位和部门信息,同时确定各实体之间的联系、
随后进行初步E-R图的设计,人事管理系统涉及了5个实体集,根据需求分析可以初步设计出实体之间的关系。在初步E-R图的基础上将实体的属性加入E-R土中可以得到人事管理系统的全局E-R图。
对数据库进行逻辑结构设计,根据概念结构设计的全局E-R图,按照转换规则将E-R图转换成模型。逻辑设计结构便是将所有的实体和联系转换为一系列的关系模式。E-R图中实体单独提取出来作为一个关系模式。
确定了系统的实体与联系之后,再进一步确定实体与联系的属性及主键。实体,联系的属性及主键具体如下(标志的为主键):

  • 基本信息(员工号,姓名,年龄,性别,部门,部门编号,家庭住址,电话,薪资)
  • 婚姻信息(姓名,婚姻状态(是否结婚),配偶姓名,(是否有)孩子)
  • 学历信息(员工号,姓名,学历,专业,毕业院校,毕业时间,外语类型)
  • 工作岗位(员工号,姓名,职位)
  • 部门信息(部门号,部门,部门楼层,部门平均薪资)
创建好数据库后,使用JDBC对数据库进行连接,而数据查询是数据库的核心,通过MySQL提供的sql语句进行对数据库的信息进行查询等操作。

四:程序流程图



 

 




五:主要程序代码


创建员工基本信息表



创建婚姻信息表



创建学历信息表





创建工作岗位信息表


创建部门信息表

连接数据库以及查询操作程序:
  1. public class Database {
  2.     static String driver = "com.mysql.cj.jdbc.Driver";//数据库驱动
  3.     static String url = "jdbc:mysql://localhost:3306/databaseproject?useSSL=false";//数据库连接url
  4.     static String user = "root";//用户名
  5.     static String password = "password";//密码
  6.     private static Connection conn = null;//Connection对象
  7.     private static Statement state = null;//Statement对象
  8.     private static ResultSet res = null;//ResultSet对象
  9.     /*
  10.      * Connection
  11.      * 加载数据库驱动,并连接数据库
  12.      */
  13.     public static Connection getConnection(){
  14.         try {
  15.             Class.forName(driver);//
  16.             conn = DriverManager.getConnection(url,user,password);//
  17.             return conn;
  18.         } catch (SQLException e) {
  19.             e.printStackTrace();
  20.         }catch (ClassNotFoundException e1) {
  21.             e1.printStackTrace();
  22.         }
  23.         return null;
  24.     }
  25.     /*
  26.      * Statement
  27.      * 创建Statement
  28.      */
  29.     public static Statement createStatement(){
  30.         try{
  31.             state =getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
  32.             return state;
  33.         }catch(SQLException e){
  34.             e.printStackTrace();
  35.         }
  36.         return null;
  37.     }
  38.     /*
  39.      * ResultSet
  40.      * 执行数据查询语句的方法,实现数据查询功能
  41.      */
  42.     public static ResultSet query(String sql){
  43.         try{
  44.             res = createStatement().executeQuery(sql);
  45.             return res;
  46.         }catch(SQLException e){
  47.             e.printStackTrace();
  48.         }
  49.         return null;
  50.     }
  51.     /*
  52.      *
  53.      * 返回整型
  54.      * 执行executeUpdate方法,实现数据的删除,修改,更新
  55.      */
  56.     public static int update(String sql){
  57.         try{
  58.             return createStatement().executeUpdate(sql);
  59.         }catch(SQLException e){
  60.             e.printStackTrace();
  61.         }
  62.         return -1;
  63.     }
  64.     /*
  65.      * 释放内存,关闭数据库
  66.      */
  67.     public static void close(){
  68.         try {
  69.             if(conn!=null){
  70.                 conn.close();
  71.             }else if(state!= null){
  72.                 state.close();
  73.             }else if(res!=null){
  74.                 res.close();
  75.             }
  76.         } catch (SQLException e) {
  77.                 e.printStackTrace();
  78.             }
  79.     }
  80.     public void getin(String h){
  81.        
  82.     try {
  83.         Statement st=conn.createStatement();
  84.         String sql = "insert into storage select * from basicinfo where Edeptid='"+h+"'";
  85.         st.executeUpdate(sql);
  86.     } catch (SQLException e) {
  87.         // TODO 自动生成的 catch 块
  88.         e.printStackTrace();
  89.     }
  90.     }
  91. }
  92. /*
  93.      * 查询员工信息
  94.      * 用于:用于模块【员工基本信息管理】,模块【删除员工信息】,模块【部门管理】,
  95.      */
  96.     public String[][] searchMsg(){
  97.         int i = 0;
  98.         int rows = 0;
  99.         String s[][]=null;
  100.         //涉及2张表的查询,要通过外键进行连接
  101.         String sql="select PersonID,Name,Sex,B_Dept,S_Dept,Salary,Assess,Dept.DeptID,Person.DeptID "
  102.                 +"from Dept,Person where Dept.DeptID = Person.DeptID order by PersonID";
  103.         res = db.query(sql);
  104.         try {
  105.             if(res.last()){
  106.                 rows=res.getRow();//行数
  107.             }
  108.             if(rows == 0){
  109.                 s = new String[1][6];
  110.                 s[0][0]="";
  111.                 s[0][1]="";
  112.                 s[0][2]="";
  113.                 s[0][3]="";
  114.                 s[0][4]="";
  115.                 s[0][5]="";
  116.                
  117.             }else{
  118.                 s = new String[rows][6];
  119.                 res.first();//第一行
  120.                 res.previous();//反向查询
  121.                 while(res.next()){
  122.                    s[i][0]=res.getString("PersonID");
  123.                    s[i][1]=res.getString("Name");
  124.                    s[i][2]=res.getString("Sex");
  125.                    s[i][3]=res.getString("B_Dept")+"-"+res.getString("S_Dept");   
  126.                    s[i][4]=res.getString("Salary");//工资
  127.                    s[i][5]=res.getString("Assess");//考核信息
  128.                    i++;
  129.                 }
  130.                
  131.             }
  132.        
  133.         } catch (SQLException e) {
  134.             e.printStackTrace();
  135.         }
  136.         return s;
  137.     }
  138. /*
  139.  * 删除部门信息
  140.  * 用于:(1)模块【删除信息管理】,删除员工信息
  141.  *
  142.  */
  143.     String deptId;
  144.     public void deleteDeptMsg(String deptId){
  145.         this.deptId=deptId;
  146.         String sql = "delete from department where deptID="+deptId+"";//删除部门信息
  147.         db.update(sql);
  148.        
  149.     }
复制代码

1.继承接口以及接口调用及方法实现


其中基本每一个子节点都会实现ActionListener和ItemListener接口,因为会有鼠标点击事件的发生以及对应点击事件以后的的响应。
2.数据库JDBC的使用 以及根据按钮的不同实现不同的功能时调用的sql语句

3.将查询结果从数据库中获取以后,返回到一个String数组里面,如图1,然后用数字的下标分离得到需要的结果,在需要用到数据库数据的部分用一个数组来接收对应的sql语句得到的结果并将它们置于对应的文本框里面JTextFiedl,如图2。


图1



三:设计思路
首先设计一个登录界面,在用户名和密码框中要输入与数据库中对应的名字和密码才可以进入管理界面,如图1所示。当输入不正确时就要提示输入是否有误或者密码是否正确,如图2所示
        

然后登录成功后来到管理系统的主界面如图3。
           

图3中将整个面板分为左右两部分其中左边界面是一个JSplitPane 的一个split面板可以通过点击进行折叠,折叠后界面如图4:

这里用了一个root树根的方法,后面一共有五个不同的功能界面,所以又将root的第一个根结点又分成五份结点,和界面中匹配的属性进行对应



然后再通过鼠标的特定点击事件进行不同的功能实现。
例如第一个功能“添加人员信息”:


通过点击不同页面的按钮实现不同的sql语句调用,最终将数据库中的数据通过数组的方式返回到程序当中并且打印到所需要的地方。其中有一个下滑按钮进行快速选择如图3,选择好以后进行内容的自动填充结果如图4
图3


图4


四:程序流程图

 


五:主要程序代码

下滑选项:      
  1. if(e.getStateChange()==ItemEvent.SELECTED){//选择状态
  2.                      String s = "" + e.getItem().toString();//获取字符串    
  3.                      Eid = s.substring(0,1);//人员编号
  4.                      p = pbean.search(Eid);//字符串数组p用于获取从数据库导入的人员信息
  5.                      //将数据库导入的人员信息通过数组,添加到相应的组件
  6.                      EidText.setText(p[0]);//人员编号
  7.                      EnameText.setText(p[1]);
  8.                      sexText.setText(p[2]);
  9.                      ageText.setText(p[3]);//出生年月信息
  10.                      phoneText.setText(p[4]);//电话信息
  11.                      adText.setText(p[5]);//地址信息
  12.                      deptIDText.setText(p[6]);
  13.                      deptText.setText(p[7]);
  14.                      salaryText.setText(p[8]);//工资                 
  15.               }
  16.        }
  17. public void actionPerformed(ActionEvent e){
  18.               if(e.getSource() == update){//单击修改
  19.                      //调用PersonBean的修改方法
  20.                      pbean.update(EidText.getText(), EnameText.getText(), sexText.getText(),
  21.                                    ageText.getText(), phoneText.getText(), adText.getText(),deptIDText.getText(),deptText.getText(),salaryText.getText());
  22.                      JOptionPane op = new JOptionPane();
  23.                      op.showMessageDialog(null, "修改成功!");//提示
  24.               }else if(e.getSource() == clear){
  25.                      clearAll();//清空文本框
  26.                     
  27.               }
  28.        }
  29.        /*
  30.         * 清空文本框方法
  31.         */
  32.        public void clearAll(){
  33.               EidText.setText(null);
  34.               EnameText.setText(null);
  35.               sexText.setText(null);
  36.               ageText.setText(null);
  37.               phoneText.setText(null);
  38.               adText.setText(null);
  39.               //msg.setToolTipText(null);
  40.               deptText.setText(null);        
  41.        }
  42. Sql语句:
  43. public String[] search(String id){
  44.               this.id = id;
  45.       
  46.               String sql = "select * from basicinfo where Eid = "+id+"";//根据EmployeeID查询信息
  47.              
  48.               res = db.query(sql);//查询信息
  49.               String s[] = new String[10];//定义一个数组,用于接收从数据库导入的信息
  50.               try {
  51.                             while(res.next()){
  52.                                    s[0] = res.getString("Eid");
  53.                                    s[1] = res.getString("Ename");
  54.                                    s[2] = res.getString("Esex");
  55.                                    s[3] = res.getString("Eage");
  56.                                    s[4] = res.getString("Ephonenum");
  57.                                    s[5] = res.getString("Eaddress");
  58.                                    s[6] = res.getString("Edeptid");
  59.                                    s[7] = res.getString("Edept");//
  60.                                    s[8] = res.getString("Esalary");//工资
  61.                             }
  62.                     
  63.               } catch (SQLException e) {
  64.                     
  65.                      e.printStackTrace();
  66.               }finally{
  67.                      db.close();//关闭数据库
  68.               }
  69.               return s;//返回一维数组
  70.        }
  71. 修改后的sql语句:
  72. public void update(String s1,String s2,String s3,String s4,String s5,String s6,String s7,String s8,String s9){
  73.         this.s1=s1;//id
  74.         this.s2=s2;//name
  75.         this.s3=s3;//sex
  76.         this.s4=s4;//age
  77.         this.s5=s5;//phonenum
  78.         this.s6=s6;//address
  79.         this.s7=s7;//deptid
  80.         this.s8=s8;//deptname
  81.         this.s9=s9;//salary
  82.        
  83.         String sql="update basicinfo set Ename='"+s2+"',Esex='"+s3
  84.             +"',Eage='"+s4+"',Ephonenum='"+s5+"',Eaddress='"+s6+"',Edeptid='"+s7+"',Edept='"+s8+"',Esalary='"+s9+"' where Eid="+s1+"";
  85.        
  86.         db.update(sql);
  87.     }
复制代码

觉得写的好的可以给一个赞嘛
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表