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接口)解耦,添加注释,遵循命名规范(类名大写开头,方法名小写开头)。

相关推荐
皮皮林5517 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河7 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程10 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅11 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者12 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺12 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart14 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP15 小时前
MyBatis-mybatis入门与增删改查
java
孟陬18 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端