Day18 Java学生管理系统
一、需求分析
考虑的方面:
用户需求、功能需求、非功能性需求、约束条件、优先级和权衡、可追踪性、需求验证。
二、项目搭建
搭建学生管理系统
1、创建项目的main ;pojo ; sms ; utils包。
2、编写系统的 增(涉及到扩容–oldcopycity>>1—旧数组长度带符号右移)、
删(根据班级号+学号去删除)、改(修改学生对象里的所有数据)、
查( 根据姓名查询 – 学生数组 根据性别查询 – 学生数组 根据年龄段查询 – 学生数组 根据班级号查询 – 学生数组 根据班级号+学号查询 – 学生对象在容器中的下标 )功能
注意:删除功能的 判断学生合法性 步骤很重要,不能省略。
三、添加功能步骤:
-
创建学生类(Student Class):
- 定义包含学生信息的属性,如姓名、学号等。
- 编写构造函数和访问方法(getter和setter)。
-
创建学生管理系统类(StudentManagementSystem Class):
- 使用一个集合(如ArrayList)来存储学生对象。
- 编写方法用于添加学生到系统中。
-
实现添加学生功能:
- 在用户界面中接收学生的信息(如姓名、学号等)。
- 创建一个新的学生对象。
- 调用学生管理系统类的方法将新学生对象添加到系统中。
- 提供适当的反馈,确认学生已成功添加。
注意:添加学生时,需要对数据源进行扩容
以下为添加功能(含数据源扩容)的代码:
public int add(Student stu) { //1.判断学生信息合法性 if(!StuInfoUtil.isStu(stu)){ return -1; } //2.判断是否有重复学生 if(query(stu) != -1){ return -2; } //3.判断是否扩容 if(stus.length == size){ expansion(); } //4.添加学生 stus[size++] = stu; return 1; } //数据源的扩容 @Override public void expansion() { int oldCapacity = stus.length; int newCapacity = oldCapacity + (oldCapacity>>1); stus = Arrays.copyOf(stus, newCapacity); }
四、删除功能步骤:
-
扩展学生管理系统类:
- 编写方法用于根据学生ID删除学生。
-
实现删除学生功能:
- 在用户界面中接收要删除的学生ID。
- 调用学生管理系统类的方法,根据提供的学生ID删除学生。
- 如果找到并成功删除学生,提供相应的反馈。
- 如果未找到学生或删除失败,也提供相应的反馈。
-
更新学生列表:
- 在删除学生后,及时更新学生列表的显示,以反映最新的学生信息
以下为删除功能的代码
public int delete(String classId, String id) { //1.判断学生信息合法性 if(!StuInfoUtil.isClassId(classId) || !StuInfoUtil.isId(id)){ return -1; } //2.判断是否有该学生 int index = query(classId, id); if(index == -1){ return -2; } //3.删除学生 for (int i = index; i < size-1; i++) { stus[i] = stus[i+1]; } size--; return 1; }
五、修改功能步骤:
-
扩展学生管理系统类:
- 编写方法用于根据学生ID修改学生信息。
-
实现修改学生功能:
- 在用户界面中接收要修改的学生ID。
- 根据提供的学生ID查找学生对象。
- 提示用户输入要修改的学生信息(如姓名、学号等)。
- 更新学生对象的信息。
- 提供适当的反馈,确认学生信息已成功修改。
以下为修改功能的代码:
public int update(String classId, String id, int type, Object val) { //1.判断学生信息的合法性 if(!StuInfoUtil.isClassId(classId) || !StuInfoUtil.isId(id)){ return -1; } //2.判断是否有该学生 int index = query(classId, id); if(index == -1){ return -2; } //3.判断修改类型 switch (type) { case NAME: String nameVal = (String) val; //判断修改数据的合法性 if(!StuInfoUtil.isName(nameVal)){ return -3; } //修改数据 stus[index].setName(nameVal); break; case SEX: char sexVal = (Character) val; //判断修改数据的合法性 if(!StuInfoUtil.isSex(sexVal)){ return -3; } //修改数据 stus[index].setSex(sexVal); break; case AGE: int ageVal = (Integer) val; //判断修改数据的合法性 if(!StuInfoUtil.isAge(ageVal)){ return -3; } //修改数据 stus[index].setAge(ageVal); break; case CLASS_ID: String classIdVal = (String) val; //判断目标班级上是否有重复学生 if(query(classIdVal, id) != -1){ return -4; } //判断修改数据的合法性 if(!StuInfoUtil.isClassId(classIdVal)){ return -3; } //修改数据 stus[index].setClassId(classIdVal); break; case ID: String idVal = (String) val; //判断目标学号上是否有重复学生 if(query(classId, idVal) != -1){ return -5; } //判断修改数据的合法性 if(!StuInfoUtil.isId(idVal)){ return -3; } //修改数据 stus[index].setId(idVal); break; } return 1; }
六、查询功能步骤:
-
扩展学生管理系统类:
- 编写方法用于根据学生ID或其他条件查询学生信息。
-
实现查询学生功能:
- 在用户界面中接收查询条件(如学生ID)。
- 调用学生管理系统类的方法,根据提供的条件查询学生信息。
- 如果找到符合条件的学生,显示学生信息。
- 如果未找到符合条件的学生,提供相应的反馈。
-
提供高级查询功能(可选):
- 实现根据不同条件进行查询,如姓名、年龄、成绩等。
- 支持模糊查询或范围查询等高级查询功能。
以下为查询功能的代码:
@Override public Student[] getStusByName(String name) { //1.验证学生信息合法性 if(!StuInfoUtil.isName(name)){ return null; } //2.获取符合条件的学生人数 int count = 0; for (int i = 0; i < size; i++) { if(stus[i].getName().equals(name)){ count++; } } if(count == 0){ return null; } //3.创建新数组 Student[] newStus = new Student[count]; //4.遍历数据源,把符合条件的学生对象存入新数组中 int index = 0; for (int i = 0; i < size; i++) { if(stus[i].getName().equals(name)){ newStus[index++] = stus[i]; } } return newStus; } @Override public Student[] getStusBySex(char sex) { //1.验证学生信息合法性 if(!StuInfoUtil.isSex(sex)){ return null; } //2.获取符合条件的学生人数 int count = 0; for (int i = 0; i < size; i++) { if(stus[i].getSex() == sex){ count++; } } if(count == 0){ return null; } //3.创建新数组 Student[] newStus = new Student[count]; //4.遍历数据源,把符合条件的学生对象存入新数组中 int index = 0; for (int i = 0; i < size; i++) { if(stus[i].getSex() == sex){ newStus[index++] = stus[i]; } } return newStus; } @Override public Student[] getStusByAge(int start, int end) { //1.验证学生信息合法性 if(!StuInfoUtil.isAge(start) || !StuInfoUtil.isAge(end)){ return null; } //2.获取符合条件的学生人数 int count = 0; for (int i = 0; i < size; i++) { int age = stus[i].getAge(); if(age>=start && age<end){ count++; } } if(count == 0){ return null; } //3.创建新数组 Student[] newStus = new Student[count]; //4.遍历数据源,把符合条件的学生对象存入新数组中 int index = 0; for (int i = 0; i < size; i++) { int age = stus[i].getAge(); if(age>=start && age<end){ newStus[index++] = stus[i]; } } return newStus; } @Override public Student[] getStusByClassId(String classId) { //1.验证学生信息合法性 if(!StuInfoUtil.isClassId(classId)){ return null; } //2.获取符合条件的学生人数 int count = 0; for (int i = 0; i < size; i++) { if(stus[i].getClassId().equals(classId)){ count++; } } if(count == 0){ return null; } //3.创建新数组 Student[] newStus = new Student[count]; //4.遍历数据源,把符合条件的学生对象存入新数组中 int index = 0; for (int i = 0; i < size; i++) { if(stus[i].getClassId().equals(classId)){ newStus[index++] = stus[i]; } } return newStus; }