一、前期调查
此学生管理系统旨在实现学生信息的增加、删除、查询、修改功能,另外又单独添加查看某个班级的学生名单功能。从中可以分析出学生与班级为两个对象,增加、删除、查询、修改为四种方法,以此为基础构建系统模型。
二、系统功能逻辑图
三、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 }
功能:
- 提供与用户交互的通道
- 根据用户的输入给予提示
- 根据用户的输入调用相应的方法
六、程序运行展示
进入菜单并选择增加学生
录入信息完毕后查询
也可按班级查询
删除学生
修改学生信息