学生管理系统
文章目录
1. 系统设计
1.1 系统架构
本系统采用分层架构设计,主要分为以下三层:
- 数据层:由
Student
类表示,用于存储学生的基本信息(如学号、姓名、年龄、家庭住址等)。 - 服务层:由
StudentService
接口及其实现类组成,负责实现系统的核心功能(如添加、删除、修改和查询学生信息)。 - 表现层:由
Menu
类实现,负责与用户交互并调用服务层的功能。
1.2 模块划分
系统功能被划分为以下四个模块:
- 添加学生模块:负责将学生信息添加到系统中。
- 删除学生模块:根据学号删除指定的学生信息。
-
修改学生模块:根据学号修改指定学生的信息。
-
查询学生模块:显示系统中所有学生的信息。
2. 系统实现
2.1 数据模型
系统的数据模型由Student
类表示,其属性包括:
id
:学生的唯一标识(学号)。name
:学生的姓名。age
:学生的年龄。address
:学生的家庭住址。
Student
类通过封装技术,提供了对属性的访问和修改方法,确保数据的安全性和完整性。
2.2 接口设计
系统通过StudentService
接口定义了核心功能,包括:
addStudent
:添加学生信息。deleteStudent
:删除学生信息。updateStudent
:修改学生信息。queryStudent
:查询学生信息。contains
:判断学号是否已存在。getIndex
:根据学号获取学生在列表中的索引。
2.3 功能实现
每个功能模块通过独立的类实现StudentService
接口,具体如下:
- 添加学生模块(
StudentAddService
):- 通过循环确保学号的唯一性。
- 将学生信息封装为
Student
对象并添加到列表中。
- 删除学生模块(
StudentDeleteService
):- 根据学号查找学生信息并删除。
- 修改学生模块(
StudentUpdateService
):- 根据学号查找学生信息并修改其属性。
- 查询学生模块(
StudentQueryService
):- 遍历学生列表并显示所有学生信息。
2.4 主程序逻辑
StudentSystem
类作为系统的入口,负责与用户交互并调用相应的功能模块。通过Scanner
类获取用户输入,并根据用户选择调用StudentService
接口的实现类,完成相应的功能。
3. 编码实现
3.1 Menu
import java.util.ArrayList;
import java.util.Scanner;
public class Menu {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
// 使用接口类型声明服务对象
StudentService addService = new StudentAddService();
StudentService deleteService = new StudentDeleteService();
StudentService updateService = new StudentUpdateService();
StudentService queryService = new StudentQueryService();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("-----------------欢迎来学生管理系统-------------------");
System.out.println("1:添加学生");
System.out.println("2:删除学生");
System.out.println("3:修改学生");
System.out.println("4:查询学生");
System.out.println("5:退出");
System.out.println("请输入您的选择:");
String choose = sc.next();
switch (choose) {
case "1" -> addService.addStudent(list); // 调用添加学生功能
case "2" -> deleteService.deleteStudent(list); // 调用删除学生功能
case "3" -> updateService.updateStudent(list); // 调用修改学生功能
case "4" -> queryService.queryStudent(list); // 调用查询学生功能
case "5" -> {
System.out.println("退出");
System.exit(0);
}
default -> System.out.println("没有这个选项");
}
}
}
}
3.2 Student
public class Student {
private String id;
private String name;
private int age;
private String address;
// Getters and Setters
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
3.3 StudentService-API
import java.util.ArrayList;
public interface StudentService {
void addStudent(ArrayList<Student> list);
void deleteStudent(ArrayList<Student> list);
void updateStudent(ArrayList<Student> list);
void queryStudent(ArrayList<Student> list);
boolean contains(ArrayList<Student> list, String id);
int getIndex(ArrayList<Student> list, String id);
}
3.4 StudentAddService
import java.util.ArrayList;
import java.util.Scanner;
public class StudentAddService implements StudentService {
@Override
public void addStudent(ArrayList<Student> list) {
Student s = new Student();
Scanner sc = new Scanner(System.in);
String id;
while (true) {
System.out.println("请输入学生的id");
id = sc.next();
if (contains(list, id)) {
System.out.println("id已经存在,请重新录入");
} else {
s.setId(id);
break;
}
}
System.out.println("请输入学生的姓名");
s.setName(sc.next());
System.out.println("请输入学生的年龄");
s.setAge(sc.nextInt());
System.out.println("请输入学生的家庭住址");
s.setAddress(sc.next());
list.add(s);
System.out.println("学生信息添加成功");
}
@Override
public boolean contains(ArrayList<Student> list, String id) {
return getIndex(list, id) >= 0;
}
@Override
public int getIndex(ArrayList<Student> list, String id) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)) {
return i;
}
}
return -1;
}
// 以下方法未使用,但需要实现接口
@Override
public void deleteStudent(ArrayList<Student> list) {}
@Override
public void updateStudent(ArrayList<Student> list) {}
@Override
public void queryStudent(ArrayList<Student> list) {}
}
3.5 StudentDeleteService
import java.util.ArrayList;
import java.util.Scanner;
public class StudentDeleteService implements StudentService {
@Override
public void deleteStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的id");
String id = sc.next();
int index = getIndex(list, id);
if (index >= 0) {
list.remove(index);
System.out.println("id为:" + id + "的学生删除成功");
} else {
System.out.println("id不存在,删除失败");
}
}
@Override
public int getIndex(ArrayList<Student> list, String id) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)) {
return i;
}
}
return -1;
}
// 以下方法未使用,但需要实现接口
@Override
public void addStudent(ArrayList<Student> list) {}
@Override
public void updateStudent(ArrayList<Student> list) {}
@Override
public void queryStudent(ArrayList<Student> list) {}
@Override
public boolean contains(ArrayList<Student> list, String id) {
return false;
}
}
3.6 StudentQueryService
import java.util.ArrayList;
public class StudentQueryService implements StudentService {
@Override
public void queryStudent(ArrayList<Student> list) {
if (list.isEmpty()) {
System.out.println("当前无学生信息,请添加后再查询");
return;
}
System.out.println("id\t\t姓名\t年龄\t家庭住址");
for (Student stu : list) {
System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress());
}
}
// 以下方法未使用,但需要实现接口
@Override
public void addStudent(ArrayList<Student> list) {}
@Override
public void deleteStudent(ArrayList<Student> list) {}
@Override
public void updateStudent(ArrayList<Student> list) {}
@Override
public boolean contains(ArrayList<Student> list, String id) {
return false;
}
@Override
public int getIndex(ArrayList<Student> list, String id) {
return 0;
}
}
3.7 StudentUpdateService
import java.util.ArrayList;
import java.util.Scanner;
public class StudentUpdateService implements StudentService {
@Override
public void updateStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改学生的id");
String id = sc.next();
int index = getIndex(list, id);
if (index == -1) {
System.out.println("要修改的id" + id + "不存在,请重新输入");
return;
}
Student stu = list.get(index);
System.out.println("请输入要修改的学生姓名");
stu.setName(sc.next());
System.out.println("请输入要修改的学生年龄");
stu.setAge(sc.nextInt());
System.out.println("请输入要修改的学生家庭住址");
stu.setAddress(sc.next());
System.out.println("学生信息修改成功");
}
@Override
public int getIndex(ArrayList<Student> list, String id) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)) {
return i;
}
}
return -1;
}
// 以下方法未使用,但需要实现接口
@Override
public void addStudent(ArrayList<Student> list) {}
@Override
public void deleteStudent(ArrayList<Student> list) {}
@Override
public void queryStudent(ArrayList<Student> list) {}
@Override
public boolean contains(ArrayList<Student> list, String id) {
return false;
}
}