一个简易的学生成绩管理系统
简易成绩管理系统:
分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学习者的各位务必掌握。