一、系统核心功能
学生管理系统核心围绕"增删改查"(CRUD)展开,适配学生信息管理场景:1. 添加学生(录入学号、姓名、年龄、成绩等基础信息,需校验学号唯一性);2. 删除学生(通过学号定位,确认后移除数据);3. 修改学生(根据学号查询后,更新姓名、成绩等可编辑字段);4. 查询学生(支持单条查询(按学号)、全部查询,可选按成绩/年龄排序);5. 数据持久化(可选文件存储(如txt、csv)或数据库存储,避免程序重启后数据丢失)。
二、核心技术与结构设计
- 面向对象设计
• 实体类(Student):封装学生属性(private修饰学号、姓名等字段),提供getter/setter方法、无参/有参构造器、toString()方法(方便打印信息)。
• 业务逻辑类(StudentManager):封装核心功能方法(addStudent、deleteStudent等),处理数据校验(如学号非空、成绩在0-100之间)。
• 数据访问类(可选,StudentDao):分离数据操作与业务逻辑,负责文件或数据库的读写操作(如readFromFile、writeToFile)。
• 测试/界面类(StudentTest):提供控制台菜单交互(通过Scanner接收用户输入,调用StudentManager的方法执行对应功能)。
- 数据存储方案
• 内存存储(简单版):使用ArrayList集合存储学生对象,优点是实现简单,缺点是数据不持久(程序关闭后丢失)。
• 文件存储(进阶版):使用BufferedReader/BufferedWriter读写txt文件,将学生信息按固定格式(如"学号,姓名,年龄,成绩")存储,需处理IO异常和数据解析。
• 数据库存储(实用版):使用JDBC连接MySQL,设计student表(字段对应Student类属性),通过SQL语句实现增删改查,需处理数据库连接、异常和事务(可选)。
- 关键技术点
• 集合操作:ArrayList的add、remove、get、forEach等方法(遍历查询、批量操作)。
• 异常处理:捕获IO异常(文件操作)、SQL异常(数据库操作)、输入不合法异常(如输入非数字的成绩),提供友好提示。
• 数据校验:在添加/修改学生时,校验学号唯一、年龄为正整数、成绩在合理范围,避免无效数据。
• 控制台交互:通过Scanner接收用户选择(菜单编号)和学生信息,使用循环实现菜单的重复显示(直到用户选择"退出")。
三、核心代码框架(简化版)
- 实体类Student
public class Student {
private String id; // 学号(唯一标识)
private String name; // 姓名
private int age; // 年龄
private double score; // 成绩
// 无参构造器、有参构造器
public Student() {}
public Student(String id, String name, int age, double score) {
this.id = id;
this.name = name;
this.age = age;
this.score = score;
}
// getter/setter方法(省略,需为每个字段提供)
@Override
public String toString() {
return "学号:" + id + ",姓名:" + name + ",年龄:" + age + ",成绩:" + score;
}
}
- 业务逻辑类StudentManager
import java.util.ArrayList;
import java.util.Scanner;
public class StudentManager {
private ArrayList studentList = new ArrayList<>();
private Scanner scanner = new Scanner(System.in);
// 添加学生
public void addStudent() {
System.out.print("请输入学号:");
String id = scanner.next();
// 校验学号唯一性
for (Student s : studentList) {
if (s.getId().equals(id)) {
System.out.println("学号已存在,添加失败!");
return;
}
}
System.out.print("请输入姓名:");
String name = scanner.next();
System.out.print("请输入年龄:");
int age = scanner.nextInt();
System.out.print("请输入成绩:");
double score = scanner.nextDouble();
// 添加到集合
studentList.add(new Student(id, name, age, score));
System.out.println("添加成功!");
}
// 删除学生(按学号)
public void deleteStudent() {
System.out.print("请输入要删除的学号:");
String id = scanner.next();
for (Student s : studentList) {
if (s.getId().equals(id)) {
studentList.remove(s);
System.out.println("删除成功!");
return;
}
}
System.out.println("未找到该学生,删除失败!");
}
// 查询全部学生
public void queryAllStudent() {
if (studentList.isEmpty()) {
System.out.println("暂无学生信息!");
return;
}
System.out.println("学生信息列表:");
for (Student s : studentList) {
System.out.println(s);
}
}
// 其他方法(修改、按学号查询等)省略...
}
- 测试类StudentTest
public class StudentTest {
public static void main(String[] args) {
StudentManager manager = new StudentManager();
Scanner scanner = new Scanner(System.in);
while (true) {
// 菜单展示
System.out.println("=====学生管理系统=====");
System.out.println("1. 添加学生 2. 删除学生 3. 修改学生");
System.out.println("4. 查询全部 5. 按学号查询 6. 退出");
System.out.print("请选择功能编号:");
int choice = scanner.nextInt();
// 功能切换
switch (choice) {
case 1: manager.addStudent(); break;
case 2: manager.deleteStudent(); break;
// 其他case省略...
case 6:
System.out.println("退出系统,再见!");
scanner.close();
System.exit(0);
default: System.out.println("输入错误,请重新选择!");
}
}
}
}
四、进阶优化方向
-
数据持久化:将ArrayList替换为文件存储(使用IO流)或JDBC连接数据库,确保数据永久保存。
-
异常处理增强:捕获输入类型不匹配(如输入字符串当年龄)、文件不存在、数据库连接失败等异常。
-
功能扩展:添加成绩排序(按升序/降序)、学生信息导出(如导出为Excel)、权限管理(管理员/普通用户)。
-
代码规范:使用接口(如StudentDao接口)解耦,添加注释,遵循命名规范(类名大写开头,方法名小写开头)。