成绩管理系统

  • 成绩管理系统实现图
  • 成绩管理系统遇到的问题
  • 各功能模块代码
  • 0.菜单栏
  • 1.初始化数组
  • 2.求成绩平均值
  • 3.统计成绩大于85的人数
  • 4.修改指定位置处的成绩
  • 5.打印输出所有成绩
  • 6.主函数


成绩管理系统实现图

实现的功能如图所示:

JAVA成绩分析管理系统源码 java编写成绩管理系统_java

各功能模块

方法定义

1.初始化数学成绩

public float[] initScore()

2.求成绩的平均值

public float average(float[] f)

3.统计成绩大于85分的人数

public int count(float[] f)

4.修改指定位置处的成绩

public void update(float[] f, int index, float newScore)

5.打印输出所有程序

public void displayAllScore(float[] f)

功能表

public void displayMenu()


成绩管理系统遇到的问题

问题汇总

解决办法

代码过长

使用java方法进行调用

输入数据的格式不对

使用try,catch方法进行判断

输入数据值的范围不对

使用 if 或 while 语句进行判断

实现输入数字选择功能

使用 switch 方法并采用 if 进行判断

遇到I@1b6d3586

原因直接输出数组,应采用增强for循环进行输出


各功能模块代码

0.菜单栏
  • 主要是输出图上显示的功能说明
public void displayMenu() {
		System.out.println("************************************");
		System.out.println("        1--初始化数学成绩");
		System.out.println("        2--求成绩的平均值");
		System.out.println("        3--统计成绩大于85分的人数");
		System.out.println("        4--修改指定位置处的成绩");
		System.out.println("        5--打印输出所有成绩");
		System.out.println("        0--退出");
		System.out.println("************************************");
	}
1.初始化数组
  • 需要注意的是数据格式和数据范围的判断,使用try,catch判断数据格式,使用 if 语句判断数据范围
public float[] initScore() {
		Scanner sc = new Scanner(System.in);
		int n = 0;
		float[] f = null; // 创建数组,长度为n
		while (true) {
			// 接收学生人数,数学成绩
			System.out.println("请输入学生人数:");
			// 进行对学生人数为数字的判断
			try {
				n = sc.nextInt();
				f = new float[n]; // 创建数组,长度为n
				for (int i = 0; i < f.length; i++) {
					System.out.println("请输入第" + (i + 1) + "个学生的数学成绩:");
					// 进行对数学成绩的数字判断,若不为数字进行报错
					try {
						f[i] = sc.nextFloat();
						// 成绩设为0~100,若不在此区间进行报错
						if (f[i] >= 0 & f[i] <= 100) {
							continue;
						} else {
							System.out.println("输入的成绩超出范围,请重新输入!");
							i--;
							continue;
						}
					} catch (java.util.InputMismatchException e) {
						System.out.println("输入的数据格式有误,不能有非数字!");
						sc.next();
						i--;
					}
				}
			} catch (java.util.InputMismatchException e) {
				System.out.println("输入的数据格式有误,不能有非数字!");
				sc.next();
				continue;
			}
			break;
		}
		return f;
	}
  • 对输入数据格式和输入数据值范围的判断
2.求成绩平均值
  • 接收数组中的值再求平均成绩
public float average(float[] f) {
		float sum = 0, avg = 0;
		for (float n : f) {
			sum = sum + n;
		}
		avg = sum / f.length;
		return avg;
	}
3.统计成绩大于85的人数
  • for(float n:f) 为增强 for 循环,有点像Python中的 for(n in f)
public int count(float[] f) {
		int count = 0;
		for (float n : f) {
			if (n > 85) {
				count++;
			}
		}
		return count;
	}
4.修改指定位置处的成绩
  • 在外面用 while 循环,try和catch语句,判断修改数据的位置是否在数组范围内,数据的格式是否为数字。
  • 在里面用 if-else 语句判断插入的数据(数学成绩)是否在0~100之间,如果不是报错
