2010-05-28 19:47:52 阅读58 评论1 字号:大中小
课程设计的主要内容
题目描述:自动售货机可以售出A、B、C三种商品,价格分别为2元、3元、6元。顾客可投入面值不超过10元钱币购买商品,自动售货机吐出商品,并且找给用户零钱,设零钱的面值分别为1元、2元和5元。如果商品用完,或者无法找零,则给出用户一个提示:商品已售完,并且退还钱币。为了避免流失顾客,希望你的售货机能够尽可能地给用户找零。为了调查用户的喜好,希望得到三种商品的每日消费数据,并由此来调整货柜中三种货物的存贮量。
其中,商品属性包括:商品代码、商品名、商品单价、商品总量、商品库存量
货币属性包括:货币面值、货币数量
题目要求:编写一个自动售货机系统。实现以下功能:
库存查询:检索当前三种商品的储存量。
销售查询:分别统计今天每种商品的销售量和销售额。
货币查询:统计所有不同面值的货币数目及总金额数,检验货币总金额是否与总销售额一致。
销售界面:顾客投入钱币(总面值不超过10元),选择商品,获得商品和零钱;或者直接显示错误并退还钱币。
为以上各项功能设置一个菜单,顾客只能执行库存查询和购买商品两项功能,销售查询、货币查询必须是持有密码的管理员才能操作。
主要知识点:结构体,结构体数组、函数
难点:找零算法。程序的找零算法应该合理,应优先找给大额的零钞,不够再找给小额零钞。
以下部分是算法:
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <cstdlib>
using namespace std;
const string mima="880716";
struct hb
{ int mianzhi;
int gesh;
};
struct hw
{ int dm[16];
int danjia;
int chuliang;
char mingzi[20];
};
struct jizi
{ struct hb hbi[4];
struct hw hwu[3];
}chushi,shouhou;
void chushihua()
{
ifstream fin;
fin.open("初始化.txt");
strcpy(chushi.hwu[0].mingzi,"kele");
strcpy(chushi.hwu[1].mingzi,"pijiu");
strcpy(chushi.hwu[2].mingzi,"mianbao");
for(int i=0;i<4;i++)
{ fin>>chushi.hbi[i].mianzhi>>chushi.hbi[i].gesh;
fin>>chushi.hwu[i].dm[16]>>chushi.hwu[i].danjia>>chushi.hwu[i].chuliang;
}
shouhou=chushi;
}
void zhaoling(int qianshu,int danjia)
{ int lingqian;
lingqian=qianshu-danjia;
cout<<lingqian;
shouhou.hbi[2].gesh-=lingqian/5;
lingqian=lingqian%5;
shouhou.hbi[1].gesh-=lingqian/2;
lingqian=lingqian%2;
shouhou.hbi[0].gesh-=lingqian;
}
void qianshugbn(int qianshu,int danjia)
{
for(int i=0;i<4;i++)
shouhou.hbi[i].gesh=chushi.hbi[i].gesh;
zhaoling(qianshu,danjia);
shouhou.hbi[3].gesh+=qianshu/10;
qianshu=qianshu%10;
shouhou.hbi[2].gesh+=qianshu/5;
qianshu=qianshu%5;
shouhou.hbi[1].gesh+=qianshu/2;
qianshu=qianshu%2;
shouhou.hbi[0].gesh+=qianshu;
}
void xiaoshou()
{ int qianshu;
int j;
string ch;
cout<<"\n\t *******************************************************";
cout<<"\n\n\t\t\t\t请投币!\n";
cout<<"\n\t\t\t\t您的金额:";
cin>>qianshu;
if(qianshu>10)
do{
cout<<"\n\t\t\t\t请重新投币!\n";
cout<<"\n\t\t\t\t您的金额:";
cin>>qianshu;
}while(qianshu>10);
cout<<"\n\t\t\t\t请选择商品!\n";
cout<<"\n\t\t\t\t1."<<chushi.hwu[0].mingzi<<"\n\n\t\t\t\t2."
<<chushi.hwu[1].mingzi<<endl<<endl<<"\t\t\t\t3."
<<chushi.hwu[2].mingzi<<endl;
cout<<"\n\t\t\t\t您要购买商品序号:";
cin>>j;
cout<<"\n\t\t\t\t确认请按确认键!\n\n\n\n\n\n";
cout<<"\t ********************************************************";
cout<<"\n\t\t\t\t"<<"欢迎光临!";
cin.get();
cin.ignore(1000,'\n');
system("cls");
cout<<"\n\t *******************************************************";
if(qianshu>=chushi.hwu[j-1].danjia)
{ cout<<"\n\t\t\t\t交易成功!"<<endl<<"\n\t\t\t\t您购买的商品为:"
<<chushi.hwu[j-1].mingzi<<endl
<<"\n\t\t\t\t找零:¥";
qianshugbn(qianshu,chushi.hwu[j-1].danjia);
cout<<endl<<"\n\t\t\t\t谢谢惠顾!";
shouhou.hwu[j-1].chuliang=shouhou.hwu[j-1].chuliang-1;
}
else
cout<<"\n\t\t\t\t你所投的金额不足!"<<endl<<"\n\t\t\t\t返回请按任意键!";
cout<<"\n\n\n\n\n\n\n\n\n"<<"\t";
cout<<" ********************************************************";
cout<<"\n\t\t\t\t"<<"欢迎光临!";
cin.get();
}
void chaxun()
{ string ch;
int i,m;
cout.setf(ios::left);
cout<<"\n\t *******************************************************";
cout<<"\n\t\t\t\t请选择查询种类!"<<endl
<<"\n\t\t\t\t1.查看商品存储" <<endl
<<"\n\t\t\t\t2.管理员操作"<<endl;
cout<<"\n\t\t\t\t您选择的操作序号为:";
cin>>i;
cout<<"\n\t\t\t\t确认请按确认键!";
cout<<"\n\n\n\n\n\n\n\n\n"<<"\t";
cout<<" ********************************************************";
cout<<"\n\t\t\t\t"<<"欢迎光临!";
getline(cin,ch);
system("cls");
cout<<"\n\t ************************************************************\n";
switch(i)
{ case 1: cout<<"\n\t\t\t\t售货机中现存商品量为:";
for(m=0;m<3;m++)
cout<<"\n\t\t\t\t"<<shouhou.hwu[m].mingzi<<" "<<shouhou.hwu[m].chuliang<<" "<<endl;
cout<<"\n\t\t\t\t返回请按确认键!";
break;
case 2: cout<<"\n\t\t\t\t输入密码:";
cin.get();
cin>>ch;
if(ch==mima)
{ cout<<"\t\t货物销售情况:"<<endl;
cout<<"\n\t\t\t商品名称\t\t"<<"销售量\n\n";
for(int i=0;i<3;i++)
{
cout<<"\t\t\t"<<chushi.hwu[i].mingzi<<"\t\t\t "
<<(chushi.hwu[i].chuliang-shouhou.hwu[i].chuliang)<<endl;
}
cout<<"\n\t\t资金情况:"<<endl;
cout<<"\n\t售前:面值\t\t总数\t售后:面值\t\t总数\n\n";
for(i=0;i<4;i++)
{ cout<<"\t\t"<<chushi.hbi[i].mianzhi<<"\t\t"<<chushi.hbi[i].gesh;
cout<<"\t\t"<<chushi.hbi[i].mianzhi<<"\t\t"<<shouhou.hbi[i].gesh<<endl;
}
cout<<"\n\n\t";
cout<<" ********************************************************************";
cout<<"\n\t\t\t\t "<<"欢迎光临!";
}
else
cout<<"\n\t\t\t\t您的输入有误!\n\n\t\t\t\t返回请按确认键!";
default:
break;
}
getline(cin,ch);
}
int main()
{ int i;
string ch;
chushihua();
int constr=1;
while(constr)
{ cout<<"\n\t**************************************************\n";
cout<<"\n\t\t\t请选择服务!"<<endl<<"\n\t\t\t1.购买商品"
<<endl<<"\n\t\t\t2.查询"<<endl;
cout<<"\n\t\t\t您选择的操作序号为:";
cin>>i;
cout<<"\n\t\t\t确认请按确认键!";
cout<<"\n\n\n\n\n\n"<<"\t";
cout<<"***************************************************";
cout<<"\n\t\t\t"<<"欢迎光临!";
getline(cin,ch);
system("cls");
switch(i)
{
case 1:xiaoshou();break;
case 2:chaxun();break;
default: constr= 0; break;
}
system("cls");
}
return 0;
}
至于初始化嘛,这里就不给了,需要的人自己设置吧~!