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

相关推荐
e***0961 小时前
SpringBoot下获取resources目录下文件的常用方法
java·spring boot·后端
q***14641 小时前
JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)
java·tomcat
從南走到北1 小时前
JAVA同城信息付费系统家政服务房屋租赁房屋买卖房屋装修信息发布平台小程序APP公众号源码
java·开发语言·小程序
TechMasterPlus2 小时前
java:单例模式
java·开发语言·单例模式
JIngJaneIL2 小时前
远程在线诊疗|在线诊疗|基于java和小程序的在线诊疗系统小程序设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·在线诊疗小程序
will_we2 小时前
Spring Boot4正式篇:第二篇 多版本API特性
java·后端
风筝在晴天搁浅2 小时前
代码随想录 70.爬楼梯
java
好好研究2 小时前
SpringMVC框架 - 文件上传
java·spring·mvc·idea
栗子~~2 小时前
java-根据word模板灵活生成word文档-demo
java·开发语言·word