Java實現學生信息管理系統(使用數據庫)

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();
    }
    
}

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: