人事工資管理系統課程設計報告.doc
《人事工資管理系統課程設計報告.doc》由會員分享,可在線閱讀,更多相關《人事工資管理系統課程設計報告.doc(29頁珍藏版)》請在裝配圖網上搜索。
蘇州科技大學 電子信息與智能化實驗中心 面向對象技術課程設計A 報告 ——人事工資管理系統 專業(yè)年級 計算機科學與技術(嵌入式培養(yǎng))15級 班 級 嵌入式1511 學 號 15200141119 15200141115 15200141101 15200141137 15200141136 姓 名 張梓軒 戚春陽 徐敏杰 袁祺林 王雨欣 成 績 指導教師 丁 俊 2016年12月24日 姓名 角色 承擔任務 自評成績 張梓軒 組長 E-R圖;統一數據庫;工資管理系統顯示所有員工的工資,部門整體調薪的實現;人事管理系統的時序圖和活動圖; 戚春陽 組員 統計管理系統顯示各個部門和人數功能的實現;用戶權限和密碼設置;系統時間輸出;實現系統設置管理中的數據備份和數據恢復;整合所有人代碼,實現功能的統一和代碼的優(yōu)化;登錄界面的活動圖和時序圖; 徐敏杰 組員 人事管理系統添加員工信息,修改員工信息;用例圖和用例說明;任務書的編寫;系統設置系統的活動圖、時序圖; 袁祺林 組員 人事管理系統查詢員工的登陸信息、模糊查詢和刪除員工;課程總結;任務書的編寫;人事管理系統的時序圖和活動圖; 王雨欣 組員 員工獎懲表的增、刪、改、查;系統類圖;課程設計與需求分析;統計管理系統的活動圖和時序圖; 注:如果按小組進行,需要此表,否則刪除。 人事工資系統設計報告 1 課程設計任務概述 人事工資管理系統是非常通用的管理信息系統,一個公司必須要有健全的人事工資管理系統來管理員工的信息,才能實現它的日常運轉。 因此,為了支持企業(yè)規(guī)范化的管理,高效率地完成人事的業(yè)務,需要實現包括員工的姓名、年齡、編號、電話號碼等基本信息的建立,授予員工所能獲取的權限,例如管理員權限,就可以對普通員工進行信息管理,其中包括新員工個人的基本信息資料的增加、修改,退休員工的信息的刪除,員工獎懲信息的增加、刪除和修改;此外還支持管理員對部門整體進行調薪,擴大了管理員的管理范圍; 同時為了支持人事管理及其相關方面的科學決策,增加了員工的個人基本信息查詢、薪資查詢、獎懲情況查詢和部門的總體情況查詢等,大大提高了公司內部員工管理的效率,減少了不必要的精力的投入,使得企業(yè)的正常維護得以實現。 2 系統需求分析 2.1 系統功能分析 本系統主要是實現企業(yè)人事管理的系統化、規(guī)范化和自動化,實現數據的錄入、插入、刪除、查詢、統計、更新等功能。 具有員工注冊以及登錄的功能,且登錄后管理員可修改自己用戶權限; 大體分為以下四個主功能: 1.人事管理系統:主要用來實現對員工的基本信息的增加、信息的刪除、信息的修改以及模糊查詢,還包括對員工的獎懲信息的增加,信息的刪除,信息的修改以及信息的查詢; 2.工資管理系統:主要包括模糊查詢部門信息、員工的總體以及個人工資信息,以及對部門的薪資進行整體調整的功能; 3.統計管理系統:主要指用來顯示部門的整體情況以及員工人數; 4.系統設置系統:主要是用來對數據進行恢復和備份。 2.2 用例圖及用例說明 2.2.1 用戶注冊用例 1.用例名稱: 注冊 2.用例描述: 注冊成為本管理系統的用戶 3.角色: 用戶 4.前置條件: 格式輸入正確 5.后置條件: 保存此用戶的信息 6.基本路徑: A.填寫用戶名和密碼 B.保存用戶信息 7.擴展點: A.未填寫完整或者格式錯誤 a1.錯誤提示 B.用戶已經存在 b1.錯誤提示 3 系統設計 3.1 系統類圖 3.2 系統活動圖 用戶登陸活動圖: 人事管理系統活動圖: 統計管理系統活動圖: 工資管理系統活動圖: 系統設置管理活動圖: 3.3 系統時序圖 用戶登陸時序圖: 人事管理系統時序圖: 工資管理系統時序圖: 統計管理系統時序圖: 系統設置管理時序圖: 4 系統實現 4.1登錄模塊設計與實現 登錄模塊是用戶登錄進去進行相關操作的,如員工信息的增刪改查等等。 (1)View層代碼 loginTitle = new javax.swing.JLabel(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); uname = new javax.swing.JTextField(); pwd = new javax.swing.JPasswordField(); limit = new javax.swing.JComboBox(); jLabel3 = new javax.swing.JLabel(); loginBtn = new javax.swing.JButton(); registerBtn = new javax.swing.JButton(); jLabel4 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setForeground(java.awt.Color.white); setResizable(false); setState(1); loginTitle.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 44)); loginTitle.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); loginTitle.setText("\u4eba\u4e8b\u5de5\u8d44\u7ba1\u7406\u7cfb\u7edf"); jLabel1.setText("\u7528\u6237\u540d"); jLabel2.setText("\u5bc6 \u7801\uff1a"); //limit.setModel(javax.swing.DefaultComboBoxModel@187e702); jLabel3.setText("\u6743 \u9650\uff1a"); loginBtn.setText("\u767b\u9646"); (2) Action層 private void registerBtnActionPerformed(java.awt.event.ActionEvent evt) { registerFrame r = new registerFrame(); r.setVisible(true); } private void loginBtnMouseClicked(java.awt.event.MouseEvent evt) { String name = this.uname.getText(); String pwd = this.pwd.getText(); String limit = this.limit.getSelectedItem().toString(); int type = 0; if ("管理員".equals(limit)) { type = 1; usertype="管理員"; } else { type = 2; usertype="普通員工"; } User user = new User(name, pwd, type); User flag = userService.login(user); if (flag != null) { wusername = name; wtype = limit; ok o = new ok(); o.setVisible(true); setVisible(false); } else { fail f = new fail(); f.setVisible(true); dispose(); } } (3) Dao數據交互層 @Override public User login(User user) { // TODO Auto-generated method stub User resultUser=null; String sql = "select user_no,user_name,user_pwd,user_type" + " from t_user " + " where user_name="+user.getUserName()+" " + " and user_pwd="+user.getUserPwd()+"" + " and user_type="+user.getUserType()+""; conn = JDBCUtil.getConnection(); try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql); if(rs.next()){ resultUser = new User(); resultUser.setUserNo(rs.getInt("user_no")); resultUser.setUserName(rs.getString("user_name")); resultUser.setUserPwd(rs.getString("user_pwd")); resultUser.setUserType(rs.getInt("user_type")); } } catch (SQLException e) { e.printStackTrace(); } finally{ JDBCUtil.closeResource(conn, psmt, stmt, rs); } return resultUser; } 4.2系統主界面 可在該模塊完成員工資料的常用操作。員工的各項人事記錄可在選擇員工后,在主界面下面的分欄里面進行添加、修改、刪除操作。 4.3人事管理模塊設計及實現 對員工的相關資料及記錄進行管理??稍谠撃K對員工基本資料、獎懲記錄、修改員工信息可實現對員工的調動、薪水記錄進行修改。 當進入到人事管理子系統模塊,再點擊模糊查詢。刪除員工按鈕,會進入到下面的界面 其中的模糊查詢代碼如下 (1) view層 private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jButton1 = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jname = new javax.swing.JTextField(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jLabel2 = new javax.swing.JLabel(); jButton4 = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object[][] { }, new String[] { "姓名", "編號", "部門編號", "職稱", "性別", "基本工資", "電話號碼", "工號" })); jScrollPane1.setViewportView(jTable1); jButton1.setText("\u786e\u5b9a"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jLabel1 .setText("\u8bf7\u8f93\u5165\u59d3\u540d\uff0c\u652f\u6301\u6a21\u7cca\u67e5\u627e"); jname.setText(null); jButton2.setText("\u9000\u51fa\u6a21\u7cca\u67e5\u627e"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jButton3.setText("\u5237\u65b0"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); jLabel2.setText("\u5237\u65b0\u540e\u53ef\u7ee7\u7eed\u67e5\u627e"); jButton4.setText("\u5220\u9664\u6b64\u5458\u5de5"); jButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } }); jLabel3 .setText("\u7a7a\u503c\u53ef\u67e5\u627e\u6240\u6709\u5458\u5de5"); jLabel4 .setText("\u9700\u8981\u8f93\u5165\u5168\u540d\u53ef\u4ee5\u5220\u9664\u5458\u5de5"); public void findStaffName(JTable jTable, String name) { DefaultTableModel model = (DefaultTableModel) jTable.getModel(); model.setRowCount(0); Vector v = staffInfoDao.findStaffInfo(name); for (int i = 0; i < v.size(); i++) { model.addRow((Vector) v.get(i)); } } (2) action層 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String name = jname.getText(); if (name != null) { staff.findStaffName(jTable1, name); } else { pleaseInput p = new pleaseInput(); p.setVisible(true); } } (3) dao層 public Vector findStaffInfo(String staffname) { Vector list = new Vector(); String sql = "select *" + "from t_staff_info " + "where staff_name like%" + staffname + "%"; conn = JDBCUtil.getConnection(); try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { Vector listObject = new Vector(); // listObject.add( new // User(rs.getInt("id"),rs.getString("uname"),rs.getString("pwd"))); listObject.add(rs.getString("staff_name")); listObject.add(rs.getInt("staff_id")); listObject.add(rs.getInt("dept_no")); listObject.add(rs.getString("staff_pos_name")); listObject.add(rs.getString("staff_sex")); listObject.add(rs.getInt("staff_baseSal")); listObject.add(rs.getInt("staff_phoneNum")); listObject.add(rs.getString("staff_workNum")); list.add(listObject); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { JDBCUtil.closeResource(conn, psmt, stmt, rs); } return list; } 4.4 工資管理模塊設計與實現 在員工基本信息管理界面里可以對單個員工進行基本工資的修改,因而在面向人數較多的企業(yè)時,這種方式存在弊端,部門整體調薪操作可以對整個業(yè)績高的部門進行整體調薪 (1) view層 private void initComponents() { jButton1 = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jdepart = new javax.swing.JTextField(); jButton2 = new javax.swing.JButton(); jLabel2 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jLabel3 = new javax.swing.JLabel(); jdepart2 = new javax.swing.JTextField(); sure = new javax.swing.JButton(); jLabel4 = new javax.swing.JLabel(); money = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jButton1.setText("\u8fd4\u56de\u4e3b\u754c\u9762"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jLabel1 .setText("\u8bf7\u8f93\u5165\u90e8\u95e8\u540d\u53ef\u8fdb\u884c\u6a21\u7cca\u67e5\u627e"); jButton2.setText("\u786e\u5b9a"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jLabel2 .setText("\u7ed9\u6307\u5b9a\u90e8\u95e8\u7684\u6240\u6709\u5458\u5de5\u8c03\u85aa"); jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object[][] { }, new String[] { "部門編號", "部門名稱" })); jScrollPane1.setViewportView(jTable1); jLabel3.setText("\u8f93\u5165\u5168\u540d\u9009\u5b9a\u90e8\u95e8"); sure.setText("\u786e\u5b9a"); sure.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { sureActionPerformed(evt); } }); jLabel4.setText("\u8f93\u5165\u8c03\u6574\u529b\u5ea6"); money.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { moneyActionPerformed(evt); } }); jLabel5 .setText("\u6e29\u99a8\u63d0\u793a:\u63d0\u85aa\u5219\u8f93\u5165\u6b63\u6570,\u964d\u85aa\u5219\u8f93\u5165\u8d1f\u6570"); jLabel6.setText("\u5143"); (2) action層 private void sureActionPerformed(java.awt.event.ActionEvent evt) { String jdept = jdepart2.getText(); Double money2 = Double.parseDouble(money.getText()); StaffInfo s=new StaffInfo(); s.num(staff.updateSalary(jdept,money2)); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { dispose(); } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { String department = jdepart.getText(); if (department != null) { depart.findDepart(jTable1, department); } else { pleaseInput p = new pleaseInput(); p.setVisible(true); } } (3) dao層 public Vector findDepart(String name) { Vector list = new Vector(); String sql = "select *" + "from t_department " + "where dept_name like%" + name + "%"; conn = JDBCUtil.getConnection(); try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { Vector listObject = new Vector(); // listObject.add( new // User(rs.getInt("id"),rs.getString("uname"),rs.getString("pwd"))); listObject.add(rs.getInt("dept_no")); listObject.add(rs.getString("dept_name")); list.add(listObject); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { JDBCUtil.closeResource(conn, psmt, stmt, rs); } return list; } 4.5 統計管理模塊設計與實現 統計部門總數和各部門人數 (1) view層 private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jButton1 = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jdepart = new javax.swing.JTextField(); jButton2 = new javax.swing.JButton(); jScrollPane3 = new javax.swing.JScrollPane(); jTable2 = new javax.swing.JTable(); jLabel2 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object[][] { }, new String[] { "員工編號", "員工姓名", "統計人數" })); jScrollPane1.setViewportView(jTable1); jButton1.setText("\u786e\u5b9a"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jLabel1 .setText("\u8bf7\u8f93\u5165\u90e8\u95e8\u540d\u8fdb\u884c\u6a21\u7cca\u67e5\u627e"); jdepart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jdepartActionPerformed(evt); } }); jButton2.setText("\u8fd4\u56de\u4e3b\u754c\u9762"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jTable2.setModel(new javax.swing.table.DefaultTableModel( new Object[][] { }, new String[] { "部門編號", "部門名稱" })); jScrollPane3.setViewportView(jTable2); jLabel2 .setText("\u8f93\u5165\u7a7a\u503c\u53ef\u67e5\u627e\u5168\u90e8\u5458\u5de5\u6240\u5728\u90e8\u95e8\u7684\u4fe1\u606f"); public void findDepart(JTable jTable, String name) { DefaultTableModel model = (DefaultTableModel) jTable.getModel(); model.setRowCount(0); Vector v = departDao.findDepart(name); for (int i = 0; i < v.size(); i++) { model.addRow((Vector) v.get(i)); } } @Override public void showDepartNumber(JTable jTable, String name) { DefaultTableModel model = (DefaultTableModel) jTable.getModel(); model.setRowCount(0); Vector v = departDao.showDepartNumber(name); for (int i = 0; i < v.size(); i++) { model.addRow((Vector) v.get(i)); } } (2) action層 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String depart2 = jdepart.getText(); if (depart2 != null) { d.showDepartNumber(jTable1, depart2); d.findDepart(jTable2, depart2); } else { pleaseInput p = new pleaseInput(); p.setVisible(true); } } (3) dao層 public Vector findDepart(String name) { Vector list = new Vector(); String sql = "select *" + "from t_department " + "where dept_name like%" + name + "%"; conn = JDBCUtil.getConnection(); try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { Vector listObject = new Vector(); // listObject.add( new // User(rs.getInt("id"),rs.getString("uname"),rs.getString("pwd"))); listObject.add(rs.getInt("dept_no")); listObject.add(rs.getString("dept_name")); list.add(listObject); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { JDBCUtil.closeResource(conn, psmt, stmt, rs); } return list; } @Override public Vector showDepartNumber(String name) { // TODO Auto-generated method stub Vector list = new Vector(); String sql = "select staff_id,staff_name from t_staff_info " + "where dept_no in " + "(select dept_no from t_department " + "where dept_name like %"+name+"%)"; conn = JDBCUtil.getConnection(); try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql); int rowCount=0; while (rs.next()) { listObject = new Vector(); listObject.add(rs.getInt("staff_id")); listObject.add(rs.getString("staff_name")); //int rowCount = rs.last().getRow();//得到當前行號,也就是記錄數 rowCount++; list.add(listObject); listObject.add(rowCount); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { JDBCUtil.closeResource(conn, psmt, stmt, rs); } return list; } 4.6 系統設置模塊設計與實現 可以對數據庫備份,恢復,管理操作員,基礎資料設置. 其中數據備份和數據恢復的代碼是 public void backUp(User user) { // TODO Auto-generated method stub try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("g:\\user.txt")); oos.writeObject(user); oos.close(); backupok b=new backupok(); b.setVisible(true); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); backupfalse b=new backupfalse(); b.setVisible(true); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); backupfalse2 b=new backupfalse2(); b.setVisible(true); } } @Override public User recOver() { User user=null; try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("g:\\user.txt")); user=(User)ois.readObject(); ois.close(); recoverok r=new recoverok(); r.setVisible(true); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); recoverfalse2 r=new recoverfalse2(); r.setVisible(true); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); recoverfalse r=new recoverfalse(); r.setVisible(true); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return user; } 5 系統測試 測試1 系統登錄測試: 步驟及操作:運行系統,轉到登陸界面,輸入賬號及密碼,選擇用戶類型,測試登陸功能。 允許偏差:不允許任何偏差 條件:用戶即可,包括管理員和普通用戶。 測試1 系統登錄結果: 測試數據 期望輸出 實際輸出 選取理由 用戶名 密碼 ‘12abc’ ‘ ‘ 錯誤 錯誤 密碼為空 ‘56789’ ‘134我5’ 錯誤 錯誤 密碼非法 ‘ ’ ‘a123’ 錯誤 錯誤 用戶名為空 ‘123的34’ ‘a123’ 錯誤 錯誤 用戶名非法 ‘陳思成’ ‘a123’ 登錄成功 登錄成功 為合法登錄請求 測試2 獎懲系統增加獎懲信息測試如下表所示: 測試數據 期望輸出 實際輸出 選取理由 員工編號 獎懲日期 獎懲原因 獎懲類別 獎懲分數 213 七月二十八日 上班睡覺 懲 三十 失敗 失敗 獎懲分數格式錯誤 十五 七月二十八日 獲獎 獎 90 失敗 失敗 員工編號格式錯誤 24 2017-3-4 業(yè)績突出 獎 100 成功 成功 輸入符合條件 在測試獎懲系統時,用戶不存在提示界面 原因:不存在此員工。 6 課程設計總結 已經實現了數據備份,數據恢復。查詢員工的登錄信息,模糊查詢,刪除、增加、修改員工信息。顯示所有員工工資,部門整體調薪,員工獎懲。顯示各個部門和各個部門的人數。還沒有實現對員工的請假管理,考評管理,以及操作日志管理相關功能。 經過老師的一步步地指導,我們一步步地完善自己的代碼,使系統能夠實現越來越多的功能。在實驗的過程中,我們也會發(fā)現一些問題,比如:在數據庫設計初時,在劃分模塊確定各實體及關系,也許是因為自己對人事管理不太了解,也許是因為自己對于數據庫整體概念還是理解的不到位,所以遲遲不能確定該系統所設計相關的實體以及它們的關系,最后在查閱相關資料和老師的點撥下,我們克服了困難。 我覺得計算機語言最大的特點就是得靠我們認真務實,因為我們具備的計算機方面的基礎知識太少,我們得邊聽邊自學,這樣既能培養(yǎng)我們的興趣,又能學到實在的知識。通過課程設計我們進一步掌握了許多課本知識,同時還了解了許多課外的有關計算機語言的知識如數據庫的有關知識,這對于我們來說受益匪淺。 7 參考文獻 [1] 王國旭. 基于企業(yè)需求的人事管理系統的設計與實現[J]. 江西廣播電視大學學報,2013,04:72-75. [2] 張瑩瑩. 企業(yè)人事管理系統的設計與實現[D].吉林大學,2014. [3] 范雯芩. 人事工資管理系統的分析與設計[D].云南大學,2013. [4] 李港港. 一個中小企業(yè)人力資源管理系統的設計與實現[D].華中科技大學,2012. [5] 常濤. 人事數據庫管理系統研發(fā)背景和現狀分析[J]. 電腦知識與技術,2014,07:1364-1365+1386. [6] 薩維奇,施平安,李牧譯. Java完美編程(第3版). 清華大學出版社,2008. [7] 陶永明. 企業(yè)人事管理系統設計[J]. 計算機與信息技術,2008,Z1:96-100. [8] Connolly,T.M.著,何玉潔 譯. 數據庫設計教程(第二版),2005. [9] 趙靜. 人事檔案管理系統分析[J]. 經營管理者,2013,30:285.- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 人事 工資管理 系統 課程設計 報告
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://www.820124.com/p-6488395.html