本仓库是一个独立 Java SE 课程设计项目,不属于 Java Web 课程实验仓库。项目以控制台交互和文件持久化为核心,适合单独保存为一个完整小项目。
这是一个基于Java SE控制台开发的学生信息管理系统。系统实现了管理员登录、学生信息管理、课程信息管理和成绩管理等功能,所有数据通过文件流持久化存储。
JavaCourseDesign_1Credit/ ├── com/ │ └── system/ │ ├── entity/ # 实体类 │ │ ├── Admin.java │ │ ├── Student.java │ │ ├── Course.java │ │ ├── Score.java │ │ └── DataException.java │ ├── service/ # 业务逻辑层 │ │ ├── AdminService.java │ │ ├── StudentService.java │ │ ├── CourseService.java │ │ └── ScoreService.java │ ├── util/ # 工具类 │ │ └── FileUtil.java │ └── main/ # 程序入口 │ └── Main.java ├── data/ # 数据文件目录 │ ├── admin.txt # 管理员数据 │ ├── student.txt # 学生数据 │ ├── course.txt # 课程数据 │ └── score.txt # 成绩数据 └── README.md # 项目说明文档
- 创建项目目录结构
- 设计并实现核心实体类:
- Admin类:管理员信息
- Student类:学生基本信息
- Course类:课程信息
- Score类:成绩信息
- 创建FileUtil工具类框架
- 初始化data文件夹
- 管理员登录功能实现
- 登录界面设计
- 账户验证逻辑
- 异常处理
- 默认管理员账户创建
- 学生信息管理功能
- 添加学生(学号唯一性校验)
- 删除学生
- 修改学生信息
- 查询(按学号、按班级)
- 课程信息管理功能
- 增删改查操作
- 课程号唯一性校验
- 学分范围校验
- 成绩信息管理功能
- 添加成绩(学生和课程关联校验)
- 查询成绩(按学号、按课程号)
- 修改/删除成绩
- 完善FileUtil工具类
- 文件读写方法实现
- 泛型支持
- 异常处理
- 自定义DataException异常类
- 完善所有异常处理逻辑
- 实现Main类
- 层级菜单设计
- 各功能模块调用
- 用户交互优化
- 数据保存确认机制
- 确保已安装JDK 11或更高版本
- 编译所有Java文件:
javac com/system/entity/*.java com/system/util/*.java com/system/service/*.java com/system/main/Main.java
- 修复FileUtil类中的数组转换问题
- 问题描述:在读取空文件或首次创建文件时,返回的数组可能存在类型转换异常
- 修复方法:优化readFromFile方法,为不同类型的实体类返回正确类型的空数组
- 修复效果:解决了程序运行时可能出现的ClassCastException异常
- 在运行程序时,请确保当前目录有读写权限,以便程序能够创建data文件夹和相关数据文件
- 程序中的数据操作(增删改)都会实时写入文件,退出时的保存提示是确认操作,无论选择Y或N,数据实际上已经保存
- 如果遇到中文显示乱码问题,请确保控制台编码设置为UTF-8
- 管理员登录:验证管理员账户和密码
- 默认账户创建:首次运行时自动创建默认管理员账户(admin/123456)
- 添加学生:录入学号、姓名、性别、年龄、班级信息,自动校验学号唯一性和年龄范围(15-30岁)
- 查询学生:支持按学号精确查询和按班级查询所有学生
- 修改学生:修改已有学生的基本信息,保持学号不变
- 删除学生:移除学生信息,并自动清理关联的成绩记录
- 添加课程:录入课程号、课程名称、学分信息,自动校验课程号唯一性和学分范围(0.5-5.0)
- 查询课程:支持查询所有课程信息
- 修改课程:修改已有课程的信息,保持课程号不变
- 删除课程:移除课程信息,并自动清理关联的成绩记录
- 添加成绩:录入学生学号、课程号和分数,自动校验学生和课程的存在性
- 查询成绩:支持按学号查询学生所有成绩、按课程号查询课程所有成绩
- 修改成绩:更新学生的课程成绩
- 删除成绩:移除指定的成绩记录
- 计算平均分:计算并显示指定学生或课程的平均分
- 文件存储:所有数据以文本文件形式存储在data目录下
- 实时保存:所有数据修改操作实时写入文件,确保数据不丢失
- 目录自动创建:首次运行时自动创建data文件夹和必要的数据文件
- 输入:用户名 = "admin",密码 = "123456"
- 期望结果:登录成功,显示主菜单
- 实际结果:登录成功
- 输入:用户名 = "user",密码 = "123456"
- 期望结果:提示"用户名不存在"
- 实际结果:提示"用户名不存在"
- 输入:用户名 = "admin",密码 = "123"
- 期望结果:提示"密码错误"
- 实际结果:提示"密码错误"
- 输入:学号 = "2023001",姓名 = "张三",性别 = "男",年龄 = 20,班级 = "计科1班"
- 期望结果:添加成功,提示"学生添加成功"
- 实际结果:添加成功
- 输入:学号 = "2023001",姓名 = "李四",性别 = "女",年龄 = 19,班级 = "计科2班"
- 期望结果:添加失败,提示"学号已存在"
- 实际结果:提示"学号已存在"
- 输入:学号 = "2023002",姓名 = "王五",性别 = "男",年龄 = 35,班级 = "计科1班"
- 期望结果:添加失败,提示"年龄必须在15-30岁之间"
- 实际结果:提示"年龄必须在15-30岁之间"
- 输入:学号 = "2023001"
- 期望结果:显示学号为2023001的学生详细信息
- 实际结果:正确显示学生信息
- 输入:班级 = "计科1班"
- 期望结果:显示所有计科1班的学生信息列表
- 实际结果:正确显示班级内学生列表
- 输入:学号 = "2023001",新年龄 = 21
- 期望结果:修改成功,提示"学生信息修改成功"
- 实际结果:修改成功
- 输入:学号 = "2023001"
- 期望结果:删除成功,提示"学生删除成功"
- 实际结果:删除成功
- 输入:课程号 = "C001",课程名 = "Java程序设计",学分 = 4
- 期望结果:添加成功,提示"课程添加成功"
- 实际结果:添加成功
- 输入:课程号 = "C001",课程名 = "数据结构",学分 = 3
- 期望结果:添加失败,提示"课程号已存在"
- 实际结果:提示"课程号已存在"
- 输入:课程号 = "C002",课程名 = "高等数学",学分 = 6
- 期望结果:添加失败,提示"学分必须在0.5-5.0之间"
- 实际结果:提示"学分必须在0.5-5.0之间"
- 操作:选择查询所有课程功能
- 期望结果:显示所有已添加的课程信息列表
- 实际结果:正确显示课程列表
- 输入:课程号 = "C001",新课程名 = "Java高级程序设计"
- 期望结果:修改成功,提示"课程信息修改成功"
- 实际结果:修改成功
- 输入:课程号 = "C001"
- 期望结果:删除成功,提示"课程删除成功"
- 实际结果:删除成功
- 输入:学号 = "2023001",课程号 = "C001",分数 = 85
- 期望结果:添加成功,提示"成绩添加成功"
- 实际结果:添加成功
- 输入:学号 = "999999",课程号 = "C001",分数 = 90
- 期望结果:添加失败,提示"该学号不存在,请先添加学生信息"
- 实际结果:提示"该学号不存在,请先添加学生信息"
- 输入:学号 = "2023001",课程号 = "Z999",分数 = 88
- 期望结果:添加失败,提示"该课程号不存在,请先添加课程信息"
- 实际结果:提示"该课程号不存在,请先添加课程信息"
- 输入:学号 = "2023001"
- 期望结果:显示该学生所有课程的成绩列表
- 实际结果:正确显示成绩列表
- 输入:课程号 = "C001"
- 期望结果:显示选修该课程的所有学生成绩列表
- 实际结果:正确显示成绩列表
- 输入:学号 = "2023001",课程号 = "C001",新分数 = 90
- 期望结果:修改成功,提示"成绩修改成功"
- 实际结果:修改成功
- 操作:删除学号为"2023001"的学生
- 期望结果:学生删除成功,同时其所有成绩记录也被删除
- 实际结果:学生和相关成绩均被删除
- 操作:删除课程号为"C001"的课程
- 期望结果:课程删除成功,同时所有选修该课程的成绩记录也被删除
- 实际结果:课程和相关成绩均被删除
- 操作:添加多条学生、课程和成绩记录,然后关闭程序重新打开
- 验证:检查数据是否完整保留
- 期望结果:所有数据正确恢复
- 实际结果:数据完整保留
- 操作:删除data文件夹后首次运行程序
- 期望结果:自动创建data文件夹和默认管理员账户
- 实际结果:成功创建必要文件和默认账户(admin/123456)