學生資訊管理系統(使用資料庫)

  • 2019 年 12 月 17 日
  • 筆記

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

Tags: