Java面向对象课程设计——学生管理系统

时间:2024-03-02 13:43:02

一、前期调查

此学生管理系统旨在实现学生信息的增加、删除、查询、修改功能,另外又单独添加查看某个班级的学生名单功能。从中可以分析出学生与班级为两个对象,增加、删除、查询、修改为四种方法,以此为基础构建系统模型。

二、系统功能逻辑图

 

 三、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 }

 

功能:

  • 提供与用户交互的通道
  • 根据用户的输入给予提示
  • 根据用户的输入调用相应的方法

六、程序运行展示

进入菜单并选择增加学生

 

录入信息完毕后查询

 

 

也可按班级查询

 

 

 删除学生

 

 

修改学生信息