在我们的Java基础课程中,总是离不开学生管理系统,此次将这个简单的小系统进行一个简单实现以及一个对基础的升级。
第一步就是先创建一个学生类(JavaBean),编写对应的get和set方法。
以下为学生类的完整代码:
package com.wxy.shiyanwu;
public class Student {
private Integer no;
private String name;
private Integer EngScore;
public Student() {
}
public Student(Integer no, String name, Integer EngScore) {
this.no = no;
this.name = name;
this.EngScore = EngScore;
}
/**
* 获取
* @return no
*/
public Integer getNo() {
return no;
}
/**
* 设置
* @param no
*/
public void setNo(Integer no) {
this.no = no;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return EngScore
*/
public Integer getEngScore() {
return EngScore;
}
/**
* 设置
* @param EngScore
*/
public void setEngScore(Integer EngScore) {
this.EngScore = EngScore;
}
public String toString() {
return "Student{no = " + no + ", name = " + name + ", EngScore = " + EngScore + "}";
}
}
由上面你可以知道,有no,name和engscore三个成员,分别代表学号,名字和英语成绩,在他们的基础之上,我们可以更好的管理学生对象,最后再将学生对象放入list中进行管理,
以下是对增删查的方法实现(代码中有具体解释):
package com.wxy.shiyanwu;
import com.wxy.connMySQL.MysqlTest;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class StuTest {
static private List<Student> list = new ArrayList<>();//定义一个集合对象
static Scanner sc = new Scanner(System.in);//定义一个键盘输入的对象
这里在这个位置声明是为了全局方便调用,为什么使用static是因为static方法无法引用非static属性的东西,所以为了使用main函数,就只能这么定义。
//以下的抛异常是对数据库的抛异常,如果是基础的话可以无视
public static void main(String[] args) throws SQLException {
//Connection conn = MysqlInit();
//对while进行取名,叫做loop,while可以形成类似系统的东西,当不符合条件则退出系统
loop:while (true){
System.out.println("-----------------------------");
System.out.println("*模式1 : 添加学生成绩 *");
System.out.println("*模式2 : 删除学生 *");
System.out.println("*模式3 : 展示学生数据 *");
System.out.println("*模式4 : 退出本系统 *");
System.out.println("-----------------------------");
System.out.println("请输入你需要选择的模式");
int i = sc.nextInt();
//使用switch进行判断比较方便
switch (i){
case 1:{
//System.out.println("我被点击了");
Student stu = addStu();
//saveToDb(conn,stu);
break;
} case 2:{
//System.out.println("");
removeStu();
//System.out.println("请输入你需要删除的id");deleteById(conn,sc.nextInt());
break;
} case 3:{
selectAll();
//selectAllPlus(conn);
break;
} case 4:{
//conn.close();//关闭资源
break loop;
}
}
}
}
//判断学号是否唯一,存在则会返回true,在添加会做判断
private static boolean ifUnigue(int id) {
for (Student i : list) {
if (i.getNo() == id) {
return true;
}
}
return false;
}
//展示所有
private static void selectAll() {
for(Student stu : list){
System.out.println("学号:" + stu.getNo());
System.out.println("学生姓名:" + stu.getName());
System.out.println("学生英语成绩:" + stu.getEngScore());
System.out.println("--------------------------------------");
}
}
//添加学生的操作,先得到某个属性的值,然后封装为对象后存入list中
public static Student addStu(){
Student stu = new Student();
System.out.println("请输入学号");
int id = sc.nextInt();
while (ifUnigue(id)){
System.out.println("重复了请重新输入ID");
id = sc.nextInt();
}
stu.setNo(id);
System.out.println("请输入该学生的姓名");
stu.setName(sc.next());
System.out.println("请输入该学生的英语成绩");
stu.setEngScore(sc.nextInt());
list.add(stu);
System.out.println("已经添加!");
return stu;
}
//删除学生,进行简单的判断,当然可以调用上面的判断no是否存在可以减少代码重复率!这里属实没想到。。
public static void removeStu(){
System.out.println("输入你需要删除成绩的学生学号");
int index = sc.nextInt();
for(Student i : list){
if(i.getNo() == index){
list.remove(i);
return;
}
}
System.out.println("您想删除的学生学号不存在!");
}
}
当运行结束后你就会发现,当程序结束,arraylist从堆内存中出栈,则代表着里面的数据也没了,所以为了保存数据,这里使用的是MySQL存储的方法(需要下载对应编译软件的jdbc驱动才可以运行噢!)
以下是对方法的改进版本,应用数据库操作:
package com.wxy.shiyanwu;
import com.wxy.connMySQL.MysqlTest;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class StuTest {
static private List<Student> list = new ArrayList<>();
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) throws SQLException {
Connection conn = MysqlInit();
loop:while (true){
System.out.println("-----------------------------");
System.out.println("*模式1 : 添加学生成绩 *");
System.out.println("*模式2 : 删除学生 *");
System.out.println("*模式3 : 展示学生数据 *");
System.out.println("*模式4 : 退出本系统 *");
System.out.println("-----------------------------");
System.out.println("请输入你需要选择的模式");
int i = sc.nextInt();
switch (i){
case 1:{
//System.out.println("我被点击了");
Student stu = addStu();
saveToDb(conn,stu);
break;
} case 2:{
//System.out.println("");
//removeStu();
System.out.println("请输入你需要删除的id");deleteById(conn,sc.nextInt());
break;
} case 3:{
//selectAll();
selectAllPlus(conn);
break;
} case 4:{
//conn.close();//关闭资源
break loop;
}
}
}
}
private static boolean ifUnigue(int id) {
for (Student i : list) {
if (i.getNo() == id) {
return true;
}
}
return false;
}
//为省去判断id唯一继续沿用这个函数,可以通过对异常处理也可以实现不会使用重复id
public static Student addStu(){
Student stu = new Student();
System.out.println("请输入学号");
int id = sc.nextInt();
while (ifUnigue(id)){
System.out.println("重复了请重新输入ID");
id = sc.nextInt();
}
stu.setNo(id);
System.out.println("请输入该学生的姓名");
stu.setName(sc.next());
System.out.println("请输入该学生的英语成绩");
stu.setEngScore(sc.nextInt());
list.add(stu);
System.out.println("已经添加!");
return stu;
}
//对数据库进行一个初始,得到一个连接对象,有一个连接的基础,就可以对数据库进行一个操作
public static Connection MysqlInit() throws SQLException {
Connection conn = DriverManager.getConnection("jdbc:mysql:///proprice","root","123456");
return conn;
}
//将数据存入数据库中
public static void saveToDb(Connection conn,Student stu) throws SQLException {
//问号为占位符,使用此中方法还是可以防止sql注入的
String sql1 = "insert into student values (?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql1);
//根据对应的参数位置进行设置值
pstmt.setInt(1, stu.getNo());//设置占位符的值
pstmt.setString(2, stu.getName());
pstmt.setInt(3, stu.getEngScore());
int res=pstmt.executeUpdate();//执行sql语句
//res为更新数据的条数,如果更新为零,那肯定是数据库操作失败了
if(res>0){
System.out.println("数据录入成功");
}
pstmt.close();//关闭资源
}
//删除数据的操作,根据no值
public static void deleteById(Connection conn,Integer no) throws SQLException {
String sql = "delete from student where no = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,no);
int res=pstmt.executeUpdate();//执行sql语句
if(res>0){
System.out.println("数据删除成功");
}
pstmt.close();//关闭资源
}
//展示所有
private static void selectAllPlus(Connection conn) throws SQLException {
Statement stmt = conn.createStatement();
//将得到rs进行逐行读取,即可获得我们的数据
ResultSet rs = stmt.executeQuery("SELECT * FROM student");
while (rs.next()) {
System.out.println("学号:"+rs.getInt(1));
System.out.println("学生姓名:" +rs.getString(2));
System.out.println("学生英语成绩:"+rs.getInt(3));
System.out.println("--------------------------------------");
}
}
}
以上便是对学生英语成绩管理系统的部分实现以及一些简单的MySQL的jdbc的操作,在后期可以使用mybatis-plus可以大大简化该过程,当对于复习学习知识以及了解原理还是很有帮助的!