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(" "); 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(" 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("您要查询全部信息还是单个员工信息? 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("编号 姓名 性别 年龄"); 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 + " " + name + " " + sex + " " + 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("编号 姓名 性别 年龄"); 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 + " " + name + " " + sex + " " + 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(" 数据录入"); 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("编号 姓名 性别 年龄"); 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 + " " + name + " " + sex + " " + 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("编号 姓名 性别 年龄"); 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 + " " + name + " " + sex + " " + 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(" "); 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(" "); 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(" 该用户名已存在,请重新输入..."); 42 } else { 43 DBUtil.executeUpdate(sql, inname, inpswd); 44 System.out.print(" 注册成功!欢迎登录!是否立即登陆?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(" "); 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("账号与密码不匹配,请重新输入... "); 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 System.out.println(); 91 System.out.print("请登录后修改密码"); 92 System.out.println(" "); 93 int count = 0; 95 System.out.println("*--------------------------------------------*"); 96 System.out.println("*++++++++++欢迎登录人力资源管理系统+++++++++++*"); 97 System.out.println("*--------------------------------------------*"); 98 while (true) { 99 System.out.println(); 100 System.out.print("请输入用户名:"); 101 String inname = sc.next(); 102 System.out.print(" 请输入密码:"); 103 String inpswd = sc.next(); 104 boolean b = DBUtil.queryLogin(inname, inpswd); 105 if (b) { 106 System.out.println(" -----修改密码------ "); 107 System.out.print(" 请输入新的密码:"); 108 String newpswd=sc.next(); 109 String sql="update t_user set pswd=? where name=?"; 110 DBUtil.executeUpdate(sql,newpswd,inname); 111 System.out.println(" 修改成功!请重新登录..."); 112 login(); 113 } else { 114 count++; 115 System.out.println("账号与密码不匹配,请重新输入... "); 116 } 117 if (count == 3) { 118 System.out.println("您连续三次输入错误,已退出!"); 119 break; 120 } 121 } 122 } 123 }
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(" "); 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(" 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