数据结构:队列的应用--食堂打饭排队系统

题目描述:利用循环顺序队列,编写一个食堂打饭排队系统,使其能满足:有三个队列:面条队、大米饭、小吃队。

(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);	
}

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值