以此往复 具体代码 包的结构 control包 BaseStudentControl package com.itheima.edu.info.manager.controller;import com.itheima.edu.info.manager.domain.Student;import com.itheima.edu.info.manager.service.StudentService;import java.util.Scanner;//客服接待。
birthday);}public Student() {}} Teacher package com.itheima.edu.info.manager.domain;public class Teacher extends Person {//空参构造public Teacher() {}//有参构造public Teacher(String id, "1990-01-01");Student s2 = new Student("002"。
请重新输入");}}return id;}//键盘录入学生信息public abstract Student inputStudentInfo(String id);//定义为抽象方法, "1947-03-01");teachers[0] = t1;teachers[1] = t2;}public boolean addTeacher(Teacher teacher) {//具体实现添加的工作//1.遍历我们的数组, age = " + age + ",返回truestudents[index] = student;return true;}}@Overridepublic Student[] findAllStudent() {//返回我们创建的对象数组return students;}@Overridepublic void deleteStudentById(String id) {//1.找到该id在数组中对应的索引int index = getIndex(id);//2.将该索引的对象使用null替代students[index] = null;}//通过id找到他在数组中的索引@Overridepublic int getIndex(String id){int index=-1;//记录id对应索引的的位置for (int i = 0; i students.length; i++) {if(students[i]!=nullid.equals(students[i].getId())){index=i;break;}}return index;}@Overridepublic void updateStudent(String id。
age, String birthday) {super(id, "张三"。
和用户打交道public abstract class BaseStudentController {private Scanner sc = new Scanner(System.in); private StudentService studentService = new StudentService();//开启学生管理系统并展示菜单public final void start() {System.out.println("--------------欢迎来到学生管理系统..............................");studentLoop: while (true) {System.out.println("请输入你的选择:1.添加学生 2.删除学生 3.修改学生 4.查看学生 5.退出");final String choice = sc.next();switch (choice) {case "1":addStudent();break;case "2":// System.out.println("删除学生");deleteStudentById();break;case "3":// System.out.println("修改学生");updateStudent();break;case "4"://System.out.println("查看学生");findStudent();break;case "5":System.out.println("欢迎使用学生管理系统,但是mhl中是将entry(程序入口)和control合二为一了。
name = " + name + ", 23。
birthday = " + birthday + "}";}} Student package com.itheima.edu.info.manager.domain;//domain包中的类用于封装数据public class Student extends Person {public Student(String id,student);}} TeacherService package com.itheima.edu.info.manager.service;import com.itheima.edu.info.manager.dao.TeacherDao;import com.itheima.edu.info.manager.domain.Student;import com.itheima.edu.info.manager.domain.Teacher;public class TeacherService {TeacherDao teacherDao = new TeacherDao();public boolean addTeacher(Teacher teacher) {//1.将对象传递给TeacherDao的teacherDao的addTeacher方法完成具体的添加操作boolean reason = teacherDao.addTeacher(teacher);//2.接收TeacherDao的addTeacher方法添加的结果return reason;}public boolean isExact(String id) {//由teacherService判读id是否重复//1.由TeacherDao将整个数组交给TeacherServiceTeacher [] teachers = teacherDao.findAllTeachers();//2.判断id是否重复for (int i = 0; i teachers.length; i++) {if(teachers[i] != null teachers[i].getId().equals(id)){return true;}}//3.将结果返回return false;}public Teacher[] findTeacher() {//1..请求TeacherDao的findAllTeacher方法返回老师数组Teacher [] teachers = teacherDao.findAllTeachers();//2.判断数组是否为null 并返回null或者地址(判断数组是否为空:需要遍历数组判断里面的每一个元素)boolean flag = isNull(teachers);if(flag){return teachers;}else{return null;}}//判断数组是否为空public boolean isNull(Teacher[] teachers) {boolean flag = false;//开始数组默认为空for (int i = 0; i teachers.length; i++) {if(teachers[i] != null){flag = true;break;}}return flag;}public void deleteTeacherById(String id) {//具体执行删除老师//1.通过teacherDao的findAllTeacher方法返回老师数组Teacher [] teachers = teacherDao.findAllTeachers();//2.遍历数组找到该id所对应的索引int deleteIndex = getIndexById(id,判读是否为nullint index = -1;//记录数组的下标for (int i = 0; i teachers.length; i++) {if(teachers[i]==null){index = i;break;}}//2.判断是否为nullif(index==-1){//装满了return false;}else{//没有装满,判断学号是否存在for (Student student : students) {if (student != null id.equals(student.getId())) {//用student.getId().equals(id)当数组为空将导致空指针异常return true;}}//3.返回true或falsereturn false;}public Student[] findStudent() {//注意:不能通过数组长度判断(因为数组的长度就是表示长度,并将信息打包成对象System.out.println("请输入老师id:");id = sc.next();boolean flag = teacherService.isExact(id);//判断输入的id是否存在if (!flag) {break;} else {System.out.println("该id已存在,使用新的学生对象替换students[index] = student;}} TeacherDao package com.itheima.edu.info.manager.dao;import com.itheima.edu.info.manager.domain.Teacher;public class TeacherDao {//数据存储容器private static Teacher[] teachers = new Teacher[5];//静态代码块初始化数据static {Teacher t1 = new Teacher("001"。
和用户打交道public class OtherStudentController extends BaseStudentController {private Scanner sc = new Scanner(System.in);//键盘录入学生信息@Overridepublic Student inputStudentInfo(String id){System.out.println("请输入学生姓名:");final String name = sc.next();System.out.println("请输入学生年龄:");final int age = sc.nextInt();System.out.println("请输入学生生日:");final String birthday = sc.next();//2.将学生信息封装成对象Student student = new Student(id, Student student);} OtherStudentDao package com.itheima.edu.info.manager.dao;import com.itheima.edu.info.manager.domain.Student;import java.util.ArrayList;//dao包库管。
将结果返还给StudentControllerreturn reason;}public boolean isExact(String id) {//进行id是否重复的业务逻辑判断//1.从StudentDao中获取存储学生对象的数组(掉哟StudentDao的findAllStudent方法)Student[] students = baseStudentDao.findAllStudent();//2.遍历获取数组中的每一个学生, 18,对数据进行操作public class StudentDao implements BaseStudentDao { //创建Student学生数组长度为5 private static Student[] students = new Student[5]; //静态代码块初始化学生数据static {Student s1 = new Student("001",这样就很清晰了 按照一般习惯我们写代码的时候。
正常添加, String name, "李四", "1990-01-01");Student s2 = new Student("002",对数据进行操作public class OtherStudentDao implements BaseStudentDao { //使用集合作为容器 //private static Student[] students = new Student[5];private static ArrayListStudent students = new ArrayList(); //静态代码块初始化学生数据static {Student s1 = new Student("001",获取学生信息并打印在控制台上System.out.println("学号\t\t姓名\t年龄\t生日");for (Student student : students) {if (student != null) {System.out.println(student.getId() + "\t" + student.getName() + "\t\t" + student.getAge() + "\t\t" + student.getBirthday());}}}public final void addStudent() {//1. 键盘接收学生信息StudentService studentService = new StudentService();String id;while (true) {System.out.println("请输入学生id:");id = sc.next();//判断id是否重复boolean reason = studentService.isExact(id);if (!reason) {//如果id没有重复则跳出循环break;} else {System.out.println("id已存在, int age。
这样显得太臃肿了,。
请添加后重试");}}//实现老师的添加void addTeacher() {String id = null;while (true) {//1.键盘接收老师的信息,返回trueteachers[index] = teacher;return true;}}public Teacher[] findAllTeachers() {//直接返回我们的数组return teachers;}} domain Person package com.itheima.edu.info.manager.domain;public class Person {private String id;private String name;private int age;private String birthday;public Person() {}public Person(String id,并封装成对象Student student = inputStudentInfo(id);//4.调用studentService中的updateStudent方法修改学生信息,student);System.out.println("修改成功");}public final void deleteStudentById() {final String id = inputStudentId();//3.调用业务员中的deleteStudentById方法根据id删除学生studentService.deleteStudentById(id);//4.提示删除成功System.out.println("删除成功");}//查看学生public final void findStudent() {//1.调用业务员中的获取方法,请重新输入");}}Teacher teacher = inputTeacherInfo(id);//录入学生信息并封装成对象//2.将对象传递给TeacherService的addTeacher方法完成具体的添加操作boolean reason = teacherService.addTeacher(teacher);//3.打印添加成功或者失败System.out.println("添加成功");}//录入学生id(需要id存在)public String inputId() {String id;while (true) {//1.接收客户输入的idSystem.out.println("请输入要删除的id:");id = sc.next();//2.判断id是否存在final boolean flag = teacherService.isExact(id);if (flag) {break;}else{System.out.println("该id不存在。
name,请重新输入");}}//键盘录入学生信息final Student student = inputStudentInfo(id);//3.将学生对象传递给StudentService(业务员)中的addStudent方法(调用StudentService中的addStudent方法来实现功能)boolean reason = studentService.addStudent(student);//4.根据返回的boolean类型结果,完成了control层然后完成所需求的下一次, "1970-01-01");Teacher t2 = new Teacher("002"。
23,请重新输入!");}}return id;}//键盘录入学生信息并封装成对象public Teacher inputTeacherInfo(String id) {System.out.println("请输入姓名:");String name = sc.next();System.out.println("请输入年龄:");int age = sc.nextInt();System.out.println("请输入生日:");String birthday = sc.next();Teacher teacher = new Teacher(id,则开始打印数组System.out.println("id\t\t姓名\t年龄\t生日");for (Teacher teacher : teachers) {if(teacher != null){//判断该元素是否为空位System.out.println("" + teacher.getId() + "\t" + teacher.getName() + "\t" + teacher.getAge() + "\t\t" + teacher.getBirthday());}}} else {System.out.println("暂无信息,Student student) {//调用库管studentService的updateStudent方法baseStudentDao.updateStudent(id,对数据进行操作public interface BaseStudentDao {public abstract boolean addStudent(Student student) ;public abstract Student[] findAllStudent() ;public abstract void deleteStudentById(String id) ;//通过id找到他在数组中的索引public abstract int getIndex(String id);public abstract void updateStudent(String id,再见");break studentLoop;//这里需要跳转到总菜单default:System.out.println("输入有误");}}}//修改学生public final void updateStudent() {final String id = inputStudentId();//3.录入新的学生信息,在控制台打印成功/失败if (reason) {System.out.println("添加成功");} else {System.out.println("添加失败");}}//键盘录入idpublic final String inputStudentId(){String id;while (true) {System.out.println("请输入学生id:");id = sc.next();//判断id是否重复boolean reason = studentService.isExact(id);if (reason) {//如果id重复则跳出循环break;} else {System.out.println("id不存在。
正常添加。
Teacher[] teachers) {//2.遍历数组找到该id所对应的索引int index = -1;for (int i = 0; i teachers.length; i++) {if(teachers[i] != null teachers[i].getId().equals(id)){index = i;break;}}return index;}} , birthday);}} entry InfoMassageEntry package com.itheima.edu.info.manager.entry;import com.itheima.edu.info.manager.controller.OtherStudentController;import com.itheima.edu.info.manager.controller.StudentController;import com.itheima.edu.info.manager.controller.TeacherController;import java.util.Scanner;//entry包负责程序的入口public class InfoManagerEntry {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("--------------欢迎来到黑马信息管理系统------------------"); while (true) {System.out.println("请输入你的选中:1.学生管理 2.老师管理 3.退出");final String choice = sc.next();switch (choice) {case "1":// System.out.println("学生管理");//StudentController studentController = new StudentController();//studentController.start();OtherStudentController otherStudentController = new OtherStudentController();//换用的逻辑otherStudentController.start();break;case "2":// System.out.println("老师管理");TeacherController teacherController = new TeacherController();teacherController.start();break;case "3":System.out.println("退出");System.exit(0);//退出当前正在运行的虚拟机break ;default:System.out.println("输入有误");break;}}}} factroy StudentDaoFactory package com.itheima.edu.info.manager.factory;import com.itheima.edu.info.manager.dao.BaseStudentDao;import com.itheima.edu.info.manager.dao.StudentDao;//专门用来创建不同的Dao对象public class StudentDaoFactory {//将返回类型定义为功能的父类public static BaseStudentDao getStudentDao(){return new StudentDao();}} service StudentService package com.itheima.edu.info.manager.service;import com.itheima.edu.info.manager.dao.BaseStudentDao;import com.itheima.edu.info.manager.dao.OtherStudentDao;import com.itheima.edu.info.manager.dao.StudentDao;import com.itheima.edu.info.manager.domain.Student;import com.itheima.edu.info.manager.factory.StudentDaoFactory;import java.awt.desktop.OpenFilesHandler;//service包负责业务逻辑public class StudentService { //将Dao类型改为多态实现 private BaseStudentDao baseStudentDao = StudentDaoFactory.getStudentDao();public boolean addStudent(Student student) {//暂时不考虑id是否存在boolean reason = baseStudentDao.addStudent(student);//2.接收方法的boolean返回值, 23, "张老师", "李老师", name。
来简化代码 使用分类分包思想 1.各种包中的角色各司其职 control:和用户进行交互:向上调用service中提供的方法 service:业务处理层:处理control提交的任务(service也可以调用其他的serviice提供的方法) dao:专门用来操作数据库或者数据存储容器:处理sercice提交的需求 2.在mhl中其实也是分类思想,获取数组Student[] students = baseStudentDao.findAllStudent();//2.判断获取的数组是否有学生信息(有:返回地址,请添加后重试");return;}//3.遍历数组,而集合表示的是集合内数据的个数)//1.调用库管的findStudent方法, age。
name, Student student) {//1.查找id在容器中的索引int index = getIndex(id);//2.将该索引的位置, String birthday) {this.id = id;this.name = name;this.age = age;this.birthday = birthday;}/*** 获取* @return id*/public String getId() {return id;}/*** 设置* @param id*/public void setId(String id) {this.id = id;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}/*** 获取* @return birthday*/public String getBirthday() {return birthday;}/*** 设置* @param birthday*/public void setBirthday(String birthday) {this.birthday = birthday;}public String toString() {return "Person{id = " + id + ",Teacher teacher) {//1.由teacherDao的findAllTeacher方法返回老师数组Teacher [] teachers = teacherDao.findAllTeachers();//2.遍历数组找到该id所对应的索引final int updateIndex = getIndexById(id,和用户打交道public class StudentController extends BaseStudentController {private Scanner sc = new Scanner(System.in);//键盘录入id//键盘录入学生信息@Overridepublic Student inputStudentInfo(String id){System.out.println("请输入学生姓名:");final String name = sc.next();System.out.println("请输入学生年龄:");final int age = sc.nextInt();System.out.println("请输入学生生日:");final String birthday = sc.next();//2.将学生信息封装成对象Student student = new Student();student.setId(id);student.setName(name);student.setAge(age);student.setBirthday(birthday);return student;}} TheatherControl package com.itheima.edu.info.manager.controller;import com.itheima.edu.info.manager.domain.Student;import com.itheima.edu.info.manager.domain.Teacher;import com.itheima.edu.info.manager.service.TeacherService;import java.util.Scanner;//客服接待public class TeacherController {private Scanner sc = new Scanner(System.in);private TeacherService teacherService = new TeacherService();//老师管理的菜单public void start() {teacherLoop:while (true) {System.out.println("请输入你的选择:1.添加老师 2.删除老师 3.修改老师 4.查看老师 5.退出");String choice = sc.next();switch (choice) {case "1"://System.out.println("添加老师");addTeacher();break;case "2"://System.out.println("删除老师");deleteTeacherById();break;case "3":// System.out.println("修改老师");updateTeacherById();break;case "4":// System.out.println("查看老师");findTeacher();break;case "5":System.out.println("欢迎使用老师管理系统,teacher);//由业务员进行信息的修改//4.打印修改成功System.out.println("修改成功");}public void deleteTeacherById() {//通过id删除老师String id = inputId();//3.调用teacherService中的deleteTeacherById方法根据id删除老师teacherService.deleteTeacherById(id);//4.提示删除成功System.out.println("删除成功");}private void findTeacher() {//查询老师的信息//1.请求teacherService的findTeacher方法返回数组Teacher[] teachers = teacherService.findTeacher();//2.遍历数组并打印老师信息if (teachers != null) {//数组不为空,我们选择返回数组//3.然后将集合中的元素全部装回数组中Student[] stu = new Student[students.size()];//数组的长度和集合长度保持一致stu =students.toArray(stu);//将集合变成数组返回return stu;}@Overridepublic void deleteStudentById(String id) {//1.找到该id在数组中对应的索引int index = getIndex(id);//2.将该索引的对象使用null替代students.remove(index);}//通过id找到他在数组中的索引@Overridepublic int getIndex(String id){//(改为遍历集合即可)int index=-1;//记录id对应索引的的位置for (int i = 0; i students.size(); i++) {if(students.get(i)!=nullid.equals(students.get(i).getId())){index=i;break;}}return index;}@Overridepublic void updateStudent(String id, teachers);//3.给该索引位置的元素重新赋值teachers[updateIndex] = teacher;}//找到具体id元素所对应的索引public int getIndexById(String id。
习惯从control层往下层dao写。
student);}} StudentDao package com.itheima.edu.info.manager.dao;import com.itheima.edu.info.manager.domain.Student;//dao包库管, 1.通过数组或者集合来作为储存容器(对比:数据结构课设使用的是链表:通过指针连接结点) 2.使用了继承,修改学生并提示修改成功studentService.updateStudent(id, "李四",所以不需要进行判断, age, String name,而在在这个程序中则是将二者分开了, age,再见");break teacherLoop;//这里需要退出到总菜单default:System.out.println("输入有误");break;}}}public void updateTeacherById() {//修改学生final String id = inputId();//2.键盘录入新的学生信息并封装成对象Teacher teacher = inputTeacherInfo(id);//3.将对象传递给teacherService中的updateTeacher方法修改老师信息teacherService.updateTeacherById(id。
18,判断是否为nullfor (int i = 0; i students.length; i++) {if (students[i] == null) {index = i;break;}}//3.返回是否添加成功if (index == -1) {//装满了return false;} else {//没有装满, "1937-03-01");students[0] = s1;students[1] = s2; } @Overridepublic boolean addStudent(Student student) {//2.将接收到的学生对象添加到数组中//2.1定义遍历index=-1int index = -1;//2.2遍历数组中的每一个元素, int age, int age,由子类重写} OtherStudentControl package com.itheima.edu.info.manager.controller;import com.itheima.edu.info.manager.domain.Student;import com.itheima.edu.info.manager.service.StudentService;import java.util.Scanner;//客服接待。
抽象类和接口来简化程序 3.使用多态来实现统一化编程,是否为nullif (students == null) {System.out.println("查无信息, "张三",直接添加即可students.add(student);return true;}@Overridepublic Student[] findAllStudent() {//1.我们可以选择返回数组或者即可//2.返回集合将会修改Service和Controller中的代码,使用新的学生对象替换students.set(index, String birthday) {super(id, Student student) {//1.查找id在容器中的索引int index = getIndex(id);//2.将该索引的位置, birthday);//对象封装对象进行修改return student;}} StudentControl package com.itheima.edu.info.manager.controller;import com.itheima.edu.info.manager.domain.Student;import com.itheima.edu.info.manager.service.StudentService;import java.util.Scanner;//客服接待,没有:返回Null)boolean flag = false;//默认数组中没有学生for (int i = 0; i students.length; i++) {if( students[i] != null) {flag = true;break;}}if(flag == true) {return students;}else {return null;//没有学生返回null}}public void deleteStudentById(String id) {//调用studentDao的deleteStudentById方法删除学生baseStudentDao.deleteStudentById(id);}public void updateStudent(String id, "1937-03-01");students.add(s1);students.add(s2); }@Overridepublic boolean addStudent(Student student) {//因为集合装不满,teachers);//3.将该元素赋值为nullteachers[deleteIndex] = null;}public void updateTeacherById(String id, 18。
name, String name,得到学生的对象数组Student[] students = studentService.findStudent();//2.判断数组的内存地址, birthday);return teacher;}} dao包 BaseStudentDao package com.itheima.edu.info.manager.dao;import com.itheima.edu.info.manager.domain.Student;import java.util.ArrayList;//dao包库管。
