版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
...wd......wd......wd...理發(fā)館學(xué)號_____110703xx___姓名_____xxx______指導(dǎo)教師______xx______2013年10月目錄1需求分析3程序功能介紹3程序數(shù)據(jù)要求31.3開發(fā)與運(yùn)行環(huán)境需求41.4用戶界面設(shè)計(jì)52數(shù)據(jù)構(gòu)造設(shè)計(jì)72.1主要數(shù)據(jù)構(gòu)造72.2程序整體構(gòu)造112.3模塊功能描述113詳細(xì)設(shè)計(jì) 124測試 224.1正確運(yùn)行例如224.2錯(cuò)誤運(yùn)行例如245總結(jié)提高251需求分析1.1程序功能介紹本程序模擬理發(fā)館一天的經(jīng)營狀況,理發(fā)館的環(huán)境如下:1.理發(fā)館有N把理發(fā)椅,可同時(shí)為N位顧客進(jìn)展理發(fā)(2<N<9);2.理發(fā)師按技術(shù)水平分為三個(gè)等級〔一級最高,三級最低〕,對應(yīng)不同的服務(wù)收費(fèi)。理發(fā)館一天的工作過程如下:1.顧客進(jìn)門時(shí),需要選擇某級別的理發(fā)師,只要該級別的理發(fā)師有空椅,則可立即坐下理發(fā),否則需排隊(duì)等候;2.一旦該級別的理發(fā)師有顧客理發(fā)完離去,排在該位理發(fā)師隊(duì)列隊(duì)頭的顧客便可以開場理發(fā)。理發(fā)館老板統(tǒng)計(jì)每天不同級別理發(fā)師的營業(yè)時(shí)間、創(chuàng)收和每天理發(fā)館總創(chuàng)收,并寫入文本文件中,可作為理發(fā)師工資與獎(jiǎng)金的發(fā)放依據(jù)。1.2程序數(shù)據(jù)要求1.2.1輸入數(shù)據(jù)〔由文本文件輸入〕:7:3061121324352630.6數(shù)據(jù)說明:第一行的09:30表示理發(fā)館將于九點(diǎn)半開門;第二行的6表示理發(fā)館有6張理發(fā)椅(此處可輸入3~9的任意值);隨后的N行:表示第i張椅子的理發(fā)師的級別〔如:第1張理發(fā)椅是1級理發(fā)師,第2張理發(fā)椅是1級理發(fā)師…〕。最后一行的0.6代表折扣〔可選〕1.2.2隨機(jī)數(shù)據(jù)需求:每個(gè)顧客進(jìn)門時(shí)將負(fù)責(zé)生成三個(gè)隨機(jī)數(shù):1〕理發(fā)時(shí)間durtime:進(jìn)門顧客理發(fā)所需服務(wù)時(shí)間;2〕間隔時(shí)間intertime:該顧客與下一位顧客到達(dá)的時(shí)間間隔;3〕服務(wù)選項(xiàng)select:該顧客選擇理發(fā)師的級別。由隨機(jī)數(shù)函數(shù)產(chǎn)生。1.2.3輸出數(shù)據(jù)〔輸出到文本文件中〕:本日賬目清單===============================按理發(fā)師===============================理發(fā)師編號:1級別:1工作時(shí)長:17本日盈收:17理發(fā)師編號:2級別:1工作時(shí)長:29本日盈收:29理發(fā)師編號:3級別:2工作時(shí)長:28本日盈收:14理發(fā)師編號:4級別:3工作時(shí)長:73本日盈收:23理發(fā)師編號:5級別:2工作時(shí)長:24本日盈收:12理發(fā)師編號:6級別:3工作時(shí)長:27本日盈收:9理發(fā)師編號:7級別:3工作時(shí)長:20本日盈收:6理發(fā)師編號:8級別:1工作時(shí)長:30本日盈收:30================================按級別===============================1級別理發(fā)師總工時(shí):76總收入:762級別理發(fā)師總工時(shí):52總收入:263級別理發(fā)師總工時(shí):120總收入:38=================================總匯===============================本日總創(chuàng)收:1401.3開發(fā)與運(yùn)行環(huán)境需求1.3.1開發(fā)環(huán)境:Visualstudio20101.3.2運(yùn)行環(huán)境:Winxp/Win7/Win81.4用戶界面設(shè)計(jì)1.4.1初始化界面〔例:6個(gè)隊(duì)列〕8隊(duì)列界面1.4.2顧客到達(dá)、理發(fā)及等待界面1.4.3顧客離開界面1.4.4DOS/GUI同步演示程序過程1.4.5折扣選擇界面2數(shù)據(jù)構(gòu)造設(shè)計(jì)2.1主要數(shù)據(jù)構(gòu)造2.1.1事件類〔Event〕//事件類:包含事件發(fā)生時(shí)間,事件類型,和下一個(gè)事件〔指針〕三個(gè)數(shù)據(jù)成員classEvent{public:intoccurtime;intevent_type;Event*next_event;Event(){}Event(intoccurtime,intevent_type):occurtime(occurtime),event_type(event_type),next_event(NULL){}~Event(){}};2.1.2事件表〔EventList〕//事件表類:數(shù)據(jù)成員:頭指針,兩個(gè)用于插入刪除事件結(jié)點(diǎn)的指針,和事件表長度classEventList{public:Event*head,*ptr_before,*ptr_after;intlength;//事件表長度EventList(){head=newEvent(-1,-1);length=1;}~EventList(){}voidOrderIn(Event*new_in);intListEmpty();intCmp(Event*new_in,Event*t1);};2.1.3顧客類〔Customer〕classCustomer{public:intdurtime;intselect;Customer*next;Customer():select(-1){}Customer(intdurtime,intselect):durtime(durtime),select(select),next(NULL){}~Customer(){}};2.1.4顧客隊(duì)列類〔CustomerQueue〕classCustomerQueue{public:Customer*front,*rear;intselect;intlength;intworktime;intmoney;CustomerQueue():front(NULL),rear(NULL),select(-1),length(0),money(0),worktime(0){}~CustomerQueue(){}voidEnQueue(Customer*add);voidDelQueue();};2.1.5隨機(jī)函數(shù)類〔Random〕:classRandom{public:intdurtime;intintertime;intselect;Random(){srand((int)time(NULL));}~Random(){}intDurtime();intIntertime();intSelect();};2.1.6文件操作類〔FileOperation〕:classFileOperation{public:intinput_time[2];//接收輸入時(shí)間小時(shí)、分鐘charmaohao;//接收中間的冒號intnumber[11];//用于接收理發(fā)師編號信息intchairs;//理發(fā)師人數(shù)floatdiscount;//折扣〔可選〕charzhekou;FileOperation():discount(1.0){}~FileOperation(){}voidFileInput(ifstream&from_file,int&opentime,CustomerQueuecq[],int&closetime);voidFileOutput(ofstream&to_file,CustomerQueuecq[],int&total_money);};2.1.7繪圖類〔barbergraph〕:classbarbergraph{public:IMAGEbackground_img;//顧客去背景圖片IMAGEbaber_desk;//理發(fā)師桌子背景IMAGEmy_clock;//時(shí)鐘背景IMAGEdoor;//門charnow_time[10];//時(shí)鐘信息存儲charbarber_info[20];//理發(fā)師信息chargraphic_symbol[15];//圖例信息Customer*p;//獲取當(dāng)前動(dòng)作顧客intchairs;//獲取理發(fā)師人數(shù)barbergraph(){//讀取背景圖片集loadimage(&background_img,_T("背景1.jpg"));loadimage(&baber_desk,_T("六張桌子.jpg"));loadimage(&my_clock,_T("時(shí)鐘.jpg"));loadimage(&door,_T("門.jpg"));}voidset_chairs(intchairs);//初始化理發(fā)師人數(shù)voidCommonGraph(CustomerQueuecq[],intopentime);//通用繪圖界面voidBarberGraph(CustomerQueuecq[],intopentime);//無事件狀態(tài)界面voidArriveBarberGraph(CustomerQueuecq[],intarrival,intnowtime);//顧客到來界面voidDepartBarberGraph(CustomerQueuecq[],intdeparture,intnowtime);//顧客離開界面~barbergraph(){}};2.1.8理發(fā)館類〔Barbershop〕:classBarberShop{public:EventListev;//事件表CustomerQueuecq[11];//六個(gè)顧客隊(duì)列1~10可選intopentime;//開門時(shí)間Event*cur_event;//當(dāng)前事件Event*new_event;//初始事件Customer*new_customer;//新顧客指針intclosetime;//TODO:目前為調(diào)試數(shù)據(jù)〔22:00理想,未實(shí)現(xiàn)〕inttotal_money;//理發(fā)館一天總收入intchairs;//接收理發(fā)師人數(shù)BarberShop():cur_event(NULL),new_customer(NULL),total_money(0){}voidOpenForDay(barbergraph&bg,intchairs);//開門初始化函數(shù)intMinimum(intselect);//求同級別最短隊(duì)列函數(shù)voidCustomerArrived(Random&ran,barbergraph&bg);//顧客到來voidCustomerDeparture(barbergraph&bg);//顧客離開voidBarberSimulation(Random&ran,barbergraph&bg,intchairs);//事件驅(qū)動(dòng)模型~BarberShop(){}};2.2程序整體構(gòu)造main2.2.1函數(shù)調(diào)用圖:mainFileoutputFileinputBarberSimulationFileoutputFileinputBarberSimulationListEmptyCustomerDepartureCustomerArrivedOpenForDayListEmptyCustomerDepartureCustomerArrivedOpenForDayDelQueueEnQueueOrderInBarberGraphDelQueueEnQueueOrderInBarberGraphMinimumDepartBarberGraphArriveBarberGraphMinimumDepartBarberGraphArriveBarberGraph2.3模塊功能描述2.3.1Event:作為EventList的結(jié)點(diǎn)元素,數(shù)據(jù):事件類型、事件發(fā)生的時(shí)間2.3.2EventList:事件表,為有序表。數(shù)據(jù):頭指針,時(shí)間表長度length;操作:插入、刪除Event2.3.3Customer:保存顧客信息。數(shù)據(jù):durtime,select2.3.4CustomerQueue:保存顧客隊(duì)列信息以及理發(fā)師信息。數(shù)據(jù):select,length,worktime,money,頭尾指針;操作:入隊(duì),出隊(duì);2..3.5Random:生成要求中的三個(gè)隨機(jī)數(shù)。2.3.6FileOperation:從文件讀入數(shù)據(jù),向文件輸出數(shù)據(jù)。2.3.7BarberGraph:繪制圖形界面,包括初始化界面、顧客到來、顧客離開界面。2.3.8barbershop:處理顧客到來,顧客離開,含事件驅(qū)動(dòng)主程序。3詳細(xì)設(shè)計(jì)3.1.1eventlist.cpp#include"eventlist.h"voidEventList::OrderIn(Event*new_in){//插入事件表if(1==length){//如果長度為一,直接插入head->next_event=new_in;length++;return;}else{//如果長度不為一,用兩指針一前一后進(jìn)展插入操作ptr_before=head->next_event;ptr_after=head;while(ptr_before!=NULL){if(-1==Cmp(new_in,ptr_before)){//如果插入事件在前new_in->next_event=ptr_before;ptr_after->next_event=new_in;length++;return;}//如果在此結(jié)點(diǎn)之后,后移一位繼續(xù)比擬ptr_after=ptr_before;ptr_before=ptr_before->next_event;}ptr_after->next_event=new_in;//如果在最后,直接插到表尾length++;}}intEventList::ListEmpty(){if(length>1)return0;elsereturn1;}3.1.2customerqueue.cpp#include"customerqueue.h"voidCustomerQueue::EnQueue(Customer*add){if(NULL==rear){//如果隊(duì)伍沒人,直接入隊(duì)front=rear=add;}else{rear->next=add;rear=rear->next;}length++;}voidCustomerQueue::DelQueue(){if(0!=length){Customer*p=front;front=front->next;if(rear==p)rear=NULL;deletep;//釋放隊(duì)頭結(jié)點(diǎn)空間length--;}}3.1.3random.cpp#include"random.h"intRandom::Durtime(){returnrand()%21+10;//隨機(jī)一個(gè)10~30的數(shù)〔持續(xù)時(shí)間〕}intRandom::Intertime(){returnrand()%6;//隨機(jī)一個(gè)0到5的數(shù)〔間隔時(shí)間〕}intRandom::Select(){returnrand()%3+1;//隨機(jī)一個(gè)1~3的數(shù)〔級別〕}3.1.4fileoperation.cpp#include"fileoperation.h"usingnamespacestd;voidFileOperation::FileInput(ifstream&from_file,int&opentime,CustomerQueuecq[],int&closetime){from_file>>input_time[0]>>maohao>>input_time[1];//接收開門時(shí)間opentime=60*input_time[0]+input_time[1];//將時(shí)間轉(zhuǎn)化為intfrom_file>>chairs;//接收理發(fā)師人數(shù)if(chairs>8||chairs<3){cout<<"inputerror,thenumberofchairsshouldbetween3and8!"<<endl;_getch();exit(0);}for(inti=1;i<chairs+1;i++){//初始化理發(fā)師信息from_file>>number[i];from_file>>cq[i].select;}from_file>>input_time[0]>>maohao>>input_time[1];//接收關(guān)門時(shí)間closetime=60*input_time[0]+input_time[1];//關(guān)門時(shí)間轉(zhuǎn)化cout<<"提供折扣y/n"<<endl;cin>>zhekou;if('y'==zhekou){from_file>>discount;cout<<"本日折扣為"<<discount<<"!"<<endl;}else{cout<<"本店今日不打折!"<<endl;}from_file.close();//關(guān)閉讀文件}voidFileOperation::FileOutput(ofstream&to_file,CustomerQueuecq[],int&total_money){intclass_money[4]={0};//按理發(fā)師級別統(tǒng)計(jì)當(dāng)天收入intclass_worktime[4]={0};//按理發(fā)師級別統(tǒng)計(jì)當(dāng)天工時(shí)to_file<<"本日賬目清單"<<endl<<endl;to_file<<"===============================按理發(fā)師==============================="<<endl<<endl;for(inti=1;i<chairs+1;i++){to_file<<"理發(fā)師編號:"<<i<<"級別:"<<cq[i].select<<"工作時(shí)長:"<<cq[i].worktime<<"本日盈收:"<<cq[i].money<<endl;}to_file<<"================================按級別==============================="<<endl<<endl;for(inti=1;i<chairs+1;i++){//按級別統(tǒng)計(jì)理發(fā)師工資和工時(shí)if(1==cq[i].select){class_money[1]+=cq[i].money;class_worktime[1]+=cq[i].worktime;}if(2==cq[i].select){class_money[2]+=cq[i].money;class_worktime[2]+=cq[i].worktime;}if(3==cq[i].select){class_money[3]+=cq[i].money;class_worktime[3]+=cq[i].worktime;}}for(inti=1;i<4;i++){//按級別將理發(fā)師的工資和工時(shí)、總創(chuàng)收輸出到文件中to_file<<i<<"級別理發(fā)師總工時(shí):"<<class_worktime[i]<<"總收入:"<<class_money[i]<<endl;}to_file<<"=================================總匯==============================="<<endl<<endl;to_file<<"本日總創(chuàng)收:"<<total_money;to_file.close();//關(guān)閉寫文件}3.1.5barbergraph.cpp#include"barbergraph.h"voidbarbergraph::set_chairs(intchairs){this->chairs=chairs;}//通用繪圖函數(shù),負(fù)責(zé)繪制圖例,時(shí)鐘,理發(fā)師信息〔不包括隊(duì)列〕,主要用于刷新界面voidbarbergraph::CommonGraph(CustomerQueuecq[],intopentime){//此處的opentime為nowtimeBeginBatchDraw();//開場批量繪圖,防止閃爍putimage(0,0,&my_clock);//將圖片集分別插到對應(yīng)區(qū)域putimage(120,100,&background_img);putimage(120,0,&baber_desk);putimage(0,470,&door);rectangle(0,0,120,650);//左側(cè)框//輸出時(shí)鐘信息if((opentime-420)%60<10){//如果分鐘小于10,在顯示前面加0sprintf_s(now_time,"%d:0%d",7+(opentime-420)/60,(opentime-420)%60);}else{sprintf_s(now_time,"%d:%d",7+(opentime-420)/60,(opentime-420)%60);}setfont(50,0,"黑體");//設(shè)置時(shí)鐘字體setcolor(RED);//時(shí)鐘字體顏色outtextxy(10,20,now_time);setfont(15,0,"黑體");//恢復(fù)初始字體setcolor(WHITE);//恢復(fù)初始字體顏色//輸出圖例信息for(inti=0;i<5;i++){if(0==i){sprintf_s(graphic_symbol,"圖例:");}if(1==i){sprintf_s(graphic_symbol,"顧客到達(dá)");rectangle(20,170+i*70,90,190+i*70);setfillstyle(BLUE,SOLID_FILL);floodfill(55,175+i*70,WHITE);}if(2==i){sprintf_s(graphic_symbol,"顧客等待");rectangle(20,170+i*70,90,190+i*70);setfillstyle(RED,SOLID_FILL);floodfill(55,175+i*70,WHITE);}if(3==i){sprintf_s(graphic_symbol,"顧客離開");rectangle(20,170+i*70,90,190+i*70);setfillstyle(GREEN,SOLID_FILL);floodfill(55,175+i*70,WHITE);}if(4==i){sprintf_s(graphic_symbol,"顧客理發(fā)中");rectangle(20,170+i*70,90,190+i*70);setfillstyle(YELLOW,SOLID_FILL);floodfill(55,175+i*70,WHITE);}outtextxy(20,150+i*70,graphic_symbol);}//繪制理發(fā)師信息for(inti=0;i<chairs;i++){rectangle(120+i*150,0,120+(i+1)*150,100);}for(inti=1;i<chairs+1;i++){sprintf_s(barber_info,"編號%d級別:%d",i,cq[i].select);outtextxy(155+150*(i-1),40,barber_info);}}//靜態(tài)繪圖函數(shù),用于初始化界面和顧客離開后暫停畫面voidbarbergraph::BarberGraph(CustomerQueuecq[],intopentime){CommonGraph(cq,opentime);for(inti=1;i<chairs+1;i++){p=cq[i].front;intj=0;while(p!=NULL){circle(195+150*(i-1),230+50*j++,20);if(1==j){setfillstyle(YELLOW,SOLID_FILL);//設(shè)置填充模式:黃色,固實(shí)填充floodfill(195+150*(i-1),230+50*(j-1),WHITE);//坐標(biāo)所在的封閉區(qū)域?yàn)樘畛鋵ο螅詈笠粋€(gè)參數(shù)為邊框顏色}else{setfillstyle(RED,SOLID_FILL);//設(shè)置填充模式:紅色,固實(shí)填充floodfill(195+150*(i-1),230+50*(j-1),WHITE);//坐標(biāo)所在的封閉區(qū)域?yàn)樘畛鋵ο?,最后一個(gè)參數(shù)為邊框顏色}p=p->next;}}EndBatchDraw();//完畢批量繪圖_getch();//cleardevice();//以當(dāng)前背風(fēng)光清屏〔黑色〕}//繪制顧客到來瞬間界面voidbarbergraph::ArriveBarberGraph(CustomerQueuecq[],intarrival,intnowtime){CommonGraph(cq,nowtime);for(inti=1;i<chairs+1;i++){p=cq[i].front;intj=0;while(p!=NULL){circle(195+150*(i-1),230+50*j++,20);if(1==j){setfillstyle(YELLOW,SOLID_FILL);//設(shè)置填充模式:黃色,固實(shí)填充floodfill(195+150*(i-1),230+50*(j-1),WHITE);//坐標(biāo)所在的封閉區(qū)域?yàn)樘畛鋵ο螅詈笠粋€(gè)參數(shù)為邊框顏色}if(i==arrival&&p->next==NULL){setfillstyle(BLUE,SOLID_FILL);//設(shè)置填充模式:藍(lán)色,固實(shí)填充floodfill(195+150*(i-1),230+50*(j-1),WHITE);//坐標(biāo)所在的封閉區(qū)域?yàn)樘畛鋵ο?,最后一個(gè)參數(shù)為邊框顏色}else{if(j>1){setfillstyle(RED,SOLID_FILL);//設(shè)置填充模式:紅色,固實(shí)填充floodfill(195+150*(i-1),230+50*(j-1),WHITE);//坐標(biāo)所在的封閉區(qū)域?yàn)樘畛鋵ο?,最后一個(gè)參數(shù)為邊框顏色}}p=p->next;}}EndBatchDraw();_getch();//cleardevice();//以當(dāng)前背風(fēng)光清屏〔黑色〕}//繪制顧客離開瞬間界面voidbarbergraph::DepartBarberGraph(CustomerQueuecq[],intdeparture,intnowtime){CommonGraph(cq,nowtime);for(inti=1;i<chairs+1;i++){//隊(duì)列動(dòng)態(tài)變換局部p=cq[i].front;intj=0;while(p!=NULL){circle(195+150*(i-1),230+50*j++,20);if(1==j){setfillstyle(YELLOW,SOLID_FILL);//設(shè)置填充模式:黃色,固實(shí)填充floodfill(195+150*(i-1),230+50*(j-1),WHITE);//坐標(biāo)所在的封閉區(qū)域?yàn)樘畛鋵ο?,最后一個(gè)參數(shù)為邊框顏色}if(i==departure&&p==cq[i].front){setfillstyle(GREEN,SOLID_FILL);floodfill(195+150*(i-1),230+50*(j-1),WHITE);}else{if(j>1){setfillstyle(RED,SOLID_FILL);//設(shè)置填充模式:紅色,固實(shí)填充floodfill(195+150*(i-1),230+50*(j-1),WHITE);//坐標(biāo)所在的封閉區(qū)域?yàn)樘畛鋵ο螅詈笠粋€(gè)參數(shù)為邊框顏色}}p=p->next;}}EndBatchDraw();_getch();//cleardevice();//以當(dāng)前背風(fēng)光清屏〔黑色〕}3.1.6barbershop.cpp#include"barbershop.h"usingnamespacestd;voidBarberShop::OpenForDay(barbergraph&bg,intchairs){this->chairs=chairs;//從輸入函數(shù)中得到理發(fā)師人數(shù)bg.set_chairs(chairs);//將理發(fā)師人數(shù)傳到繪圖對象中initgraph(1024+(chairs-6)*150,650,1);//初始化界面大小〔根據(jù)理發(fā)師人數(shù)來初始化大小〕setbkmode(TRANSPARENT);//設(shè)置文字或圖片輸出背景為透明setfont(15,0,"黑體");//初始化字體setcolor(WHITE);//初始化字體顏色bg.BarberGraph(cq,opentime);//初始化界面信息Event*new_event=newEvent(opentime,0);//創(chuàng)立第一個(gè)事件ev.OrderIn(new_event);//插入事件表}//OpenForDayintBarberShop::Minimum(intselect){intmin_cq=1000;//最短隊(duì)列初始值intmin_length=1000;//假定初始最短長度為無窮for(inti=1;i<=chairs;i++){//尋找符合select的最短隊(duì)列if(cq[i].select==select&&cq[i].length<min_length){min_length=cq[i].length;min_cq=i;}}returnmin_cq;//返回最短隊(duì)列號}voidBarberShop::CustomerArrived(Random&ran,barbergraph&bg,floatdiscount){//處理客戶到達(dá)事件intselect=ran.Select();//隨機(jī)生本錢顧客的理發(fā)師級別選擇intdurtime=ran.Durtime();//隨機(jī)生本錢顧客的理發(fā)時(shí)長intintertime=ran.Intertime();//隨機(jī)生成下一個(gè)顧客的到來時(shí)間間隔intmoney=durtime/select*discount;//本顧客的消費(fèi)額〔收費(fèi)公式〕intmin_cq;//記錄最短隊(duì)列信息new_customer=newCustomer(durtime,select);//生本錢顧客實(shí)體total_money+=money;//計(jì)入總收入min_cq=Minimum(select);//求最短隊(duì)列cout<<"min_cq:"<<min_cq<<"";cout<<"selece:"<<select<<""<<"durtime:"<<durtime<<""<<"intertime:"<<intertime<<"";cout<<"("<<7+(cur_event->occurtime-420)/60<<":"<<(cur_event->occurtime-420)%60<<","<<cur_event->event_type<<")"<<endl;//時(shí)間轉(zhuǎn)換公式cq[min_cq].money+=money;//計(jì)入min_cq隊(duì)列理發(fā)師總收入cq[min_cq].worktime+=durtime;//計(jì)入min_cq隊(duì)列理發(fā)師工作時(shí)間cq[min_cq].EnQueue(new_customer);//入隊(duì)bg.ArriveBarberGraph(cq,min_cq,cur_event->occurtime);//在圖形界面上顯示到來顧客intt=cur_event->occurtime+intertime;//下一顧客的到來時(shí)間if(t<closetime){//下一顧客到來未關(guān)門new_event=newEvent(t,0);ev.OrderIn(new_event);//生成下一顧客到達(dá)事件插入事件表}if(1==cq[min_cq].length){//如果新來的顧客在隊(duì)頭new_event=newEvent(cur_event->occurtime+durtime,min_cq);ev.OrderIn(new_event);//生本錢顧客的離開事件插入事件表}}//CustomerArrived//客戶離開事件voidBarberShop::CustomerDeparture(barbergraph&bg){//注意:隊(duì)列中超過兩個(gè)人時(shí)下個(gè)人的離開事件從前一個(gè)人離開時(shí)開場計(jì)時(shí)。inti=cur_event->event_type;//記錄要?jiǎng)h除的隊(duì)列編號cout<<"dep_cq:"<<i<<"";cout<<"("<<7+(cur_event->occurtime-420)/60<<":"<<(cur_event->occurtime-420)%60<<","<<cur_event->event_type<<")"<<endl;bg.DepartBarberGraph(cq,i,cur_event->occurtime);//將離開的顧客用圖形表示出來cq[i].DelQueue();//刪除第i隊(duì)的排頭客戶bg.BarberGraph(cq,cur_event->occurtime);//繪制顧客離開后的畫面if(0!=cq[i].length){//設(shè)定第i隊(duì)列的隊(duì)頭離開事件插入事件表new_event=newEvent(cur_event->occurtime+cq[i].front->durtime,i);ev.OrderIn(new_event);}}//CustomerDeparturevoidBarberShop::BarberSimulation(Random&ran,barbergraph&bg,intchairs,floatdiscount){OpenForDay(bg,chairs);//開門初始化while(!ev.ListEmpty()){//事件驅(qū)動(dòng)主體,只要事件表不為空則一直執(zhí)行第一個(gè)事件cur_event=ev.head->next_event;//獲取當(dāng)前事件(表中第二個(gè)結(jié)點(diǎn))if(0==cur_event->event_type){//如果為0則為到來事件CustomerArrived(ran,bg,discount);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基礎(chǔ)路面土方合同范例
- 天津?yàn)I海職業(yè)學(xué)院《電磁場的數(shù)值方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 專用裝備采購合同范例
- 施工投標(biāo)合同范例
- 會計(jì)合伙合同范例
- 倉房搭建合同范例
- 叉車購銷轉(zhuǎn)讓合同范例
- 商鋪?zhàn)赓U續(xù)租合同范例
- 口腔內(nèi)科學(xué)模擬練習(xí)題(附答案)
- 2025年鐵嶺貨運(yùn)資格證考試有哪些項(xiàng)目
- 全套教學(xué)課件《工程倫理學(xué)》
- 大數(shù)據(jù)+治理智慧樹知到期末考試答案章節(jié)答案2024年廣州大學(xué)
- 江蘇省建筑與裝飾工程計(jì)價(jià)定額(2014)電子表格版
- T-SDDA 0002-2021 住宅裝飾裝修工程質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 小學(xué)寫字閱讀考核實(shí)施方案
- 震雄注塑機(jī)Ai_01操作說明書(中文)
- 四川省煤礦探放水基準(zhǔn)線“兩把鎖”管理規(guī)定
- 壓力管道元件產(chǎn)品合格證
- 10KV變電站供電系統(tǒng)設(shè)計(jì)
- 15立方米的液氯儲罐課程設(shè)計(jì)說明書
- 發(fā)現(xiàn)所授薪律師及律師助理管理辦法
評論
0/150
提交評論