Java学习——day14
文章目录
- 1. 项目需求分析
- 2. 项目设计
- 3. 代码分析
- 4. 运行示例
- 5. 今日学习总结
- 6. 今日生词
今日学习计划

1. 项目需求分析
功能要求:
(1)存储学生信息:
- 使用 HashMap 存储学生信息(学号作为键,Student 对象作为值)。
(2)操作学生数据: - 添加学生(姓名、学号、成绩)。
- 删除学生(按学号删除)。
- 查询学生(按学号查询)。
- 显示所有学生信息。
(3)异常处理: - 防止重复添加(如果学号已存在,抛出异常)。
- 查询/删除不存在的学号(抛出异常)。
- 输入格式错误(如非数字学号,捕获 NumberFormatException)。
- 无效成绩范围(自定义异常 InvalidScoreException)。
2. 项目设计
(1) 学生类(Student)
包含:学号、姓名、成绩,并提供构造方法和 toString() 便于显示。
class Student {
private String id;
private String name;
private int score;
public Student(String id, String name, int score) {
this.id = id;
this.name = name;
this.score = score;
}
public String getId() { return id; }
public String getName() { return name; }
public int getScore() { return score; }
@Override
public String toString() {
return "学号:" + id + ", 姓名:" + name + ", 成绩:" + score;
}
}
(2) 自定义异常类(InvalidScoreException)
当成绩不在 0~100 之间时抛出异常
class InvalidScoreException extends Exception {
public InvalidScoreException(String message) {
super(message);
}
}
(3) 学生管理类(StudentManager)
使用 HashMap<String, Student> 存储学生数据。
提供增删查改方法,加入异常处理。
import java.util.HashMap;
import java.util.Scanner;
class StudentManager {
private HashMap<String, Student> studentMap = new HashMap<>();
// 添加学生
public void addStudent(String id, String name, int score) throws InvalidScoreException {
if (studentMap.containsKey(id)) {
throw new IllegalArgumentException("学号 " + id + " 已存在!");
}
if (score < 0 || score > 100) {
throw new InvalidScoreException("成绩必须在 0 到 100 之间!");
}
studentMap.put(id, new Student(id, name, score));
System.out.println("学生添加成功!");
}
// 删除学生
public void removeStudent(String id) {
if (!studentMap.containsKey(id)) {
throw new IllegalArgumentException("学号 " + id + " 不存在!");
}
studentMap.remove(id);
System.out.println("学生删除成功!");
}
// 查询学生
public void searchStudent(String id) {
if (!studentMap.containsKey(id)) {
throw new IllegalArgumentException("学号 " + id + " 不存在!");
}
System.out.println(studentMap.get(id));
}
// 显示所有学生
public void displayAllStudents() {
if (studentMap.isEmpty()) {
System.out.println("当前没有学生数据!");
} else {
studentMap.values().forEach(System.out::println);
}
}
}
(4) 交互逻辑(主类 Main)
提供菜单交互。
异常处理,防止用户输入错误。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
StudentManager manager = new StudentManager();
Scanner scanner = new Scanner(System.in);
while (true) {
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.print("请选择操作: ");
try {
int choice = Integer.parseInt(scanner.nextLine());
switch (choice) {
case 1:
System.out.print("输入学号: ");
String id = scanner.nextLine();
System.out.print("输入姓名: ");
String name = scanner.nextLine();
System.out.print("输入成绩: ");
int score = Integer.parseInt(scanner.nextLine());
manager.addStudent(id, name, score);
break;
case 2:
System.out.print("输入要删除的学号: ");
manager.removeStudent(scanner.nextLine());
break;
case 3:
System.out.print("输入要查询的学号: ");
manager.searchStudent(scanner.nextLine());
break;
case 4:
manager.displayAllStudents();
break;
case 5:
System.out.println("程序退出!");
return;
default:
System.out.println("无效输入,请重新选择!");
}
} catch (NumberFormatException e) {
System.out.println("输入格式错误,请输入正确的数字!");
} catch (InvalidScoreException e) {
System.out.println("错误:" + e.getMessage());
} catch (IllegalArgumentException e) {
System.out.println("错误:" + e.getMessage());
}
}
}
}
3. 代码分析
功能 | 关键实现 | 异常处理 |
---|---|---|
存储学生信息 | HashMap<String, Student> | - |
添加学生 | addStudent() | 1. 学号重复 → IllegalArgumentException 2. 成绩范围错误 → InvalidScoreException |
删除学生 | removeStudent() | 学号不存在 → IllegalArgumentException |
查询学生 | searchStudent() | 学号不存在 → IllegalArgumentException |
防止输入错误 | try-catch 捕获 NumberFormatException | - |
4. 运行示例
=== 学生信息管理系统 ===
1. 添加学生
2. 删除学生
3. 查询学生
4. 显示所有学生
5. 退出
请选择操作: 1
输入学号: 1001
输入姓名: 张三
输入成绩: 105
错误:成绩必须在 0 到 100 之间!
请选择操作: 1
输入学号: 1001
输入姓名: 张三
输入成绩: 90
学生添加成功!
请选择操作: 3
输入要查询的学号: 1001
学号:1001, 姓名:张三, 成绩:90
请选择操作: 2
输入要删除的学号: 1002
错误:学号 1002 不存在!
5. 今日学习总结
-
集合框架
- 使用 HashMap<String, Student> 存储学生信息。
- (List 和 Set 可用于扩展功能(如 ArrayList 存储多个成绩)。
-
异常处理
- 输入异常:NumberFormatException(防止用户输入非数字)。
- 自定义异常:InvalidScoreException(确保成绩合法)。
- 逻辑异常:IllegalArgumentException(防止重复或无效学号)。
-
面向对象设计
- Student 类 代表学生信息。
- StudentManager 类 负责学生数据管理。
6. 今日生词
1.advanced 2.decisions 3.snippet 4.hesitating 5.lightspeed