1. 程式人生 > >【Java實踐 I】簡易人事管理系統

【Java實踐 I】簡易人事管理系統

原始碼和資料庫:https://github.com/xuna123/java-study
推薦一個介面設計特別好用的外掛 : windows builderhttp://blog.csdn.net/xunalove/article/details/72621194

專案執行結果

環境

作業系統:WIN7
編譯器 : eclipse
介面設計工具:windows builder
資料庫 : Access

模板介紹

簡易人事管理系統麻雀雖小,五臟俱全, 完成人員基本資訊的操作,重要包含5個模組。

  • 登入介面(系統的入口)
    • 包含註冊,登入的驗證
  • 基本人員資訊管理(人員基本資訊操作)
    • 新增,修改,刪除,查詢
  • 部門管理(部門的操作)
    • 新增,修改,刪除,查詢
  • 人員調動管理 (記錄人員調動的資訊)
    • 人員調動
    • 調動歷史查詢
  • 人員考核記錄 (記錄人員考核的情況)
    • 人員考核
    • 調動歷史查詢
  • 勞資管理(記錄人員薪資的變化情況)
    • 勞資分配管理
    • 勞資歷史查詢

資料庫設計

主要包括使用者登入登錄檔User,人員資訊表Person, 部門表Dept , 人員歷史資訊表 Histrjn, 考核歷史資訊表Test,薪資歷史資訊表Salary。
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

功能設計

1. 簡易驗證碼如何實現?
答:通過隨機函式產生兩個10~20範圍的數字,計算出結果,登入是判斷當前文字框輸入的內容是否和正確答案一致。
對應程式碼:

//簡易驗證碼設計
    int max=20,min=10;
        Random random = new Random();
        a = random.nextInt(max)%(max-min+1) + min;
        b = random.nextInt(max)%(max-min+1) + min;
        c = a+b;
        String temp = Integer.toString(a) + " + " + Integer.toString(b) + " = ?";
        textField_2.setText(temp) ;

2. 如何判斷你輸入的使用者名稱和密碼正確?
答:把輸入的使用者名稱當做已知條件,在資料庫中查詢對應的password(類似於 y = 3x,給你x,求y),判斷資料庫中的password是否和輸入文字框中的密碼一直。

                String username =null,password=null,check=null;
                int n;
                username =  textField.getText().trim();
                password =  passwordField .getText().trim();
                check =  textField_3.getText().trim();
                n = Integer.parseInt(check);
                String sql = "select password from User where username='"+username+"'";  
                Connection con = a1.getConn();//此處為通過自己寫的方法getConn()獲得連線  
                try{
                    Statement stmt = con.createStatement();
                    ResultSet rs = stmt.executeQuery(sql); //ResultSet類,用來存放獲取的結果集!!
                    String temp=null;
                    while(rs.next())
                    {
                        temp = rs.getString(1);
                    }
                    System.out.println("n= "+n);
                    System.out.println("c= "+ c);
                    if(temp.equals(password))
                    {
                        if(n == c)
                        {
                            HrMain window = new HrMain();
                            window.frame.setVisible(true);
                        }
                        else
                        {
                            JOptionPane.showMessageDialog(null, "驗證碼錯誤");
                        }
                    }
                    else
                    {
                        JOptionPane.showMessageDialog(null, "使用者名稱或者密碼不正確");
                    }
                    rs.close();
                    con.close();
                }
                catch(SQLException e1)
                {      
                    e1.printStackTrace();   
                } 

答:把輸入的使用者名稱當做已知條件,在資料庫中查詢對應的
3. 修改或者刪除部門時,若部門下有人員應該如何處理?
答:對於修改來說,修改部門相應的修改部門下的人員的部門資訊。對於刪除來說,若刪除的部門下有人則取消刪除。修改具體實現步驟為:選中部門,根據部門id查詢人員資訊表,如表中返回有值,則更新人員資訊表,反之直接修改。刪除部門思路類似。

if(cmd.equals("修改"))
        {
            String DeptID = textField.getText().trim();
            String B_Dept = textField_1.getText().trim();
            String S_Dept = textField_2.getText().trim();
            String res="";
            int i = 0;
            Connection con = a.getConn();
            String sql_old = "select * from Dept where DeptID="+DeptID;
            try 
            {
                Statement stmt = con.createStatement();
                ResultSet rs = stmt.executeQuery(sql_old); //ResultSet類,用來存放獲取的結果集!!
                while(rs.next()){
                    res+=rs.getString(1); res+="-";
                    res+=rs.getString(2); res+="-";
                    res+=rs.getString(3);}
                System.out.println("res="+res);
                String sql = "update Dept set DeptID=?,B_Dept=?,S_Dept=? where DeptID='"+DeptID+"'";
                String sql2 ="update Person set DeptID=? where DeptID='" + res +"'";

                PreparedStatement pst = con.prepareStatement(sql); 
                pst.setString(1, DeptID); 
                pst.setString(2, B_Dept); 
                pst.setString(3, S_Dept); 
                i = pst.executeUpdate();
                System.out.println("sql="+i);

                PreparedStatement pst1 = con.prepareStatement(sql2); 
                pst1.setString(1,DeptID+"-"+B_Dept+"-"+S_Dept); 
                System.out.println("sql2="+sql2);
                i = pst1.executeUpdate();
                System.out.println("sql2="+i);
                JOptionPane.showMessageDialog(null, "修改成功");

            }
            catch (Exception e1) {
                e1.printStackTrace();
                JOptionPane.showMessageDialog(null, "失敗,新增資料不完整或者重複新增等其他原因");
            }
            System.out.println(i);
        }