银行排队之三:出队

第一次写博客,如有错误,欢迎指出,谢谢!`
问题描述
现在银行都有排队叫号系统,如果你到银行去办理业务,首先取得一个顺序号,并告诉你前面有多少人在等待。 现在请你设计、并实现该系统。 客户信息包括:取号的号码、客户银行卡号码、客户类型(包括普通客户和vip客户,分别用Ordinary和VIP表示)。 本题要求实现以下功能: (1)客户进入银行并取号,该功能对应的命令为IN number type,number表示客户银行卡号码,type表示客户类型。 (2)在上一题基础上,按取号顺序列出当前未办理业务的客户信息,该功能对应的命令为LIST。 (3)客户办理完业务并离开银行,该功能对应的命令为OUT。 (4)退出系统,该功能对应的命令为QUIT。

输入
输入有多行,每行表示一种操作。 本题实现的操作有: IN guestnumber guesttype 其中IN 表示入队,guestnumber表示客户银行卡号码,guesttype有两种取值,分别为Ordinary和VIP,表示普通客户与VIP客户。 LIST 按取号的顺序输出队列中所有排队的客户信息。 OUT 该命令后面没有参数,在队列中的队首的客户出队。 QUIT 退出银行排队系统 请注意:输入的数据中,只有最后一个命令是QUIT命令。

输出
输出有多行,对不同的命令给出不同的输出。 以下是具体的输出说明: IN 客户银行卡号码 客户类型 该命令首先在单独的一行中输出"IN:", 然后再输出客户信息。 客户信息包括客户编号 客户银行卡号码 客户类型 该客户前面的客户数。客户编号由系统在客户取号的时候给定,从1开始顺序编号。 客户类型分为Ordinary和VIP。数据之间用一个空格分开。 请注意: 第一个客户入队后,则该用户的顺序号为1,前面有0个客户等待; 第二个客户入队后,则该用户的顺序号为2,前面有1个客户等待。 以后一直顺序延续。 以此类推。 LIST 该命令首先在单独的一行中输出"LIST:", 后面有若干行按客户取号的顺序输出,每一行输出一个客户的信息,每行的输出格式为 客户编号 客户银行卡号码 客户类型 OUT 该命令首先在单独的一行中输出"OUT:",接下来一行输出办理业务的客户信息,包括顺序号,客户银行卡号码和客户类型。 如果没有办理业务的客户,则输出"FAILED:"。 QUIT 在单独的一行中显示"GOOD BYE!"后结束程序。

输入样列
OUT
IN 1000001 Ordinary
IN 2000003 VIP
IN 2000009 VIP
OUT
OUT
IN 2000008 VIP
LIST
QUIT

输出样例
FAILED:
IN:1 1000001 Ordinary 0
IN:2 2000003 VIP 1
IN:3 2000009 VIP 2
OUT:1 1000001 Ordinary
OUT:2 2000003 VIP
IN:4 2000008 VIP 1
LIST:
3 2000009 VIP
4 2000008 VIP
GOOD BYE!

所以代码如下:


  #include<bits/stdc++.h>  //c++万能头文件,这个对初学者可能好用一点。
  using namespace std;
  int main()
  {
  	struct person  //是结构类型中的一个结构体,用于描述一个数据对象中不同类型的结构数据。
 	{
  		char guestnumber[22],guesttype[22];
  	};
  	struct person p[101];
 	char chushima[11];
 	int wait_people=0,OUT_xuhao=0;
 	while(1)
 	{
 		if(strcmp(chushima,"OUT")==0&&wait_people==0)  //第一次读入OUT时没有客户信息的输入,所以第一行输出“FAILED:"(附:strcmp函数是比较输入字符串与另一个字符串,若两者字符串一样,则结果为0).
 		{
 			cout<<"FAILED:"<<endl;
 		}
 		cin>>chushima;;
 		if(strcmp(chushima,"IN")==0)
 		{
 			cin>>p[wait_people].guestnumber>>p[wait_people].guesttype;  //开始输入一个完整的用户数据信息,其中包含不同类型的结构。
 			cout<<"IN:"<<wait_people+1<<" "<<p[wait_people].guestnumber<<" "<<p[wait_people].guesttype<<“ ”<<wait_people-OUT_xuhao<<endl;
 			wait_people++; //计算输入用户信息的数量.
 		}
 		if(strcmp(chushima,"OUT")==0&&wait_people>=1) //这里可能就是大家普遍遗忘的情况了.
 		{
 			if(OUT_xuhao>=wait_people)
 			{
 				cout<<"FAILED:"<<endl; //连接后面的if来理解,如果输入了n个 用户信息而你输入了n+1个”OUT"指令,n<n+1;所以当输入第n+1个”OUT“指令后,此时没有用户信息了,输出”FAILED“,这种情况很容易被遗忘!
 			}
 			if(OUT_xuhao<wait_people)
 			{
 				cout<<"OUT:"<<OUT_xuhao+1<<" "<<p[OUT_xuhao].guestnumber<<" "<<p[OUT_xuhao].guesttype<<endl;
				OUT_xuhao++; //记录出队了多少个用户的数量。
 			}
 		}
 		if(strcmp(chushima,"LIST")==0)
 		{
			cout<<"LIST:"<<endl;
 			for(int i=OUT_xuhao;i<wait_people;i++) \\已经出队的用户信息不需要打印了,将没有出队的用户信息按顺序打印出来
 			{
 				cout<<i+1<<" "<<p[i].guestnumber<<" "<<p[i].guesttype<<endl;
 			}
 		}
 		if(strcmp(chushima,"QUIT")==0)
 		{
 			cout<<"GOOD BYE!"<<endl;
 			break;  \\这个不能忘,不然会使系统陷入死循环.
 		}
	}
 	return 0;
 }
发布了6 篇原创文章 · 获赞 6 · 访问量 476

猜你喜欢

转载自blog.csdn.net/YSJ367635984/article/details/103077436