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

相关推荐
奋发向前wcx8 分钟前
y1,y2总复习笔记10 2026.7.24
笔记·哈希算法·散列表
MuMuMu12231 小时前
智慧监测的“火眼金睛”:当AIoT重构环保监管体系
笔记
头发还在的女程序员2 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
CodeStats2 小时前
【Spring事务】Spring事务注解 @Transactional 完整体系:从 MySQL 隔离级别到 MyBatis 原理详解
java·spring·mybatis·事务·transactional
一只小菜鸡..2 小时前
南京大学 操作系统 (JYY) 学习笔记:进程地址空间与内存“外挂”魔法
笔记·学习
我命由我123453 小时前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
一只小菜鸡..3 小时前
南京大学 操作系统 (JYY) 学习笔记:访问操作系统的对象与“一切皆文件”
笔记·学习
都叫我大帅哥5 小时前
从Python到Java:为什么企业级Agent最终会选择Java?
java·ai编程
wanderist.5 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
腻害兔6 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程