2.2.2.2 添加功能的优化
- 需求,判断添加的学号是否已经存在于组中,若已经存在,则提示重新添加,若不存在,则正常添加
- 操作步骤
- 客服接收到学生学号信息,交给业务员进行判断
- 业务员则需要库管提供的数据进行判断
- 判断的结果返回给客服,客服则根据这个结果反馈id的正确性
- 代码实现
- 1.客服接收到学生学号信息
在客服接收学号的时候创建一个死循环
while (true) {
System.out.println("请输入姓名学号");
String sid = sc.next();
//把学号传给业务员,调用业务员的方法
boolean flag = studentService.isExist(sid);
//根据业务员返回的值来进行判断
if (flag) {//存在
System.out.println("请重新输入");
} else {//不存在
System.out.println("输入成功");
break;
}
}
需要注意
1:由于studentService(业务员)的创建对象在下面,要上提此代码
· StudentService studentService = new StudentService();
2:由于添加了死循环,限制了sid学号的范围,下面封装学生数据的sid报错
student.setSid(sid);
解决方案:提高sid的级别,先定义,在赋值
String sid ;
while (true) {
System.out.println("请输入姓名学号");
sid = sc.next();
//把学号传给业务员,调用业务员的方法
boolean flag = studentService.isExist(sid);
//根据业务员返回的值来进行判断
if (flag) {//存在
System.out.println("请重新输入");
} else {//不存在
System.out.println("输入成功");
break;
}
}
- 2.编写业务员的业务逻辑
- 1接收库管返回的数组,同理也要用到库管,所以要提升库管等级
- 2根据数组判断sid是否存在,需要遍历数组,因为不需要赋值,所以无需像day01那样定义index
- 3.返回结果.
String sid;
while (true) {
System.out.println("请输入姓名学号");
sid = sc.next();
//把学号传给业务员,调用业务员的方法
boolean flag = studentService.isExist(sid);
//根据业务员返回的值来进行判断
if (flag) {//存在
System.out.println("请重新输入");
} else {//不存在
break;
}
}
- 3补充库管的返回代码
public Student[] retunAllStundet() {
//返回即可
return stus;
}
- 4测试发现无作业----寻找原因
- 我们每次调用StudentDao这个类时都会新建一个数组,都会新在内存中开辟一块新的空间
- 而我们则需要把数据都存储在一个数组中
- 解决方法:使用static关键字
- 把数组变为静态类
- 特点
- 随着类的加载而加载
- 被类的所有对象共享
- 可以通过类名调用,也可以通过对象名调用
public static Student[] stus = new Student[5];
//数组的创建更换为这个就行
2.2.2.3查看学生
- 需求:客服接收到指令,返回学生信息,若没有信息,则返回无成员
- 思路:客服接收,业余员调用库管给的数据,返回给客服
- 代码实现:
- 1客服接收
添加方法:findAllStudent();
创造方法 - 任务–需要向业余员要去返回数组:空数组null 或者真实数组
- 任务二-根据业余员的返回值,来进行人机交流
- 1客服接收
public void findAllStudent() {
//返回数组-----
//数组有两种情况 1 有数据正常返回 2 没有数据 返回值为null
Student[] stus = studentService.findAllStundent();
if (stus == null) {//判断数组里有没有数据
System.out.println("无信息,请先添加");
return;//结束方法
}
System.out.println("学号\t姓名\t年龄\t生日");
for (int i = 0; i < stus.length; i++) {
Student stu = stus[i];
if (stu != null) {
stu = stus[i];
System.out.println(stu.getSid() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getBirthday());
}
}
}
- 2业务员逻辑判断
- 任务:1调取数据库的数组,2判断数组是不是空数组,并且返回给业务员
//查询学生
public Student[] findAllStundent() {
//向库管要数据
Student[] stu = studentDao.retunAllStundet();
//假设没有数据
boolean flag = false;
//遍历stu
for (int i = 0; i < stu.length; i++) {
//接收学生对象
Student student = stu[i];
if (student != null) {//找到了一个不为零的值,说明数组里面有数据源
flag = true;
break;//一个足以,跳出循环
}
}
//根据flag的值来进行返回数组的确定
if (flag) {//存在
return stu;//返回数组
} else {
return null;//没有 ,返回null
}
}
- 3库管的方法上文已经写过
//返回数组
public Student[] retunAllStundet() {
//返回即可
return stus;
}
}
2.2.2.4删除代码的实现
- 需求:用户输入要删除的id,进行删除,若没有要删除的则提示没有要删除的id,并重新输入,若数组没有数据,则提示先添加数据
- 思路
- 客服先要知晓数组里面有没有数据,但无需自己去做,让业务员返回给我
- 把要删除的id给业余员,业务员把此id给库管,由库管来删除(此处需要定义一个方法,早出输入id所在的索引,随后服织物null,则可以进行删除)
- 删除成功与否有业务员返回给用户
- 代码实现
- 1客服删除方法的添加
delayStundet();
- 2.删除方法的实现
- 1客服删除方法的添加
// 删除学生
public void delayStundet() {
//返回数组-----
//数组有两种情况 1 有数据进行删除 2 没有数据 返回值为null
Student[] stus = studentService.findAllStundent();
if (stus == null) {//判断数组里有没有数据
System.out.println("无信息,请先添加");
return;//结束方法
}
//数组不是null,进行删除操作
String sid;
while (true) {
System.out.println("请输入要删除的id");
sid = sc.next();
//把id给业务员,但业务员也无权修改数据库的信息
boolean flag = studentService.isExist(sid);
if (!flag) {//id不存在,则重新输入
System.out.println("id不存在,请重新输入");
} else {
break;
}
}
studentService.delayStundet(sid);
System.out.println("删除成功");
}
- 3业务员进行传递
public void delayStundet(String sid) {
studentDao.delayStundent(sid);
}
- 4,查询索引的方法,在库管中哦
//由于我们要查找sid所在的索引,先定义一个方法
public int findIndex(String sid) {
//假设不存在
int index = -1;
//遍历数组
for (int i = 0; i < stus.length; i++) {
//接收学生,但可能是null,需要进行判断
Student stu = stus[i];
if (stu != null && stu.getSid().equals(sid)) {//如果相同,则表示存在
index = i;
break;//跳出循环
}
}
return index;
}
- 5库管进行删除操作,
public void delayStundent(String sid) {
//调用方法,查找索引
int index = findIndex(sid);
stus[index] = null;
}
2.2.2.5修改功能的实现
- 需求 :根据学生id,来修改其他三个属性,没有id发出提示,数组没数据也发出对应提示
- 思路:与删除基本类似,直接代码实现
- 代码实现
- 1客服修改方法的添加
changeStudent();
- 2客服修改方法的添加
- 先进行数组是否为空的判断
- 循环要修改的id,
- 录入新的学生对象
- 把新的学生对象和学号传给业务员
- 业务员再给数组
- 由数组进行修改
- 1客服修改方法的添加
//返回数组-----
//数组有两种情况 1 有数据进行修改 2 没有数据 返回值为null
Student[] stus = studentService.findAllStundent();
if (stus == null) {//判断数组里有没有数据
System.out.println("无信息,请先添加");
return;//结束方法
}
String sid;
while (true) {
System.out.println("请输入要修改的id");
sid = sc.next();
//把id给业务员,但业务员也无权修改数据库的信息
boolean flag = studentService.isExist(sid);
if (!flag) {//id不存在,则重新输入
System.out.println("id不存在,请重新输入");
} else {
break;
}
}
//录入
System.out.println("请输入姓名");
String name = sc.next();
System.out.println("请输入年龄");
String age = sc.next();
System.out.println("请输入生日");
String birthday = sc.next();
//封装数据
//创造一个学生
Student student = new Student();
student.setSid(sid);
student.setName(name);
student.setAge(age);
student.setBirthday(birthday);
// //创建一个业务员
// StudentService studentService = new StudentService();
//把数据给业务员,进行数据的修改
studentService.changeStudent(sid,student);
System.out.println("修改成功");
}
- 3.业务员的传递
public void changeStudent(String sid, Student student) {
studentDao.changeStundetn(sid, student);
}
- 4.库管修改学生
public void changeStundetn(String sid, Student student) {
int index = findIndex(sid);
stus[index] = student;
}
到此学生系统的建设已经完毕
接下来要针对代码的重复等部分进行修改