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

📄 shop2.cpp

📁 模拟商场,开发工具是c
💻 CPP
字号:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#define scan_cost 2             //扫描一个物品的时间
#define start_cost 4            //打招呼的时间
#define close_cost 92           //找钱的时间
#define max_operator_number 5  //最大的柜台数
#define TIME 2*60*60            //给定的时间,单位是秒
#define max_minutes 2*60        //在0到2分钟内生成一个顾客
#define max_items 45            //每个顾客买5到50件商品
using namespace std;
struct shopper
{
	int id;
	int item;                 //携带的物品数
    int counter_munber;       //在哪个柜台结的帐
	int arrivetime;           //到达柜台的时间
    int departtime;           //结完帐离开的时间
    int wait_time;            //在队列中等待的时间
	int pay_time;             //交费时的时刻
	struct shopper *next;     //指向下个顾客的指针
};

//该函数始终在一个数据链表上操作,这个数据链表就是在主函数中生成的所有顾客队列。
 void serve(struct shopper *p,int shopper_number)
{
  int counter,min,i;
  int finish_time[max_operator_number]; //动态存放在每个顾客选择柜台时,各个柜台将在何时可以对他服务
  float wait_number=0.0;                   
  int max_wait_time=0,ave_wait_time=0;
  int serve_munber=0;
  struct shopper *present,*temp;
  present=p;
 
  for(;present!=NULL;present=present->next)  //确定每个顾客在哪个柜台结帐个
  {
     min=24*60*60;
	 for(i=0;i<max_operator_number;i++)
	 {
		 if(min>finish_time[i])
		 {    
			 min=finish_time[i];
			 counter=i;
		 }
	 }
     
	 temp=p;
	 for(;temp!=present;temp=temp->next)    //确定每个顾客出现在通道时,所有通道等待的人数
	 {
		 if(temp->departtime>present->arrivetime)  {  wait_number++;  }
	 }

     
	 if(finish_time[counter]<present->arrivetime) //确定每个顾客的等待时间,离开的时间
	 {
       present->wait_time=0;
       present->pay_time=present->arrivetime;
	 }
	 
	 else
	 {
       present->wait_time=finish_time[counter]-present->arrivetime;
	   present->pay_time=finish_time[counter];
	 }
	 present->departtime=present->pay_time+start_cost+scan_cost*present->item+close_cost;
	 finish_time[counter]=present->departtime;
	 present->counter_munber=counter;
  }
 
  present=p;
  
  for(;present!=NULL&&present->pay_time<=TIME;present=present->next)//确定平均等待时间和最大等待时间
  {
	  if(max_wait_time < present->wait_time)  {  max_wait_time=present->wait_time;  }
	  ave_wait_time=ave_wait_time+present->wait_time;
       serve_munber++; 
  }
  
  wait_number=wait_number/serve_munber/max_operator_number;
  ave_wait_time=ave_wait_time/serve_munber;
  cout<<"ID    "<<" item    "<<"arrivte_time    "<<"depart_time    "<<"wait_time"<<"   "<<"counter_number"<<endl;
  cout<<"-----------------------------------------------------------------------"<<endl;
  present=p;
  
  while(present!=NULL)  //打印所有信息
  {
   cout<<present->id<<"       "<<present->item<<"       "<<present->arrivetime
	   <<"                 "<<present->departtime<<"          "<<present->wait_time
	   <<"            "<<present->counter_munber+1<<endl;
   present=present->next;
  }

  cout<<"-------------------------------------------------------------------------"<<endl;
  cout<<"the average wait time for acustomer: "<<ave_wait_time<<endl;
  cout<<"the maximum wait time for a customer: "<<max_wait_time<<endl;
  cout<<"the average number of customers waiting in the queue: "<< wait_number<<endl;
 // cout<<"the total time where there more than 3 customers: "<<more_3_time<<endl;
  cout<<"the total number of customers serviced: "<<serve_munber<<endl;
  cout<<"number of customers that haven't served: "<<shopper_number-serve_munber<<endl;
}





//建立主函数,并在主函数中生成一列随机顾客

void main()
 {
  struct shopper *pthis,*pformer,*front;	
  int shopper_number=0,items,interal;
  int  remaintime;
  remaintime=TIME;
  //在给定的2小时内随机生成顾客,并随机得到每个顾客到达柜台的时间和所携带的物品数
  while(remaintime>0) //
  {
	    items=rand()%max_items+6;
	    interal=rand()%max_minutes+1;
		remaintime=remaintime-interal;
		
		if(remaintime<=0)  
		{  
		 break;  
		}
        
		shopper_number++;
        //建立顾客队列。把在2小时之内生成的顾客组成一个链表,该链表按时间顺序连接
		pthis=(struct shopper*)malloc(sizeof(struct shopper));
	
		if(shopper_number==1) 
		{  
			front=pformer=pthis;  
            pthis->id=shopper_number;  
	     	pthis->arrivetime=TIME-remaintime;
		    pthis->item=items;
	    	pthis->next=NULL;

		}
	
		else 
		{
			pformer->next=pthis;
	     	pthis->id=shopper_number;  
	        pthis->item=items;
	        pthis->arrivetime=TIME-remaintime;
	    	pthis->next=NULL;
            pformer=pthis;
        }
  }
  serve(front,shopper_number);//调用子函数,参数为指向队列弟一个元素的指针和队列元素的个数

}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -