Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(使用數(shù)據(jù)庫)
Java基礎(chǔ)—學(xué)生信息管理系統(tǒng)(使用數(shù)據(jù)庫),供大家參考,具體內(nèi)容如下
前一段時(shí)間寫了學(xué)生信息管理系統(tǒng)(使用ArrayList),今天再來更新一下使用數(shù)據(jù)庫的管理系統(tǒng),總體上來說要比用ArrayList簡便一些,同時(shí)輸入的數(shù)據(jù)也能存儲起來。
這次程序是在上一篇的基礎(chǔ)上進(jìn)行修改的,所以結(jié)構(gòu)上來看十分相似。
在寫程序之前,要先在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、就和上一篇博客一樣,先將學(xué)生信息進(jìn)行封裝,這一步并不必要,只是修改起來方便些。
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.新建操作類,因?yàn)檫@次要使用MySql數(shù)據(jù)庫,所以要使用JDBC將Java與數(shù)據(jù)庫鏈接起來。
1> 先將mysql-connector-java.jar 加入到lib庫中,之后右鍵Add path。
2> 然后在程序中要先開啟JDBC,加載驅(qū)動器,如果驅(qū)動器不存在,會拋出異常,所以需要加上try-catch
//開啟JDBC public void getDBconn(){ ?? ?String url = "jdbc:mysql://localhost:3306/homework"; ?? ?String user = "root"; ?? ?String password = "root"; ?? ??? ? ?? ??? ?try { ?? ??? ??? ?/**1.加載JDBC驅(qū)動器*/ ?? ??? ??? ?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>同樣,在程序結(jié)束后一定要關(guān)閉連接,防止出問題。如果關(guān)閉異常,也要拋出異常。
//關(guān)閉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.接下來就是程序的主體:增、刪、改、查四個(gè)操作部分,這部分因?yàn)楣P者偷懶,所以和上一篇使用ArrayList的結(jié)構(gòu)很像,但是內(nèi)容有較大的修改,每一個(gè)try-catch后都加上了finally,無論操作是否成功都要關(guān)閉連接
//增加學(xué)生信息 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("該學(xué)生信息已添加!"); ?? ??? ??? ?}else{ ?? ??? ??? ??? ?System.out.println("操作有誤,請重新添加!"); ?? ??? ??? ??? ?append(); ?? ??? ??? ?} ?? ??? ?} catch (SQLException e) { ?? ??? ??? ?// TODO Auto-generated catch block ?? ??? ??? ?e.printStackTrace(); ?? ??? ?}finally{ ?? ??? ??? ?closeRs(); ?? ??? ?} ?? ??? ? ?? ?} ?? ? ?? ?//輸入學(xué)生信息 ?? ?public void append(){ ?? ??? ? ?? ??? ?Student stu = new Student(); ?? ??? ? ?? ??? ?/** ?? ??? ? * 通過封裝方法,將學(xué)生信息賦給stus ?? ??? ? */ ?? ??? ?stu.setStuName(name()); ?? ??? ?stu.setStuNo(stuNum());?? ??? ? ?? ??? ?stu.setGender(gender());?? ??? ? ?? ??? ?stu.setAge(age());?? ??? ? ?? ??? ?stu.setScore(score());?? ? ?? ??? ?//將stu中的信息增添到stus中 ?? ??? ?addStu(stu); ?? ??? ? ?? ?} ?? ? ?? ? ?? ?//得到學(xué)生姓名 ?? ?public String name(){?? ? ?? ??? ?String name;?? ??? ? ?? ??? ?System.out.println("請輸入學(xué)生的姓名:"); ?? ??? ?name = scanner.next();?? ??? ? ?? ??? ?return name; ?? ?} ?? ? ?? ? //得到學(xué)生學(xué)號 public String stuNum(){ ?? ??? ?String stuNum;?? ??? ? ?? ??? ?System.out.println("請輸入學(xué)生的學(xué)號:"); ?? ??? ?stuNum = scanner.next();?? ??? ? ?? ??? ? ?? ??? ?//如果學(xué)號不為11位,則重新輸入,直到學(xué)號正確 ?? ??? ?if(stuNum.length() != 11){ ?? ??? ??? ?System.out.println("您輸入的學(xué)號有誤!請重新輸入!"); ?? ??? ??? ?stuNum();?? ? ?? ??? ?} ?? ??? ??? ??? ? ?? ??? ?return stuNum; ?? ?} ?? ? ?? ?//得到學(xué)生的性別 ?? ?public String gender(){ ?? ??? ? ?? ??? ?String stuGender; ?? ??? ? ?? ??? ?System.out.println("請輸入學(xué)生的性別:"); ?? ??? ?stuGender = scanner.next(); ?? ??? ? ?? ??? ?if(!stuGender.equals("男") && !stuGender.equals("女") ){ ?? ??? ??? ?System.out.println("您輸入的學(xué)生性別有誤!請重新輸入!"); ?? ??? ??? ?gender(); ?? ??? ?} ?? ??? ? ?? ??? ?return stuGender; ?? ?} ?? ? ?? ?//得到學(xué)生的年齡 ?? ?public int age(){ ?? ??? ? ?? ??? ?int stuAge; ?? ??? ? ?? ??? ?System.out.println("請輸入學(xué)生的年齡:"); ?? ??? ?stuAge = scanner.nextInt(); ?? ??? ? ?? ??? ?if(stuAge < 0 || stuAge >= ?80){ ?? ??? ??? ?System.out.println("您輸入的年齡有誤!請重新輸入!"); ?? ??? ??? ?age(); ?? ??? ?} ?? ??? ? ?? ??? ?return stuAge; ?? ?} ?? ? ?? ?//得到學(xué)生的成績 ?? ?public int score(){ ?? ??? ?int stuScore; ?? ??? ? ?? ??? ?System.out.println("請輸入學(xué)生的成績:"); ?? ??? ?stuScore = scanner.nextInt(); ?? ??? ? ?? ??? ?if(stuScore < 0 || stuScore > 100){ ?? ??? ??? ?System.out.println("您輸入的成績有誤!請重新輸入!"); ?? ??? ??? ?score(); ?? ??? ?} ?? ??? ? ?? ??? ?return stuScore; ?? ?} ?? ? ?? ? ?? ?/** ?? ? *? ?? ? * 刪除學(xué)生信息 ?? ? *? ?? ? * @param stuNo ?? ? */ ?? ?public void delStu(){ ?? ??? ? ?? ??? ?System.out.println("請輸入您想刪除的學(xué)號:"); ?? ??? ?String stuNo = scanner.next(); ?? ??? ? ?? ??? ?String sql = "delete from studentinfo where ID = '" + stuNo + "' "; ?? ??? ? ?? ??? ?try { ?? ??? ??? ?int affectedRows = stat.executeUpdate(sql); ?? ??? ??? ?if(affectedRows > 0){ ?? ??? ??? ??? ?System.out.println("該學(xué)生信息已刪除!"); ?? ??? ??? ?}else{ ?? ??? ??? ??? ?System.out.println("操作有誤,請重新輸入!"); ?? ??? ??? ??? ?delStu(); ?? ??? ??? ?} ?? ??? ?} catch (SQLException e) { ?? ??? ??? ?// TODO Auto-generated catch block ?? ??? ??? ?e.printStackTrace(); ?? ??? ?}finally{ ?? ??? ??? ?closeRs(); ?? ??? ?} ?? ?} ?? ? ?? ? ?? ?/** ?? ? * 修改學(xué)生信息: ?? ? * 1.姓名 ?? ? * 2.學(xué)號 ?? ? * 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("該學(xué)生信息已修改!"); ?? ??? ??? ?}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("請輸入序號:"); ?? ?} ?? ?/** ?? ? * 根據(jù)學(xué)號查詢學(xué)生信息 ?? ? * 如果存在,輸出學(xué)生信息 ?? ? * @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("學(xué)號:" + 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("學(xué)號:" + 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("-----歡迎使用學(xué)生信息管理系統(tǒng)-----"); ?? ??? ? ?? ??? ?while(true){ ?? ??? ??? ? ?? ??? ??? ?ss.getDBconn(); ?? ??? ??? ? ?? ??? ??? ?System.out.println("1.添加學(xué)生信息"); ?? ??? ??? ?System.out.println("2.刪除學(xué)生信息"); ?? ??? ??? ?System.out.println("3.修改學(xué)生信息"); ?? ??? ??? ?System.out.println("4.查詢學(xué)生信息"); ?? ??? ??? ?System.out.println("0.退出系統(tǒng)"); ?? ??? ??? ? ?? ??? ??? ?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("請輸入要修改的學(xué)生的學(xué)號:"); ?? ??? ??? ??? ??? ?ss.updateStu(scanner.next()); ?? ??? ??? ??? ??? ?System.out.println(); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?case 4: ?? ??? ??? ??? ??? ?System.out.println("請輸入要查詢的學(xué)生的學(xué)號(若為0,則查詢所有學(xué)生信息):"); ?? ??? ??? ??? ??? ?ss.queryStuByStuNo(scanner.next()); ?? ??? ??? ??? ??? ?System.out.println(); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?case 0: ?? ??? ??? ??? ??? ?System.exit(0);//退出系統(tǒng) ?? ??? ??? ??? ??? ?ss.closeRs(); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ?} }
5.定義主方法,使用該系統(tǒng)
public class Main { ?? ?public static void main(String[] args) { ?? ??? ?SystemService ss = new SystemService(); ?? ??? ?ss.serviceChoose(); ?? ?} ?? ? }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java學(xué)生信息管理系統(tǒng)設(shè)計(jì)
- Java學(xué)生信息管理系統(tǒng)設(shè)計(jì)(數(shù)據(jù)庫版)
- 學(xué)生信息管理系統(tǒng)java版
- java學(xué)生信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- java學(xué)生信息管理系統(tǒng)源代碼
- java實(shí)現(xiàn)簡單的學(xué)生信息管理系統(tǒng)代碼實(shí)例
- java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
- 用java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
- Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)超詳細(xì)教程
相關(guān)文章
Java如何簡單快速入門JWT(token生成與驗(yàn)證)
這篇文章主要給大家介紹了關(guān)于Java如何簡單快速入門JWT(token生成與驗(yàn)證)的相關(guān)資料,JWT是一個(gè)加密的字符串,JWT傳輸?shù)男畔⒔?jīng)過了數(shù)字簽名,因此傳輸?shù)男畔⒖梢员或?yàn)證和信任,需要的朋友可以參考下2023-12-12Java深入學(xué)習(xí)圖形用戶界面GUI之布局管理器
本文章向大家介紹Java GUI布局管理器,主要包括布局管理器使用實(shí)例、應(yīng)用技巧、基本知識點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下2022-05-05mybatis打印的sql日志不寫入到log文件的問題及解決
這篇文章主要介紹了mybatis打印的sql日志不寫入到log文件的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Java如何通過Socket同時(shí)發(fā)送文本和文件
這篇文章主要介紹了Java如何通過Socket同時(shí)發(fā)送文本和文件問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08詳解SpringBoot+Dubbo集成ELK實(shí)戰(zhàn)
這篇文章主要介紹了詳解SpringBoot+Dubbo集成ELK實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10