当前位置: 首页 > news >正文

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

相关文章:

  • 成功解决 “\ufeffimport sys“ SyntaxError: invalid character in identifier
  • Node.js setImmediate 教程
  • Linux常见操作命令(1)
  • linux常见操作命令
  • 数列极限入门习题
  • FPGA学习(二)—— 三八译码器
  • unity学习62,尝试做一个flappy bird
  • 打造个人知识库(Page Assist版)- 私人专属AI-本地化部署deepseek
  • Leetcode 49: 字母异位词分组
  • vue原理面试题
  • 浏览器注入可以实现同时进行n个浏览器注入的方案
  • JavaWeb-社区版Idea安装配置
  • Spring Boot 与 MyBatis 版本兼容性
  • 简述下Spark中的自带的standalone集群管理的任务执行流程
  • 【决策树】分类属性的选择
  • Linux端口映射
  • 图解KV Cache:解锁LLM推理效率的关键
  • NVIDIA GPU 系列简单介绍
  • Vue盲区扫雷
  • oracle decode
  • 胸外科专家查出肺多发结节,说了一个可怕的事实……
  • 华夏银行一季度营收降逾17%、净利降逾14%,公允价值变动损失逾24亿
  • 160名老人报旅行团被扔服务区?张家界官方通报
  • 习近平在上海考察时强调,加快建成具有全球影响力的科技创新高地
  • 港交所与香港证监会就“中概股回流意向”已与部分相关企业进行接触
  • 解放日报头版聚焦“人民城市”:共建共享展新卷