Skip to content

Szpiss/java-

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

学生信息管理系统 - StudentInfoManagementSystem

本仓库是一个独立 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 # 项目说明文档

开发步骤

阶段1:项目初始化与实体类设计

  1. 创建项目目录结构
  2. 设计并实现核心实体类:
    • Admin类:管理员信息
    • Student类:学生基本信息
    • Course类:课程信息
    • Score类:成绩信息
  3. 创建FileUtil工具类框架
  4. 初始化data文件夹

阶段2:核心功能模块开发

  1. 管理员登录功能实现
    • 登录界面设计
    • 账户验证逻辑
    • 异常处理
    • 默认管理员账户创建
  2. 学生信息管理功能
    • 添加学生(学号唯一性校验)
    • 删除学生
    • 修改学生信息
    • 查询(按学号、按班级)
  3. 课程信息管理功能
    • 增删改查操作
    • 课程号唯一性校验
    • 学分范围校验
  4. 成绩信息管理功能
    • 添加成绩(学生和课程关联校验)
    • 查询成绩(按学号、按课程号)
    • 修改/删除成绩

阶段3:工具类与异常处理完善

  1. 完善FileUtil工具类
    • 文件读写方法实现
    • 泛型支持
    • 异常处理
  2. 自定义DataException异常类
  3. 完善所有异常处理逻辑

阶段4:程序入口与交互优化

  1. 实现Main类
    • 层级菜单设计
    • 各功能模块调用
    • 用户交互优化
  2. 数据保存确认机制

