Java實現學生成績管理系統
本文實例為大傢分享瞭Java實現學生成績管理系統的具體代碼,供大傢參考,具體內容如下
新手練手小項目,主要練習面向對象、循環、數組、排序等等。
本人也是自學練手,代碼有不正確的或不完善的也請多多包涵,留言指導。
感謝!
一、創建學生類
儲存學生的基本信息
public class Student { private int no; private String name; Result result; public Student() { super(); } public Student(int no, String name,Result result) { super(); this.result = result; this.name = name; this.no = no; } public Result getResult() { return result; } public void setResult(Result result) { this.result = result; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getNo() { return no; } public void setNo(int no) { this.no = no; } public String toString(){ return "\t" + no + "\t" + name + "\t" + result; } }
二、創建成績類
便於成績的增加,易於管理
public class Result {//成績類 private int java; private int python; private int c_shar; private int sql; private int sum; private int avg; public Result() { } public Result(int java, int python, int c_shar, int sql) { super(); this.java = java; this.python = python; this.c_shar = c_shar; this.sql = sql; } public int getJava() { return java; } public void setJava(int java) { this.java = java; } public int getPython() { return python; } public void setPython(int python) { this.python = python; } public int getC_shar() { return c_shar; } public void setC_shar(int c_shar) { this.c_shar = c_shar; } public int getSql() { return sql; } public void setSql(int sql) { this.sql = sql; } public int getSum(){ return this.java + this.python + this.c_shar + this.sql; } public int getAvg(){ return this.getSum() / 4; } public String toString(){ return java + "\t" + python + "\t" + c_shar + "\t" + sql + "\t" + this.getSum() + "\t" + this.getAvg(); } }
三、創建學生管理類
主要功能在此類中,例如添加學生信息、查找學生等等
import java.util.Scanner; public class StudentAdmin {//管理學生類 Scanner in = new Scanner(System.in); /** * * @param name 傳一個name添加學生姓名 * @param Arr傳一個學生數組,將學生對象保存 * @throws AddStudentException */ public void addStudent(String name,Student[] Arr) throws AddStudentException{//添加學生方法 AddStudentException ase = new AddStudentException("學生已達上限,添加失敗!"); Student stu = new Student(); Result r = new Result(); stu.setNo(setIndex(Arr) + 1); stu.setName(name); stu.setResult(r); if(setIndex(Arr) == -1){ throw ase; }else{ Arr[this.setIndex(Arr)] = stu; } } /** * * @param Arr傳一個數組 * @return返回空數組元素的下標 */ public int setIndex(Student[] Arr){ for(int i = 0; i < Arr.length; i++){ if(null == Arr[i]){ return i; } } return -1; } public void print(Student[] arr){//打印學生對象 for(int i = 0; i < arr.length; i++){ if(judge(i+1,arr[i])){ System.out.println(arr[i]); } } } public boolean judge(int no,Student stu){//判斷數組元素編號和傳的編號是否一致 if(stu != null){ if(stu.getNo() == no){ return true; }else{ return false; } } return false; } public void search(String name,Student[] arr){//查找學生方法 for(int i = 0; i < arr.length; i++){ if(judge(i + 1,arr[i])){ if(arr[i].getName().equals(name)){ System.out.println(arr[i]); return; } } } System.out.println("沒有找到此學生,請確認輸入的姓名是否正確!"); } public void update(int no,String name,Student[] arr){//更新學生姓名 for(int i = 0; i < arr.length; i++){ if(judge(i + 1,arr[i])){ arr[i].setName(name); System.out.println(arr[i]); return; } } System.out.println("沒有此編號,請確認輸入的編號是否正確!"); } public void del(int no,Student[] arr){//刪除學生信息 for(int i = 0; i < arr.length; i++){ if(judge(no,arr[i])){ arr[i] = null; return; } } System.out.println("沒有此編號,請確認輸入的編號是否正確!"); } public void stuResult(int no,Student[] arr){//根據編號輸入學生各科成績 for(int i = 0; i < arr.length; i++){ if(judge(i + 1,arr[i])){ if(arr[i].getNo() == no){ System.out.println("請輸入" + arr[i].getName() + "的java成績:"); arr[i].result.setJava(in.nextInt()); System.out.println("請輸入" + arr[i].getName() + "的python成績:"); arr[i].result.setPython(in.nextInt()); System.out.println("請輸入" + arr[i].getName() + "的c_char成績:"); arr[i].result.setC_shar(in.nextInt()); System.out.println("請輸入" + arr[i].getName() + "的sql成績:"); arr[i].result.setSql(in.nextInt()); break; } } } } public void paiXu(int no,Student[] arr){//根據某科成績排序 switch(no){ case 1: for(int i = 0; i < arr.length-1; i++){ for(int j = i + 1; j < arr.length; j++){ if(arr[j].result.getJava() > arr[i].result.getJava()){ Student max = arr[i]; arr[i] = arr[j]; arr[j] = max; } } } for(int i = 0; i < arr.length; i++){ System.out.println(arr[i]); } break; case 2: for(int i = 0; i < arr.length-1; i++){ for(int j = i + 1; j < arr.length; j++){ if(arr[j].result.getPython() > arr[i].result.getPython()){ Student max = arr[i]; arr[i] = arr[j]; arr[j] = max; } } } for(int i = 0; i < arr.length; i++){ System.out.println(arr[i]); } break; case 3: for(int i = 0; i < arr.length-1; i++){ for(int j = i + 1; j < arr.length; j++){ if(arr[j].result.getC_shar() > arr[i].result.getC_shar()){ Student max = arr[i]; arr[i] = arr[j]; arr[j] = max; } } } for(int i = 0; i < arr.length; i++){ System.out.println(arr[i]); } break; case 4: for(int i = 0; i < arr.length-1; i++){ for(int j = i + 1; j < arr.length; j++){ if(arr[j].result.getSql() > arr[i].result.getSql()){ Student max = arr[i]; arr[i] = arr[j]; arr[j] = max; } } } for(int i = 0; i < arr.length; i++){ System.out.println(arr[i]); } break; default: System.out.println("你輸入的編號錯誤!"); } } public void sumPaiXu(Student[] arr){//根據總分進行排序 for(int i = 0; i < arr.length-1; i++){ for(int j = i + 1; j < arr.length; j++){ if(arr[j].result.getSum() > arr[i].result.getSum()){ Student max = arr[i]; arr[i] = arr[j]; arr[j] = max; } } } for(int i = 0; i < arr.length; i++){ System.out.println(arr[i]); } return; } }
四、異常類
練習自定義異常類的創建及使用
public class AddStudentException extends Exception{ public AddStudentException(){} public AddStudentException(String s){ super(s); } }
五、測試類(主程序)
import java.util.Scanner; public class Test { public static void main(String[] args){ Scanner in = new Scanner(System.in); StudentAdmin admin = new StudentAdmin(); System.out.println("請定義學生的人數:"); Student[] stuArr = new Student[in.nextInt()]; while(true){ System.out.println("請選擇你要執行的功能:"); System.out.println("1:添加一個學生"); System.out.println("2:查找一個學生"); System.out.println("3:根據學生編號更新 學生基本信息"); System.out.println("4:根據學生編號刪除學生"); System.out.println("5:根據編號輸入學生各科成績"); System.out.println("6:根據某科成績進行排序"); System.out.println("7:根據總分進行排序"); System.out.println("0:退出系統"); int num = in.nextInt(); switch(num){ case 0 : System.exit(0); case 1 : System.out.println("請輸入學生姓名:"); try { admin.addStudent(in.next(), stuArr); } catch (AddStudentException e) { e.printStackTrace(); } admin.print(stuArr); break; case 2 : System.out.println("請輸入要查找的學生姓名:"); String name = in.next(); admin.search(name, stuArr); break; case 3 : System.out.println("請輸入要修改的編號:"); int no = in.nextInt(); System.out.println("請重新輸入學生姓名:"); String name1 = in.next(); admin.update(no, name1, stuArr); break; case 4 : System.out.println("請輸入學生編號:"); int no1 = in.nextInt(); admin.del(no1, stuArr); System.out.println("刪除學生信息成功!"); break; case 5 : System.out.println("請輸入學生編號:"); int no2 = in.nextInt(); admin.stuResult(no2, stuArr); admin.print(stuArr); break; case 6 : System.out.println("請輸入編號對應成績進行排序【1:java 2:python 3:c_char 4:sql】"); int no3 = in.nextInt(); admin.paiXu(no3, stuArr); break; case 7 : admin.sumPaiXu(stuArr); break; default : System.out.println("您輸入的編號有誤,請重新輸入!"); break; } } } }
總結
本人也是剛學習java不久,一直在看視頻自學。目前學習到瞭集合(剛開始),線程、IO還沒學。這個小的項目也是我自己在練手,鞏固學習的基礎知識,隻用到瞭最基本的知識。
在做這個項目的時候有很多不懂的地方。
例如:
1、Student類中的Result result這個實例變量的傳參,我發現如果把Result result這個屬性私有化無法賦值,最後便把訪問權限改成瞭缺省
2、“根據編號刪除學生信息”不知道怎麼刪除數組中的學生對象,現在知道原來把數組賦值為“null”就行瞭
等等
通過這個小練習,也學習到瞭很多很多。代碼還有很多不完善的地方,分享給大傢,請大傢指導!
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。