1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题
1.2案例驱动模式的好处 (理解) 解决重复代码过多的冗余,提高代码的复用性 解决业务逻辑聚集紧密导致的可读性差,提高代码的可读性 解决代码可维护性差,提高代码的维护性 2.分类思想 2.1分类思想概述 (理解) 分工协作,专人干专事
2.2信息管理系统 (理解) Student类 标准学生类,封装键盘录入的学生信息(id , name , age , birthday)
StudentDao类 Dao : (Data Access Object 缩写) 用于访问存储数据的数组或集合
StudentService类 用来进行业务逻辑的处理(例如: 判断录入的id是否存在)
StudentController类 和用户打交道(接收用户需求,采集用户信息,打印数据到控制台)
3.分包思想 3.1分包思想概述 (理解) 如果将所有的类文件都放在同一个包下,不利于管理和后期维护,所以,对于不同功能的类文件,可以放在不同的包下进行管理
3.2包的概述 (记忆) 3.3包的注意事项 (理解) package语句必须是程序的第一条可执行的代码 package语句在一个java文件中只能有一个 如果没有package,默认表示无包名 3.4类与类之间的访问 (理解) 4.信息管理系统 4.1系统介绍 (理解)
4.2学生管理系统 (应用) 4.2.1需求说明 添加学生: 键盘录入学生信息(id,name,age,birthday)
使用数组存储学生信息,要求学生的id不能重复
删除学生: 键盘录入要删除学生的id值,将该学生从数组中移除,如果录入的id在数组中不存在,需要重新录入
修改学生: 键盘录入要修改学生的id值和修改后的学生信息
将数组中该学生的信息修改,如果录入的id在数组中不存在,需要重新录入
查询学生: 将数组中存储的所有学生的信息输出到控制台
4.2.2实现步骤 添加功能优化:判断id是否存在
查询功能实现步骤
删除功能实现步骤
修改功能实现步骤
系统优化
把updateStudent和deleteStudentById中录入学生id代码抽取到一个方法(inputStudentId)中 该方法的主要作用就是录入学生的id,方法的返回值为String类型 把addStudent和updateStudent中录入学生信息的代码抽取到一个方法(inputStudentInfo)中 该方法的主要作用就是录入学生的信息,并封装为学生对象,方法的返回值为Student类型 4.2.3代码实现 学生类
public class Student { private String id; private String name; private String age; private String birthday; String address; public Student () { } public Student (String id, String name, String age, String birthday) { this .id = id; this .name = name; this .age = age; this .birthday = birthday; } public String getId () { return id; } public void setId (String id) { this .id = id; } public String getName () { return name; } public void setName (String name) { this .name = name; } public String getAge () { return age; } public void setAge (String age) { this .age = age; } public String getBirthday () { return birthday; } public void setBirthday (String birthday) { this .birthday = birthday; } }
程序入口InfoManagerEntry类
public class InfoManagerEntry { public static void main (String[] args) { Scanner sc = new Scanner(System.in); while (true ) { System.out.println("--------欢迎来到信息管理系统--------" ); System.out.println("请输入您的选择: 1.学生管理 2.老师管理 3.退出" ); String choice = sc.next(); switch (choice) { case "1" : StudentController studentController = new StudentController(); studentController.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 ; } } } }
StudentController类
public class StudentController { private StudentService studentService = new StudentService(); private Scanner sc = new Scanner(System.in); public void start () { studentLoop: while (true ) { System.out.println("--------欢迎来到 <学生> 管理系统--------" ); System.out.println("请输入您的选择: 1.添加学生 2.删除学生 3.修改学生 4.查看学生 5.退出" ); String choice = sc.next(); switch (choice) { case "1" : addStudent(); break ; case "2" : deleteStudentById(); break ; case "3" : updateStudent(); break ; case "4" : findAllStudent(); break ; case "5" : System.out.println("感谢您使用学生管理系统, 再见!" ); break studentLoop; default : System.out.println("您的输入有误, 请重新输入" ); break ; } } } public void updateStudent () { String updateId = inputStudentId(); Student newStu = inputStudentInfo(updateId); studentService.updateStudent(updateId, newStu); System.out.println("修改成功!" ); } public void deleteStudentById () { String delId = inputStudentId(); studentService.deleteStudentById(delId); System.out.println("删除成功!" ); } public void findAllStudent () { Student[] stus = studentService.findAllStudent(); if (stus == null ) { System.out.println("查无信息, 请添加后重试" ); return ; } System.out.println("学号\t\t姓名\t年龄\t生日" ); for (int i = 0 ; i < stus.length; i++) { Student stu = stus[i]; if (stu != null ) { System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t\t" + stu.getBirthday()); } } } public void addStudent () { String id; while (true ) { System.out.println("请输入学生id:" ); id = sc.next(); boolean flag = studentService.isExists(id); if (flag) { System.out.println("学号已被占用, 请重新输入" ); } else { break ; } } Student stu = inputStudentInfo(id); boolean result = studentService.addStudent(stu); if (result) { System.out.println("添加成功" ); } else { System.out.println("添加失败" ); } } public String inputStudentId () { String id; while (true ) { System.out.println("请输入学生id:" ); id = sc.next(); boolean exists = studentService.isExists(id); if (!exists) { System.out.println("您输入的id不存在, 请重新输入:" ); } else { break ; } } return id; } public Student inputStudentInfo (String id) { System.out.println("请输入学生姓名:" ); String name = sc.next(); System.out.println("请输入学生年龄:" ); String age = sc.next(); System.out.println("请输入学生生日:" ); String birthday = sc.next(); Student stu = new Student(); stu.setId(id); stu.setName(name); stu.setAge(age); stu.setBirthday(birthday); return stu; } }
StudentService类
public class StudentService { private StudentDao studentDao = new StudentDao(); public boolean addStudent (Student stu) { return studentDao.addStudent(stu); } public boolean isExists (String id) { Student[] stus = studentDao.findAllStudent(); boolean exists = false ; for (int i = 0 ; i < stus.length; i++) { Student student = stus[i]; if (student != null && student.getId().equals(id)){ exists = true ; break ; } } return exists; } public Student[] findAllStudent() { Student[] allStudent = studentDao.findAllStudent(); boolean flag = false ; for (int i = 0 ; i < allStudent.length; i++) { Student stu = allStudent[i]; if (stu != null ){ flag = true ; break ; } } if (flag){ return allStudent; }else { return null ; } } public void deleteStudentById (String delId) { studentDao.deleteStudentById(delId); } public void updateStudent (String updateId, Student newStu) { studentDao.updateStudent(updateId, newStu); } }
StudentDao类
public class StudentDao { private static Student[] stus = new Student[5 ]; public boolean addStudent (Student stu) { int index = -1 ; for (int i = 0 ; i < stus.length; i++) { Student student = stus[i]; if (student == null ){ index = i; break ; } } if (index == -1 ){ return false ; }else { stus[index] = stu; return true ; } } public Student[] findAllStudent() { return stus; } public void deleteStudentById (String delId) { int index = getIndex(delId); stus[index] = null ; } public int getIndex (String id) { int index = -1 ; for (int i = 0 ; i < stus.length; i++) { Student stu = stus[i]; if (stu != null && stu.getId().equals(id)){ index = i; break ; } } return index; } public void updateStudent (String updateId, Student newStu) { int index = getIndex(updateId); stus[index] = newStu; } }
4.3老师管理系统 (应用) 4.3.1需求说明 添加老师: 通过键盘录入老师信息(id,name,age,birthday)
使用数组存储老师信息,要求老师的id不能重复
删除老师: 通过键盘录入要删除老师的id值,将该老师从数组中移除,如果录入的id在数组中不存在,需要重新录入
修改老师: 通过键盘录入要修改老师的id值和修改后的老师信息
将数组中该老师的信息修改,如果录入的id在数组中不存在,需要重新录入
查询老师: 将数组中存储的所有老师的信息输出到控制台
4.3.2实现步骤 环境搭建实现步骤
| 包 | 存储的类 | 作用 | | ———————————————————- | ———————————————————— | —————————— | | com.itheima.edu.info.manager.domain | Student.java Teacher.java | 封装学生信息 封装老师信息 | | com.itheima.edu.info.manager.dao | StudentDao.java TeacherDao.java | 访问存储数据的数组,进行赠删改查(库管) | | com.itheima.edu.info.manager.service | StudentService.java TeacherService.java | 业务的逻辑处理(业务员) | | com.itheima.edu.info.manager.controller | StudentController.java TeacherController.java | 和用户打交道(客服接待) | | com.itheima.edu.info.manager.entry | InfoManagerEntry.java | 程序的入口类,提供一个main方法 |
菜单搭建实现步骤
展示欢迎页面,用输出语句完成主界面的编写 获取用户的选择,用Scanner实现键盘录入数据 根据用户的选择执行对应的操作,用switch语句完成操作的选择 添加功能实现步骤
查询功能实现步骤
删除功能实现步骤
修改功能实现步骤
系统优化
把updateTeacher和deleteTeacherById中录入老师id代码抽取到一个方法(inputTeacherId)中 该方法的主要作用就是录入老师的id,方法的返回值为String类型 把addTeacher和updateTeacher中录入老师信息的代码抽取到一个方法(inputTeacherInfo)中 该方法的主要作用就是录入老师的信息,并封装为老师对象,方法的返回值为Teacher类型 4.3.3代码实现 老师类
public class Teacher extends Person { private String id; private String name; private String age; private String birthday; String address; public Teacher () { } public Teacher (String id, String name, String age, String birthday) { this .id = id; this .name = name; this .age = age; this .birthday = birthday; } public String getId () { return id; } public void setId (String id) { this .id = id; } public String getName () { return name; } public void setName (String name) { this .name = name; } public String getAge () { return age; } public void setAge (String age) { this .age = age; } public String getBirthday () { return birthday; } public void setBirthday (String birthday) { this .birthday = birthday; } }
TeacherController类
public class TeacherController { private Scanner sc = new Scanner(System.in); private TeacherService teacherService = new TeacherService(); public void start () { teacherLoop: while (true ) { System.out.println("--------欢迎来到 <老师> 管理系统--------" ); System.out.println("请输入您的选择: 1.添加老师 2.删除老师 3.修改老师 4.查看老师 5.退出" ); String choice = sc.next(); switch (choice) { case "1" : addTeacher(); break ; case "2" : deleteTeacherById(); break ; case "3" : updateTeacher(); break ; case "4" : findAllTeacher(); break ; case "5" : System.out.println("感谢您使用老师管理系统, 再见!" ); break teacherLoop; default : System.out.println("您的输入有误, 请重新输入" ); break ; } } } public void updateTeacher () { String id = inputTeacherId(); Teacher newTeacher = inputTeacherInfo(id); teacherService.updateTeacher(id,newTeacher); System.out.println("修改成功" ); } public void deleteTeacherById () { String id = inputTeacherId(); teacherService.deleteTeacherById(id); System.out.println("删除成功" ); } public void findAllTeacher () { Teacher[] teachers = teacherService.findAllTeacher(); if (teachers == null ) { System.out.println("查无信息, 请添加后重试" ); return ; } System.out.println("学号\t\t姓名\t年龄\t生日" ); for (int i = 0 ; i < teachers.length; i++) { Teacher t = teachers[i]; if (t != null ) { System.out.println(t.getId() + "\t" + t.getName() + "\t" + t.getAge() + "\t\t" + t.getBirthday()); } } } public void addTeacher () { String id; while (true ) { System.out.println("请输入老师id:" ); id = sc.next(); boolean exists = teacherService.isExists(id); if (exists) { System.out.println("id已被占用, 请重新输入:" ); } else { break ; } } Teacher t = inputTeacherInfo(id); boolean result = teacherService.addTeacher(t); if (result) { System.out.println("添加成功" ); } else { System.out.println("添加失败" ); } } public String inputTeacherId () { String id; while (true ){ System.out.println("请输入id" ); id = sc.next(); boolean exists = teacherService.isExists(id); if (!exists){ System.out.println("您输入的id不存在, 请重新输入:" ); }else { break ; } } return id; } public Teacher inputTeacherInfo (String id) { System.out.println("请输入老师姓名:" ); String name = sc.next(); System.out.println("请输入老师年龄:" ); String age = sc.next(); System.out.println("请输入老师生日:" ); String birthday = sc.next(); Teacher t = new Teacher(); t.setId(id); t.setName(name); t.setAge(age); t.setBirthday(birthday); return t; } }
TeacherService类
public class TeacherService { private TeacherDao teacherDao = new TeacherDao(); public boolean addTeacher (Teacher t) { return teacherDao.addTeacher(t); } public boolean isExists (String id) { Teacher[] teachers = teacherDao.findAllTeacher(); boolean exists = false ; for (int i = 0 ; i < teachers.length; i++) { Teacher teacher = teachers[i]; if (teacher != null && teacher.getId().equals(id)){ exists = true ; break ; } } return exists; } public Teacher[] findAllTeacher() { Teacher[] allTeacher = teacherDao.findAllTeacher(); boolean flag = false ; for (int i = 0 ; i < allTeacher.length; i++) { Teacher t = allTeacher[i]; if (t != null ){ flag = true ; break ; } } if (flag){ return allTeacher; }else { return null ; } } public void deleteTeacherById (String id) { teacherDao.deleteTeacherById(id); } public void updateTeacher (String id, Teacher newTeacher) { teacherDao.updateTeacher(id,newTeacher); } }
TeacherDao类
public class TeacherDao { private static Teacher[] teachers = new Teacher[5 ]; public boolean addTeacher (Teacher t) { int index = -1 ; for (int i = 0 ; i < teachers.length; i++) { Teacher teacher = teachers[i]; if (teacher == null ){ index = i; break ; } } if (index == -1 ){ return false ; }else { teachers[index] = t; return true ; } } public Teacher[] findAllTeacher() { return teachers; } public void deleteTeacherById (String id) { int index = getIndex(id); teachers[index] = null ; } public int getIndex (String id) { int index = -1 ; for (int i = 0 ; i < teachers.length; i++) { Teacher t = teachers[i]; if (t != null && t.getId().equals(id)){ index = i; break ; } } return index; } public void updateTeacher (String id, Teacher newTeacher) { int index = getIndex(id); teachers[index] = newTeacher; } }
5.static关键字 5.1static关键字概述 (理解) static 关键字是静态的意思,是Java中的一个修饰符,可以修饰成员方法,成员变量
5.2static修饰的特点 (记忆) 被类的所有对象共享
是我们判断是否使用静态关键字的条件
随着类的加载而加载,优先于对象存在
对象需要类被加载后,才能创建
可以通过类名调用
也可以通过对象名调用
5.3static关键字注意事项 (理解) 静态方法只能访问静态的成员 非静态方法可以访问静态的成员,也可以访问非静态的成员 静态方法中是没有this关键字