⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shelves.cpp

📁 这是一个dos版的应用程序
💻 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 + -