Java实验----学生英语管理系统小案例+MySQL存储

在我们的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可以大大简化该过程,当对于复习学习知识以及了解原理还是很有帮助的!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值