Java 学生管理系统

一、系统核心功能

学生管理系统核心围绕"增删改查"(CRUD)展开,适配学生信息管理场景:1. 添加学生(录入学号、姓名、年龄、成绩等基础信息,需校验学号唯一性);2. 删除学生(通过学号定位,确认后移除数据);3. 修改学生(根据学号查询后,更新姓名、成绩等可编辑字段);4. 查询学生(支持单条查询(按学号)、全部查询,可选按成绩/年龄排序);5. 数据持久化(可选文件存储(如txt、csv)或数据库存储,避免程序重启后数据丢失)。

二、核心技术与结构设计

  1. 面向对象设计

• 实体类(Student):封装学生属性(private修饰学号、姓名等字段),提供getter/setter方法、无参/有参构造器、toString()方法(方便打印信息)。

• 业务逻辑类(StudentManager):封装核心功能方法(addStudent、deleteStudent等),处理数据校验(如学号非空、成绩在0-100之间)。

• 数据访问类(可选,StudentDao):分离数据操作与业务逻辑,负责文件或数据库的读写操作(如readFromFile、writeToFile)。

• 测试/界面类(StudentTest):提供控制台菜单交互(通过Scanner接收用户输入,调用StudentManager的方法执行对应功能)。

  1. 数据存储方案

• 内存存储(简单版):使用ArrayList集合存储学生对象,优点是实现简单,缺点是数据不持久(程序关闭后丢失)。

• 文件存储(进阶版):使用BufferedReader/BufferedWriter读写txt文件,将学生信息按固定格式(如"学号,姓名,年龄,成绩")存储,需处理IO异常和数据解析。

• 数据库存储(实用版):使用JDBC连接MySQL,设计student表(字段对应Student类属性),通过SQL语句实现增删改查,需处理数据库连接、异常和事务(可选)。

  1. 关键技术点

• 集合操作:ArrayList的add、remove、get、forEach等方法(遍历查询、批量操作)。

• 异常处理:捕获IO异常(文件操作)、SQL异常(数据库操作)、输入不合法异常(如输入非数字的成绩),提供友好提示。

• 数据校验:在添加/修改学生时,校验学号唯一、年龄为正整数、成绩在合理范围,避免无效数据。

• 控制台交互:通过Scanner接收用户选择(菜单编号)和学生信息,使用循环实现菜单的重复显示(直到用户选择"退出")。

三、核心代码框架(简化版)

  1. 实体类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;

}

}

  1. 业务逻辑类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);

}

}

// 其他方法(修改、按学号查询等)省略...

}

  1. 测试类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("输入错误,请重新选择!");

}

}

}

}

四、进阶优化方向

  1. 数据持久化:将ArrayList替换为文件存储(使用IO流)或JDBC连接数据库,确保数据永久保存。

  2. 异常处理增强:捕获输入类型不匹配(如输入字符串当年龄)、文件不存在、数据库连接失败等异常。

  3. 功能扩展:添加成绩排序(按升序/降序)、学生信息导出(如导出为Excel)、权限管理(管理员/普通用户)。

  4. 代码规范:使用接口(如StudentDao接口)解耦,添加注释,遵循命名规范(类名大写开头,方法名小写开头)。

相关推荐
代码or搬砖31 分钟前
Java集合-Set讲解
java·开发语言
渣娃-小晴晴32 分钟前
java集合在并发环境下应用时的注意事项
java·后端
北极糊的狐33 分钟前
若依系统报错net::ERR_CONNECTION_TIMED_OUT的原因
java·windows·sql·mybatis
d111111111d34 分钟前
在STM32函数指针是什么,怎么使用还有典型应用场景。
笔记·stm32·单片机·嵌入式硬件·学习·算法
静小谢1 小时前
前后台一起部署,vite配置笔记base\build
前端·javascript·笔记
FLGB1 小时前
maven漏洞检测报告
java·maven
ask_baidu1 小时前
Doris笔记
android·笔记
农夫山泉2号2 小时前
【c++】——c++编译的so中函数有额外的字符
java·服务器·c++
wangan0942 小时前
不带圆圈的二叉树
java·前端·javascript
小马哥编程2 小时前
【软考架构】滑动窗口限流算法的原理是什么?
java·开发语言·架构