在大中型超市门口一般都放置有很多存放包的箱子,顾客可以将不能带入超市的物品暂存在里面,购物结束后在取回。顾客使用箱子的整个流程为:按“存”按钮——“找到空箱子,产生密码”(系统完成)——“打印密码,打开箱子”(系统完成)——“取密码纸存包,并关闭箱子,入超市购物”;“购物结束”——“输入密码”——“找到对应的箱子并打开”(系统完成)——“取包”。现要求设计程序模拟以上系统功能,并且操作简单、界面清晰、灵活、实用、方便等。
(当空箱子被顾客申请得到时,系统自动生成6位密码,此密码不能与正在使用的任何一个箱子的密码相同。)
已经写完第三类了........让我好好歇会
#include<iostream>
#include<iomanip>
#include<stdlib.h>
#include<time.h>
using namespace std;
int prepas[21]={0}; //定义数组下标1~20为箱子编号 存储各个箱子密码
int bag[21]={0}; //定义标记数组 值为1表示箱子已满 值为0表示箱子为空
class mima //密码类
{
private:
int password; //密码
public:
mima() //密码类构造函数
{
srand((int)time(0)); //生成随机数种子
password=rand()%100000+900000; //随机生成密码
}
void start(); //初始界面
int getpassword(); //获取密码信息
int findbag(); //寻找可以存包的箱子
void remake(); //密码重置
void print(); //打印箱子
bool issame(); //判断密码是否相同
void show(); //显示密码
int paking(); //存包
void takeout(); //取包
};
void mima::start() //定义开始界面
{
cout<<endl<<endl<<endl<<endl<<endl;
cout<<" 尊敬的用户您好!!!"<<endl;
cout<<"---------------------------------------------"<<endl;
cout<<" 青岛农业大学物品管理系统为您服务"<<endl;
cout<<"-----------------------------------------------"<<endl;
cout<<" 1-存包 "<<endl;
cout<<" 2-取包 "<<endl;
cout<<" 0-退出 "<<endl;
cout<<"-----------------------------------------------"<<endl<<endl;
cout<<"请输入要进行的操作的序号:"<<endl;
cout<<endl<<endl;
}
int mima::getpassword() //获取密码函数
{
return password;
}
int mima::findbag() //类外定义寻找存包箱子
{
for(int i=1;i<=20;i++)
{
if(prepas[i]==0)
{
return i; //返回空箱子编号
}
}
return 0; //如果没有找到那么箱子已满,返回0
}
void mima::print() //打印箱子的状态
{
for(int i=1;i<=4;i++)
{
string s;
cout<<"-----"<<" "<<"-----"<<" "<<"-----"<<" "<<"-----"<<" "<<"-----"<<" "<<endl;
s=bag[5*i-4]?"满":"空"; //如果bag[i]不为0,那么标记为满,反之标记为空
cout<<"|"<<s<<"|"<<" ";
s=bag[5*i-3]?"满":"空";
cout<<"|"<<s<<"|"<<" ";
s=bag[5*i-2]?"满":"空";
cout<<"|"<<s<<"|"<<" ";
s=bag[5*i-1]?"满":"空";
cout<<"|"<<s<<"|"<<" ";
s=bag[5*i]?"满":"空";
cout<<"|"<<s<<"|"<<" "<<endl;
cout<<"-----"<<" "<<"-----"<<" "<<"-----"<<" "<<"-----"<<" "<<"-----"<<" "<<endl;
cout<<setw(2)<<setfill('0')<<(i-1)*5+1<<"号 "<<" "<<setw(2)<<setfill('0')<<(i-1)*5+2<<"号 "<<" ";
cout<<setw(2)<<setfill('0')<<(i-1)*5+3<<"号 "<<" "<<setw(2)<<setfill('0')<<(i-1)*5+4<<"号 "<<" "<<setw(2)<<setfill('0')<<(i-1)*5+5<<"号 "<<" "<<endl;
cout<<endl<<endl;
}
}
bool mima::issame() //类外定义判断密码相同的函数
{
for(int i=1;i<=20;i++)
{
if(bag[i]==1||prepas[i]==password) //如果箱子存了东西或者或者密码和之前的密码相同,返回0
{
return 0; //如果密码和之前的密码相同,那么返回0
}
}
return 1; //如果没有和之前按相同的密码,返回1
}
void mima::remake() //类外定义密码重置函数
{
srand((int)time(0)); //初始化随机数种子
password=rand()%900000+100000; //随机生成密码
}
void mima::show() //类外定义显示密码函数
{
cout<<"您的密码是"<<password<<endl;
}
int mima::paking() //类外定义存包函数
{
if(findbag()) //如果有空
{
cout<<"您的箱子号是:"<<findbag()<<endl;
int k=findbag(); //将找到的箱子号赋给k
prepas[k]=password; //将此箱子出密码初始化
if(issame()) //如果密码和之前的相同那么就重新随机一个
{
remake();
}
else
{
bag[k]=1; //将此箱子标记为满
show(); //显示密码
}
}
else
{
cout<<"箱子已满,请耐心等待"<<endl;
return 1;
}
}
void mima::takeout()
{
cout<<"请输入您的密码:"<<endl;
int k=0;
cin>>k;
for(int i=1;i<=20;i++)
{
if(prepas[i]!=0&&prepas[i]==k) //如果第i号箱子密码为0(箱子为空)那么就跳过,如果和之前的匹配返回1
{
prepas[i]=0; //将取出包的箱子密码置为0
bag[i]=0; //将取出包的箱子标记置为0
cout<<"箱子已打开,请拿好您的随身物品,谢谢光临!!!"<<endl;
return;
}
}
cout<<"您输入的密码错误!!!"<<endl;
cout<<"输入1重新输入,输入0退出"<<endl;
int order; //定义指令数 0表示退出 1表示重新输入
cin>>order; //输入order
switch(order)
{
case 0:
break; //order为0退出
case 1:
takeout();
break; //order为1重新输入
default: //其他情况
cout<<"您输入的指令格式不正确,请重新输入"<<endl;
takeout();
break;
}
}
int main()
{
int caozuo; //定义操作数对象
cout<<" 尊敬的用户您好!!!"<<endl;
cout<<"---------------------------------------------"<<endl;
cout<<" 青岛农业大学物品管理系统为您服务"<<endl;
cout<<"-----------------------------------------------"<<endl;
cout<<" 1-存包 "<<endl;
cout<<" 2-取包 "<<endl;
cout<<" 0-退出 "<<endl;
cout<<"-----------------------------------------------"<<endl<<endl;
cout<<"请输入要进行的操作的序号:"<<endl<<endl<<endl;
while(cin>>caozuo)
{
mima a;
switch(caozuo)
{
case 0: //输入0退出
break;
case 1:
a.paking();
break;
case 2:
a.takeout();
break;
default:
cout<<"您输入的操作数无效,请重新输入"<<endl;
break;
}
a.print();
a.start();
}
}
欢迎指教!!!