public void update(float[] f, int index, float newScore) {
		Scanner sc = new Scanner(System.in);
		while (true) {
			System.out.println("请输入要修改数据的位置(从0开始):");
			try {
				index = sc.nextInt();
				// 判断修改数据的位置是否在数组中
				if (index >= 0 & index < f.length) {
					System.out.println("请输入新数据:");
					try {
						newScore = sc.nextFloat();
						// 判断输入的新数据成绩是否在0~100中
						if (newScore >= 0 & newScore <= 100) {
							f[index] = newScore;
							break;
						} else {
							System.out.println("输入的新数据的范围错误,请重新输入:");
							continue;
						}
					} catch (java.util.InputMismatchException e) {
						System.out.println("输入的数据格式有误,不能有非数字!");
						sc.next();
						continue;
					}
				} else {
					System.out.println("输入的修改数据的位置范围错误,请重新输入:");
					continue;
				}
			} catch (java.util.InputMismatchException e) {
				System.out.println("输入的数据格式有误,不能有非数字,请重新输入:");
				sc.next();
				continue;
			}
		}
	}
  • 对修改数据位置范围,输入数据值的范围,修改数据位置的格式,修改数据的格式的判断
5.打印输出所有成绩
  • 如果直接写成System.out.print(f);会出现以下报错:
  • JAVA成绩分析管理系统源码 java编写成绩管理系统_JAVA成绩分析管理系统源码_02

  • 原因是: @左边表示是一个int类型的数组,@右边是内存的hash值;
public void displayAllScore(float[] f) {
		for (float n : f) {
			System.out.print(n + " ");
		}
		System.out.println();
	}
6.主函数
  • 初始化数组 f,平均成绩 avg,大于85分的学生人数 count,修改的位置 index,输入的新数据 newScore。
  • 使用 while() 循环实现功能的连续使用,使用 if 语句和 switch-case 语句来选择数字对应的功能
  • tips:判断输入数据的格式;判断选择功能的数字在0~5之间;判断数组 f 是否为空集,否则要报错。
public static void main(String[] args) {
		GradeManage gm = new GradeManage();
		Scanner sc = new Scanner(System.in);
		int input = 0; // 对于的数字操作
		float[] f = null; // 存放成绩的数组
		float avg = 0; // 平均分
		int count = 0; // 大于85分的学生人数
		int index = 0; // 修改位置
		float newScore = 0; // 输入的新数据
		while (true) {
			gm.displayMenu();
			System.out.println("请输入对应的数字进行操作:");
			try {
				input = sc.nextInt();
				if(input>=0 & input<=5) {
				}else {
					System.out.println("该数字没有功能,请重新输入!");
				}
			} catch (java.util.InputMismatchException e) {
				System.out.println("输入的数据格式有误,不能有非数字!");
				sc.next();
				continue;
			}
			if(input==0) {
				System.out.println("退出程序!");
				break;
			}
			switch (input) {
			case 1:
				// 初始化数组
				f = gm.initScore();
				// 显示数组
				System.out.println("数学成绩为:");
				gm.displayAllScore(f);
				break;
			case 2:
				// 平均分
				if (f != null) {
					avg = gm.average(f);
					System.out.println("数学平均成绩为:" + avg);
				} else {
					System.out.println("还未在数组中插入数据,请重新输入!");
				}
				break;
			case 3:
				// 大于85分的学生人数
				if (f != null) {
					count = gm.count(f);
					System.out.println("数学成绩大于85分的学生人数为:" + count);
				} else {
					System.out.println("还未在数组中插入数据,请重新输入!");
				}
				break;
			case 4:
				// 修改指定位置处的成绩
				if (f != null) {
					gm.displayAllScore(f);
					gm.update(f, index, newScore);
					System.out.println("修改后的数据为:");
					gm.displayAllScore(f);
				} else {
					System.out.println("还未在数组中插入数据,请重新输入!");
				}
				break;
			case 5:
				// 打印输出所有成绩
				if (f != null) {
					gm.displayAllScore(f);
				} else {
					System.out.println("还未在数组中插入数据,请重新输入!");
				}
				break;
			}
  • 对功能号不在菜单栏进行报错
最终实现的功能

JAVA成绩分析管理系统源码 java编写成绩管理系统_java_03