分类思想## 分包思想##黑马信息管理系统
- 分类思想
- 包的概述和定义
- 包的注意事项和类访问
- 需求说明和效果演示
- 环境搭建
- 菜单搭建
- 基本添加功能 - 思路分析
- 基本添加功能 - 代码实现
- 添加功能 - 加入学号判断
- 添加功能 - 问题分析
- static关键字特点
- static注意事项 - 学号存在问题解决
- 查看学生 - 代码实现
- 删除功能 - 代码实现
- 修改功能 - 代码实现
- 学生管理系统代码优化
?
?
? 通过我们已掌握的知识点,先实现一个案例,然后找出案例中存在的一些问题 通过新知识点,提高代码的复用性、可读性、维护性 存在的问题: 1. 代码冗余(复杂) 2. 可读性差(多个功能放在一个模块/类) 3. 可维护性差(耦合高)
学生管理系统代码分析: 业务逻辑都在一张java文件中 重复代码比较多(索引判断,封装学生对象的代码) 在这里插入图片描述 请添加图片描述 ------------------------------------------------------------------------------------------------------
- 分类思想
分类思想: 分工协作,专人干专事
老板管理: 客服接待 -> 业务员 -> 库管 -> 仓库
黑马信息管理系统分类: Student类: 标准类,封装键盘录入的学生信息(id、name、age、birthday) StudentDao类:库管 Data Access Object,该类用于访问存储数据的容器(数组、集合、数据库) StudentService类:业务员 进行业务逻辑的处理(例如判断录入的id是否存在) StudentController类:客户接待 与用户打交道(接收请求、采集信息、打印数据到控制台等) ------------------------------------------------------------------------------------------------------ 2. 包的概述和定义 由于划分出来的类文件很多,我们要对文件进行管理,管理方式: 分包(分文件夹)
分包思想: 如果所有的类文件都在同一个包下,不利于管理和后期维护 所以,对于不同功能的类文件,可以放在不同的包下进行管理
包:本质就是文件夹
包的创建: 可创建单级包、多级包 多级包之间使用.分隔 包的命名规范是公司域名去掉www后的反写(com.baidu) 包的命名都是纯小写字母
package关键字: 使用package定义包:文本文档要手动添加,开发工具自动添加(在代码的第一行) 格式:package 包名.包名.类名;
3.包的注意事项和类访问 包的注意事项: package语句必须是文件的第一行代码 package关键字,在一个java文件中只能有一个 如果没有package,默认表示无包名(在IDEA中可以放在根目录scr下)
类与类之间的访问: 同一个包下类的访问: 不需要导包,直接访问即可 不同包下类的访问: 1. 通过全类名(包名+类名)访问,中间用.分隔 2. import导包后访问(常用)
通过全类名导包的应用场景: 多个包下,出现了相同名称类时 要在另一个类中,使用这个两个相同名称的类 我们如果使用import导了第一个类,那么第二个就不能使用import了
注意import、package、class三个关键字书写位置的关系: package:必须是文件第一行代码 import:写在package下,class上 class:在import下
- 需求说明和效果演示
【黑马信息管理系统】包含:
-
学生管理系统 增:录入信息有id、name、age、birthday;使用数组存储学生信息,id不能重复 删:录入要删除的学生id,如果录入的id不存在,需要重新录入;存在则从数组中移除 改:录入要修改的学生id,如果录入的id不存在,需要重新录入;存在则继续录入其他信息,修改数组中的旧信息 查:将数组中所有对象信息,打印在控制台 -
老师管理系统 增:(同上) 删:(同上) 改:(同上) 查:(同上)
案例要求:使用分类思想、分包思想完成
代码: 增(在StudentController类:客户接待):
private void addStudent(){
String id;
while (true) {
System.out.println("请输入学生学号:");
id = sc.next();
boolean result = studentService.isExists(id);
if (result) {
System.out.println("学号已存在,请重新输入!");
} else {
break;
}
}
}
(在StudentDao类:库管)
public boolean addStudent(Student stu){
int index=-1;
for (int i = 0; i < stuArray.length; i++) {
if(stuArray[i] == null){
index = i;
break;
}
}
if (index == -1) {
return false;
} else {
stuArray[index] = stu;
return true;
}
}
删(在StudentController类:客户接待):
private void deleteStudentById(){
Student[] stuArray = studentService.findAllStudent();
if (stuArray == null) {
System.out.println("数组中还未添加学生,请先添加");
return;
}
String id;
while (true) {
System.out.println("请输入要删除的学生学号:");
id = sc.next();
boolean result = studentService.isExists(id);
if (!result) {
System.out.println("输入的学号不存在,请重新输入");
} else {
break;
}
}
}
(在StudentDao类:库管)
public void deleteStudentById(String id) {
int index = getIndex(id);
stuArray[index] = null;
}
改(在StudentController类:客户接待):
private void updateStudentById() {
Student[] stuArray = studentService.findAllStudent();
if (stuArray == null) {
System.out.println("数组中还未添加学生,请先添加");
return;
}
String id;
while (true) {
System.out.println("请输入要修改的学生学号:");
id = sc.next();
boolean result = studentService.isExists(id);
if (!result) {
System.out.println("输入的学号不存在,请重新输入");
} else {
break;
}
}
}
(在StudentDao类:库管)
查(在StudentController类:客户接待):
在这里插入代码片
在这里插入代码片
–5. 环境搭建
- 菜单搭建
- 基本添加功能 - 思路分析
- 基本添加功能 - 代码实现
- 添加功能 - 加入学号判断
- 添加功能 - 问题分析
- static关键字特点
- static注意事项 - 学号存在问题解决
- 查看学生 - 代码实现
- 删除功能 - 代码实现
- 修改功能 - 代码实现
- 学生管理系统代码优化
|