- 实验内容及要求:
按照面向对象技术分析汽车租赁系统并建立相应的模型。
客户注册、登录、找回密码、查询车辆信息(包括所有车辆信息、已借车辆信息、租赁历史信息)、修改个人信息、网上预订车辆、电话预定车辆、查询还车时间、取消预定的车辆、可以通过支付宝、微信和网银交订金。
系统维护人员登录系统、查询用户基本信息、注销用户、删除信用不良好的用户、同意用户的预订申请、同意用户的借车信息、同意用户的还车信息、清算用户的费用、催缴到期未还的用户、管理员工信息、分配操作权限给员工和客户
技术人员登录系统、修改个人信息,增加、删除、修改、查询车辆信息。
在汽车租赁系统中:车辆对象的初始状态是可用的车,添加到系统后,是可租借状态; 可租金状态下的车如果被租借,进入租借状态;可租借状态的汽车可以被卖掉;租借状态的汽车可以到期归还,也可能超期;归还的汽车必须先对于汽车进行检测评估,如果检车汽车不能使用则报废;如果汽车可以使用,则加入租借队列等待租赁;如果检测需要维修,则对于车辆进行维修,维修好后再加入租借队列。
要求:
1)建立系统用例模型,要有对于用例图的分析说明,用例描述至少写5个。
2)分析汽车租赁系统功能需求,完成下面顺序图和通信图。
客户注册
客户管理个人信息
客户借车
客户还车
3)画出汽车的状态图。
4)画出电话预订、还车的活动图。
5)完成系统的类图,并对于主要类和类之间的关系进行描述。
6)根据类图导出代码结构,代码结构放到附录
四、实验过程
4.1用例图
- 汽车租赁系统中的用例图简述(10分)
本系统根据功能可以分为三个用例图:
- 客户用例图:主要描述客户注册、登录、找回密码、查询车辆信息(包括所有车辆信息、已借车辆信息、租赁历史信息)、修改个人信息、网上预订车辆、电话预定车辆、查询还车时间、取消预定的车辆、可以通过支付宝、微信和网银交订金。
- 系统维护人员用例图:主要描述系统维护人员登录系统、查询用户基本信息、注销用户、删除信用不良好的用户、同意用户的预订申请、同意用户的借车信息、同意用户的还车信息、清算用户的费用、催缴到期未还的用户、管理员工信息、分配操作权限给员工和客户。
- 技术人员用例图:主要描述技术人员登录系统、修改个人信息,增加、删除、修改、查询车辆信息
- 汽车租赁系统相关用例图(20分,文字描述5分,图15分)
客户相关的用例图中,客户注册、登录、找回密码、查询车辆信息、修改个人信息、网上预订车辆、电话预定车辆、查询还车时间、取消预定的车辆、交订金都是客户可以在系统中完成的操作,因此这十个用例跟读者是关联关系;同时,系统提供了三种不同的查询方式,每一种查询方式都可以继承查询车辆信息的行为和含义,因此,这三种查询方式和查询书籍是泛化关系。系统提供了三种不同的交订金方式,每一种交订金方式都可以继承交订金的行为和含义,因此,这三种交订金方式和交订金是泛化关系,如下图所示
四:用例描述(每个用例10分)
(1)客户注册
用例编号 | UC0001 |
用例名称 | 客户注册 |
用例说明 | 注册新用户,并保存到系统中 |
前置条件 | 无 |
基本事件流 | 1、客户向系统发出“客户注册”请求; 2、系统要求客户填写信息 3、系统自动保存。 |
其他事件流 | 无 |
异常事件流 | 如果客户输入的信息错误,则要求客户重新填写; 如果客户取消输入,则结束用例,不存入到系统。 |
后置条件 | 完成客户信息的录入和存储 |
其他说明 | 无 |
(2)客户登录
用例编号 | UC0001 |
用例名称 | 客户登录 |
用例说明 | 客户进入系统 |
前置条件 | 客户注册 |
基本事件流 | 1、客户向系统发出“登录”请求; 2、系统比对客户信息 |
其他事件流 | 无 |
异常事件流 | 如果客户输入信息错误,则要求客户重新填写信息或者取消; 如果客户取消输入,则结束用例 |
后置条件 | 登录系统 |
其他说明 | 无 |
(3)技术人员登录系统
用例编号 | UC0001 |
用例名称 | 技术人员登录系统 |
用例说明 | 技术人员进入系统 |
前置条件 | 技术人员注册 |
基本事件流 | 1、技术人员向系统发出“登录”请求; 2、系统比对技术人员信息 |
其他事件流 | 无 |
异常事件流 | 如果技术人员输入信息错误,则要求技术人员重新填写信息或者取消; 如果技术人员取消输入,则结束用例 |
后置条件 | 登录系统 |
其他说明 | 无 |
(4)技术人员修改个人信息
用例编号 | UC0001 |
用例名称 | 技术人员修改个人信息 |
用例说明 | 技术人员修改个人信息 |
前置条件 | 技术人员登录系统 |
基本事件流 | 1、技术人员向系统发出“修改个人信息”请求; 2、系统要求技术人员选择修改的信息 3、技术人员录入完成后,选择保存到系统 |
其他事件流 | 无 |
异常事件流 | 如果技术人员输入的信息重复,则要求技术人员填写新的信息或者取消; 如果技术人员取消输入,则结束用例,不存入到系统 |
后置条件 | 完成修改信息的录入和存储 |
其他说明 | 无 |
(5)客户修改个人信息
用例编号 | UC0001 |
用例名称 | 客户修改个人信息 |
用例说明 | 客户修改个人信息 |
前置条件 | 客户登录系统 |
基本事件流 | 1、客户向系统发出“修改个人信息”请求; 2、系统要求客户选择修改的信息 3、客户录入完成后,选择保存到系统 |
其他事件流 | 无 |
异常事件流 | 如果客户输入的信息重复,则要求客户填写新的信息或者取消; 如果客户取消输入,则结束用例,不存入到系统 |
后置条件 | 完成修改信息的录入和存储 |
其他说明 | 无 |
4.2 动态行为模型
4.2.1 顺序图
(1)客户注册
内容 | 说明 |
用例编号 | UC-1 |
用例名称 | 客户注册 |
用例说明 | 客户参与者通过注册获得进入彬使用系统的权限 |
参与者 | 客户 |
前置条件 | 无 |
后置条件 | 系统正确接收用户信息并保存到数据库 |
基本路径 |
|
扩展路径 | 当信息填写不符合要求时不能注册,并给出提示信息 |
内容 | 说明 |
用例编号 | UC-1 |
用例名称 |
|
用例说明 | 客户参与者通过管理个人信息获得进入使用系统的权限 |
参与者 | 客户 |
前置条件 | 无 |
后置条件 | 系统正确接收用户信息并保存到数据库 |
基本路径 |
|
扩展路径 | 当信息填写不符合要求时不能提交,并给出提示信息 |
内容 | 说明 |
用例编号 | UC-1 |
用例名称 | 客户借车 |
用例说明 | 客户参与者通过请求借车获得进入使用系统的权限 |
参与者 | 客户 |
前置条件 | 无 |
后置条件 | 系统正确接收用户信息并保存到数据库 |
基本路径 |
|
扩展路径 | 当信息填写不符合要求时不能借车,并给出提示信息 |
表1.1 客户注册事件流
内容 | 说明 |
用例编号 | UC-1 |
用例名称 | 客户还车 |
用例说明 | 客户参与者通过请求还车获得进入使用系统的权限 |
参与者 | 客户 |
前置条件 | 客户借车 |
后置条件 | 系统正确接收用户信息并保存到数据库 |
基本路径 |
|
扩展路径 | 当信息填写不符合要求时不能还车,并给出提示信息 |
出发状态 | 动作 | 到达状态 |
新车入库 | 登记入库 | 可租借 |
可租借 | 借车 | 已借出 |
可租借 | 出售 | 已卖出 |
借出 | 还车 | 还车 |
借出 | 超期未还 | 超期 |
超期 | 还车 | 还车 |
还车 | 汽车可使用 | 可租借 |
还车 | 需维修 | 维修 |
还车 | 汽车报废 | 销毁 |
维修 | 维修完毕,入库 | 可租借 |
4.3类图(类图必须导出对应的代码框架)
-
-
- 汽车租赁系统中类如表4-2所示。
-
表4-2汽车租赁系统中的类
编号 | 类名称 | 类说明 |
1 | Maintenance | 系统维护人员基本信息 |
2 | Technical | 技术人员基本信息 |
3 | Customer | 客户基本信息 |
4 | Car | 汽车基本信息 |
5 | B Or R Car | 客户的借车还车记录 |
6 | M Operation | 系统维护人员操作 |
7 | T Operation | 技术人员操作 |
8 | C Operation | 客户操作 |
-
-
- 汽车租赁系统中类的属性和操作
-
- Maintenance类
记录与查询系统维护人员基本信息
属性
S1id: 账号,类型为字符串String,private属性
S1password: 密码,类型为int,private属性
S1name: 姓名,类型为字符串String,private属性
S1data: 注册日期,类型为日期Date,private属性
S1phone: 联系电话,类型为int,private属性
方法
Add1(): 增加系统维护人员信息
Delete1(): 删除系统维护人员信息
Update1(): 更改系统维护人员信息
Query1(): 查看个人信息
Lock1(): 保存系统维护人员个人信息
- Technical类
记录技术人员基本信息
属性
S2id: 账号,类型为字符串String
S2password: 密码,类型为字符串int
S2name: 姓名,类型为字符串String
S2data: 注册日期,类型为日期Date
S2phone: 联系电话,类型为int
S2power: 权限,类型为字符串String
方法
Add2(): 增加技术人员信息
Delete2(): 删除技术人员信息
Update2(): 更改技术人员信息
Query2(): 查看个人信息
Lock2(): 保存技术人员个人信息
- Customer类
记录客户基本信息
属性
Cid: 账号,类型为字符串String
Cpassword: 密码,类型为int
Cname: 姓名,类型为字符串String
Cdata: 注册日期,类型为日期Date
Cphone: 联系电话,类型为int
Cpower: 权限,类型为字符串String
方法
Add3(): 添加客户信息
Delete3(): 删除客户信息
Update3(): 更改客户个人信息
Query3(): 查看个人信息
Lock3(): 保存客户个人信息
- Car类
记录汽车基本信息
属性
number: 汽车数量,类型为int
cid: 汽车型号,类型为String
cname: 汽车品牌,类型为String
cdata: 汽车购买时间,类型为Date
cstate: 汽车当前状态,类型为String
方法
Add4(): 增加汽车信息
Delete4(): 删除汽车信息
Update4(): 更改汽车信息
Query4(): 查询信息
Lock4(): 保存汽车信息
- B Or R Car类
记录客户的借车还车信息
属性
Cid: 账号,类型为字符串String
Cname: 客户姓名,类型为String
Cphone: 客户联系电话,类型为int
cname: 汽车品牌,类型为String
cid: 汽车型号,类型为String
Cstate1: 汽车被借时状态,类型为String
Cstate2: 汽车归还时状态,类型为String
borrow: 该车被借用时间,类型为Date
back: 该车归还时间,类型为Date
方法
Add5(): 增加客户的借车还车信息
Delete5(): 删除客户的借车还车信息
Update5(): 更改客户的借车还车信息
Query5(): 查询客户的借车还车信息
Lock5(): 保存客户的借车还车信息
- M Operation类
系统维护人员的相关操作
属性
S1id: 系统维护人员账号,类型为字符串String,private属性
S1password: 密码,类型为int,private属性
S2id: 技术人员账号,类型为字符串String
Cid: 客户账号,类型为字符串String
cid: 汽车型号,类型为String
方法
S1_1():登录系统
S1_2():查询用户基本信息(包括技术人员、客户、系统维护人员)
S1_3():注销用户(包括技术人员、客户、系统维护人员)
S1_4():删除信用不良好的用户(客户)
S1_5():同意用户的预订申请(客户)
S1_6():同意用户的借车信息(客户)
S1_7():同意用户的还车信息(客户)
S1_8():清算用户的费用(客户)
S1_9():催缴到期未还的用户
S1_10():管理员工信息
S1_11():分配权限
- T Operation类
技术人员的相关操作
属性
S2id: 账号,类型为字符串String
S2password: 密码,类型为字符串int
cid: 汽车型号,类型为String
方法
S2_1(): 登录系统
Update2(): 更改技术人员信息
Add4(): 增加汽车信息
Delete4(): 删除汽车信息
Update4(): 更改汽车信息
Query4(): 查询信息
Lock4(): 保存汽车信息
- C Operation类
客户的相关操作
属性
Cid: 账号,类型为字符串String
Cpassword: 密码,类型为int
方法
C_1():客户注册
C_2():登录系统
C_3():找回密码
C_4():查询车辆信息
C_5():网上预订车辆
C_6():电话预订车辆
C_7():查询还车时间
C_8():取消预订的车辆
C_9():交付订金
Update3(): 更改客户个人信息
Query3(): 查看个人信息
-
-
- 类之间的关系如表4-3所示:
-
表4-3类之间的关系
编号 | 类A | 类B | 关系 |
1 | M Operation | Maintenance | 关联 |
2 | M Operation | Technical | 关联 |
3 | M Operation | Customer | 关联 |
4 | M Operation | Car | 关联 |
5 | M Operation | B Or R Car | 关联 |
6 | T Operation | Technical | 关联 |
7 | T Operation | Car | 关联 |
8 | C Operation | Customer | 关联 |
9 | C Operation | Car | 关联 |
10 | C Operation | B Or R Car | 关联 |
重数性分析:
1)一个系统维护人员只能对应自己的信息,一个系统维护人员的信息只能对应一个系统维护人员;因此,M Operation和Maintenance类之间的重数性为1.。。。。1;
2)
一个客户只能对应自己的信息,一个客户的信息只能对应一个客户;因此,C Operation和Customer类之间的重数性为1.。。。。1;
3)
一个技术人员只能对应自己的信息,一个技术人员的信息只能对应一个技术人员;因此,T Operation和Technical类之间的重数性为1.。。。。1;
4)
一个技术人员可以增加、删除、修改、查询多条汽车的信息,而一条汽车信息可以被一个技术人员增加、删除、修改;因此T Operation和Car类之间的重数性为1.。。。。0..n;
5)一个系统维护人员可以管理多个客户信息,一个客户信息只能被一个系统维护人员删除;因此,M Operation和Customer类之间的重数性为1.。。。。0..n;
6)
一个客户可以对应多条或者0条借车和还车记录,一条还车或者借车记录只能对应一个客户;因此,C Operation和Borrow类之间的重数性为1.。。。。0..n;
- 类图如图1-1所示。
图1-1 汽车租赁系统类图
五、总结与分析
在本次实验中遇到了很多问题,比如不能正确将整个系统分好类,而且每个类之间的关系也不能很好保证其是否正确,重数性的计算也有些不确定。同时对类图也有了更深的认识,对之前的知识也有了更深的理解。
- 附录
代码框架
//
//
// Generated by StarUML(tm) C++ Add-In
//
// @ Project : Untitled
// @ File Name : Customer.cpp
// @ Date : 2022/5/15
// @ Author :
//
//
#include "Customer.h"
void Customer::Add3() {
}
void Customer::Delete3() {
}
void Customer::Update3() {
}
void Customer::Query3() {
}
void Customer::Lock3() {
}
//
//
// Generated by StarUML(tm) C++ Add-In
//
// @ Project : Untitled
// @ File Name : B Or R Car.cpp
// @ Date : 2022/5/15
// @ Author :
//
//
#include "B Or R Car.h"
void B Or R Car::Add5() {
}
void B Or R Car::Delete5() {
}
void B Or R Car::Update5() {
}
void B Or R Car::Query5() {
}
void B Or R Car::Lock5() {
}
//
//
// Generated by StarUML(tm) C++ Add-In
//
// @ Project : Untitled
// @ File Name : Technical.cpp
// @ Date : 2022/5/15
// @ Author :
//
//
#include "Technical.h"
void Technical::Add2() {
}
void Technical::Delete2() {
}
void Technical::Update2() {
}
void Technical::Query2() {
}
void Technical::Lock2() {
}
//
//
// Generated by StarUML(tm) C++ Add-In
//
// @ Project : Untitled
// @ File Name : M Operation.cpp
// @ Date : 2022/5/15
// @ Author :
//
//
#include "M Operation.h"
void M Operation::S1_1() {
}
void M Operation::S1_2() {
}
void M Operation::S1_3() {
}
void M Operation::S1_4() {
}
void M Operation::S1_5() {
}
void M Operation::S1_6() {
}
void M Operation::S1_7() {
}
void M Operation::S1_8() {
}
void M Operation::S1_9() {
}
void M Operation::Operation10() {
}
void M Operation::Operation11() {
}
//
//
// Generated by StarUML(tm) C++ Add-In
//
// @ Project : Untitled
// @ File Name : C Operation.cpp
// @ Date : 2022/5/15
// @ Author :
//
//
#include "C Operation.h"
void C Operation::C_1() {
}
void C Operation::C_2() {
}
void C Operation::C_3() {
}
void C Operation::C_4() {
}
void C Operation::C_5() {
}
void C Operation::C_6() {
}
void C Operation::C_7() {
}
void C Operation::C_8() {
}
void C Operation::C_9() {
}
void C Operation::Update3() {
}
void C Operation::Query3() {
}
//
//
// Generated by StarUML(tm) C++ Add-In
//
// @ Project : Untitled
// @ File Name : Maintenance.cpp
// @ Date : 2022/5/15
// @ Author :
//
//
#include "Maintenance.h"
void Maintenance::Add1() {
}
void Maintenance::Delete1() {
}
void Maintenance::Update1() {
}
void Maintenance::Query1() {
}
void Maintenance::Lock1() {
}
//
//
// Generated by StarUML(tm) C++ Add-In
//
// @ Project : Untitled
// @ File Name : Car.cpp
// @ Date : 2022/5/15
// @ Author :
//
//
#include "Car.h"
void Car::Add4() {
}
void Car::Delete4() {
}
void Car::Upate4() {
}
void Car::Query4() {
}
void Car::Lock4() {
}
//
//
// Generated by StarUML(tm) C++ Add-In
//
// @ Project : Untitled
// @ File Name : T Operation.cpp
// @ Date : 2022/5/15
// @ Author :
//
//
#include "T Operation.h"
void T Operation::S2_1() {
}
void T Operation::Update2() {
}
void T Operation::Add4() {
}
void T Operation::Delete4() {
}
void T Operation::Update4() {
}
void T Operation::query4() {
}
void T Operation::Lock4() {
}
标签:void,信息,用例,客户,相关,UML,Operation,技术人员 From: https://blog.csdn.net/m0_55709044/article/details/139678685