成绩管理系统
- 成绩管理系统实现图
- 成绩管理系统遇到的问题
- 各功能模块代码
- 0.菜单栏
- 1.初始化数组
- 2.求成绩平均值
- 3.统计成绩大于85的人数
- 4.修改指定位置处的成绩
- 5.打印输出所有成绩
- 6.主函数
成绩管理系统实现图
实现的功能如图所示:
各功能模块 | 方法定义 |
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);
会出现以下报错: - 原因是: @左边表示是一个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;
}
- 对功能号不在菜单栏进行报错
最终实现的功能