A:在学习了类与对象、I/O流以及现在的数据库之后我们来对学生管理系统进行一个升级加强。从开始的数据没有保存,到学习了File文件过后的保存到文件,我们现在要做的就是将学生信息存放到数据库,并对其进行增删改查操作。
B:项目名称: 《学生信息管理系统》 英文:StudentManagerSystem 版本号: V1.2
* 功能描术:学生信息管理系统具有能对学生信息进行显示,添加,删除,
*更改(根据学号),退出功能.
* 要求:
*
* 1>.创建一个学生类Student至少包含:姓名(name)、学号(number)、年龄(age)三个属性;
* 2>.在添加,删除学生时要求检查该学生是否存在,如果不存在需给出提示。
* 3>.通过输入命令进行交互操作,控制台输出效果如下:
*
* 在Student类中封装操作方法:
*
* A、添加学生 (addStudent)、
* B、显示学生列表 (showAllStudent)、
* C、删除学生 (deleteStudent)、
* D、查找学生 (updateStudentByNumber)、
* E、退出系统 (exit)
一、连接数据库
package cn.hsz11_2.java1606.DBconnect;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 加载驱动连接数据库类
*
* @author H
*
*/
public class ConnectionDB {
private static final String URL = "jdbc:mysql://localhost:3306/hsz?useSSL=true"; //?useSSL=true屏蔽安全监测
private static final String USER = "root"; //用户名
private static final String PASSWORD = "******"; //密码
public ConnectionDB() {
try {
Class.forName("com.mysql.jdbc.Driver"); // 加载mysql驱动
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 建立数据库连接
*/
public static Connection getConnection() {
Connection connect = null;
try {
connect = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return connect;
}
/**
* 关闭数据库连接
*/
public static void closeConnection(Connection connect) {
try {
if (connect != null)
connect.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
二、创建学生表
package cn.hsz11_2.java1606.DBconnect;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 创建学生表类
*
* @author H
*
*/
public class StudentTable extends ConnectionDB {
/**
* 创建学生表
*/
public void createStudentTable() {
String sql = "create table student ("
+ "id int(11) not null auto_increment primary key," // 主键
+ "name varchar(10) not null," // 姓名
+ "number int(10) not null," // 学号
+ "age int(3)"+ ")"; // 年龄
Connection connect = getConnection();
Statement statement = null;
try {
statement = connect.createStatement(); // 执行SQL语句
statement.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (statement != null)
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
closeConnection(connect);
}
}
/**
* 键盘输入字符串类型
* @return
*/
public static String getStringKeyBoard() {
String name = "";
BufferedReader br = null;
InputStreamReader ir = null;
try {
ir = new InputStreamReader(System.in); // 字节 - > 字符
br = new BufferedReader(ir); // 字符 - > 字符缓冲
name = br.readLine();
} catch (IOException e) {
e.printStackTrace();
} catch (NumberFormatException n) {
System.out.println("输入格式错误,请重新输入 :");
}
return name;
}
/**
* 键盘输入 整型
*
* @return
*/
public static int getIntKeyBoard() {
BufferedReader br = null;
InputStreamReader ir = null;
for (;;) {
try {
ir = new InputStreamReader(System.in); // 字节 - > 字符
br = new BufferedReader(ir);
String line = br.readLine();
if (line == "")
break;
return Integer.parseInt(line);// 字符 - > 字符缓冲
} catch (IOException e) {
e.printStackTrace();
} catch (NumberFormatException n) {
System.out.println("输入格式错误,请重新输入 :");
}
}
return 0;
}
}
三、创建学生类
package cn.hsz11_2.java1606.DBconnect;
import java.io.File;
/**
* 学生类
*
* @author H
*
*/
public class Student {
private static String name; //姓名
private static int number; //学号
private static int age; //年龄
public Student(String name,int number,int age) {
this.name = name;
this.number = number;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
/**
* 1、 添加学生
*/
public static void addStudent() {// 添加学生
Student student = new Student( name,number,age );//实例化一个学生对象
System.out.println("请输入姓名:");
student.name = StudentTable.getStringKeyBoard();
System.out.println("请输入学号:");
student.number = StudentTable.getIntKeyBoard();
System.out.println("请输入年龄:");
student.age = StudentTable.getIntKeyBoard();
StudentDB db = new StudentDB();
db.addStudent(student);
}
/**
* 2、显示学生
*/
public static void showAllStudent() {// 显示学生列表
//System.err.println("\t姓名:\t学号: \t年龄: \t");
StudentDB.selectStudent();
}
/**
* 3、删除学生
*/
public static void deleteStudent() {// 删除学生
System.err.println("\t执行删除学生信息操作\t");
System.out.println("请输入学生姓名:");
String name = StudentTable.getStringKeyBoard();
StudentDB.deleteStudent(name);
}
/**
* 4、 更改学生
*/
public static void updateStudentByNumber() {// 更改学生
System.err.println("\t执行更改学生信息操作\t");
System.out.println("请输入学生学号:");
int number = StudentTable.getIntKeyBoard();
System.out.println("请输入更改的学生姓名:");
String name = StudentTable.getStringKeyBoard();
StudentDB.updateStudent(name,number);
}
/**
* 5、退出
*/
public static void exit() {
System.out.println();
}
}
四、创建学生表的操作工具类
package cn.hsz11_2.java1606.DBconnect;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 操作学生表工具类
*
* @author H
*
*/
public class StudentDB extends StudentTable{
/**
* 1、添加学生
*/
public static void addStudent(Student student) {
String sql = "insert into student (name,number,age)values(?,?,?)";
Connection connect = getConnection();
PreparedStatement ps = null;
try {
ps = connect.prepareStatement(sql); // 执行SQL语句
ps.setString(1, student.getName()); // 添加学生姓名
ps.setInt(2, student.getNumber()); // 添加学生学号
ps.setInt(3, student.getAge()); // 添加学生年龄
ps.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
closeConnection(connect);
}
}
/**
* 2、显示学生
*/
public static void selectStudent() {
String sql = "select * from student"; // 显示学生表中的所有信息
Connection connect = getConnection();
Statement statement = null;
ResultSet rs = null;
try {
statement = connect.createStatement(); // 执行SQL语句
rs = statement.executeQuery(sql);
System.out.println("id" + "\t" + "姓名" + "\t" + "学号" + "\t" + "年龄"+ "\t");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int number = rs.getInt("number");
int age = rs.getInt("age");
System.err.println(id + "\t" + name + "\t" + number + "\t"+ age + "\t");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (statement != null)
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
closeConnection(connect);
}
}
/**
* 3、删除(根据姓名)
*/
public static void deleteStudent(String name) {
String sql = "delete from student where name = ?"; // 删除学生根据学生姓名
Connection connect = getConnection();
PreparedStatement ps = null;
try {
ps = connect.prepareStatement(sql); // 执行SQL语句
ps.setString(1, name);
ps.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
closeConnection(connect);
}
}
/**
* 4、更改学生信息(根据学号)
*/
//方法一:
// public static void updateStudentByName(Student student,String name) {
// String sql = "UPDATE connect SET number = ? WHERE name = ?";
//
// Connection connect = getConnection();
// PreparedStatement ps = null;
//
// try {
//
// ps = connect.prepareStatement(sql);
// ps.setInt(1, student.getNumber());
// ps.setString(1, name);
// ps.execute();
//
// } catch (SQLException e) {
// e.printStackTrace();
// } finally {
//
// try {
//
// if (ps != null)
// ps.close();
//
// } catch (SQLException e) {
// e.printStackTrace();
// }
//
// closeConnection(connect);
// }
//
// }
//方法二:
public static void updateStudent( String name,int number) {
String sql = "update student set name = ? where number = ?"; // 根据学生学号更改学生姓名
Connection connect = getConnection(); // 建立连接
PreparedStatement ps = null;
try {
ps = connect.prepareStatement(sql); // 执行SQL语句
ps.setString(1, name); // 向SQL语句传参数 name
ps.setInt(2, number); // 向SQL语句传参数 number
ps.execute(); // 返回值是更新记录条数
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
closeConnection(connect);
}
}
}
五、学生管理系统界面即测试类
package cn.hsz11_2.java1606.DBconnect;
/**
* 测试类
* 即学生管理系统操作界面
* @author H
*
*/
public class StudentDBTest {
public static final int ADD_STUDENT_CODE = 1;
public static final int SHOW_STUDENT_CODE = 2;
public static final int DELETE_STUDENT_CODE = 3;
public static final int UPDATE_STUDENT_CODE = 4;
public static final int EXIT_STUDENT_CODE = 5;
public static void main(String[] args) {
System.out.println("====== 欢迎进入《学生信息管理系统》! ======");
System.err.println("1 添加学生,2 显示学生列表,3 删除学生,4 更改学生信息,5 退出");
System.out.println("<输入操作命令:>");
int code;
for(;;){//死循环
code = StudentTable.getIntKeyBoard();
switch(code){
case ADD_STUDENT_CODE:
Student.addStudent();
System.out.println("添加学生成功");
break;
case SHOW_STUDENT_CODE:
Student.showAllStudent();
System.out.println("显示完毕,以上就是所有学生信息。");
System.out.println("\t期待您的下次操作\t");
break;
case DELETE_STUDENT_CODE:
Student.deleteStudent();
System.out.println("\t删除成功,期待您的下次操作\t");
break;
case UPDATE_STUDENT_CODE:
Student.updateStudentByNumber();
System.out.println("\t期待您的下次操作\t");
break;
case EXIT_STUDENT_CODE:
Student.exit();
System.out.println("==== 您已经退出《学生信息管理系统》 ====");
System.exit(0);//退出
break;
}
System.err.println("<请继续输入操作命令:1 添加学生,2 显示学生列表,3 删除学生,4 更改学生信息,5 退出>");
}
}
}