运行步骤

  1. 确保已安装JDK 11或更高版本
  2. 编译所有Java文件:
    javac com/system/entity/*.java com/system/util/*.java com/system/service/*.java com/system/main/Main.java
    

版本更新与问题修复

修复记录

  1. 修复FileUtil类中的数组转换问题
    • 问题描述:在读取空文件或首次创建文件时,返回的数组可能存在类型转换异常
    • 修复方法:优化readFromFile方法,为不同类型的实体类返回正确类型的空数组
    • 修复效果:解决了程序运行时可能出现的ClassCastException异常

注意事项

  1. 在运行程序时,请确保当前目录有读写权限,以便程序能够创建data文件夹和相关数据文件
  2. 程序中的数据操作(增删改)都会实时写入文件,退出时的保存提示是确认操作,无论选择Y或N,数据实际上已经保存
  3. 如果遇到中文显示乱码问题,请确保控制台编码设置为UTF-8

功能清单

1. 管理员功能

  • 管理员登录:验证管理员账户和密码
  • 默认账户创建:首次运行时自动创建默认管理员账户(admin/123456)

2. 学生信息管理

  • 添加学生:录入学号、姓名、性别、年龄、班级信息,自动校验学号唯一性和年龄范围(15-30岁)
  • 查询学生:支持按学号精确查询和按班级查询所有学生
  • 修改学生:修改已有学生的基本信息,保持学号不变
  • 删除学生:移除学生信息,并自动清理关联的成绩记录

3. 课程信息管理

  • 添加课程:录入课程号、课程名称、学分信息,自动校验课程号唯一性和学分范围(0.5-5.0)
  • 查询课程:支持查询所有课程信息
  • 修改课程:修改已有课程的信息,保持课程号不变
  • 删除课程:移除课程信息,并自动清理关联的成绩记录

4. 成绩信息管理

  • 添加成绩:录入学生学号、课程号和分数,自动校验学生和课程的存在性
  • 查询成绩:支持按学号查询学生所有成绩、按课程号查询课程所有成绩
  • 修改成绩:更新学生的课程成绩
  • 删除成绩:移除指定的成绩记录
  • 计算平均分:计算并显示指定学生或课程的平均分

5. 数据持久化

  • 文件存储:所有数据以文本文件形式存储在data目录下
  • 实时保存:所有数据修改操作实时写入文件,确保数据不丢失
  • 目录自动创建:首次运行时自动创建data文件夹和必要的数据文件

测试用例

1. 管理员登录测试

测试用例1.1:成功登录

  • 输入:用户名 = "admin",密码 = "123456"
  • 期望结果:登录成功,显示主菜单
  • 实际结果:登录成功

测试用例1.2:登录失败 - 用户名错误

  • 输入:用户名 = "user",密码 = "123456"
  • 期望结果:提示"用户名不存在"
  • 实际结果:提示"用户名不存在"

测试用例1.3:登录失败 - 密码错误

  • 输入:用户名 = "admin",密码 = "123"
  • 期望结果:提示"密码错误"
  • 实际结果:提示"密码错误"

2. 学生信息管理测试

测试用例2.1:添加学生

  • 输入:学号 = "2023001",姓名 = "张三",性别 = "男",年龄 = 20,班级 = "计科1班"
  • 期望结果:添加成功,提示"学生添加成功"
  • 实际结果:添加成功

测试用例2.2:添加学生 - 学号重复

  • 输入:学号 = "2023001",姓名 = "李四",性别 = "女",年龄 = 19,班级 = "计科2班"
  • 期望结果:添加失败,提示"学号已存在"
  • 实际结果:提示"学号已存在"

测试用例2.3:添加学生 - 年龄超出范围

  • 输入:学号 = "2023002",姓名 = "王五",性别 = "男",年龄 = 35,班级 = "计科1班"
  • 期望结果:添加失败,提示"年龄必须在15-30岁之间"
  • 实际结果:提示"年龄必须在15-30岁之间"

测试用例2.4:按学号查询学生

  • 输入:学号 = "2023001"
  • 期望结果:显示学号为2023001的学生详细信息
  • 实际结果:正确显示学生信息

测试用例2.5:按班级查询学生

  • 输入:班级 = "计科1班"
  • 期望结果:显示所有计科1班的学生信息列表
  • 实际结果:正确显示班级内学生列表

测试用例2.6:修改学生信息

  • 输入:学号 = "2023001",新年龄 = 21
  • 期望结果:修改成功,提示"学生信息修改成功"
  • 实际结果:修改成功

测试用例2.7:删除学生

  • 输入:学号 = "2023001"
  • 期望结果:删除成功,提示"学生删除成功"
  • 实际结果:删除成功

3. 课程信息管理测试

测试用例3.1:添加课程

  • 输入:课程号 = "C001",课程名 = "Java程序设计",学分 = 4
  • 期望结果:添加成功,提示"课程添加成功"
  • 实际结果:添加成功

测试用例3.2:添加课程 - 课程号重复

  • 输入:课程号 = "C001",课程名 = "数据结构",学分 = 3
  • 期望结果:添加失败,提示"课程号已存在"
  • 实际结果:提示"课程号已存在"

测试用例3.3:添加课程 - 学分超出范围

  • 输入:课程号 = "C002",课程名 = "高等数学",学分 = 6
  • 期望结果:添加失败,提示"学分必须在0.5-5.0之间"
  • 实际结果:提示"学分必须在0.5-5.0之间"

测试用例3.4:查询所有课程

  • 操作:选择查询所有课程功能
  • 期望结果:显示所有已添加的课程信息列表
  • 实际结果:正确显示课程列表

测试用例3.5:修改课程信息

  • 输入:课程号 = "C001",新课程名 = "Java高级程序设计"
  • 期望结果:修改成功,提示"课程信息修改成功"
  • 实际结果:修改成功

测试用例3.6:删除课程

  • 输入:课程号 = "C001"
  • 期望结果:删除成功,提示"课程删除成功"
  • 实际结果:删除成功

4. 成绩管理测试

测试用例4.1:添加成绩

  • 输入:学号 = "2023001",课程号 = "C001",分数 = 85
  • 期望结果:添加成功,提示"成绩添加成功"
  • 实际结果:添加成功

测试用例4.2:添加成绩 - 学生不存在

  • 输入:学号 = "999999",课程号 = "C001",分数 = 90
  • 期望结果:添加失败,提示"该学号不存在,请先添加学生信息"
  • 实际结果:提示"该学号不存在,请先添加学生信息"

测试用例4.3:添加成绩 - 课程不存在

  • 输入:学号 = "2023001",课程号 = "Z999",分数 = 88
  • 期望结果:添加失败,提示"该课程号不存在,请先添加课程信息"
  • 实际结果:提示"该课程号不存在,请先添加课程信息"

测试用例4.4:按学号查询成绩

  • 输入:学号 = "2023001"
  • 期望结果:显示该学生所有课程的成绩列表
  • 实际结果:正确显示成绩列表

测试用例4.5:按课程号查询成绩

  • 输入:课程号 = "C001"
  • 期望结果:显示选修该课程的所有学生成绩列表
  • 实际结果:正确显示成绩列表

测试用例4.6:修改成绩

  • 输入:学号 = "2023001",课程号 = "C001",新分数 = 90
  • 期望结果:修改成功,提示"成绩修改成功"
  • 实际结果:修改成功

5. 级联删除测试

测试用例5.1:删除学生级联删除成绩

  • 操作:删除学号为"2023001"的学生
  • 期望结果:学生删除成功,同时其所有成绩记录也被删除
  • 实际结果:学生和相关成绩均被删除

测试用例5.2:删除课程级联删除成绩

  • 操作:删除课程号为"C001"的课程
  • 期望结果:课程删除成功,同时所有选修该课程的成绩记录也被删除
  • 实际结果:课程和相关成绩均被删除

6. 数据持久化测试

测试用例6.1:数据保存测试

  • 操作:添加多条学生、课程和成绩记录,然后关闭程序重新打开
  • 验证:检查数据是否完整保留
  • 期望结果:所有数据正确恢复
  • 实际结果:数据完整保留

测试用例6.2:首次运行测试

  • 操作:删除data文件夹后首次运行程序
  • 期望结果:自动创建data文件夹和默认管理员账户
  • 实际结果:成功创建必要文件和默认账户(admin/123456)

About

Java SE 控制台学生信息管理系统:文件持久化、学生/课程/成绩管理

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages