簡易成績管理系統:
分2大塊功能
1、實現一個菜單包括
A注冊 注冊一個管理員賬戶
B登錄 通過注冊的賬戶登錄系統
C退出 退出整個程序
2、實現一個菜單
A新增學生分數信息 循環新增學生的姓名與分數信息
B修改學生分數信息 通過學生的姓名修改一個學生的分數
C刪除學生分數信息 通過學生的姓名刪除一個學生的姓名與分數
D查詢學生信息 查詢功能看第3小點
E返回上級菜單
3、查詢學生信息中實現一個小菜單
A查詢學生分數 通過一個學生姓名查詢一個學生分數
B查詢所有學生分數 查詢所有學生的分數
package com.lovo.classes1122; import java.util.Scanner; public class gradeManager { static String [] usr = new String [3]; //定義全局變量 static int [] pwd = new int [3]; static String [] name = new String [5]; static int [] grade = new int [5]; public static void main(String[] args) { userMenu(); //調用初始菜單 } public static void userMenu(){ //初始用戶菜單 while(true){ System.out.print("A.注冊 "); System.out.print("B.登陸 "); System.out.println("C.退出 "); Scanner input=new Scanner(System.in); //輸入操作編號 System.out.println("請輸入操作:"); String operate =input.nextLine(); switch (operate) { //判斷操作 case "A": case "a": register(); break; case "B": case "b": signIn(); break; case "C": case "c": System.out.println("系統已退出,歡迎使用!!!"); System.exit(-1); break; default: System.out.println("操作錯誤,請重新輸入指令"); break; } } } public static void register(){ //注冊 boolean flag1 = false; for (int i = 0; i < usr.length; i++) { if (usr[i]==null) { //非null才賦值 Scanner input = new Scanner(System.in); System.out.println("請輸入需注冊的賬號"); usr[i] = input.nextLine(); System.out.println("請輸入需注冊的密碼"); pwd[i] = input.nextInt(); flag1=true; break; //賦值一次才退出循環 } } if(flag1==false){ System.out.println("用戶已滿,無法進行輸入!!!"); } } public static void signIn() { //登陸 Scanner input = new Scanner(System.in); System.out.println("請輸入您的的賬號"); String user = input.nextLine(); System.out.println("請輸入您的的密碼"); int password = input.nextInt(); for (int i = 0; i < usr.length; i++) { if (user.equals(usr[i]) && pwd[i]==password) { //賬號密碼一致才調用studentMenu() studentMenu(); return; //studentMenu()返回之后,再返回到上一級菜單 } } System.out.println("賬號密碼錯誤!!!"); } public static void studentMenu() { // 學生信息菜單 while (true) { System.out.print("A.新增學生信息 "); System.out.print("B.修改學生信息 "); System.out.print("C.刪除學生信息 "); System.out.print("D.查詢學生信息 "); System.out.println("E.退出 "); Scanner input=new Scanner(System.in); System.out.println("請輸入操作:"); String operate =input.nextLine(); switch (operate) { //判斷操作 case "A": case "a": addGrade(); break; case "B": case "b": fixGrade(); break; case "C": case "c": deleteGrade(); break; case "D": case "d": scanGrade(); break; case "E": case "e": return; default: System.out.println("操作錯誤,請重新輸入指令!!!"); break; } } } public static void addGrade() { // 新增學生分數信息 String flag = null; boolean flag1 = false; for (int i = 0; i < name.length; i++) { if (name[i]==null) { //非null才賦值 Scanner input = new Scanner(System.in); System.out.println("請輸入學生姓名"); name[i] = input.nextLine(); System.out.println("請輸入學生成績"); grade[i] = input.nextInt(); flag1=true; Scanner input1 = new Scanner(System.in); //每循環一次詢問是否繼續或中斷 System.out.println("中斷新增請輸 1 ,否則輸入其他數"); flag = input1.nextLine(); if (flag.equals("1")) { break; } } } if(flag1==false){ //提示是否能夠繼續輸入 System.out.println("用戶已滿,無法進行輸入!!!"); } } public static void fixGrade() { // 修改學生分數信息 String flag = null; while (true) { boolean flag1 = false; Scanner input = new Scanner(System.in); System.out.println("請輸入需修改的學生姓名"); String name1 = input.nextLine(); System.out.println("請輸入學生成績修改為多少"); int grade1 = input.nextInt(); for (int i = 0; i < name.length; i++) { //修改對應名字的對應的成績 if(name1.equals(name[i])){ grade[i]=grade1; flag1=true; } } if(flag1==false){ System.out.println("無法查找到此名字!!!"); } Scanner input1 = new Scanner(System.in); //每循環一次詢問是否繼續或中斷 System.out.println("中斷修改請輸 1 ,否則輸入其他數"); flag = input1.nextLine(); if (flag.equals("1")) { break; } } } public static void deleteGrade() { // 刪除學生分數信息 String flag = null; String [] nameTemp= new String [name.length]; int [] gradeTemp= new int [grade.length]; int index=0; while (true) { boolean flag1=false; Scanner input = new Scanner(System.in); System.out.println("請輸入需刪除的學生姓名"); String name1 = input.nextLine(); for (int i = 0; i < name.length; i++) { //將對應的名字和成績置空 if(name1.equals(name[i])){ name[i]=null; grade[i]=0; flag1=true; } } if(flag1==false){ //提示輸入姓名是否錯誤 System.out.println("無法查找到此名字!!!"); } Scanner input1 = new Scanner(System.in); //每循環一次詢問是否繼續或中斷 System.out.println("中斷修改請輸 1 ,否則輸入其他數"); flag = input1.nextLine(); if (flag.equals("1")) { break; } } for (int i = 0; i < name.length; i++) { //將數組name和grade非空元素賦給Temp if (name[i]!=null) { nameTemp[index]=name[i]; gradeTemp[index]=grade[i]; index++; } } for (int i = 0; i < name.length; i++) { //將Temp全部元素賦給數組name和grade name[i]=nameTemp[i]; grade[i]=gradeTemp[i]; } } public static void scanGrade() { // 查詢學生信息 while (true) { System.out.print("A.查詢學生分數 "); System.out.print("B.查詢所有學生分數 "); System.out.println("C.返回上一級 "); Scanner input=new Scanner(System.in); System.out.println("請輸入操作:"); String operate =input.nextLine(); switch (operate) { //判斷操作 case "A": case "a": scanOne(); break; case "B": case "b": scanAll(); break; case "C": case "c": return; default: System.out.println("操作錯誤,系統返回上級菜單!!!"); break; } } } public static void scanOne() { // 查詢學生分數 boolean flag1 =false; Scanner input=new Scanner(System.in); System.out.println("請輸入要查詢的姓名"); String name1 =input.nextLine(); for (int i = 0; i < name.length; i++) { //打印對應名字對應的分數 if (name1.equals(name[i]) ) { System.out.print("姓名:"+name[i]+" "); System.out.println("成績:"+grade[i]); flag1=true; } } if(flag1==false){ //提示輸入姓名是否錯誤 System.out.println("無法查找到此名字!!!"); } } public static void scanAll() { // 查詢所有學生分數 for (int i = 0; i < grade.length; i++) { //遍歷 System.out.print("姓名:"+name[i]+" "); System.out.println("成績:"+grade[i]); } } }
由於現階段還沒接觸到 javaoo 及 數據庫 等,手中能使用的東西很少,只能用已學到的基礎語法及函數來完成這個題目,所以還有很多可以改進和完善的地方。
這次編寫過程中,遇到了一些小難點,首先是 用戶名、密碼、學生姓名、學生成績 這4個數組 的聲明位置和參數傳遞的問題。如果 聲明位置不恰當 或 參數傳輸有誤,在學生信息菜單返回上級菜單之后,再進入到學生信息菜單時,會出現學生信息被初始化的問題。這里,我們可以將這四個數組都聲明在main函數中,但全程很多地方需要同時傳入和返回四個數組,略顯麻煩。所以,我們也可以將他們聲明為全局變量,即在class中聲明,與各函數同級,這樣就可以省去不少函數參數傳遞的過程。
當然在以后接觸了數據庫之后,會簡單許多。
最后是顯示 “無法查找到此名字!!!” 和 “用戶已滿,無法進行輸入!!!” 的問題,這里需要使用到我在之前博客中提到的“開關”思想,即本程序中flag、flag1的使用。在以后的編程之路上,“開關”思想是必不可少的,望同為java學習者的各位務必掌握。