Files
gc-plan/week1/day04/StudentScoreManager.java
2026-04-29 23:45:17 +08:00

119 lines
3.7 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package day04;
/**
* 第 4 天:学生成绩管理器 —— 数组、ArrayList、方法
* 目标:掌握数据组织(数组/动态数组)和代码组织(方法封装)
*
* 功能:添加成绩、查看全部、求平均分、找最高/最低分
*/
import java.util.ArrayList;
import java.util.Scanner;
public class StudentScoreManager {
// Scanner 作为静态成员,全局复用(记得最后 close
static Scanner scanner = new Scanner(System.in);
// ArrayList<Integer> 动态存储成绩
static ArrayList<Integer> scores = new ArrayList<>();
public static void main(String[] args) {
while (true) {
printMenu();
System.out.print("请选择操作 (1-5): ");
int choice = scanner.nextInt();
switch (choice) {
case 1 -> addScore();
case 2 -> showAllScores();
case 3 -> showAverage();
case 4 -> showMaxMin();
case 5 -> {
System.out.println("再见!");
scanner.close();
return; // 退出程序
}
default -> System.out.println("无效选项,请重试。");
}
}
}
// ==================== 方法定义 ====================
/** 打印菜单 */
static void printMenu() {
System.out.println("\n========== 学生成绩管理器 ==========");
System.out.println("1. 添加成绩");
System.out.println("2. 查看全部成绩");
System.out.println("3. 查看平均分");
System.out.println("4. 查看最高分 / 最低分");
System.out.println("5. 退出");
System.out.println("====================================");
}
/** 添加成绩 */
static void addScore() {
System.out.print("请输入成绩 (0-100): ");
int score = scanner.nextInt();
// 基本输入校验
if (score < 0 || score > 100) {
System.out.println("成绩必须在 0-100 之间!");
return;
}
scores.add(score);
System.out.println("✅ 第 " + scores.size() + " 个学生的成绩已添加: " + score);
}
/** 查看全部成绩 */
static void showAllScores() {
if (scores.isEmpty()) {
System.out.println("暂无成绩记录。");
return;
}
System.out.println("\n--- 全部成绩 ---");
// 传统 for 循环(需要索引)
for (int i = 0; i < scores.size(); i++) {
System.out.printf("学生 %d: %d 分\n", i + 1, scores.get(i));
}
System.out.println("" + scores.size() + " 名学生的成绩。");
}
/** 求平均分 */
static void showAverage() {
if (scores.isEmpty()) {
System.out.println("暂无成绩记录,无法计算平均分。");
return;
}
// 遍历求和
int sum = 0;
for (int s : scores) { // 增强 for 循环foreach
sum += s;
}
double average = (double) sum / scores.size(); // 强制转换防截断
System.out.printf("平均分: %.2f(共 %d 名学生)\n", average, scores.size());
}
/** 找最高分和最低分 */
static void showMaxMin() {
if (scores.isEmpty()) {
System.out.println("暂无成绩记录。");
return;
}
int max = scores.get(0);
int min = scores.get(0);
for (int s : scores) {
if (s > max) max = s;
if (s < min) min = s;
}
System.out.println("最高分: " + max);
System.out.println("最低分: " + min);
}
}