题目描述:利用循环顺序队列,编写一个食堂打饭排队系统,使其能满足:有三个队列:面条队、大米饭、小吃队。
(a)每个学生的吃饭想法排入不同队列
(b)每个队排在前面的优先打饭
(c)可以查找某个同学排在哪个队列的第几个位置
(d)当打饭结束时,各窗口对今天的收入进行统计出钱数。
(假设面条、米饭、小吃的价格各自都是固定的钱数)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 5
typedef struct Name
{
char na[10];
}name;
typedef struct
{
name data[MAXSIZE];
int front;
int rear;
}SeqQueue;
int search(SeqQueue k,char *name);
void shouru(SeqQueue f,SeqQueue g,SeqQueue h);
int main()
{
SeqQueue q;
SeqQueue r;
SeqQueue s;
int i,j,k;
int d1=0;//队空时三个初始值,每来一个人d*就加1
int d2=0;
int d3=0;
int a,b,c;
q.front=q.rear=0;
r.front=r.rear=0;
s.front=s.rear=0;
int m;
char searchname[10];
do
{
system("cls");
printf("面条:8元/碗\n米饭: 10元/份\n小吃:6元/份\n\n");
printf("1.面条队入队\n");
printf("2.大米队入队\n");
printf("3.小吃队入队\n");
printf("4.输出目前所有队伍信息\n");
printf("5.查找目标学生\n");
printf("6.统计收入\n\n");
printf("请输入信息:\n\n");
scanf("%d",&m);
switch(m)
{
case 1:
if(d1==3)
{
printf("同学你好,面条队已满,请选择其他队伍!");
break;
}
printf("输入学生姓名\n");
scanf("%s",q.data[q.rear].na);
q.rear=(q.rear+1)%3;
d1++;
system("pause");
break;
case 2:
if(d2==4)
{
printf("同学你好,大米队已满,请选择其他队伍!");
break;
}
printf("输入学生姓名\n");
scanf("%s",r.data[r.rear].na);
r.rear=(r.rear+1)%3;
d2++;
system("pause");
break;
case 3:
if(d3==5)
{
printf("同学你好,小吃队已满,请选择其他队伍!");
break;
}
printf("输入学生姓名\n");
scanf("%s",s.data[s.rear].na);
s.rear=(s.rear+1)%3;
d3++;
system("pause");
break;
case 4:
if(d1!=0)
{
printf("面条队\n");
for(i=0;i<d1;i++)
{
printf("%s\n",q.data[i].na);
}
}
if(d2!=0)
{
printf("大米队\n");
for(j=0;j<d2;j++)
{
printf("%s\n",r.data[j].na);
}
}
if(d3!=0)
{
printf("小吃队\n");
for(k=0;k<d3;k++)
{
printf("%s\n",s.data[k].na);
}
}
system("pause");
break;
case 5:
printf("请输入你想查找的学生名字:\n");
scanf("%s",searchname);
a=search(q,searchname);
if(a!=0)
{
printf("%s同学在面条队的第%d个位置\n",searchname,a);
}else if(a==0)
{
b=search(r,searchname);
if(b!=0)
{
printf("%s同学在大米队的第%d个位置\n",searchname,b);
}
}else
{
c=search(s,searchname);
if(c!=0)
{
printf("%s同学在小吃队的第%d个位置\n",searchname,c);
}
}
system("pause");
break;
case 6:shouru(q,r,s);
system("pause");
break;
}
}while(m!=7);
}
int search(SeqQueue k,char *name)
{
int i=0;
int location=1;
while(strcmp(k.data[i].na,name)!=0)
{
location++;
i++;
if(i==k.rear)
{
location=0;
break;
}
}
return location;
}
void shouru(SeqQueue f,SeqQueue g,SeqQueue h)
{
int earningnoodle=8*f.rear;
int earningrice=10*g.rear;
int earningsnack=6*h.rear;
printf("面条队的收入是%d\n",earningnoodle);
printf("大米队的收入是%d\n",earningrice);
printf("小吃队的收入是%d\n",earningsnack);
}