📄 shelves.cpp
字号:
//**********************************************************************//
#include "shelves.h"
//显示所有箱子所存放的动物
void shelves::List(unsigned int opt)
{
unsigned int i;
cout.setf(ios::left);
cout.width(8);
cout<<"编号";
cout.width(8);
cout<<"种类";
cout.width(8);
cout<<"姓名";
cout.width(8);
cout<<"种类";
cout.width(8);
cout<<"颜色";
cout.width(8);
cout<<"重量";
cout.width(8);
cout<<"食物"<<endl;
for(i=0;i<12;i++)
{
if(b[i].See()==true)
{
if(opt==0 || opt ==1)//可以显示有动物的箱子
{
cout<<i<<" ";
b[i].Msg();
}
}
else
{
if(opt==0 || opt==2) //可以显示没有存放动物的箱子
{
cout<<i<<" ";
cout<<"没有存放动物"<<endl;
}
}
}
}
//往b号箱子存放动物a
void shelves::Insert(void)
{
unsigned int case_num=0,j=0,k=0;
char temp[10];
shelves sh_t;
//获取待存入宠物的相关信息
while(1)
{
//获取信息
cin>>sh_t;
cout<<"目前可以使用的箱子有:"<<endl;
List(2);//只显示空箱子
cout<<"选择你要存入的箱子"<<endl;
while(1)
{
cin>>case_num;
if(case_num>=12)
{
cout<<"您制定的箱子不存在"<<endl;
cout<<"请输入你要选择的箱子的编号"<<endl;
}
else if(See(case_num)==true)
{
cout<<"对不起"<<case_num<<"号箱已经存在了动物,请您另外选取一个"<<endl;
List(2);
cout<<"请输入你要选择的箱子的编号"<<endl;
}
else
{
cout<<"您选取了"<<case_num<<"号箱子存入您的宠物"<<endl;
break;
}
}
while(1)//获取动物类型
{
cout<<"请选您宠物的类型"<<endl;
cout<<"1、猫"<<endl;
cout<<"2、狗"<<endl;
cout<<"3、蛇"<<endl;
cin>>temp;
for(j=0;temp[j]!='\0';j++)
{
k=k*10+ (temp[j]-'0');
}
if(k!=1 && k!=2 && k!=3)
{
cout<<"您选择的种类不对,请重新选择:"<<endl;
}
else
{
break;
}
}
//获取信息完成
//询问信息是否合法
cout<<"请确认信息:"<<endl;
cout<<"姓名:"<<sh_t.n<<endl;
cout<<"颜色:"<<sh_t.co<<endl;
cout<<"重量:"<<sh_t.k<<"Kg"<<endl;
cout<<"食物:"<<sh_t.f<<endl;
cout<<"种类:";
switch(k)
{
case 1:
cout<<"猫"<<endl;
break;
case 2:
cout<<"狗"<<endl;
break;
case 3:
cout<<"蛇"<<endl;
break;
}
cout<<"准备存入的箱子:"<<case_num<<endl;
cout<<"确认以上信息,请输入'y',否则输入'n'"<<endl;
cin>>temp;
if(temp[0]=='y')break;//信息无误
}//成功获取了待存入宠物的信息
switch(k)
{
case 1://猫
b[case_num].Insert(new Cat(sh_t.n,sh_t.co,sh_t.k,sh_t.f));
used_counter++;//已经使用箱子数加1
break;
case 2://狗
b[case_num].Insert(new Dog(sh_t.n,sh_t.co,sh_t.k,sh_t.f));
used_counter++;//已经使用箱子数加1
break;
case 3://蛇
b[case_num].Insert(new Snake(sh_t.n,sh_t.co,sh_t.k,sh_t.f));
used_counter++;//已经使用箱子数加1
}
}
//取走b号箱子的动物
void shelves::Fetch(void)
{
unsigned int j;
while(1)
{
if(used_counter!=0)//有箱子存放了动物
{
List(1);//只显示存放了动物的箱子
cout<<"请选择你要取走的动物所在的箱子编号:";
cin>>j;
if(j>=12)
{
cout<<"你制定的箱子不存在"<<endl;
}
else if(b[j].See()==false)
{
cout<<"对不起,你制定的箱子尚未存放动物"<<endl;
}
else
{
b[j].Fetch();
used_counter--;//已经使用箱子数减1
break;
}
}
else//所有的箱子都没有存放动物
{
cout<<"所有的箱子都没有存放动物,返回"<<endl;
break;
}
}
}
//查询b号箱子所存放的动物
bool shelves::See(unsigned int n)
{
return(b[n].See());
}
//统计宠物小屋的宠物存放情况
void shelves::Static(void)
{
unsigned int n_c=0,n_d=0,n_s=0;
unsigned int i;
for(i=0;i<12;i++)
{
if(b[i].See()==true)
{
switch(b[i].SeeKind())
{
case 1:
n_c=n_c+1;
break;
case 2:
n_d=n_d+1;
break;
case 3:
n_s=n_s+1;
}
}
}
cout<<"本小楼一共存有:"<<endl;
cout<<"猫:"<<n_c<<"只"<<endl;
cout<<"狗:"<<n_d<<"只"<<endl;
cout<<"蛇:"<<n_s<<"只"<<endl;
}
//************************************************************************//
unsigned int shelves::BoxUsed(void)
{
return(used_counter);
}
//************************************************************************//
void shelves::SetAnimal(char *n_t ,char *co_t, unsigned int k_t, char *f_t)
{
strcpy(n,n_t);
strcpy(co,co_t);
k=k_t;
strcpy(f,f_t);
}
//************************************************************************//
istream& operator>>(istream& dest,shelves &temp)
{
char t[100],v[4][100];
unsigned int i=0,j=0,flag=0;
unsigned int k=0;//临时存放动物重量
cout<<"请输入您宠物的姓名、颜色、重量和食物,中间用逗号','隔开"<<endl;
cout<<"例如:咖啡,红,100,虫子"<<endl;
cin>>t;
//分析读入的字符串,分拆成需要的几个独立字符串
while(1)
{
if(t[i]==',')//一个变量已经输入完成
{
v[flag][j]='\0';//给字符数组加结束符
j=0;//二维指针归0
flag=flag+1;//一维指针指向下一个字符数组
}
else
{
v[flag][j++]=t[i];//读入字符
}
if(t[i++]=='\0')break;//判断是否已经对输入的字符串分析完
}
//判断用户输入的信息是否完整
switch(flag)
{
case 0://只输入了名字信息,还需要输入颜色、重量和食物
{
cout<<"您输入的信息不完整,请输入颜色信息"<<endl;
cin>>v[++flag];
}
case 1://只输入了名字和颜色信息,还需要输入重量和食物
{
cout<<"您输入的信息不完整,请输入重量信息"<<endl;
cin>>v[++flag];
}
case 2://只输入了名字、颜色、重量信息,还需要输入食物信息
{
cout<<"您输入的信息不完整,请输入食物信息"<<endl;
cin>>v[++flag];
}
}
//检查重量信息是否合法
for(i=0;v[2][i]!='\0';)
{
if(v[2][i]>'9' || v[2][i] < '0')//重量信息有错
{
//提示重新输入重量信息
cout<<"您输入的重量信息有错,请输入重量信息"<<endl;
cin>>v[2];
i=0;
}
else
{
i=i+1;
}
}
//将第三个字符串转换成数字
for(i=0;v[2][i]!='\0';i++)
{
k=k*10+ (v[2][i]-'0');
}
//设置属性
temp.SetAnimal(v[0],v[1],k,v[3]);
return dest;
}
//***********************************************************************//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -