存包柜C++
超市门口的存包柜有n个存包箱,并且有1个投币开箱控制器,每个逛超市的顾客若要存一下自己的手提包后小件物品时,只要往控制器投入1个1元的硬币,如果有空的箱子,就会自动打开一个空的箱子,并且自动打印输出一张小小的密码纸条;如果箱子没有空,则提示本柜已满。当顾客离开超市时,用密码纸条上指定的数字密码依次输入到开箱控制器,则顾客所存包的箱子门就自动打开,顾客取走物品后,关上门。请编写开箱控制程序实现上述过程。
输入数据时,可先输入存包柜总数n,再由用户选择是“投硬币”还是“输密码”。
如果“投硬币”,则只有硬币值是1才开箱。如果有空柜,则输出空柜编号及密码(长度自定);如果无空柜,则提示:“本柜已满”。
如果“输密码”,如果输入的密码与某一柜子密码相符,则显示打开的柜子编号,否则输出提示:“密码错误”。问题补充:
请写一下C++程序
最佳答案:
#include <iostream>
using namespace std;
struct GuiZi//每个存包柜属性
{
long password;//每个柜子密码
bool isempty;//是否是空柜子
};
class Bag//存包柜
{
public:
Bag();
~Bag();
long PushBag();//存物品
bool GetBag(long password);//取物品
private:
GuiZi* guizi;
};
Bag::Bag()
{
int n;
cout<<"请输入柜子个数:";
cin>>n;
guizi = new GuiZi[n];
int temp = 10000;
for (int i=0; i<n; i++)
{
guizi ->isempty = true;//起初每个柜子为空
guizi ->password = ++temp;//密码值设定
guizi++;
}
}
Bag::~Bag()
{
delete guizi;
}
bool Bag::GetBag(long password)
{
GuiZi* current = guizi;
while( current)
{
if(current ->password == password && current ->isempty != true)//取物品时,需找不为空且密码符合的柜子
{
current ->isempty = 1;//取出物品后该柜子空了
cout<<"请取出物品!<<endl";
return true;
}
else
current++;
}
cout<<"密码错误!<<endl";//密码错误
return false;
}
long Bag::PushBag()
{
GuiZi* current = guizi;
while(current)
{
if(current ->isempty == true )//存物品时,需找空柜子
{
cout<<"请放进物品,保存好密码!<<endl";
current ->isempty = false;//存放后,该柜子不为空了
return current ->password;//返回密码,让客户保存
}
else
current++;
}
cout<<"存储柜已满!"<<endl;//所有柜子都满了
return -1;
}
int main()
{
long password;
bool flag = 0;//0标示存物品,1标示取物品
Bag bag;
while(1)//模拟很多客户不停存取物品的规程,故为死循环
{
//……重要的都写出来了,剩下的自己写了哈
}
return 0;
}
其 他 回 答: (共2条)
1楼
你的这个程序我帮一个网友改过 你参考一下吧
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
int mima(void);
int main(void)
{
long bags[N]={0}; //有N个箱子,初始化数据
int i,a,b=0,pass,flag1=0,flag2;//a为命令选择,b为硬币,flag1判断是否有空位,flag2判断是否密码重复
do{
printf("投硬币按1\n输密码按2\n");
printf("你的选择是:");
scanf("%d",&a);
if(a==1){
//存包
printf("请投硬币(按1)\n");//投币
scanf("%d",&b);
for(i=0;i<N;i++) //是否有空位
if(bags[i]==0)
{
flag1=1;
if(b==1){
do { //密码是否重复
flag2=0;
pass=mima();
for(int j=0;j<N;j++) //用i来判断 密码是否重复 影响了 你是否有空位的循环 因为 i的值被修改了
if(bags[j]==pass)
flag2=1;
}while(flag2); //while 应该放在外面 与do连成一个do while语句,
bags[i]=pass;
printf("第%d号箱子的密码是%d\n",i+1,pass);
break;
}
}
if(flag1==0)
printf("本柜已满");
}
else if(a==2){ //取包
printf("请输入你的密码:");
scanf("%d",&pass);
for(i=0;i<N;i++)
{
if(bags[i]==pass)
{
printf("您的柜子是%d号\n",i+1);
break;
} //漏了一个花括号
}
if(i>=N)
printf("密码错误");
}
else
printf("输入错误,请重输");
}
while(1); //这里是不是打错了 怎么 1==1???
return 0; //主函数返回一个 0对应 int main
}
int mima()
{
int a[6],i;
srand((unsigned)time(NULL));
for(i=0;i!=6;++i)
{
a[i]=rand()%10;
}
return a[0]*100000+a[1]*10000+a[2]*1000+a[3]*100+a[4]*10+a[5];
}
查看更多相关问题 >>