专栏首页为学学生信息管理系统(使用数据库)

学生信息管理系统(使用数据库)

Java基础—学生信息管理系统(使用数据库)

  • 前一段时间写了学生信息管理系统(使用ArrayList),今天再来更新一下使用数据库的管理系统,总体上来说要比用ArrayList简便一些,同时输入的数据也能存储起来。
  • 这次程序是在上一篇的基础上进行修改的,所以结构上来看十分相似。
  • 在写程序之前,要先在MySQL上建立Student Info表。
create table Student (
    ID varchar(50) primary key not null,
    Name varchar(30) not null,
    Gender char(5) not null,
    Age int not null,
    Score int not null
);
  1. 就和上一篇博客一样,先将学生信息进行封装,这一步并不必要,只是修改起来方便些。
public class Student {

    private String stuName;

    private String stuNo;

    private String gender;

    private int age;

    private int score;

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public String getStuNo() {
        return stuNo;
    }

    public void setStuNo(String stuNo) {
        this.stuNo = stuNo;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

}

2.新建操作类,因为这次要使用MySql数据库,所以要使用JDBC将Java与数据库链接起来。

1> 先将mysql-connector-java.jar 加入到lib库中,之后右键Add path。

2> 然后在程序中要先开启JDBC,加载驱动器,如果驱动器不存在,会抛出异常,所以需要加上try-catch
//开启JDBC
    public void getDBconn(){
        String url = "jdbc:mysql://localhost:3306/homework";
        String user = "root";
        String password = "root";

        try {
            /**1.加载JDBC驱动器*/
            Class.forName("com.mysql.jdbc.Driver");

            /**2.获取连接*/
            conn = DriverManager.getConnection(url, user, password);
            stat = conn.createStatement();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
3>同样,在程序结束后一定要关闭连接,防止出问题。如果关闭异常,也要抛出异常。
//关闭JDBC
    public void closeRs(){
        try{
            if(rs != null){
                rs.close();
            }
            if(stat != null){
                stat.close();
            }
            if(conn != null){
                conn.close();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

3.接下来就是程序的主体:增、删、改、查四个操作部分,这部分因为笔者偷懒,所以和上一篇使用ArrayList的结构很像,但是内容有较大的修改,每一个try-catch后都加上了finally,无论操作是否成功都要关闭连接

//增加学生信息
    public void addStu(Student stu){

        String sql = "insert into studentinfo values ( '" + stu.getStuNo()+ "', '" + stu.getStuName() + "', '"
                + stu.getGender() + "', " + stu.getAge() + " , " + stu.getScore() + ")";

        try {
            int affectedRows = stat.executeUpdate(sql);
            if(affectedRows > 0){
                System.out.println("该学生信息已添加!");
            }else{
                System.out.println("操作有误,请重新添加!");
                append();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            closeRs();
        }

    }

    //输入学生信息
    public void append(){

        Student stu = new Student();

        /**
         * 通过封装方法,将学生信息赋给stus
         */
        stu.setStuName(name());

        stu.setStuNo(stuNum());

        stu.setGender(gender());

        stu.setAge(age());

        stu.setScore(score());

        //将stu中的信息增添到stus中
        addStu(stu);

    }


    //得到学生姓名
    public String name(){

        String name;

        System.out.println("请输入学生的姓名:");
        name = scanner.next();

        return name;
    }


    //得到学生学号
    public String stuNum(){

        String stuNum;

        System.out.println("请输入学生的学号:");
        stuNum = scanner.next();


        //如果学号不为11位,则重新输入,直到学号正确
        if(stuNum.length() != 11){
            System.out.println("您输入的学号有误!请重新输入!");
            stuNum();   
        }

        return stuNum;
    }

    //得到学生的性别
    public String gender(){

        String stuGender;

        System.out.println("请输入学生的性别:");
        stuGender = scanner.next();

        if(!stuGender.equals("男") && !stuGender.equals("女") ){
            System.out.println("您输入的学生性别有误!请重新输入!");
            gender();
        }

        return stuGender;
    }

    //得到学生的年龄
    public int age(){

        int stuAge;

        System.out.println("请输入学生的年龄:");
        stuAge = scanner.nextInt();

        if(stuAge < 0 || stuAge >=  80){
            System.out.println("您输入的年龄有误!请重新输入!");
            age();
        }

        return stuAge;
    }

    //得到学生的成绩
    public int score(){
        int stuScore;

        System.out.println("请输入学生的成绩:");
        stuScore = scanner.nextInt();

        if(stuScore < 0 || stuScore > 100){
            System.out.println("您输入的成绩有误!请重新输入!");
            score();
        }

        return stuScore;
    }


    /**
     * 
     * 删除学生信息
     * 
     * @param stuNo
     */
    public void delStu(){

        System.out.println("请输入您想删除的学号:");
        String stuNo = scanner.next();


        String sql = "delete from studentinfo where ID = '" + stuNo + "' ";

        try {
            int affectedRows = stat.executeUpdate(sql);
            if(affectedRows > 0){
                System.out.println("该学生信息已删除!");
            }else{
                System.out.println("操作有误,请重新输入!");
                delStu();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            closeRs();
        }
    }


    /**
     * 修改学生信息:
     * 1.姓名
     * 2.学号
     * 3.性别
     * 4.年龄
     * 5.成绩
     * @param stu
     */
    public void updateStu(String stuNo){

        String sql = null;

        information();
        int choose = scanner.nextInt();

        switch(choose){
            case 1:
                System.out.println("请输入要更新的名字:");
                String Name = scanner.next();
                sql = "update studentinfo set Name = '" + Name +"' where ID = '" + stuNo + "'";
                break;
            case 2:
                System.out.println("请输入要更新的性别:");
                String Gender = scanner.next();
                sql = "update studentinfo set Gender = '" + Gender +"' where ID = '" + stuNo + "'";
                break;
            case 3:
                System.out.println("请输入要更新的年龄:");
                int Age = scanner.nextInt();
                sql = "update studentinfo set Age = " + Age +" where ID = '" + stuNo + "'";
                break;
            case 4:
                System.out.println("请输入要更新的成绩:");
                int Score = scanner.nextInt();
                sql = "update studentinfo set Score = " + Score +" where ID = '" + stuNo + "'";
                break;
            case 0:
                System.exit(0);
                break;
        }   

        try {
            int affectedRows = stat.executeUpdate(sql);
            if(affectedRows > 0){
                System.out.println("该学生信息已修改!");
            }else{
                System.out.println("操作有误!");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            closeRs();
        }
    }

    public void information(){
        System.out.println("请选择您要修改的信息:");
        System.out.println("1.姓名");
        System.out.println("2.性别");
        System.out.println("3.年龄");
        System.out.println("4.成绩");
        System.out.println("0.退出");
        System.out.println("请输入序号:");
    }
    /**
     * 根据学号查询学生信息
     * 如果存在,输出学生信息
     * @param stuNo
     */
    public void queryStuByStuNo(String stuNo){

        String sql = "select * from studentinfo where ID = '" + stuNo + "'";

        try {
            if(stuNo.equals("0")){

                sql = "select * from studentinfo";
                rs = stat.executeQuery(sql);

                while(rs.next()){
                    System.out.print("学号:" + rs.getString("ID") + "\t");
                    System.out.print("姓名:" + rs.getString("Name") + "\t");
                    System.out.print("性别:" + rs.getString("Gender") + "\t");
                    System.out.print("年龄:" + rs.getInt("Age") + "\t");
                    System.out.println("成绩:" + rs.getInt("Score") + "\t");
                }
            }else{
                if(rs.next()){
                    rs = stat.executeQuery(sql);
                    System.out.print("学号:" + rs.getString("ID") + "\t");
                    System.out.print("姓名:" + rs.getString("Name") + "\t");
                    System.out.print("性别:" + rs.getString("Gender") + "\t");
                    System.out.print("年龄:" + rs.getInt("Age") + "\t");
                    System.out.println("成绩:" + rs.getInt("Score") + "\t");
                }
            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            closeRs();
        }


    }

4.定义操作菜单,允许用户输入选择要操作的功能。

import java.util.Scanner;



public class SystemService {

    Scanner scanner = new Scanner(System.in);
    StudentSystem ss = new StudentSystem();

    public void serviceChoose(){

        System.out.println("-----欢迎使用学生信息管理系统-----");

        while(true){

            ss.getDBconn();

            System.out.println("1.添加学生信息");
            System.out.println("2.删除学生信息");
            System.out.println("3.修改学生信息");
            System.out.println("4.查询学生信息");
            System.out.println("0.退出系统");

            System.out.println("请输入序号:");
            switch(scanner.nextInt()){

                case 1:
                    ss.append();
                    System.out.println();
                    break;
                case 2:
                    ss.delStu();
                    System.out.println();
                    break;
                case 3:
                    System.out.println("请输入要修改的学生的学号:");
                    ss.updateStu(scanner.next());
                    System.out.println();
                    break;
                case 4:
                    System.out.println("请输入要查询的学生的学号(若为0,则查询所有学生信息):");
                    ss.queryStuByStuNo(scanner.next());
                    System.out.println();
                    break;
                case 0:
                    System.exit(0);//退出系统
                    ss.closeRs();
                    break;
            }
        }
    }
}

5.定义主方法,使用该系统

public class Main {

    public static void main(String[] args) {

        SystemService ss = new SystemService();

        ss.serviceChoose();
    }

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java基础-面向对象思想

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    cwl_java
  • Java基础-数组原理内存图

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    cwl_java
  • Java基础-Java语言开发环境搭建

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    cwl_java
  • Maven 依赖

    ② 如果依赖的是自己或者团队开发的 Maven 工程,需要先使用 install 命令把被依赖的 maven 工程的 jar 包安装到本地仓库中

    happyJared
  • Java基础-开发工具IntelliJ IDEA

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    cwl_java
  • 谈谈中间件开发,给想从事中间件开发的同学

    随着国内软件行业的发展,国内互联网公司规模越来越大,业务越来越复杂,随之使用大量的中间件来提高后台服务性能。由此产生了中间件开发和维护人员。

    芋道源码
  • SpringBoot系列教程web篇Servlet 注册的四种姿势

    原文: 191122-SpringBoot系列教程web篇Servlet 注册的四种姿势

    小灰灰
  • Java基础-封装

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    cwl_java
  • 从react 编程 到 "好莱坞"

    Reactive Programming(响应式编程)已经不是一个新东西了。关于 Reactive 其实是一个泛化的概念,由于很抽象,一些理论性的介绍很容易把人...

    黄泽杰
  • 渗透测试安全检测漏洞

    最近渗透测试工作比较多没有空闲的时间来写文章,今天由我们Sine安全的渗透主管来普及一下java的安全测试基础,很多客户想要了解具体js的调用漏洞或提交play...

    网站安全专家

扫码关注云+社区

领取腾讯云代金券