当前位置:文档之家› 案例十六超市收银系统

案例十六超市收银系统

• 实现收银,根据顾客所交现金,自
动找零。
5页 共#页
目录
目退录出
二、案例分析
➢ 在本案例中,超市收银系统应具备四大基本功能: 商品管理、货架管理、购物篮管理和收银管理。
➢ 货架管理实现库中某种商品的入库、出库、查询及 显示等功能。需要建立一个货架类,通过调用相应 的函数来实现。
➢ 每种商品有单价、条形码、商品名称等属性。商品 管理类实现了设置、获取商品信息、复制商品信息 等功能。
34页 共#页
目录
目退录出
35页 共#页
目录
目退录出
36页 共#页
目录
目退录出
37页 共#页
目录
目退录出
38页 共#页
目录
目退录出
39页 共#页
目录
目退录出
40页 共#页
目录
目退录出
41页 共#页
目录
目退录出
42页 共#页
目录
目退录出
43页 共#页
目录
目退录出
44页 共#页
目录
14页 共#页
CStore
-m_vStore : vector<pStoreElement>
+CStore()() +virtual ~CStore()() +AddGoods(in *pGoods : CGoods, in iNum : int) : bool +QueryGoods(in &strName : string) : int +QueryGoods(in iIndex : int) : int +DeleteGoods(in &strName : string, in iNum : int) : int +DeleteGoods(in iIndex : int, in iNum : int) : int +DeleteAllGoods() +* GetAllGoods() : vector<pStoreElement> +GetGoods(in iIndex : int) : pStoreElement +GetGoods(in &strName : string) : pStoreElement +Print()()
10页 共#页
目录
目退录出
11页 共#页
目录
目退录出
12页 共#页
目录
目退录出
结构体tagStoreElement的结构
<<结构>>tagStoreElement +*pGoods : CGoods +iNum : int
13页 共#页
目录
目退录出
(3)CStore类(货架类)的设计 CStore类的结构如图所示。
案例十六 超市收银系统
本案例知识要点 ➢ 格式化输出 ➢ 结构体的使用 ➢ 类的设计和使用 ➢ 类指针的使用 ➢ 函数重载 ➢ 向量的使用 ➢ 虚函数
1页 共#页
目录
目退录出
一、案例需求
➢ 案例描述
• 模拟“美特好”超市收款过程,根
据货物清单,选定所购货物种类和 数量,实现收银结账。 ➢ 案例效果图
➢ 购物篮管理就是一个小型的货架管理,可以用货架 类来实现。
➢ 收银管理实现商品的结账、找零等任务。需要建立 一个收银台类,通过调用相应的函数来实现。
6页 共#页
目录
目退录出
➢ 其中,需要注意以下一些问题:
• 从货架拿货时,应该将商品拿一部分出去,通
过将商品“复制”一份出去来实现。
• “货架”上有形形色色的商品,因此,这个类
• 另外一个难点是CGoods中的Clone()函数,为了从货架
(超市)中选购一件商品,用户需要从CStore类中复制一 件商品出来,而CStore类中存储的是各种商品的向量,因 此,需要让商品类(CGoods)具有自我复制的功能,而 在复制的过程中,商品的数量应该设为零,至于选购多少 可以让用户调用CGoods类中的成员函数SetNum(int iNum) 来确定。
目录
目退录出
21页 共#页
目录
目退录出
22页 共#页
目录
目退录出
2.主程序设计开始显示超市所有商品的信息输入欲购买商 品的索引号输入欲购买商品的数量继续购买商品吗?去收 银台结账结束NY
(1)函数设计
CStore* PrepareStore() 该函数用于最初“进货”,即向货架中存入一批商品,包 括这些商品的商品索引、商品名称、数量及单价,即创建 一个商店。 返回值: CStore *pStore为Cstore类的指针,代表一个货 架。
目录
目退录出
56页 共#页
目录
目退录出
57页 共#页
目录
目退录出
58页 共#页
目录
目退录出
59页 共#页
目录
目退录出
60页 共#页
目录
目退录出
61页 共#页
目录
目退录出
62页 共#页
目录
目退录出
63页 共#页
目录
目退录出
64页 共#页
目录
目退录出
65页 共#页
目录
目退录出
五、案例总结与提高
void usage() 该函数用于为用户显示操作提示,即告诉“客人”超市购 物的购物流程。 返回值: 无。
23页 共#页
目录
目退录出
(2)主函数设计
在main()函数中,首先分别对3个类定 义一个超市、一个购物篮和一个收银 台对象,然后定义了一个顾客交钱的 变量,并初始化为0。利用上诉类的其 他成员函数来实现购物过程。具体流 程如图所示。
24页 共#页
目录
目退录出
主程序调用流程图
25页 共#页
目录
目退录出
四、案例实现
26页 共#页
目录
目退录出
27页 共#页
目录
目退录出
28页 共#页
目录
目退录出
29页 共#页
目录
目退录出
30页 共#页
目录
目退录出
31页 共#页
目录
目退录出
32页 共#页
目录
目退录出
33页 共#页
目录
目退录出
• 案例效果如图所示。
2页 共#页
目录
目退录出
超市收银系统案例效果图1
3页 共#页
目录
目退录出
超市收银系统案例效果图2
4页 共#页
目录
目退录出
➢ 功能说明
• 显示超市库存商品信息。 • 显示购物流程提示信息。 • 实现收款过程,反复输入所购各种
商品的索引号和购买数量,直到输 入商品索引号“1”,结束购物流程。
+CCounter(in *pBasket : CStore) +virtual ~CCounter() +Bill() : double +Count(in dCash : double) : double +GetCash() : double
CCounter类的结构
19页 共#页
目录
目退录出
20页 共#页
➢ 案例总结
• 在本案例中,比较关键的一步是分析出超市货架这个类,
有些读者可能会将“顾客”抽象为一个类,然后将购物篮 放到顾客这个类中。这是不正确的,因为无法在顾客类中 处理购买货物和清理货物的逻辑。实际上,在整个收银系 统设计中,顾客并没有真正地参与进来,收银台处理的只 是一个又一个的购物篮。顾客真正参与的部分是在main函 数中,通过交互,顾客可以购买商品,可以结账等。
66页 共#页
目录
目退录出
➢ 案例提高 这个案例只是简单地模拟了一个顾客去超市购物的过 程,可以提高的地方还有很多。
• 本案例为了简单起见,只是处理了一个购物篮,也
就是说整个超市只有一个顾客。这不是一个对真实 场景的模拟,真正的场景应该是有多个顾客,可能 会同时去收银台结账,因此收银台处理的应该是一 个购物篮队列,应该单独创建一个线程来追加这个 队列,然后由收银台分别为每个购物篮结账,结完 一个删除一个。
需要向量这个容器来容纳这些商品。向量中仅 存储商品对象是不够的,因为商品没有量的概 念,到底容器中包含多少件此类商品还需要用 另外一个变量来表示,通过把商品对象和商品 数量集成到一个结构体中来实现。
• 如何构建购物篮对象?仔细想一下,“购物篮”
就是一个小型的货架,因此可以用“货架”类 模拟一个购物篮。
目退录出
45页 共#页
目录
目退录出
46页 共#页
目录
目退录出
47页 共#页
目录
目退录出
48页 共#页
目录
目退录出
49页 共#页
目录
目退录出
50页 共#页
目录
目退录出
51页 共#页
目录
目退录出
52页 共#页
目录
目退录出
53页 共#页
目录
目退录出
54页 共#页
目录
目退录出
55页 共#页
8页 共#页
目录
目退录出
9页 共#页
目录
目退录出
CGoods类结构图
CGoods
-m_iIndex : int -m_strName : string -m_dUnitPrice : double
+CGoods(in iIndex : int, in strName : string, in dUnitPrice : double) +~CGoods() +GetName() : string +GetIndex() : int +GetUnitPrice() : double +SetUnitPrice(in dUnitPrice : double) +*Clone() : CGoods
相关主题