饮料自动售货机系统设计摘要:设计一个饮料机,实现计算应找钱数,找币,以及销售量统计等多种功能。
1. 引言自动售货机像磁卡电话、银行柜员机一样,以方便、新颖、文明、昼夜服务等特点,成为发达国家不可缺少的便民配套设施。
如今的自动售货机可以为顾客提供多种服务。
顾客可以根据自己的需要选择商品并投入钱币,售货机接收钱币,售出商品。
2. 问题描述该设计模拟自动售货机的工作原理和方式,完成出售商品、接收钱币、找零钱等功能。
与系统交涉的人有两类:送货员和顾客。
送货员在每周固定时间查看售货机中的饮料数量和钱币数量情况,并根据计划适当添加饮料。
同时,送货员也可以根据需要通过重新初始化增加饮料的种类, 或修改饮料的价格。
顾客根据需要选择饮料,投入钱币,并等待售货机的响应。
售货机(所设计的系统)所做的响应:如果售货机中没有该种饮料,则退回上一步,交易失败。
否则,如果售货机中有该种饮料,则判断顾客所投钱币是否足够,如果不够,则提示顾客交易失败,并退回上一步。
如果顾客所投的钱币够所购买的饮料,则售出饮料并询问是否继续购买。
如果不需购买则进行找币,返回初始界面。
当然,实际生活中的售货机可能有更加强大的功能和更完善的处理,这里只模拟一个售货机系统,所以只实现其核心原理,并练习和提高分析问题能力和编程能力。
问题模型如图所示3. 数据结构设计3.1 类结构体说明采用了<iostream.h> 和<string.h> 建立了一个饮料机类class ylj {public:ylj(){count=0;}ylj(string a,double b){name=a;price=b;count=0;}void disp();void goumai();void gm();int count;string name;double price;int stock;};Count 为销售量计数器,name为饮料名称,price 为饮料价格,stock 为饮料存货量3.2 函数说明disp() 函数用于输出对象。
goumai(); 函数用于购买时的统计。
gm(); 函数用于当购买失败时的返回处理。
zhaobi(int a) 用于对元的找币。
zhaobj(int a) 用于对角的找币。
4. 算法设计#include<iostream>#include<string>using namespace std;double sum;#define password 123456class ylj{public: ylj(){count=0;}ylj(string a,double b){name=a;price=b;count=0;}void disp();void goumai();void gm();int count;string name;double price;int stock;};void ylj::disp() // 输出函数{cout<<" 饮料:"<<name<<" 价格"<<price<<"存货量"<<stock<<endl;}void zhaobi(int a) // 找币函数(元){int b,c;cout<<" 找币为"<<endl;b=a/50;c=a%50;if(b)cout<<b<<" 张五十元"<<endl;b=c/20;c=c%20;if(b)cout<<b<<" 张二十元"<<endl;b=c/10;c=c%10;if(b)cout<<b<<" 张十元"<<endl;b=c/5;c=c%5;if(b)cout<<b<<" 张五元"<<endl;cout<<c<<" 张一元"<<endl;}void zhaobij(int a) // 找币函数(角){int b,c;b=a/5;c=a%5;if(b)cout<<b<<" 枚五角"<<endl; cout<<c<<" 枚一角"<<endl; void ylj::goumai() // 购买函数{sum+=price;count++;stock--;}void ylj::gm() // 购买失败函数{sum-=price;count--;stock++;}void main() // 主函数{int pw,i,n,choice,c,xz,x,xx,pd,yuan,b,jiao;double money=0;choice=0;xz=0;pd=0;ylj *a; // 定义饮料机对象数组cout<<" 进行饮料机初始化,请输入有几种饮料"<<endl;cin>>n; a=new ylj[n]; // 分配空间for(i=0;i<n;i++) // 对饮料机进行初始化{cout<<" 请输入第"<<i+1<<" 种饮料名称"<<endl; cin>>a[i].name;cout<<" 请输入第"<<i+1<<" 种饮料价格"<<endl; cin>>a[i].price;cout<<" 请输入第"<<i+1<<" 种饮料现有量"<<endl; cin>>a[i].stock;if(i==(n-1))cout<<" 输入完毕"<<endl;}cout<<" 目前已有饮料明细为"<<endl;for(i=0;i<n;i++)a[i].disp();while(x!=3) // 界面系统{cout<<" 请选择您的身份:进货员 ----- 1 顾客2 如果要终止系统请按3"<<endl;cin>>x;switch(x){case 1: // 进货员系统cout<<" 请输入密码"<<endl; // 密码判断cin>>pw;if(pw==password){while(xx!=3){cout<<" 目前已有饮料明细为"<<endl;for(i=0;i<n;i++)a[i].disp();cout<<" 请输入要进行的操作:1 --------------- 查询销售统计2--- 补货3--- 返回上一级"<<endl;cin>>xx;switch(xx){case 1:for (i=0;i<n;i++)cout<<a[i].name<<" 售出"<<a[i].count<<" 瓶"<<endl;break;case 2:for (i=0;i<n;i++){cout<<a[i].name<<" 补货多少瓶"<<endl;cin>>b;a[i].stock+=b;}break;case 3:break;}}break;}else cout<<" 密码错误"<<endl;break;case 2:while(xz!=4) // 顾客系统{cout<<" 目前已有饮料明细为"<<endl;for(i=0;i<n;i++)a[i].disp();cout<<" 当前饮料机中共有余额"<<money<<endl;cout<<" 请输入要进行的操作: 1 购买2--- 找币3--- 查询销售统计4 ----- 退出系统"<<endl;cin>>xz;switch(xz)case 1:cout<<" 是否已投币是---1 ,否---2"<<endl;cin>>pd;if(pd==2){cout<<" 请投币"<<endl;cin>>money;} while(choice<1||choice>n){cout<<" 请选择购买第几种饮料"<<endl;cin>>choice;if(choice<1||choice>n)cout<<" 输入错误,请重新输入"<<endl;}c=choice-1;cout<<" 您所购买的是"<<endl;a[c].disp();a[c].goumai();money-=a[c].price;if(money<0){cout<<" 钱不够啦买不起,请继续投币"<<endl;money+=a[c].price;a[c].gm();}else if(a[c].stock<0){cout<<" 抱歉没货啦请选择别的饮料"<<endl;money+=a[c].price;a[c].gm();}choice=0;break;case 2:cout<<" 应找"<<money<<"元"<<endl;yuan=money;jiao=(money-yuan)*10;zhaobi(yuan);zhaobij(jiao);money=0;break;case 3:for (i=0;i<n;i++)cout<<a[i].name<<" 售出"<<a[i].count<<"瓶"<<endl;cout<<" 总计销售额为"<<sum<<"元"<<endl;case 4:break;}}break;case 3:break;}5. 程序运行的结果5.1 饮料机初始化5.2 身份选择5.2.1 顾客界面5.2.2 进货员界面6 实现技术讨论运用了类进行饮料的存储。