# 期中考试复习 > **考试**:2022-2023学年第1学期《软件需求分析与设计》期中考试 > **满分**:100分 | 选择题30分 + 系统分析题70分 > **系统场景**:在线酒店订房系统 --- ## 📋 试卷结构一览 | 题型 | 题量 | 分值 | 考点 | |------|------|------|------| | 选择题 | 15题 | 30分(2分/题) | UML基本概念、关系类型、面向对象特性 | | 系统分析题 | 7题 | 70分(10分/题) | 7种UML图的实际绘制 | --- ## 🎯 七道大题逐题详解 ### 第1题:用例图(10分) > 画出在线订房系统的用例图。 **答案要点**: **参与者(3个)**:客户、管理员、身份信息平台 **用例(10个)**: - 客户相关:找回密码、注册、身份认证、登录、查询房间、下订单、在线支付 - 管理员相关:登录、房间上线、修改房间信息、房间下线 **关键关系**: - **包含 `<>`**:注册 → 身份认证;下订单 → 查询房间;在线支付 → 下订单 - **关联**:客户↔找回密码、注册、登录、查询房间、下订单;管理员↔登录、房间上线、修改、下线 - **身份认证 → 身份信息平台**(外部系统交互) ⚠️ **易错**:包含关系箭头从基本用例指向包含用例! --- ### 第2题:"找回密码"用例描述(10分) > 写出"找回密码"的完整用例描述。 **参考答案**: | 项目 | 内容 | |------|------| | **用例名** | 找回密码 | | **参与者** | 客户 | | **前置条件** | 客户已注册 | | **基本流程** | ①输入手机号 → ②获取短信验证码 → ③输入验证码 → ④输入新密码(两次) → ⑤两次一致则密码修改成功 | | **备选流程** | 若两次新密码不一致,提示重新输入 | | **后置条件** | 密码修改成功,用户可用新密码登录 | --- ### 第3题:实体类类图(10分) > 画出系统的实体类类图,标注多重性。 **答案要点**: **实体类**:客户(Customer)、房间(Room)、订单(Order)、管理员(Admin) **关系及多重性**: ``` 客户 1 ────── 0..* 订单 (一个客户可以有多个订单) 房间 1 ────── 0..* 订单 (一个房间可以被多次预订) 管理员 0..2 ── 0..* 订单 (管理员处理订单) ``` --- ### 第4题:"找回密码"的基于协作的类图(10分) > 使用边界类、控制类、实体类画出协作类图。 **答案要点**: | 版型 | 类名 | 职责 | |------|------|------| | <> | RetrievePasswordBoundary | 找回密码界面,与用户交互 | | <> | RetrievePasswordControl | 协调找回密码的业务逻辑 | | <> | SMSInterface | 短信接口(外部) | | <> | UserInfo | 用户信息(持久化) | **依赖关系**: ``` Boundary → Control → SMSInterface → UserInfo ``` --- ### 第5题:"找回密码"的顺序图(10分) > 画出"找回密码"的顺序图,标注消息编号。 **答案要点**: **对象**:用户、:RetrievePasswordBoundary、:RetrievePasswordControl、:UserInfo、:SMSInterface **消息序列(核心流程)**: ``` 1: 用户 → 边界类 : 找回密码() 1.1: 用户 → 边界类 : 输入手机号 1.1.1: 边界 → 控制 : 获取短信(手机号) 1.1.1.1: 控制 → SMS : 获取短信(手机号) 2: 用户 → 边界类 : 输入验证码 2.1: 边界 → 控制 : 验证(验证码) 2.1.1: 控制 → UserInfo : 验证(验证码) 3: 用户 → 边界类 : 输入(新密码1, 新密码2) 3.1: 边界 → 控制 : 验证一致性(p1, p2) 3.1.1: [一致] 控制 → UserInfo : 写入新密码 ``` 🔑 **编号规则**:`1` → `1.1` → `1.1.1` 表示嵌套调用,`1.1.1` 必须在 `1.1` 完成之前完成。 --- ### 第6题:"订单"的状态图(10分) > 画出实体类"订单"的状态图。 **答案要点**: ``` 初始 → 待支付 → 已支付 → 已入住 → 完成 ↓ ↓ 取消 失效 ``` | 转移 | 触发事件 | |------|----------| | 初始 → 待支付 | 下单 | | 待支付 → 取消 | 未支付 | | 待支付 → 已支付 | 成功支付 | | 已支付 → 失效 | 超时 | | 已支付 → 已入住 | 入住 | | 已入住 → 完成 | 退房 | --- ### 第7题:"找回密码"的带泳道活动图(10分) > 画出"找回密码"的带泳道活动图。 **答案要点**: **泳道(5条)**:用户 | 找回密码边界类 | 找回密码控制类 | 短信接口 | 用户信息 **活动流程**: ``` 用户:开始 → 找回密码 → 输入手机号 ↓ 控制类 → 短信接口:获取短信验证码 → 返回验证码 ↓ 用户:输入验证码 → 输入2次新密码 ↓ 控制类:验证两次密码 ├─ [不一致] → 结束 └─ [一致] → 用户信息:写入新密码 → 结束 ``` --- ## 📊 七道题的分值分布与重点 | 题号 | 考什么 | 难度 | 必会程度 | |------|--------|------|----------| | 1 | 用例图 | ⭐⭐ | ★★★★★ | | 2 | 用例描述 | ⭐ | ★★★★★ | | 3 | 类图(实体类) | ⭐⭐ | ★★★★★ | | 4 | 协作类图(MVC) | ⭐⭐⭐ | ★★★★ | | 5 | 顺序图(消息编号) | ⭐⭐⭐ | ★★★★ | | 6 | 状态图 | ⭐⭐ | ★★★★★ | | 7 | 活动图(带泳道) | ⭐⭐⭐ | ★★★★ | --- ## 🔑 考前必记要点 1. **包含关系 vs 扩展关系**:包含=必然,扩展=条件。箭头方向不同! 2. **多重性**:`1` `0..1` `0..*` `1..*` 的含义和标注位置 3. **边界类/控制类/实体类**:View/Controller/Model 对应关系 4. **消息编号层级**:`1.1.1` 表示嵌套调用深度 5. **状态图**:别忘了初始状态(实心圆)和终态(圆圈+实心圆) 6. **活动图泳道**:根据参与者来划分,每道一个责任区