第十七周--课程设计

来源:互联网 发布:vb.net 注释快捷键 编辑:程序博客网 时间:2024/06/18 11:36

问题及代码:

/*版权所有 (C)DWW文件名称:银行业务的模拟系统.cpp内容摘要:银行排队办理业务作者:杜文文完成日期:2015 年12月 25日*/

<pre name="code" class="cpp">#include <iostream>#include <queue>//队列的头文件#include <stdlib.h>//C语言标准的包含库头文件#include <stdio.h>#include <time.h>#include <ctime>#include "windows.h"//WINDOWS.H是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。using namespace std;int AverageTime;//平均时间/****************************************************************功能描述:输出主要界面输入参数:无输出参数:标题 时间 单位时间 当前时间其他说明:服务时间为0-100****************************************************************/void  DisplayWindows(int presenttime,int servingtime, int waittime)//现在的时间;服务的时间;等待的时间{cout<<"************银行业务的模拟系统*************"<<endl;cout<<"                                                   "<<endl;cout<<"***********银行服务时间0--"<<servingtime<<"************"<<endl;cout<<"                                                   "<<endl;cout<<"**该系统每隔"<<waittime<<"单位个时间显示窗口信息****"<<endl;cout<<"                                                   "<<endl;cout<<"当前时间为"<<presenttime<<""<<endl;}/****************************************************************功能描述:顾客信息输入参数:无输出参数:顾客服务的时间          顾客等待的时间  顾客进去的时间其他说明:id从0开始****************************************************************/class Customer//顾客信息{public:Customer(){ServTime=0;enterTime=0;startTime=0;cID=0;endTime=0;}void Reset(){ServTime=0;enterTime=0;startTime=0;cID=0;endTime=0;}Customer(const Customer& anthercustomer)//复制构造函数{enterTime=anthercustomer.enterTime;startTime=anthercustomer.startTime;servDurance=anthercustomer.servDurance;ServTime=anthercustomer.ServTime;cID=anthercustomer.cID;endTime=anthercustomer.endTime;}void SetServTime(int serT){ServTime=serT;}int GetID(){return cID;}int GetEndTime(){return endTime;}int GetStartTime(){return startTime;}int GetSerDurance()//顾客等待时间{return (startTime-enterTime);}int GetServTime(){return ServTime;}void SetEnterTime(int enterT){enterTime=enterT;}void SetEndTime(int endT){endTime=endT;}void SetID(int ID){cID=ID;}void SetSartTime(int startT){startTime=startT;}private:int enterTime,startTime,ServTime,servDurance,cID,endTime;};/****************************************************************功能描述:银行信息输入参数:无输出参数:顾客及等待时间其他说明:id依次增加****************************************************************/class Bank{public:void ResetBank(){while(!servingcustomer.empty())servingcustomer.pop();while(!waitingcustomer.empty())waitingcustomer.pop();}bool Assign(Customer customer)//判断服务窗口有没有完成服务{if(customer.GetEndTime()-customer.GetStartTime()==customer.GetServTime())return true;elsereturn false;}void DisplayWaitingTime(queue<Customer> quecus){AverageTime=0;cout<<"顾客及等待时间:"<<endl;while(!quecus.empty()){cout<<"顾客"<<quecus.front().GetID()<<": "<<quecus.front().GetSerDurance()<<"  ";AverageTime+=quecus.front().GetSerDurance();quecus.pop();}cout<<endl;}queue<Customer> GetCustomerQueue(queue<Customer> queuec){queue<Customer> temp;while(!queuec.empty()){temp.push(queuec.front());queuec.pop();}return temp;}queue<Customer> servingcustomer;queue<Customer> waitingcustomer;};/****************************************************************功能描述:主函数输入参数:无输出参数:判断窗口1-5的完成情况其他说明:单位时间是5****************************************************************/int main(){Bank Bank1;Bank1.ResetBank();queue<Customer> CustomerTrack;queue<Customer> CustomerTrack2;Customer serv1,serv2,serv3,serv4,serv5;int num[5]={0};srand((unsigned) time(0));//播种子const int TimeSlot=100;//假设服务时间段为0-100const int WaitTime=10;//单位时间为10const int ServTime=7;//服务时间为1-7const int UnitTimePeo=10;//单位时间进来的人数为0-9const int StopEnterTime=80;//为了保证所有顾客能完成服务,顾客进入的时间为0-80int PresentTime=0;//初始化当前时间为0int PerTime=10;//每隔5秒显示一次窗口信息int NumberOfCustomer=0;int TimeOfServing=0;int IDtrack=0;while(PresentTime<TimeSlot){Customer tempCustomer;NumberOfCustomer=rand()%UnitTimePeo;for(int j=0; j<NumberOfCustomer;j++){tempCustomer.SetID(++IDtrack);TimeOfServing=1+rand()%ServTime;tempCustomer.SetServTime(TimeOfServing);tempCustomer.SetEnterTime(PresentTime);Bank1.waitingcustomer.push(tempCustomer);}int nnn=0;for(int t=0;t<WaitTime+nnn;t++){if(Bank1.Assign(serv1))//窗口1完成{if(serv1.GetID()!=0)CustomerTrack.push(serv1);serv1.Reset();if(!Bank1.waitingcustomer.empty()){serv1=Bank1.waitingcustomer.front();serv1.SetSartTime(PresentTime);serv1.SetEndTime(PresentTime);Bank1.waitingcustomer.pop();Bank1.servingcustomer.push(serv1);num[0]++;}}else{serv1.SetEndTime(PresentTime);}if(Bank1.Assign(serv2))//窗口2完成{if(serv2.GetID()!=0)CustomerTrack.push(serv2);serv2.Reset();if(!Bank1.waitingcustomer.empty()){serv2=Bank1.waitingcustomer.front();serv2.SetSartTime(PresentTime);serv2.SetEndTime(PresentTime);Bank1.waitingcustomer.pop();Bank1.servingcustomer.push(serv2);num[1]++;}}else{serv2.SetEndTime(PresentTime);}if(Bank1.Assign(serv3))//窗口3完成{if(serv3.GetID()!=0)CustomerTrack.push(serv3);serv3.Reset();if(!Bank1.waitingcustomer.empty()){serv3=Bank1.waitingcustomer.front();serv3.SetSartTime(PresentTime);serv3.SetEndTime(PresentTime);Bank1.waitingcustomer.pop();Bank1.servingcustomer.push(serv3);num[2]++;}}else{serv3.SetEndTime(PresentTime);}if(Bank1.Assign(serv4))//窗口4完成{if(serv4.GetID()!=0)CustomerTrack.push(serv4);serv4.Reset();if(!Bank1.waitingcustomer.empty()){serv4=Bank1.waitingcustomer.front();serv4.SetSartTime(PresentTime);serv4.SetEndTime(PresentTime);Bank1.waitingcustomer.pop();Bank1.servingcustomer.push(serv4);num[3]++;}}else{serv4.SetEndTime(PresentTime);}if(Bank1.Assign(serv5))//窗口5完成{if(serv5.GetID()!=0)CustomerTrack.push(serv5);serv5.Reset();if(!Bank1.waitingcustomer.empty()){serv5=Bank1.waitingcustomer.front();serv5.SetSartTime(PresentTime);serv5.SetEndTime(PresentTime);Bank1.waitingcustomer.pop();Bank1.servingcustomer.push(serv5);num[4]++;}}else{serv5.SetEndTime(PresentTime);}if(PresentTime%PerTime==0){CustomerTrack2=Bank1.GetCustomerQueue(Bank1.servingcustomer);system("cls");DisplayWindows(PresentTime,TimeSlot,PerTime);/*显示窗口1-5的服务ID*/cout<<endl;cout<<"**当前时间窗口服务的顾客的ID,0为没有顾客**"<<endl;cout<<"窗口1的ID:"<<serv1.GetID()<<"  ";cout<<"窗口2的ID:"<<serv2.GetID()<<"  ";cout<<"窗口3的ID:"<<serv3.GetID()<<"  ";cout<<"窗口4的ID:"<<serv4.GetID()<<"  ";cout<<"窗口5的ID:"<<serv5.GetID()<<endl;/*显示正在等待的顾客的数量*/cout<<"正在等待的顾客的数量:"<<Bank1.waitingcustomer.size()<<endl;cout<<endl;Bank1.DisplayWaitingTime(CustomerTrack2);Sleep(2000);}PresentTime++;if(PresentTime==80)nnn=20;}}int TotalNum=0;for(int rr=0;rr<5;rr++){cout<<"窗口"<<rr+1<<"服务顾客数量:"<<num[rr]<<endl;TotalNum+=num[rr];}cout<<"顾客平均等待时间为:"<<static_cast<double>(AverageTime)/static_cast<double>(TotalNum)<<endl;system("pause");return 0;}


运行结果:



0 0