一、前期调查
此学生管理系统旨在实现学生信息的增加、删除、查询、修改功能,另外又单独添加查看某个班级的学生名单功能。从中可以分析出学生与班级为两个对象,增加、删除、查询、修改为四种方法,以此为基础构建系统模型。
二、系统功能逻辑图
三、UML类图
四、包结构
五、核心代码
StuData
1 package model;
2
3 public class StuData {
4 Student stuArray[] = new Student[10];
5 int dataindex = 0;
6
7 public void insertStu(Student stu) { //新增学生
8 if (dataindex == stuArray.length) {
9 Student newArray[] = new Student[stuArray.length + (stuArray.length >> 1)]; // 如果学生人数超十人则扩大数组
10 for (int i = 0; i < dataindex; i++) {
11 newArray[i] = stuArray[i]; //把原数组值赋给新数组
12 }
13 stuArray = newArray; //把新数组赋给旧数组,方便后续代码赋值
14 }
15 stuArray[dataindex] = stu;
16 dataindex++;
17 }
18
19 public Student checkStuNo(String stuNo) {
20 for (int i = 0; i < dataindex; i++) {
21 if (stuArray[i].getStuNo().equals(stuNo)) //检查是否存在改学号
22 {
23 return stuArray[i];
24 }
25 }
26 return null;
27 }
28
29 public void delateStu(String stuNo) { //按学号删除对应学生
30 boolean flag = false;
31 for (int i = 0; i < dataindex; i++) {
32 if (stuArray[i].getStuNo().equals(stuNo)) {
33 for(int k=i;k<dataindex;k++) {
34 stuArray[i] = stuArray[i + 1];
35 }
36 flag = true;
37 dataindex--;
38 }
39 }
40
41
42 }
43
44 public void updateStu(Student stu) {
45 for (int i = 0; i < dataindex; i++) {
46 if (stuArray[i].getStuNo().equals(stu.getStuNo())) {
47 stuArray[i] = stu;
48 }
49 }
50 }
51
52 public static void printStu(Student stu) {
53 System.out.println("-------------------------------------------------------------");
54 System.out.print("学生学号 " + stu.getStuNo() + " ");
55 System.out.print("学生姓名 " + stu.getStuName() + " ");
56 System.out.print("学生性别 " + stu.getGender() + " ");
57 System.out.print("学生年龄 " + stu.getAge() + " ");
58 System.out.println("学生班级 " + stu.getStuClass() + " ");
59
60 }
61
62 public void printAllstuInf() {
63 for (int i = 0; i < dataindex; i++) {
64 printStu(stuArray[i]);
65 }
66
67 }
68 }
功能:
- 提供新增学生的方法
- 检查学号是否存在
- 提供删除学生的方法
- 提供更新学生信息的方法
- 提供展示所有学生信息的方法
Student
(以下代码省略Getters and Setters)
1 public Student() {
2 }
3
4 private String stuName;
5 private String stuNo;
6 private String gender;
7 private String stuClass;
8 private byte age;
9 public Student(String stuNo, String stuName, String gender, byte age, String stuClass) {
10 super();
11 this.stuName = stuName;
12 this.stuNo = stuNo;
13 this.gender = gender;
14 this.stuClass = stuClass;
15 this.age = age;
16 }
17
18 }
功能:
- 接收学生信息
- 存储学生信息
Classes
1 package model;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Scanner;
6
7 public class Classes extends Student{
8 public static List<Student> class1=new ArrayList<>();
9 public static List<Student> class2=new ArrayList<>();
10 public static List<Student> class3=new ArrayList<>();
11 static Scanner scan=new Scanner(System.in);
12 public static void classmenu() {
13 System.out.println("请输入你想查看的班级");
14 int n=scan.nextInt();
15 if (n == 1) {
16 for (int i = 0; i < class1.size(); i++)
17 StuData.printStu(class1.get(i));
18 }
19 else if (n == 2) {
20 for (int i = 0; i < class2.size(); i++)
21 StuData.printStu(class2.get(i));
22 }
23 else if (n == 3) {
24 for (int i = 0; i < class3.size(); i++)
25 StuData.printStu(class3.get(i));
26 }
27 else {
28 System.out.println("输入错误,请重新输入");
29 classmenu();
30 }
31 }
32 }
功能:
- 根据输入的学生信息将学生录入对应班级
- 可根据班级查询学生信息
StuSys
1 package system;
2
3 import java.util.Scanner;
4
5 import model.Classes;
6 import model.StuData;
7 import model.Student;
8
9 public class StuSys {
10 StuData stud = new StuData();
11 Classes clas=new Classes();
12 public void insertStu(Scanner sc) {
13 System.out.println("请输入学生的学号 姓名 性别 年龄 班级(数据之间请保持间隔):");
14 String stuNo = sc.next();
15 String stuName = sc.next();
16 String gender = sc.next();
17 byte age = sc.nextByte();
18 String stuClass = sc.next();
19 int i = 0;
20
21 if (stud.checkStuNo(stuNo) == null) { //确认是否重复
22 Student stu = new Student(stuNo, stuName, gender, age, stuClass);
23 stud.insertStu(stu);
24 switch (stuClass) {
25 case "1":
26 Classes.class1.add(stu);
27 break;
28 case "2":
29 Classes.class2.add(stu);
30 break;
31 case "3":
32 Classes.class3.add(stu);
33 default:
34 break;
35 }
36 System.out.println("学生信息添加成功!!!");
37 } else {
38 System.out.println("您输入的学生学号已存在,请选择下一步操作");
39 System.out.println("1、继续添加 2、退出系统");
40 i = sc.nextInt();
41 if (i == 1) {
42 insertStu(sc); /// 递归
43 } else if (i == 2) {
44 System.exit(0);
45 }
46
47 else {
48 System.out.println("输入错误,请重新输入");
49 }
50 }
51 }
52
53 public void delateStu(Scanner sc) {
54 showAllStuInfo();
55 int i = 0;
56 System.out.println("请输入要删除学生的学号:");
57 String stuNo = sc.next();
58 if (stud.checkStuNo(stuNo) != null) {
59 stud.delateStu(stuNo);
60 System.out.println("学成信息删除成功!!!");
61 } else {
62 System.out.println("您输入的学号不存在,请选择下一步操作");
63 System.out.println("1、继续删除 2、退出系统");
64 if (i == 1) {
65 delateStu(sc);
66 } else if (i == 2) {
67 System.exit(0);
68 } else {
69 System.out.println("输入错误,请重新输入");
70 }
71 }
72 }
73
74 public void updateStu(Scanner sc) {
75 int i = 0;
76 showAllStuInfo();
77 System.out.println("请输入要修改的学生的学号:");
78 String stuNo = sc.next();
79 Student stu = new Student();
80 /// 非要等与null吗??调试后的总结:1不能直接= new student 因为构造方法里没有student() (无参数的构造方法)
81 /// 解决方法:加一个无参的构造方法
82 if (stud.checkStuNo(stuNo) != null) {
83
84 System.out.println("请输入学生的姓名 性别 年龄 班级 (数据之间请保持间隔)");
85 stu.setStuNo(stuNo);
86 stu.setStuName(sc.next());
87 stu.setGender(sc.next());
88 stu.setAge(sc.nextByte());
89 stu.setStuClass(sc.next());
90 stud.updateStu(stu);
91 System.out.println("学生信息修改成功!!!");
92 } else {
93 System.out.println("您输入的学号不存在,请选择下一步操作");
94 System.out.println("1、继续修改 2、退出系统");
95 i = sc.nextInt();
96 if (i == 1) {
97 insertStu(sc);
98 } else if (i == 2) {
99 System.exit(0);
100 }
101
102 else {
103
104 System.out.println("输入错误,请重新输入");
105 }
106
107 }
108 }
109
110 public void showStuInfo(Scanner sc) { //显示学生信息
111 int i = 0;
112 Student stu = new Student();
113 System.out.println("请输入查看学生的学号");
114 String stuNo = sc.next();
115 if ((stu = stud.checkStuNo(stuNo)) != null) {
116 stud.printStu(stu);
117 } else {
118 System.out.println("学号不存在,请选择下一步操作");
119 System.out.println("1、继续查看 2、退出系统");
120 i = sc.nextInt();
121 if (i == 1) {
122 showStuInfo(sc);
123 }
124
125 else if (i == 2) {
126 System.exit(0);
127 }
128
129 else {
130 System.out.println("输入错误,请重新输入");
131 }
132 }
133 }
134
135 public void showAllStuInfo() {
136 stud.printAllstuInf();
137
138 }
139 }
功能:
- 提供与用户交互的通道
- 根据用户的输入给予提示
- 根据用户的输入调用相应的方法
六、程序运行展示
进入菜单并选择增加学生
录入信息完毕后查询
也可按班级查询
删除学生
修改学生信息