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