自动售货机C++.doc

上传人:laozhun 文档编号:2385511 上传时间:2023-02-17 格式:DOC 页数:11 大小:36KB
返回 下载 相关 举报
自动售货机C++.doc_第1页
第1页 / 共11页
自动售货机C++.doc_第2页
第2页 / 共11页
自动售货机C++.doc_第3页
第3页 / 共11页
自动售货机C++.doc_第4页
第4页 / 共11页
自动售货机C++.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《自动售货机C++.doc》由会员分享,可在线阅读,更多相关《自动售货机C++.doc(11页珍藏版)》请在三一办公上搜索。

1、编写一个程序模拟自动售货机。可以通过向售货机中投入硬币来购买商品。用户从售货机商品列表选择某一商品并投入硬币。如果金额足够,则提供相应商品;如果金额不够,或者该商品已售完,则将硬币退回。维护售货机的工作人员可以为其添加商品或者取走售货款项。利用CRC卡片设计类和类中的方法,同时给出UML图并实现该程序。 扩展功能:1)当售货机金额达到5000元时,将停止买卖,工作人员必须取走货款。2)在金额不够,退还硬币时要提示差多少钱,允许多次投币,由用户决定是继续投币还是退还硬币。代码:#include #include #include using namespace std;const int mim

2、a=10232;class Coin/硬币类public: Coin(string n, double v);/声明构造函数 string get_name() const;/声明“读取硬币名”函数 double get_value() const;/声明“读取硬币面值”函数private: string name;/硬币名 double value;/硬币面值;Coin:Coin(string n, double v)/定义构造函数 name = n; value = v;string Coin:get_name() const/定义“读取硬币名”函数 return name;double

3、Coin:get_value() const/定义“读取硬币面值”函数 return value;class Product/商品类public: Product(string n, double p, int q);/声明构造函数 string get_name() const;/声明“读取商品名”函数 double get_price() const ;/声明“读取商品价格”函数 int get_quantity() const;/声明“读取商品数量”函数 void add_quantity(int amount);/声明“增加商品数量”函数private: string name;/商品

4、名 double price;/商品价格 int quantity;/商品数量;Product:Product(string n, double p, int q)/定义构造函数 name = n; price = p; quantity = q;string Product:get_name() const/定义“读取商品名”函数 return name;double Product:get_price() const /定义“读取商品价格”函数 return price;int Product:get_quantity() const/定义“读取商品数量”函数 return quantit

5、y;void Product:add_quantity(int amount)/定义“增加商品数量”函数 quantity = quantity + amount;class VendingMachine/自动售货机类public: VendingMachine();/声明构造函数 void add_product(Product p);/声明“增加商品”函数 bool select_product(string name);/声明“查询商品”函数 bool add_coin();/判断投币 double return_coins();/退币 double xiaoshouzonge();/计

6、算销售总额 double remove_money();/取走钱币 void get_product();/输出本机上商品的信息 double leiji();/计算已经投币多少 double chae();/计算还差多少金钱 void add_current_payment();/投币过程private: vector products;/存储 product类数据的容器:products(商品) int current_product;/当前选中的商品号 vector current_payment;/存储 coin类数据的容器:current_payment(当前支付的硬币) vecto

