15.6 本章小结
第十五章收官——CRM 项目章五节走完(15.1~15.5)。这一章是全书十四部分知识的大练兵:没有引入一个新语法,全靠老朋友按"分工口诀"组队干活。本章也是 Java 基础系列的第 100 篇整——从 1.1 装 JDK 到今天,正好一百步。
一、五节串线:项目是怎么搭起来的
| 节 | 岗位 | 核心收获 |
|---|---|---|
| 15.1 项目开发准备 | 画图纸 | 开发四步(需求→设计→编码→测试)、三层类蓝图、分工口诀 |
| 15.2 用户登录 | 门卫值班 | equals 双校验 + 常量打头防 null、三次机会两种骨架、boolean 方法封装 |
| 15.3 客户信息 | 造第一件货物 | Customer 实体类:private + 官方通道 + 两种构造、两种造货路线 |
| 15.4 个人信息 | 照模板自造 | User 实体类:同款封装模板换字段再套一遍、改密码 = equals 卡口 + 单个 set |
| 15.5 登录管理 | 门卫转正 | LoginManager 管理类:验证 + 日志 + 锁定三职责 |
主线一句话:先画图纸,再造货物,最后设管理——实体类(Customer/User)管数据,管理类(LoginManager)管业务,这个"两种角色"的套路,往后学的一切管理系统(包括后面的库房、集合版 CRM)全是它的重演。
二、概念速查 15 条
- 开发四步:需求分析 → 设计 → 编码 → 测试,先想清楚再动手
- CRM:客户关系管理系统 = 销售员的小本本
- 三层类蓝图:CustomerView 脸 / CustomerList 库房 / Customer 货物 + CMUtility 打字员
- 分工口诀:脸管喊话,库管货,实体管数据,工具管打字
- 数据只走官方通道:private 字段 + getter/setter,View 不许越级摸数组
- equals 双校验:比较内容不比地址(6.2)+ 常量打头防 null 空针
- 三次机会两种骨架:for 倒序
i=2;i>=0/ while + 计数器 - 两种造货路线:无参 + 逐项 set(改货专用)/ 全参一步到位
- 写了全参必补无参:编译器白送的在手写带参那一刻就没了
- 实体类 vs 管理类:实体装一个对象的数据,管理装一群对象的业务逻辑
- 心法:数据跟实体走,逻辑跟管理走
- 锁定卡口:连错 3 次拉闸,卡口放在验证前面
- 成功先清零:登录成功
failCount = 0,计数器状态是管理类的命根 - 登录日志三记三不记:记谁、何时、成败;不记密码、不打明文、不混业务
- 扩容钩子:数组满了要防御,双倍 arraycopy 搬家——7 章 ArrayList 的内部戏码
三、代码模板 4 段
模板 1:实体类骨架(背下来,一类一份)
public class 实体名 {
private 字段一; private 字段二; // 全 private
public 实体名(全参) { this.字段 = 参数; ... } // 全参构造
public 实体名() { } // 无参构造(必补)
public 类型 getXxx() { return xxx; } // 官方通道一式 N 份
public void setXxx(类型 x) { this.xxx = x; } // 可加安检 throw
public String show() { return 一行自我介绍; }
}
模板 2:登录校验(equals + 常量打头 + 三次机会)
for (int i = 2; i >= 0; i--) {
if ("admin".equals(name) && "123456".equals(pwd)) { return true; }
System.out.println("错了!还剩 " + i + " 次");
}
return false;
模板 3:管理类验证骨架(卡口 → 找人 → 分诊)
if (locked) { return false; } // 卡口第一
for (int i = 0; i < size; i++) {
if (accounts[i].getUsername().equals(name)) {
if (accounts[i].getPassword().equals(pwd)) {
failCount = 0; // 先清零再放行
return true;
}
failCount++; if (failCount >= 3) locked = true;
return false;
}
}
return false; // 查无此人
模板 4:数组防御(add 前必查)
if (userIndex >= accounts.length) { /* 报错或扩容 */ }
四、本章五大名坑
15.2 现场翻车:键盘输入的字符串和字面量不同址,输对了也报错。铁律:字符串比较只用 equals,且常量打头。
15.3 实验 3 现场翻车:new 实体名() 直接编译报错。写带参构造的手起,补无参构造的落。
实体类一沾登录校验/客户管理,分层散架变"大杂烩"。实体只装数据,业务归管理类和 View。
卡口在后,锁定的人输对密码照样进;成功不清零,改对密码也进不去。秩序在前,记账要清。
调试图方便,事故一瞬间。敏感字段打码是习惯,不是选项。
五、收官暗线:项目没有新知识
把五节拆开看,全是老朋友上岗:
- 15.2 的 equals 与三次机会 = 6.2 字符串 + 2.5 循环 + 2.6 方法封装
- 15.3 的实体类 = 3.3 封装 + 3.4 构造方法 + 3.5 this 的合集
- 15.4 的"照模板自造" = 封装思想的内化考试——不抄示例,凭肌肉记忆重写
- 15.5 的货架与扩容 = 2.7 数组 + 6.3 arraycopy/时间戳 + 7 章集合的预告片
结论:所谓"综合项目",就是把散装的知识点按分工组装成一台能跑的机器。能力增长的不是新知识,是组装能力——这正是项目章存在的意义。
六、跨章连线:这一百步都路过哪
- 第 1~2 章(入门/语法):变量、循环、方法——本章每段代码的地基
- 第 3~4 章(面向对象上下):封装/构造/this——实体类模板的出处
- 第 5 章(异常):setter 安检 throw、数组越界异常——管理类的防御手段
- 第 6 章(API):equals、System 工具箱、日期——登录与日志的原料
- 第 7 章(集合):本章扩容钩子的正主,ArrayList 就是不用自己搬家的"货架"
- 第 12 章(多线程)/第 15 章(GUI):往后做界面版 CRM,这套类蓝图原封不动复用
七、毕业大题 + 自检
毕业大题:门禁小系统(本章所有零件合体)
要求:① LoginManager 管两个以上 User 账号;② 登录三次机会 + 连错 3 次锁定 + 成功打印日志(不记密码);③ 登录成功进入"主菜单"占位(打印 1-修改密码 2-退出,switch 实现);④ 修改密码走 equals 验旧 + set 新,改完重新登录生效。写完在纸上画出"数据分别存在哪个类的哪个字段里"。
- 能默写实体类五件套(private/全参/无参/getset/show)吗?
- 能说出 equals 两条规矩(比内容、常量打头)并解释为什么吗?
- 两种造货路线各自用在什么场景?
- 实体类和管理类的区别,能用"数据跟实体走,逻辑跟管理走"讲明白吗?
- 锁定卡口为什么在验证前面?成功后为什么先清零?
- 数组 add 为什么必须先防御?扩容怎么做?
八、下一步学什么
- ☑ 第十五章「综合项目:客户关系管理系统」全章完结 🎉(15.1~15.6 六节,Demo31~35)
- ☐ 下一站:按教材是继续报标题(可能是全书总结/附录),也可能是回头做毕业大题、或召唤「动手写 Python」「数据压缩」等老入口——波仔指哪打哪。
相关笔记
- 第十五章 综合项目:客户关系管理系统/15.1 项目开发准备:蓝图与分工口诀的源头
- 第十五章 综合项目:客户关系管理系统/15.2 用户登录:门卫值班
- 第十五章 综合项目:客户关系管理系统/15.3 客户信息:第一件货物
- 第十五章 综合项目:客户关系管理系统/15.4 个人信息:第二件货物
- 第十五章 综合项目:客户关系管理系统/15.5 登录管理:管理班转正
- 第七章 集合/7.1 集合概述:扩容钩子的正主,下一阶段可回访