1,人力資源管理系統,實現查詢、添加、修改、刪除的功能。同時設計登錄界面,實現注冊、登錄,修改密碼的功能。通過登錄進入人力資源管理系統。
2,能實現將輸入的數據保存到數據庫,並實現對數據的查詢,修改,刪除。
3,在數據庫設計兩張表,分別是員工表t_staff(列包括id、姓名、性別、年齡),用戶表t_user(列包括id、用戶名、密碼),
3,異常處理,未實現數據有效性驗證。(上次已實現,這次主要練習目的是學習JDBC,故未實現)
4,MySQL數據庫,客戶端:SQLyog
1 CREATE DATABASE HRMS_db DEFAULT CHARSET utf8; 2 CREATE TABLE t_staff( 3 id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, 4 NAME VARCHAR(5) NOT NULL, 5 sex VARCHAR(1) NOT NULL, 6 age INT NOT NULL 7 ); 8 9 SELECT * FROM t_staff; 10 11 12 CREATE TABLE t_user( 13 id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, 14 NAME VARCHAR(10) NOT NULL, 15 pswd VARCHAR(10) NOT NULL 16 ); 17 18 SELECT * FROM t_user;
5,數據庫工具類-用於人力資源管理系統,此次是把數據存入數據庫,將對數據庫的操作定義成方法,可以簡化之後的程序,提高效率。
1 package hrms; 2 3 import java.sql.*; 4 5 /** 6 * 數據庫工具類-用於人力資源管理系統,把數據存入數據庫 7 * 8 * @author A_zhi 2016-9-8 9 * 10 */ 11 public class DBUtil { 12 /** 13 * 定義final變量 14 */ 15 public static final String DRIVER = "com.mysql.jdbc.Driver";//驅動 16 public static final String URL = "jdbc:mysql://localhost:3306/hrms_db?characterEncoding=utf-8";//地址 17 public static final String USER = "root";//客戶端SQLyog用戶名為“root” 18 public static final String PASSWORD = "";//客戶端SQLyog無密碼 19 private static Connection con = null; 20 21 /** 22 * 建立Java-MySQL間的連接 23 * 24 * @return con 25 * @throws Exception 26 */ 27 public static Connection getConnection() throws Exception { 28 Class.forName(DRIVER);//加載Java-MySQL驅動 29 con = DriverManager.getConnection(URL, USER, PASSWORD);//建立連接 30 return con;//返回連接 31 } 32 33 /** 34 * 關閉 Connection 35 * 36 * @throws Exception 37 */ 38 public static void closeConnection() throws Exception { 39 if (con != null && !con.isClosed()) { 40 con.close();//關閉連接 41 con = null; 42 } 43 } 44 45 /** 46 * 執行普通SQL命令 47 * 48 * @return 要執行的SQL語句 49 * @throws Exception 50 */ 51 public static int executeUpdate(String sql) throws Exception { 52 con = getConnection();// 連接數據庫 53 Statement st = con.createStatement();// 創建SQL命令 54 int r = st.executeUpdate(sql);// 執行SQL命令 55 closeConnection();// 關閉 56 return r;// 返回 57 } 58 59 /** 60 * 執行預編譯SQL命令,可執行帶"?"參數的SQL語句(增加,刪除,修改) 61 * 62 * @param sql 63 * 要執行的SQL命令 64 * @param obj 65 * 未知數目和類型的變量 66 * @return 要執行的SQL語句 67 * @throws Exception 68 */ 69 public static int executeUpdate(String sql, Object... obj) throws Exception { 70 con = getConnection(); 71 PreparedStatement pst = con.prepareStatement(sql);// 預編譯SQL命令 72 if (obj != null && obj.length > 0) { 73 for (int i = 0; i < obj.length; i++) { 74 pst.setObject(i + 1, obj[i]);// 數據庫從1開始, 75 } 76 } 77 int r = pst.executeUpdate(); 78 closeConnection(); 79 return r; 80 } 81 82 /** 83 * 賬號驗證 注冊,登陸使用,輸入用戶名和密碼存在返回true,否則返回false 84 * @param name 用戶名 pswd 密碼 85 * @return Boolean 86 * @throws Exception 87 */ 88 public static boolean queryLogin(String name,String pswd) throws Exception { 89 String sql = "select name from t_user where name=? and pswd=?"; 90 ResultSet rs = executeQuery(sql, name,pswd); 91 if (rs.next()) 92 return true; 93 else 94 return false; 95 } 96 97 /** 98 * 執行SQL查詢命令 99 * 100 * @param sql 101 * 要執行的查詢SQL命令 102 * @param obj 103 * 未知數目和類型的變量 104 * @return 結果集ResultSet 105 * @throws Exception 106 */ 107 public static ResultSet executeQuery(String sql, Object... obj) throws Exception { 108 con = getConnection(); 109 PreparedStatement pst = con.prepareStatement(sql);// 還是預編譯 110 if (obj != null && obj.length > 0) { 111 for (int i = 0; i < obj.length; i++) { 112 pst.setObject(i + 1, obj[i]); 113 } 114 } 115 ResultSet rs = pst.executeQuery(); 116 return rs; 117 } 118 } 119 // 對於封裝的查詢方法,不能在方法中關閉Connection,否則無法在進行查詢 120 // 事先在方法外部定義Connection就是為了查詢這個方法,其他方法中Connection可以定義在方法內 121 // 采用脫離連接的行集可以實現關閉connection也能查詢,以下附其關鍵語法 122 // import javax.sql.rowset.CachedRowSet; 123 // import com.sun.rowset.CachedRowSetImpl; 124 // Connection con=DBUtil.getConnection(); 125 // PreparedStatement pst=con.prepareStatement(sql);127 // ResultSet rs=pst.executeQuery(); 128 // CachedRowSet crs=new CachedRowSetImpl();//創建行集 129 // crs.populate(rs);//將結果集保存到行集 130 // con.close();//關閉 131 // crs.last();//再查詢 132 // System.out.println(crs.getString("name"));
6,人力資源管理系統,把數據存入數據庫,運用封裝,此類為系統的主界面以及操作方法,只有登錄之後才能進入。
1 package hrms; 2 3 import java.util.Scanner; 4 import java.sql.*; 5 6 /** 7 * 人力資源管理系統,把數據存入數據庫(運用封裝) 8 * 9 * 此類提供主界面及其數據操作 10 * 11 * @author A_zhi 12 * 13 * 2016-9-8 14 * 15 * 數據庫信息: 16 * 17 * CREATE DATABASE HRMS_db DEFAULT CHARSET utf8; CREATE TABLE t_staff( 18 * id INT PRIMARY KEY NOT NULL AUTO_INCREMENT , NAME VARCHAR(5) NOT 19 * NULL, sex VARCHAR(1) NOT NULL, age INT NOT NULL );SELECT * FROM 20 * t_staff; 21 * 22 */ 23 public class HrmsByJdbc { 24 public static Scanner sc = new Scanner(System.in); 25 26 /** 27 * 主界面,來自之前的復制 28 */ 29 public static void mainInterface() { 30 while (true) { 31 System.out.println("\n\n"); 32 System.out.println("**********************************************"); 33 System.out.println("* 人力資源管理系統 *"); 34 System.out.println("**********************************************"); 35 System.out.println("* 1、查看員工信息 *"); 36 System.out.println("* 2、添加員工信息 *"); 37 System.out.println("* 3、修改員工信息 *"); 38 System.out.println("* 4、刪除員工信息 *"); 39 System.out.println("* 0、退出系統 *"); 40 System.out.println("**********************************************"); 41 System.out.print("請選擇:"); 42 int num = sc.nextInt(); 43 if (num == 0) { 44 System.out.println("\n Thanks For Your Use!"); 45 System.exit(0);//退出系統,之前用的是break,但是它卻返回到了登錄界面,所以百度得到這個表達式 46 } else { 47 switch (num) { 48 case 1: 49 query();// 查詢 50 break; 51 case 2: 52 add();// 添加 53 break; 54 case 3: 55 update();// 修改 56 break; 57 case 4: 58 del();// 刪除 59 break; 60 default: 61 System.out.println("沒有這個選項,請重新輸入..."); 62 } 63 } 64 } 65 } 66 67 // 1、查詢 68 private static void query() { 69 System.out.print("您要查詢全部信息還是單個員工信息?\n a、全部,b、單個 :"); 70 String num1 = sc.next(); 71 String sql = null; 72 try { 73 switch (num1) { 74 case "a": 75 sql = "select * from t_staff"; 76 ResultSet rsa = DBUtil.executeQuery(sql);//調用工具類的方法 77 System.out.println("編號\t姓名\t性別\t年齡"); 78 while (rsa.next()) { 79 int id = rsa.getInt(1); 80 String name = rsa.getString(2); 81 String sex = rsa.getString(3); 82 int age = rsa.getInt(4); 83 System.out.println(id + "\t" + name + "\t" + sex + "\t" + age); 84 } 85 break; 86 case "b": 87 System.out.print("請輸入您要查詢的員工id:"); 88 int idnum = sc.nextInt(); 89 sql = "select * from t_staff where id=?"; 90 ResultSet rsb = DBUtil.executeQuery(sql, idnum); 91 System.out.println("編號\t姓名\t性別\t年齡"); 92 while (rsb.next()) { 93 int id = rsb.getInt(1); 94 String name = rsb.getString(2); 95 String sex = rsb.getString(3); 96 int age = rsb.getInt(4); 97 System.out.println(id + "\t" + name + "\t" + sex + "\t" + age); 98 } 99 break; 100 default: 101 System.out.println("沒有這個選項,請重新輸入..."); 102 break; 103 } 104 105 } catch (SQLException e) { 106 System.out.println("數據庫錯誤:" + e.getMessage()); 107 e.printStackTrace(); 108 } catch (Exception e) { 109 System.out.println("其它錯誤" + e.getMessage()); 110 e.printStackTrace(); 111 } finally { 112 try { 113 DBUtil.closeConnection(); 114 } catch (Exception e) { 115 System.out.println(e.getMessage()); 116 } 117 } 118 } 119 120 // 2、添加 121 private static void add() { 122 System.out.println("\t數據錄入"); 123 System.out.print("姓名:"); 124 String name = sc.next(); 125 System.out.print("性別:"); 126 String sex = sc.next(); 127 System.out.print("年齡:"); 128 int age = sc.nextInt(); 129 String sql = "INSERT INTO t_staff(NAME,sex,age) VALUES(?,?,?)"; 130 try { 131 DBUtil.executeUpdate(sql, name, sex, age); 132 System.out.println("添加成功"); 133 } catch (Exception e) { 134 System.out.println("錯誤:" + e.getMessage()); 135 } finally { 136 try { 137 DBUtil.closeConnection(); 138 } catch (Exception e) { 139 e.printStackTrace(); 140 } 141 } 142 } 143 144 // 3、修改 145 private static void update() { 146 String s1 = "select * from t_staff where id=?"; 147 String s2 = "update t_staff set name=? where id=?"; 148 String s3 = "update t_staff set sex=? where id=?"; 149 String s4 = "update t_staff set age=? where id=?"; 150 System.out.print("請輸入您要修改員工的id:"); 151 int idnum3 = sc.nextInt(); 152 try { 153 ResultSet rsb = DBUtil.executeQuery(s1, idnum3); 154 System.out.println("編號\t姓名\t性別\t年齡"); 155 while (rsb.next()) { 156 int id = rsb.getInt(1); 157 String name = rsb.getString(2); 158 String sex = rsb.getString(3); 159 int age = rsb.getInt(4); 160 System.out.println(id + "\t" + name + "\t" + sex + "\t" + age); 161 } 162 System.out.print("你是需要修改此人信息嗎? y/n: "); 163 String as = sc.next(); 164 if ("y".equals(as)) { 165 System.out.print("你要修改的是:a、姓名,b、性別,c、年齡 :"); 166 String as1 = sc.next(); 167 if ("a".equals(as1)) { 168 System.out.print("請輸入姓名:"); 169 String inname = sc.next(); 170 DBUtil.executeUpdate(s2, inname, idnum3); 171 } else if ("b".equals(as1)) { 172 System.out.print("請輸入性別:"); 173 String sex = sc.next(); 174 DBUtil.executeUpdate(s3, sex, idnum3); 175 } else if ("c".equals(as1)) { 176 System.out.print("請輸入年齡:"); 177 int age = sc.nextInt(); 178 DBUtil.executeUpdate(s4, age, idnum3); 179 } else { 180 System.out.println("輸入錯誤,請重新輸入..."); 181 } 182 } 183 System.out.println("修改成功!"); 184 } catch (Exception e) { 185 e.printStackTrace(); 186 } finally { 187 try { 188 DBUtil.closeConnection(); 189 } catch (Exception e) { 190 e.printStackTrace(); 191 } 192 } 193 194 } 195 196 // 4、刪除 197 private static void del() { 198 String s1 = "select * from t_staff where id=?"; 199 String s2 = "delete from t_staff where id=?"; 200 System.out.print("請輸入您要刪除員工的id:"); 201 int idnum4 = sc.nextInt(); 202 ResultSet rs4 = null; 203 try { 204 rs4 = DBUtil.executeQuery(s1, idnum4); 205 System.out.println("編號\t姓名\t性別\t年齡"); 206 while (rs4.next()) { 207 int id = rs4.getInt(1); 208 String name = rs4.getString(2); 209 String sex = rs4.getString(3); 210 int age = rs4.getInt(4); 211 System.out.println(id + "\t" + name + "\t" + sex + "\t" + age); 212 } 213 System.out.print("您確定要刪除此人信息嗎? y/n:"); 214 String as = sc.next(); 215 if ("y".equals(as)) { 216 DBUtil.executeUpdate(s2, idnum4); 217 System.out.println("刪除成功!"); 218 } else { 219 System.out.println("刪除取消!"); 220 } 221 } catch (Exception e) { 222 e.getMessage(); 223 } finally { 224 try { 225 DBUtil.closeConnection(); 226 } catch (Exception e) { 227 e.printStackTrace(); 228 } 229 } 230 } 231 }
7,登錄類,提供賬戶注冊、登錄、修改密碼的方法
1 package hrms; 2 3 import java.util.Scanner; 4 5 /** 6 * 人力資源管理系統 用戶操作 7 * 8 * 提供注冊,登錄,修改密碼的方法 9 * 10 * 數據庫信息: 11 * 12 * CREATE TABLE t_user( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME 13 * VARCHAR(10) NOT NULL, pswd VARCHAR(10) NOT NULL ); 14 * 15 * @author A_zhi 16 * 17 * 2016-9-9 18 */ 19 public class Login { 20 private static Scanner sc = new Scanner(System.in); 21 22 /** 23 * 注冊 24 * 25 * @throws Exception 26 */ 27 public static void register() throws Exception { 28 System.out.println("\n"); 29 System.out.println("*--------------------------------------------*"); 30 System.out.println("*++++++++++歡迎登錄人力資源管理系統+++++++++++*"); 31 System.out.println("*--------------------------------------------*"); 32 String sql = "insert into t_user(name,pswd) values(?,?)"; 33 System.out.println("\n"); 34 while (true) { 35 System.out.print("請輸入用戶名:"); 36 String inname = sc.next(); 37 System.out.print(" 請設置密碼:"); 38 String inpswd = sc.next(); 39 boolean b = DBUtil.queryLogin(inname, inpswd); 40 if (b) { 41 System.out.println("\n該用戶名已存在,請重新輸入..."); 42 } else { 43 DBUtil.executeUpdate(sql, inname, inpswd); 44 System.out.print("\n注冊成功!歡迎登錄!是否立即登陸?y/n :"); 45 String as = sc.next(); 46 if ("y".equals(as)) { 47 login(); 48 } 49 break; 50 } 51 } 52 } 53 54 /** 55 * 登錄 56 */ 57 public static void login() throws Exception { 58 System.out.println("\n"); 59 int count = 0; 60 System.out.println("*--------------------------------------------*"); 61 System.out.println("*++++++++++歡迎登錄人力資源管理系統+++++++++++*"); 62 System.out.println("*--------------------------------------------*"); 63 while (true) { 64 System.out.println(); 65 System.out.print("請輸入用戶名:"); 66 String inname = sc.next(); 67 System.out.print(" 請輸入密碼:"); 68 String inpswd = sc.next(); 69 boolean b = DBUtil.queryLogin(inname, inpswd); 70 if (b) { 71 System.out.println("即將進入..."); 72 HrmsByJdbc.mainInterface(); 73 } else { 74 count++; 75 System.out.println("賬號與密碼不匹配,請重新輸入...\n"); 76 } 77 if (count == 3) { 78 System.out.println("您連續三次輸入錯誤,已退出!"); 79 break; 80 } 81 } 82 } 83 84 /** 85 * 修改密碼 86 * 87 * @throws Exception 88 */ 89 public static void updatePswd() throws Exception { 90 91 System.out.print("密碼修改,之後補充!"); 92 login(); 93 94 } 95 }
8,注冊登錄的主界面,提供主方法,是程序執行的入口
1 package hrms; 2 3 import java.util.Scanner; 4 5 /** 6 * 人力資源管理系統 7 * 8 * 注冊登錄界面,程序執行入口 9 * 10 * @author A_zhi 11 * 12 * 2016-9-11 13 */ 14 public class TextLogin { 15 16 public static void main(String[] args) throws Exception { 17 Scanner sc = new Scanner(System.in); 18 while (true) { 19 System.out.println("\n"); 20 System.out.println("*--------------------------------------------*"); 21 System.out.println("*++++++++++歡迎登錄人力資源管理系統+++++++++++*"); 22 System.out.println("*--------------------------------------------*"); 23 System.out.println("*++++++++++++++++1,注冊++++++++++++++++++++++*"); 24 System.out.println(); 25 System.out.println("*++++++++++++++++2,登陸++++++++++++++++++++++*"); 26 System.out.println(); 27 System.out.println("*++++++++++++++++3,修改密碼++++++++++++++++++*"); 28 System.out.println(); 29 System.out.println("*++++++++++++++++0,退出++++++++++++++++++++++*"); 30 System.out.print("請選擇:"); 31 int num = sc.nextInt(); 32 if (num == 0) { 33 System.out.println("\n Thanks For Your Use!"); 34 break; 35 } else { 36 switch (num) { 37 case 1: 38 Login.register(); 39 break; 40 case 2: 41 Login.login(); 42 break; 43 case 3: 44 Login.updatePswd();; 45 break; 46 default: 47 System.out.println("沒有這個選項,請重新輸入..."); 48 } 49 } 50 } 51 sc.close(); 52 } 53 }
至今學習Java已有一月有余,去上課前兩天,我在家自己看看視頻,當時在DOS輸出了一個hello world我都很高興,一個多月過去了,程序從幾行變成了上百行,這段時間很辛苦,很累,但是收獲還是有的,雖然我不知道學了一個多月,能到現在的水平是夠了還是不夠,但是我問心無愧,我努力了。Java知識太多了,這段時間每天講的都很多,有的甚至來不及消化,就又開始了新的內容,每天早上7點起床去學Java,下午7點回來,吃了飯再看看,還是感覺時間不夠。接下來的時間還需要更加努力。
那天晚上在一個Java學習群,有個自學了幾天的朋友發了一個for循環的語句,但是是錯的,他說他看著視頻就能寫,不看視頻就出錯,就是記不住,我回應道,沒有什麼代碼是你去寫十遍記不住的,如果有那就再寫十遍。我以後也會盡量再多寫對練的。
加油!堅持!
A_zhi
2016-9-11