饮料销售机UML顺序图文档
引言
本文档为饮料销售机设计过程中的UML顺序图文档,编写成员为开发成员,目的是为了方便后续的开发更顺利并且便利的开展,了解系统功能顺序,对系统有一个更加直观的功能框架。
饮料销售机分析
在自动饮料售货机的“买饮料”场景中,假设饮料销售机有3个部分:前端(front)、钱币记录仪(register)以及分配器(dispenser)。
前端负责:接受顾客的选购和现钞;显示诸如Out of selection(所选饮料已售完)和User correct change(使用合适零钱)的信息;从记录仪接收找回的零钱并返还给顾客;返还现钞;从分配器接收一罐饮料并把它交给顾客。
钱币记录仪负责:从前端获取顾客输入的信息(即选购的饮料的种类和现钞);更新现钞存储;如果缺少零钱将不让系统服务并在前端显示没有零钱;若零钱充足一切正常,找零钱。
分配器负责:检查选购的饮料是否还有货;分发一罐饮料。
类图描述:
(注:该图只提供参考,参数和返回值可自行定义,方法也可以增加)
UML顺序图
在饮料售货机购买饮料的所有情况中,都需要顾客往前端放入金钱,由钱币记录仪判定钞票面额。
1、理想状态下买饮料(购买成功且不用找零)
在理想状态下,顺序如下:
1、顾客放入现钞inputMoney();
2、前端接收现钞并将现钞传给钱币记录仪accept();
3、钱币记录仪对现钞面额进行判断getCustomerInput();
4、钱币记录仪根据现钞面额给分配器发送消息检查该面额可购买的饮料
checkForSoda();
5、分配器向前端返回可购买饮料信息returnSodaFree();
6、前端将可购买饮料显示给顾客displayPrompt();
7、顾客选择饮料chooseSoda();
8、前端将结果给分配器sendChooseToDis();
9、分配器检查是否有该饮料checkAvailability();
10、分配器向前端释放饮料releaseSoda();
11、前端接收饮料并释放出来receiveSoda();
12、购买结束
顺序图如下:
2、顾客要买的饮料售完
在此情况下,顺序如下:
1、顾客放入现钞inputMoney();
2、前端接收现钞并将现钞传给钱币记录仪accept();
3、钱币记录仪对现钞面额进行判断getCustomerInput();
4、钱币记录仪根据现钞面额给分配器发送消息检查该面额可购买的饮料
checkForSoda();
5、分配器向前端返回可购买饮料信息returnSodaFree();
6、前端将可购买饮料显示给顾客displayPrompt();
7、顾客选择饮料chooseSoda();
8、前端将结果给分配器sendChooseToDis();
9、前端检查是否有该饮料checkAvailability();
10、没有该饮料了,返回消息“Out of selection”给前端returnUnavailability();
11、前端显示消息“Out of selection”displayPrompt();
12、前端向钱币记录仪发退钱信息sendReturnCashM();
13、钱币记录仪返还钞票returnCashToFront();
14、前端返还现钞returnCash();
15、交易结束
顺序图如下:
3、需找零钱
在此情况下,顺序如下:
1、顾客放入现钞inputMoney();
2、前端接收现钞并将现钞传给钱币记录仪accept();
3、钱币记录仪对现钞面额进行判断getCustomerInput();
4、钱币记录仪根据现钞面额给分配器发送消息检查该面额可购买的饮料
checkForSoda();
5、分配器向前端返回可购买饮料信息returnSodaFree();
6、前端将可购买饮料显示给顾客displayPrompt();
7、顾客选择饮料chooseSoda();
8、前端将结果给分配器sendChooseToDis();
9、分配器检查是否有该饮料checkAvailability();
10、分配器向前端释放饮料releaseSoda();
11、分配器向钱币记录仪发送该饮料金额信息sendSodaPrice();
12、钱币记录仪判断饮料金额是否小于顾客输入的现钞面值checkForChange();
13、钱币记录仪根据差值提供找零releaseChange();
14、前端接收饮料并释放出来receiveSoda();
15、前端接收找零并返还给顾客receiveChange();
16、购买结束
顺序图如下:
4、没有合适的零钱找给顾客
在此情况下,顺序如下:
1、顾客放入现钞inputMoney();
2、前端接收现钞并将现钞传给钱币记录仪accept();
3、钱币记录仪对现钞面额进行判断getCustomerInput();
4、钱币记录仪根据现钞面额给分配器发送消息检查该面额可购买的饮料
checkForSoda();
5、分配器向前端返回可购买饮料信息returnSodaFree();
6、前端将可购买饮料显示给顾客displayPrompt();
7、顾客选择饮料chooseSoda();
8、前端将结果给分配器sendChooseToDis();
9、分配器检查是否有该饮料checkAvailability();
10、分配器向前端释放饮料releaseSoda();
11、分配器向钱币记录仪发送该饮料金额信息sendSodaPrice();
12、钱币记录仪判断饮料金额是否小于顾客输入的现钞面值checkForChange();
13、钱币记录仪缺少对应面值零钱将信息“User correct change”返回给前端
returnNoChange();
14、钱币记录仪将现金返还给前端returnCashToFront();
15、前端向顾客显示“User correct change”信息displayPrompt();
16、前端将饮料返还给分配器returnSodaToD();
17、前端接收现钞并返还给顾客returnCash();
18、购买结束
顺序图如下:
5、完整顺序图(包含“买饮料”场景的所有正常和异常数据流)
完整情况下,考虑顺序如下:
1、顾客放入现钞inputMoney();
2、前端接收现钞并将现钞传给钱币记录仪accept();
3、钱币记录仪对现钞面额进行判断getCustomerInput();
4、钱币记录仪根据现钞面额给分配器发送消息检查该面额可购买的饮料
checkForSoda();
5、若金额面值过小,钱币记录仪将信息“User correct change”返回给前端
returnNoChange();
6、钱币记录仪将现金返还给前端returnCashToFront();
7、前端向顾客显示“User correct change”信息displayPrompt();
8、前端接收现钞并返还给顾客returnCash();
9、交易结束End
10、若面值足够,分配器向前端返回可购买饮料信息returnSodaFree();
11、前端将可购买饮料显示给顾客displayPrompt();
12、顾客选择饮料chooseSoda();
13、前端将结果给分配器sendChooseToDis();
14、分配器检查是否有该饮料checkAvailability();
15、若没有该饮料,返回消息“Out of selection”给前端returnUnavailability();
16、前端显示消息“Out of selection”displayPrompt();
17、前端向钱币记录仪发退钱信息sendReturnCashM();
18、钱币记录仪返还钞票returnCashToFront();
19、前端返还现钞returnCash();
20、交易结束End
21、若有该饮料,分配器向前端释放饮料releaseSoda();
22、分配器向钱币记录仪发送该饮料金额信息sendSodaPrice();
23、钱币记录仪判断饮料金额是否小于顾客输入的现钞面值checkForChange();
24、钱币记录仪缺少对应面值零钱将信息“User correct change”返回给前端
returnNoChange();
25、钱币记录仪将现金返还给前端returnCashToFront();
26、前端向顾客显示“User correct change”信息displayPrompt();
27、前端将饮料返还给分配器returnSodaToD();
28、前端接收现钞并返还给顾客returnCash();
29、购买结束End
30、若钱币记录仪刚好有对应零钱,钱币记录仪根据差值提供找零releaseChange();
31、前端接收饮料并释放出来receiveSoda();
32、前端接收找零并返还给顾客receiveChange();
33、购买结束End
34、若不需要找零,前端接收饮料并释放出来receiveSoda();
35、购买结束End
完整顺序图如下:。