Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)超詳細(xì)教程
前言:
該系統(tǒng)使用Java中的基礎(chǔ)技術(shù),其中采用技術(shù):ArrayList集合儲(chǔ)存學(xué)生對(duì)象信息,實(shí)現(xiàn)了很簡單學(xué)生信息管理系統(tǒng),其中有通過控制臺(tái)的鍵盤錄入實(shí)現(xiàn)了添加學(xué)生信息功能,刪除學(xué)生信息功能,修改學(xué)生信息功能,查看學(xué)生信息功能。都有完整代碼,也有注釋。
注:該系統(tǒng)博主按照自己的思路寫的,想到什么寫什么,邏輯可能存在問題或者不完美等,還請見諒,其中詳細(xì)介紹了添加學(xué)生功能的代碼邏輯以及存儲(chǔ)是的內(nèi)存圖等,其他功能感覺用到的技術(shù)感覺和添加功能的差不多就不做多介紹了。
一、主頁面展示
二、項(xiàng)目結(jié)構(gòu)
首先創(chuàng)建pojo包,以及pojo包下的Student類
service層同理,都創(chuàng)建好后是這樣的
pojo層用于封裝一些實(shí)體類,其中我們封裝Student類
service層我們用于封裝業(yè)務(wù)邏輯代碼(增刪改查)
Main啟動(dòng)類我們用于實(shí)現(xiàn)主界面
三、封裝Student類
1、封裝學(xué)生信息字段代碼部分
package pojo; public class Student { //學(xué)生姓名 private String name; //學(xué)生年齡 private int age; //學(xué)生學(xué)號(hào) private int id; //班級(jí)信息 private String team; }
封裝學(xué)生信息字段
- name 學(xué)生名字
- age 學(xué)生年齡
- id 學(xué)生學(xué)號(hào)
- team 所屬班級(jí)
2、生成Getter和Setter方法
3、生成有參構(gòu)造方法和無參構(gòu)造方法
至此學(xué)生信息Student類封裝完成
4、Student完整代碼
package pojo; public class Student { //學(xué)生姓名 private String name; //學(xué)生年齡 private int age; //學(xué)生學(xué)號(hào) private int id; //班級(jí)信息 private String team; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTeam() { return team; } public void setTeam(String team) { this.team = team; } public Student() { } public Student(String name, int age, int id, String team) { this.name = name; this.age = age; this.id = id; this.team = team; } }
四、service業(yè)務(wù)邏輯層StudentDao類封裝實(shí)現(xiàn)方法
1、添加學(xué)生信息代碼
Scanner sc = new Scanner(System.in); public void addStudent(ArrayList<Student> list) { //判斷集合對(duì)象的長度,如果list.size()==0則集合中沒有對(duì)象,所以創(chuàng)建第一個(gè)對(duì)象 if (list.size()==0){ System.out.println("請輸入學(xué)號(hào)"); int id = sc.nextInt(); System.out.println("請輸入姓名"); String name = sc.next(); System.out.println("請輸入年齡"); int age = sc.nextInt(); System.out.println("請輸入班級(jí)"); String team = sc.next(); Student stu = new Student(name, age, id, team); list.add(stu); System.out.println("添加學(xué)生" + stu.getName() + "成功"); }else { //否則集合中已存在對(duì)象 lo:while (true) { System.out.println("請輸入學(xué)號(hào)"); int id = sc.nextInt(); //通過遍歷集合查找各個(gè)對(duì)象的id值 for (int i = 0; i < list.size(); i++) { Student student = list.get(i); //如果我們通過鍵盤錄入的id值與已有對(duì)象的id值相匹配則重新添加信息 if (student.getId() == id) { System.out.println("該學(xué)號(hào)已存在請重新添加:"); break lo; } //否則添加信息 else { System.out.println("請輸入姓名"); String name = sc.next(); System.out.println("請輸入年齡"); int age = sc.nextInt(); System.out.println("請輸入班級(jí)"); String team = sc.next(); Student stu = new Student(name, age, id, team); list.add(stu); System.out.println("添加學(xué)生" + stu.getName() + "成功"); break lo; } } } } }
代碼邏輯解釋
addStudent()方法通過接受Main啟動(dòng)類傳入的list集合進(jìn)行調(diào)用和處理
首先通過 list.size()==0 判斷我們是否是存入第一個(gè)學(xué)生對(duì)象,因?yàn)槲覀儗W(xué)生學(xué)號(hào)通常是唯一的,而名字,年齡,班級(jí)不是唯一的,可以同名等。而我們存入的第一個(gè)學(xué)生對(duì)象是不存在學(xué)號(hào)重復(fù)的問題。所以第一個(gè)學(xué)生對(duì)象則用鍵盤錄入信息傳入 stu 對(duì)象,再將stu對(duì)象添加到我們的list集合中
例如:
通過list.add(stu);后的內(nèi)存圖,我也是大概抽象出來,我也不太懂(勿噴)
當(dāng)我們錄入第二個(gè)學(xué)生對(duì)象信息時(shí),此時(shí)list中已存在0索引的stu對(duì)象(內(nèi)存地址001)
則 list.size()==0條件不成立,此時(shí)list.size()==1
if(list.size()==0)判斷不過通,則執(zhí)行else
我們通過鍵盤錄入輸入第二個(gè)同學(xué)的信息,此時(shí)通過for循環(huán)遍歷拿到集合中的對(duì)象的地址,并賦值給student,此時(shí)student的內(nèi)存地址為001
此時(shí)如果我們鍵盤錄入的學(xué)號(hào)id與集合中001對(duì)象的學(xué)號(hào)id一致的話則給出提示
即當(dāng)student.getId() == id
該學(xué)號(hào)已存在請重新添加:
否則 student.getId() != id 則執(zhí)行后面else的代碼添加第二個(gè)學(xué)生信息并存儲(chǔ)到list集合中,則第二個(gè)的對(duì)象在集合中的索引為1
2、查詢學(xué)生信息功能代碼
//查詢學(xué)生信息功能 public void printAllStudent(ArrayList<Student> list) { //通過Main啟動(dòng)類中studentDao.addStudent(list)傳入學(xué)生對(duì)象list集合本身 // 而ArrayList<Student> list接受 // list.isEmpty()判斷列表是否包含元素,不包含元素則返回 true,否則返回false if (list.isEmpty()) { System.out.println("列表中沒有學(xué)生信息。"); return;//彈棧退出 }else { System.out.println("學(xué)號(hào)\t姓名\t年齡\t班級(jí)"); for (int i = 0; i < list.size(); i++) { //遍歷集合 Student student = list.get(i); System.out.println(student.getId() + "\t" + student.getName() + "\t" + student.getAge() + "\t" + student.getTeam()); } } }
3、刪除學(xué)習(xí)信息功能代碼
//根據(jù)學(xué)生學(xué)號(hào)刪除學(xué)生信息功能 public void delStudent(ArrayList<Student> list, int id) { //通過遍歷集合得到各個(gè)對(duì)象的id值 for (int i = 0; i < list.size(); i++) { Student student = list.get(i); //若某對(duì)象的id值與傳入id值相匹配,從而根據(jù)id刪除信息 if (student.getId() == id) { list.remove(student); System.out.println("刪除"+student.getName()+"成功"); break; } else { System.out.println("沒有找到學(xué)號(hào)為:"+student.getId()+"的學(xué)號(hào)刪除失敗"); break; } } }
4、修改學(xué)生信息功能代碼
//修改學(xué)生信息功能 public void updateStudent(ArrayList<Student> list, int id1) { //通過遍歷集合得到集合某索引的對(duì)象中的id值與傳入id1值相匹配,從而根據(jù)id修改信息 for (int i = 0; i < list.size(); i++) { Student student = list.get(i); if (student.getId() == id1) { System.out.println("請輸入新的名字:"); String name = sc.next(); System.out.println("請輸入新的年齡:"); int age = sc.nextInt(); System.out.println("請輸入新的班級(jí):"); String team = sc.next(); //其中student.getId()是獲取原對(duì)象的id(做到學(xué)號(hào)不作修改) Student student1 = new Student(name, age,student.getId(), team); /*如果你傳入的學(xué)號(hào)(num)與集合對(duì)象的某個(gè)索引匹配, 則將新得到的student1插入該索引的對(duì)象當(dāng)中*/ list.set(i, student1); System.out.println("修改成功"); break; } } System.out.println("沒有"+id1+"該學(xué)號(hào)"); }
5、StudentDao類完整代碼
package service; import pojo.Student; import java.util.ArrayList; import java.util.Scanner; public class StudentDao { Scanner sc = new Scanner(System.in); //查詢學(xué)生信息功能 public void printAllStudent(ArrayList<Student> list) { //通過Main啟動(dòng)類中studentDao.addStudent(list)傳入學(xué)生對(duì)象list集合本身 // 而ArrayList<Student> list接受 // list.isEmpty()判斷列表是否包含元素,不包含元素則返回 true,否則返回false if (list.isEmpty()) { System.out.println("列表中沒有學(xué)生信息。"); return;//彈棧退出 }else { System.out.println("學(xué)號(hào)\t姓名\t年齡\t班級(jí)"); for (int i = 0; i < list.size(); i++) { //遍歷集合 Student student = list.get(i); System.out.println(student.getId() + "\t" + student.getName() + "\t" + student.getAge() + "\t" + student.getTeam()); } } } //添加學(xué)生信息功能(學(xué)生學(xué)號(hào)是唯一的) public void addStudent(ArrayList<Student> list) { //判斷集合對(duì)象的長度,如果list.size()==0則集合中沒有對(duì)象,所以創(chuàng)建第一個(gè)對(duì)象 if (list.size()==0){ System.out.println("請輸入學(xué)號(hào)"); int id = sc.nextInt(); System.out.println("請輸入姓名"); String name = sc.next(); System.out.println("請輸入年齡"); int age = sc.nextInt(); System.out.println("請輸入班級(jí)"); String team = sc.next(); Student stu = new Student(name, age, id, team); list.add(stu); System.out.println("添加學(xué)生" + stu.getName() + "成功"); }else { //否則集合中已存在對(duì)象 lo:while (true) { System.out.println("請輸入學(xué)號(hào)"); int id = sc.nextInt(); //通過遍歷集合查找各個(gè)對(duì)象的id值 for (int i = 0; i < list.size(); i++) { Student student = list.get(i); //如果我們通過鍵盤錄入的id值與已有對(duì)象的id值相匹配則重新添加信息 if (student.getId() == id) { System.out.println("該學(xué)號(hào)已存在請重新添加:"); break lo; } //否則添加信息 else { System.out.println("請輸入姓名"); String name = sc.next(); System.out.println("請輸入年齡"); int age = sc.nextInt(); System.out.println("請輸入班級(jí)"); String team = sc.next(); Student stu = new Student(name, age, id, team); list.add(stu); System.out.println("添加學(xué)生" + stu.getName() + "成功"); break lo; } } } } } //根據(jù)學(xué)生學(xué)號(hào)刪除學(xué)生信息功能 public void delStudent(ArrayList<Student> list, int id) { //通過遍歷集合得到各個(gè)對(duì)象的id值 for (int i = 0; i < list.size(); i++) { Student student = list.get(i); //若某對(duì)象的id值與傳入id值相匹配,從而根據(jù)id刪除信息 if (student.getId() == id) { list.remove(student); System.out.println("刪除"+student.getName()+"成功"); break; } else { System.out.println("沒有找到學(xué)號(hào)為:"+student.getId()+"的學(xué)號(hào)刪除失敗"); break; } } } //修改學(xué)生信息功能 public void updateStudent(ArrayList<Student> list, int id1) { //通過遍歷集合得到集合某索引的對(duì)象中的id值與傳入id1值相匹配,從而根據(jù)id修改信息 for (int i = 0; i < list.size(); i++) { Student student = list.get(i); if (student.getId() == id1) { System.out.println("請輸入新的名字:"); String name = sc.next(); System.out.println("請輸入新的年齡:"); int age = sc.nextInt(); System.out.println("請輸入新的班級(jí):"); String team = sc.next(); //其中student.getId()是獲取原對(duì)象的id(做到學(xué)號(hào)不作修改) Student student1 = new Student(name, age,student.getId(), team); /*如果你傳入的學(xué)號(hào)(num)與集合對(duì)象的某個(gè)索引匹配, 則將新得到的student1插入該索引的對(duì)象當(dāng)中*/ list.set(i, student1); System.out.println("修改成功"); break; } } System.out.println("沒有"+id1+"該學(xué)號(hào)"); } }
五、Main啟動(dòng)類編寫系統(tǒng)的主頁面
1、Main啟動(dòng)類完整代碼
在主頁面定義 ArrayList<Student> list 集合來儲(chǔ)存學(xué)生對(duì)象
import pojo.Student; import service.StudentDao; import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { //調(diào)用service層中StudentDao中的方法(實(shí)例化對(duì)象studentDao)(增刪改查) StudentDao studentDao = new StudentDao(); //定義學(xué)生對(duì)象的一個(gè)數(shù)組 ArrayList<Student> list = new ArrayList<>(); Scanner sc = new Scanner(System.in); lo: //通過while循環(huán)無限進(jìn)入我們的系統(tǒng),直到選5退出結(jié)束 while (true) { System.out.println("------歡迎來到學(xué)生信息管理系統(tǒng)------"); System.out.println("1 添加學(xué)生信息"); System.out.println("2 刪除學(xué)生信息"); System.out.println("3 修改學(xué)生信息"); System.out.println("4 查看學(xué)生信息"); System.out.println("5 退出"); System.out.println("請輸入你的選擇:"); //通過switch-case語句實(shí)現(xiàn)我們要選擇的功能 int choice = sc.nextInt(); switch (choice) { //通過調(diào)用studentDao實(shí)例化對(duì)象中的方法實(shí)現(xiàn)(增刪改查) case 1: /*向方法中傳入定義的集合本身list 以便我們在實(shí)現(xiàn)方法時(shí)更好調(diào)用和處理集合中的每一個(gè)學(xué)生對(duì)象*/ studentDao.addStudent(list); break; case 2: System.out.print("請輸入你要?jiǎng)h除的學(xué)生學(xué)號(hào):"); int id = sc.nextInt(); //向delStudent()函數(shù)傳入list集合,以及鍵盤錄入的學(xué)號(hào) studentDao.delStudent(list, id); break; case 3: System.out.print("請輸入你要修改的學(xué)生學(xué)號(hào):"); int id1 = sc.nextInt(); studentDao.updateStudent(list, id1); case 4: studentDao.printAllStudent(list); break; case 5: System.out.println("退出成功"); break lo; } } } }
總結(jié)
到此這篇關(guān)于Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的文章就介紹到這了,更多相關(guān)Java學(xué)生信息管理系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 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)(使用數(shù)據(jù)庫)
相關(guān)文章
java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解
這篇文章主要介紹了java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解,需要的朋友可以參考下2020-02-02Spring?@Bean?修飾方法時(shí)注入?yún)?shù)的操作方法
對(duì)于 Spring 而言,IOC 容器中的 Bean 對(duì)象的創(chuàng)建和使用是一大重點(diǎn),Spring 也為我們提供了注解方式創(chuàng)建 bean 對(duì)象:使用 @Bean,這篇文章主要介紹了Spring?@Bean?修飾方法時(shí)如何注入?yún)?shù),需要的朋友可以參考下2023-10-10java實(shí)現(xiàn)簡單學(xué)生成績管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Java的中l(wèi)ombok下的@Builder注解用法詳解
這篇文章主要介紹了Java的中l(wèi)ombok下的@Builder注解用法詳解,lombok注解在java進(jìn)行編譯時(shí)進(jìn)行代碼的構(gòu)建,對(duì)于java對(duì)象的創(chuàng)建工作它可以更優(yōu)雅,不需要寫多余的重復(fù)的代碼,在出現(xiàn)lombok之后,對(duì)象的創(chuàng)建工作更提供Builder方法,需要的朋友可以參考下2023-11-11SpringBoot實(shí)現(xiàn)數(shù)據(jù)源動(dòng)態(tài)切換的最佳姿勢
這篇文章主要為大家詳細(xì)介紹一下SpringBoot實(shí)現(xiàn)數(shù)據(jù)源動(dòng)態(tài)切換的最佳姿勢,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03Java的常見熱門ORM框架優(yōu)缺點(diǎn)區(qū)別
Java?ORM框架是一種用于將Java對(duì)象映射到關(guān)系型數(shù)據(jù)庫中的工具,使得開發(fā)人員能夠通過對(duì)象操作數(shù)據(jù)庫而不必直接使用SQL查詢,Java開發(fā)變得更加高效和易于維護(hù),選擇適合你的ORM框架是根據(jù)你的需求決定的,比如你的應(yīng)用場景,數(shù)據(jù)結(jié)構(gòu)和技術(shù)水平等2024-02-02