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包的概述 (记忆)
- 包
本质上就是文件夹
- 创建包
多级包之间使用 " . " 进行分割
多级包的定义规范:公司的网站地址翻转(去掉www)
后期我们所定义的包的结构就是:com.xxx.其他的包名
- 包的命名规则
字母都是小写
3.3包的注意事项 (理解)
- package语句必须是程序的第一条可执行的代码
- package语句在一个java文件中只能有一个
- 如果没有package,默认表示无包名
3.4类与类之间的访问 (理解)
- 同一个包下的访问
不需要导包,直接使用即可
- 不同包下的访问
1.import 导包后访问
2.通过全类名(包名 + 类名)访问
- 注意:import 、package 、class 三个关键字的摆放位置存在顺序关系
package 必须是程序的第一条可执行的代码
import 需要写在 package 下面
class 需要在 import 下面
4.信息管理系统
4.1系统介绍 (理解)
4.2学生管理系统 (应用)
4.2.1需求说明
- 添加学生: 键盘录入学生信息(id,name,age,birthday)
使用数组存储学生信息,要求学生的id不能重复
- 删除学生: 键盘录入要删除学生的id值,将该学生从数组中移除,如果录入的id在数组中不存在,需要重新录入
- 修改学生: 键盘录入要修改学生的id值和修改后的学生信息
将数组中该学生的信息修改,如果录入的id在数组中不存在,需要重新录入
- 查询学生: 将数组中存储的所有学生的信息输出到控制台
4.2.2实现步骤
- 环境搭建实现步骤包 存储的类 作用
com.xxx.edu.info.manager.domain Student.java 封装学生信息
com.xxx.edu.info.manager.dao StudentDao.java 访问存储数据的数组,进行赠(库管)
com.xxx.edu.info.manager.service StudentService.java 业务的逻辑处理(业务员)
com.xxx.edu.info.manager.controller StudentController.java 和用户打交道(客服接待)
com.xxx.edu.info.manager.entry InfoManagerEntry.java 程序的入口类,提供一个main方法
- 菜单搭建实现步骤
- 需求
- 管理系统菜单搭建
- 学生管理系统菜单搭建
- 实现步骤
1. 展示欢迎页面,用输出语句完成主界面的编写
2. 获取用户的选择,用Scanner实现键盘录入数据
3. 根据用户的选择执行对应的操作,用switch语句完成操作的选择
- 添加功能实现步骤
- 添加功能优化:判断id是否存在
- 查询功能实现步骤
- 删除功能实现步骤
- 修改功能实现步骤
- 系统优化
- 把updateStudent和deleteStudentById中录入学生id代码抽取到一个方法(inputStudentId)中
该方法的主要作用就是录入学生的id,方法的返回值为String类型
- 把addStudent和updateStudent中录入学生信息的代码抽取到一个方法(inputStudentInfo)中
该方法的主要作用就是录入学生的信息,并封装为学生对象,方法的返回值为Student类型
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
程序入口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;
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
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;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
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);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
4.3老师管理系统 (应用)
4.3.1需求说明
- 添加老师: 通过键盘录入老师信息(id,name,age,birthday)
使用数组存储老师信息,要求老师的id不能重复
- 删除老师: 通过键盘录入要删除老师的id值,将该老师从数组中移除,如果录入的id在数组中不存在,需要重新录入
- 修改老师: 通过键盘录入要修改老师的id值和修改后的老师信息
将数组中该老师的信息修改,如果录入的id在数组中不存在,需要重新录入
- 查询老师: 将数组中存储的所有老师的信息输出到控制台
4.3.2实现步骤
- 环境搭建实现步骤
包 存储的类 作用
com.xxx.edu.info.manager.domain Student.java Teacher.java 封装学生信息 封装老师信息
com.xxx.edu.info.manager.dao StudentDao.java TeacherDao.java 访问存储数据的数组,进行赠删改查(库管)
com.xxx.edu.info.manager.service StudentService.java TeacherService.java 业务的逻辑处理(业务员)
com.xxx.edu.info.manager.controller StudentController.java TeacherController.java 和用户打交道(客服接待)
com.xxx.edu.info.manager.entry InfoManagerEntry.java 程序的入口类,提供一个main方法
- 菜单搭建实现步骤
1. 展示欢迎页面,用输出语句完成主界面的编写
2. 获取用户的选择,用Scanner实现键盘录入数据
3. 根据用户的选择执行对应的操作,用switch语句完成操作的选择
- 添加功能实现步骤
- 查询功能实现步骤
- 删除功能实现步骤
- 修改功能实现步骤
- 系统优化
- 把updateTeacher和deleteTeacherById中录入老师id代码抽取到一个方法(inputTeacherId)中
该方法的主要作用就是录入老师的id,方法的返回值为String类型
- 把addTeacher和updateTeacher中录入老师信息的代码抽取到一个方法(inputTeacherInfo)中
该方法的主要作用就是录入老师的信息,并封装为老师对象,方法的返回值为Teacher类型
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
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);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
5.static关键字
5.1static关键字概述 (理解)
static 关键字是静态的意思,是Java中的一个修饰符,可以修饰成员方法,成员变量
5.2static修饰的特点 (记忆)
- 被类的所有对象共享
是我们判断是否使用静态关键字的条件
- 随着类的加载而加载,优先于对象存在
对象需要类被加载后,才能创建
- 可以通过类名调用
也可以通过对象名调用
5.3static关键字注意事项 (理解)
- 静态方法只能访问静态的成员
- 非静态方法可以访问静态的成员,也可以访问非静态的成员
- 静态方法中是没有this关键字