7、r coins;/存储coin类数据的容器:coins(硬币总量);VendingMachine:VendingMachine()/定义构造函数 current_product = -1;/默认值为-1void VendingMachine:add_product(Product p)/定义“增加商品”函数 for (int i = 0; i products.size(); i+) if (productsi.get_name() = p.get_name() & productsi.get_price() = p.get_price()/先查询准备增加的商品是否已存在 productsi.

8、add_quantity(p.get_quantity();/如果已经存在,就只增加数量 return; products.push_back(p);/若不存在,就在容器products后增加一个保存新增商品的元组bool VendingMachine:select_product(string name)/查询该商品是否满足出售要求 for (int i = 0; i 0 &xiaoshouzonge()=5000)/如果该商品存在,也储量大于0 扩展功能1 current_product = i;/令当前选中的商品号=查询到的商品号 return true;/返回 true return

9、false;/如果不存在该商品,或储量小于1,返回falsebool VendingMachine:add_coin()/定义“投币”函数 /current_payment.push_back(c);/在容器current_payment后面增加一个名为c的存储Coin类的元组 if (current_product = -1) return false;/如果当前选中的商品号为-1,返回 false double total = 0;/定义一个双精度的值,并将其初始化为0 for (int i = 0; i = productscurrent_product.get_price()/判断支付

10、的硬币总数是否大于等于选中商品的单价 for (int i = current_payment.size() - 1; i = 0; i-) coins.push_back(current_paymenti);/将当前支付的硬币累加到 coin类容量coins里最末尾 current_payment.pop_back();/删除current_payment容器的最后一个元素,并不返回该元素。 /清空容器current_payment productscurrent_product.add_quantity(-1);/当前选中的商品对应的储存量-1 current_product = -1;/

11、令当前选中的商品号为-1 return true;/投币足够购买商品,返回true else return false;/否则返回falsedouble VendingMachine:chae()/计算差额double chae=0;chae=productscurrent_product.get_price()-leiji();return chae;double VendingMachine:return_coins()/退币 double total = 0; for (int i = current_payment.size() - 1; i = 0; i-) total = tota

12、l + current_paymenti.get_value();/计算总共投了多少钱 current_payment.pop_back();/清空容器current_payment return total;/返回投币总数double VendingMachine:leiji()/计算在买当前商品时一共投了多少硬币double leiji=0;for(int i=0;icurrent_payment.size();i+)leiji+=current_paymenti.get_value();return leiji;double VendingMachine:xiaoshouzonge()/

13、计算销售总额double zonge=0;for(int i=0;i= 0; i-) total = total + coinsi.get_value();/计算自动售货机中总的销售额 coins.pop_back();/清空容器coins return total;/返回总销售额void VendingMachine:get_product()/输出所有商品信息 查询功能的实现cout商品名tt单价tt剩余量endl;for(int i=0;iproducts.size();i+) coutproductsi.get_name()tt$productsi.get_price()ttprodu

14、ctsi.get_quantity()m; while(m!=-1)switch(m)case 5:current_payment.push_back(Coin(nickel, 0.05);cout你已投币leiji()美元endl;break;case 10:current_payment.push_back(Coin(dime, 0.1);cout你已投币leiji()美元endl;break;case 25:current_payment.push_back(Coin(quarter, 0.25);cout你已投币leiji()美元endl;break;default:cout请投入正确

15、的硬币!n硬币面值有5、10、25美分三种。m;int main()/ 主函数VendingMachine machine;/ 定义一个自动售货机类 bool more=true; while(more) /进入功能选择界面 cout *; coutntttt 欢迎光临!; coutntttt请选择服务:; coutntttt1 查询ntttt2 购买ntttt3 管理员操作m;/功能选择 system(cls); if(m=1) /查询界面 cout *;coutntttt 欢迎光临!nn;cout本机销售的商品如下:n;machine.get_product();coutnttttt返回请

16、按任何键!endl;string ch;getline(cin,ch); system(cls);/查询有哪些商品 if(m=2) /进入购买界面 cout *;coutntttt 欢迎光临!nn;coutlingshi;/输入需要购买物品的商品名if(machine.select_product(lingshi)/查询是否存在此种商品cout请投入硬币,输入-1结束投币endl;cout本机不设找补,请自备零钱endl;/如果存在,提示投币machine.add_current_payment();/投入硬币过程if(machine.add_coin()/如果硬币足够,且满足其他交易要求,则

17、交易成功cout交易成功!endl;else /否则 扩展功能2cout你投的钱不够,还差machine.chae()元钱。endl;/提示还差多少钱couttttt1 继续投币ntttt2 退币j;while(j=1)/继续投币过程cout请投币endl;machine.add_current_payment();/投币过程if(machine.add_coin()/如果硬币足够,则交易成功cout交易成功!endl;j=-1;/跳出继续投币循环else/投币不足,继续循环投币cout你投的钱不够,还差machine.chae()元钱。endl;coutttttt1 继续投币ntttt2 退

18、币j;if(j=2)/退币过程double tui;tui=machine.return_coins();cout交易失败,共退你tui元钱endl;elsecout本机不出售此商品或此商品已售完!endl;/不满足交易要求coutnttttt返回请按任何键!endl;string ch;getline(cin,ch);system(cls); /商品交易过程 if(m=3) /管理员界面 cout *;coutntttt 欢迎光临!nn;coutmima1;/管理员密码验证coutnttttt确定请按任何键!endl;string ch;getline(cin,ch); system(cls

19、);if(mima=mima1)/如果密码正确/进入管理员权限选择界面cout *;coutntttt 欢迎光临!nn;couttttt管理员权限操作n;couttttt1 增加商品ntttt2 提取金钱n;/选取操作动作coutnttttt确定请按任何键!endl;string ch;getline(cin,ch);system(cls);if(n=1)/增加商品界面cout *;coutntttt 欢迎光临!nn;int x=0;while(x!=-1)cout请输入要增加的商品名、单价、数量(例:kele 0.5 20)na;cinpr;cinqu;Product p1(na,pr,qu

20、);machine.add_product(p1);cout继续增加请输入1,返回请输入-1x;coutnttttt确定请按任何键!endl;string ch;getline(cin,ch);system(cls);/增加商品if(n=2)/提取自动售货机中的所有硬币cout *;coutntttt 欢迎光临!nn;double zonge;zonge=machine.remove_money();couttttt共取走zonge元!endl;coutnttttt确定请按任何键!endl;string ch1;getline(cin,ch1);system(cls);/取走金钱 else/密码错误界面cout *;coutntttt 欢迎光临!nn;couttttt密码错误!;coutnttttt返回请按任何键!endl;string ch2;getline(cin,ch2);system(cls);/密码错误 /管理员操作 return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号