版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、.數(shù)據(jù)結構課設報告理發(fā)館經(jīng)營狀況模擬系統(tǒng)數(shù)據(jù)結構課設報告 姓名:xxx學號:xxxxxxxx學院:計算機學院完成日期:2013年9月題目:理發(fā)館經(jīng)營狀況模擬系統(tǒng)一、 程序基本功能1. 能夠從文件中讀取所需條件。2. 隨機產(chǎn)生每個顧客進門時的理發(fā)時間durtime、間隔時間intertime、服務選項select。3. 統(tǒng)計每天不同級別理發(fā)師的營業(yè)時間、創(chuàng)收和每天理發(fā)館總創(chuàng)收并寫入到文本文件中二、 需求分析1. 本演示程序中用戶和計算機以文本方式進行交流,即用戶將所需數(shù)據(jù)寫入到data.txt文件中,計算機將結果輸出到sesult.txt文件中。2. 演示程序以圖形界面輸出當前狀況。3. 演示程
2、序中需要用到數(shù)據(jù)結構中的離散模型、順序存儲、有序表、線性結構。4. 程序執(zhí)行命令包括:a) 讀出data.txt文件中的相應數(shù)據(jù)。b) 生成顧客信息。c) 進行理發(fā)服務,并計算相應數(shù)據(jù)。d) 結果存入到result.txt文件中。5. 測試數(shù)據(jù)09:3018:0091 32 13 24 15 26 37 38 19 2三、 概要設計本程序主要分為四大模塊為了實現(xiàn)上述程序功能,應以有序表表示理發(fā)隊列1. 理發(fā)隊列:typedef struct Qnodeint num; /理發(fā)者編號struct Qnode *next;Qnode,*Queueptr;2. 等待隊列:typedef struct
3、Queueptr front; /隊頭指針Queueptr rear; /隊尾指針LinkQueue;LinkQueue A; /等待隊列A為1LinkQueue B; /等待隊列B為2LinkQueue C; /等待隊列C為33. 顧客參數(shù)的抽象數(shù)據(jù)類型;typedef struct customerint no; /編號int intime; /進入理發(fā)店間int durtime; /所需服務時間int intertime; /下一個顧客到達所需時間int select; /選擇服務等級:1,2,3int starttime; /開始理發(fā)時間int leavetime; /離開時間int
4、serve_flag; /是否在理發(fā)float turnover; /營業(yè)額customer ;4. 理發(fā)師參數(shù)的抽象數(shù)據(jù)類型:struct barberint No; /理發(fā)師編號int level; /理發(fā)師級別BrN; /理發(fā)師5. 離散模型:while(currenttime<T) /判斷是否屬于營業(yè)時間,是否禁止顧客進入for(i=1;i<totalcustom;i+) /判斷是否有人離開if(cusi.serve_flag=TRUE)&&(cusi.leavetime=currenttime)customer_leave(i); while(Achair
5、>0 && !QueueEmpty(A)customer_serve(DeQueue(A); while(Bchair>0 && !QueueEmpty(B)customer_serve(DeQueue(B); while(Cchair>0 && !QueueEmpty(C)customer_serve(DeQueue(C); if(ime+ertime)=currenttime)customer_in(); /判斷有無人進入currenttime+;whi
6、le(!QueueEmpty(A)char sInfo128 = 0;currenttime+;for(i=1;i<=totalcustom;i+) /判斷有沒有人離開if(cusi.serve_flag=TRUE)&&(cusi.leavetime=currenttime)&&(cusi.select=1)customer_leave(i);while(Achair>0 && !QueueEmpty(A) /讓等待隊列中的人去理發(fā) customer_serve(DeQueue(A); OutputDebugString("
7、while 2 is done.");while(!QueueEmpty(B)currenttime+;for(i=1;i<=totalcustom;i+) /判斷有沒有人離開if(cusi.serve_flag=TRUE)&&(cusi.leavetime=currenttime)&&(cusi.select=2)customer_leave(i);while(Bchair>0 && !QueueEmpty(B) /讓等待隊列中的人去理發(fā) customer_serve(DeQueue(B); while(!QueueEmp
8、ty(C)currenttime+;for(i=1;i<=totalcustom;i+) /判斷有沒有人離開if(cusi.serve_flag=TRUE)&&(cusi.leavetime=currenttime)&&(cusi.select=3)customer_leave(i);while(Cchair>0 && !QueueEmpty(C) /讓等待隊列中的人去理發(fā) customer_serve(DeQueue(C); lasttime=cus1.leavetime; /求出最后離開的顧客的離開時間for(i=2;i<=
9、totalcustom;i+)lasttime = lasttime < cusi.leavetime ? cusi.leavetime : lasttime;while(currenttime+<lasttime) /隊列為空,繼續(xù)為正在理發(fā)的顧客服務for(i=1;i<=totalcustom;i+) if(cusi.serve_flag=TRUE)&&(cusi.starttime+cusi.durtime=currenttime)customer_leave(i);6. 本程序包含三個模塊:1) 主程序模塊:int _tmain(int argc, _
10、TCHAR* argv)初始化;數(shù)據(jù)下載;數(shù)據(jù)生成;程序運行;數(shù)據(jù)處理、存儲;退出程序return 0;2) 數(shù)據(jù)下載、存儲模塊:load (); /數(shù)據(jù)下載save (); /數(shù)據(jù)存儲3) 圖形界面模塊實現(xiàn)圖形界面構建及點擊設置。4) 理發(fā)模塊實現(xiàn)理發(fā)模擬,并處理數(shù)據(jù)。各模塊間調(diào)用關系如下:四、 詳細設計/ barber.cpp : 定義控制臺應用程序的入口點。/#include "stdafx.h"/""是從工程文件里邊取,而<>是從電腦的庫文件里邊取#include <string>#include <graphics
11、.h>#include <conio.h>#include <math.h>#include <stdlib.h>#include <time.h>#include <stdio.h>#include <Winbase.h>#define MAX 30000#define TRUE 1#define FALSE 0#define R rand()#define N 20float wait_length; /等待隊列長度int totalcustom; /總顧客數(shù)int totaltime; /總理發(fā)時間int cu
12、rrenttime; /當前時間int addtime; /加班時間int Achair; /當前A級可用椅子int Bchair; /當前B級可用椅子int Cchair; /當前C級可用椅子int h1; /開始時間int min1; /開始分鐘int h2; /結束時間int min2; /結束分鐘double wait_A;double wait_B;double wait_C;double aver_serve_time; /平均服務時間double aver_wait_len; /平均等待長度double wait_len_A; /理發(fā)隊列長度double wait_len_B;
13、double wait_len_C; int n; /理發(fā)師人數(shù)float discount; /折扣int x,y; /畫方格橫縱坐標int i,a,b,c,d,e,f,h,k; /參數(shù)int T; /營業(yè)總時長(分鐘)int lasttime; /最后一個離開時間float allturnover; /總營業(yè)額int Atime; /1級理發(fā)師營業(yè)額int Btime; /2級理發(fā)師營業(yè)額int Ctime; /3級理發(fā)師營業(yè)額float Aturnover; /1級理發(fā)師營業(yè)時間float Bturnover; /2級理發(fā)師營業(yè)時間float Cturnover; /3級理發(fā)師營業(yè)時間i
14、nt r;struct barberint No; /理發(fā)師編號int level; /理發(fā)師級別BrN; /理發(fā)師typedef struct customerint no; /編號int intime; /進入理發(fā)店時間int durtime; /所需服務時間int intertime; /下一個顧客到達所需時間int select; /選擇服務等級:1,2,3int starttime; /開始理發(fā)時間int leavetime; /離開時間int serve_flag; /是否在理發(fā)float turnover; /營業(yè)額customer ;customer cusMAX;typede
15、f struct Qnodeint num; /理發(fā)者編號struct Qnode *next;Qnode,*Queueptr;typedef structQueueptr front; /隊頭指針Queueptr rear; /隊尾指針LinkQueue;LinkQueue A; /等待隊列A為1LinkQueue B; /等待隊列B為2LinkQueue C; /等待隊列C為3void Myinterface(); /輸出界面void load(); /讀取文件void InitQueue(LinkQueue &Q); /隊列初始化int Queue_length(LinkQueu
16、e & Q); /求等待隊列當前長度void EnQueue(LinkQueue &Q,int e); /將顧客插入隊尾int DeQueue(LinkQueue &Q); /隊頭出隊,e返回去編號int QueueEmpty(LinkQueue & Q); /判斷隊列是否為空,空返回1void customer_serve(int n); /服務void customer_in(); /顧客到達void customer_leave(int n); /顧客離開void list(); /平均等待長度和等待時間void save(); /存取數(shù)據(jù)void cli
17、ck(); /顯示當前狀態(tài)void close(); /關閉圖形界面void currentstate(int e,int f); /修改界面void clearstate();void initialize(); /初始化void time_initialize(); /時間初始化void haircut();void clk(int n);void outget();int _tmain(int argc, _TCHAR* argv)initialize();load();Myinterface();time_initialize();click();InitQueue(A); /初始化隊
18、列InitQueue(B);InitQueue(C);customer_in();haircut();for(b=1;b<=totalcustom;b+)allturnover = cusb.turnover+allturnover; /總營業(yè)額addtime=lasttime-T;list();save();outget();outtextxy(400,300,"ok");close(); / 關閉圖形界面getch(); / 按任意鍵繼續(xù)return 0;void Myinterface()int i;x=100;y=100;for(i=1;i<=n;i+)
19、 /輸出理發(fā)師個數(shù)及編號 char level5;char No5;sprintf(level,"%d",Bri.level);sprintf(No,"%d",Bri.No);setcolor(WHITE);rectangle(x,y,(x+40),(y+30);setcolor(YELLOW);outtextxy(x+7,y+7,No);setcolor(RED);outtextxy(x+25,y+7,level);x=x+50;y=y;/outtextxy(100,300,"等級1的隊列");/outtextxy(200,300,
20、"等級2的隊列");/outtextxy(300,300,"等級3的隊列");void load() /讀取文件char Buff7;FILE*g;if(g=fopen("zhekou.txt","r")!=NULL)while(fgets(Buff,7,g)Buff4-1='0'discount=(Buff0-'0')*100+(Buff1-'0')*10+(Buff2-'0');fclose(g);elseouttextxy(300,300,&qu
21、ot;the txt is nonentity");FILE*f;if (f=fopen("data.txt","r")!=NULL)int a=0;int i=1; /讀取編號和等級的緩沖while(fgets(Buff,7,f)if(a=0)Buff6-1='0'int H11,H12;int Min11,Min12;H11=Buff0-'0'H12=Buff1-'0'Min11=Buff3-'0'Min12=Buff4-'0'h1=H11*10+H12;min
22、1=Min11*10+Min12;a+;elseif(a=1)Buff6-1='0'int H21,H22;int Min21,Min22;H21=Buff0-'0'H22=Buff1-'0'Min21=Buff3-'0'Min22=Buff4-'0'h2=H21*10+H22;min2=Min21*10+Min22;a+;elseif(a=2)Buff2-1='0' /清除換行符n=atoi(Buff); /從文件讀入理發(fā)師人數(shù)na+;elseBuff4-1='0'a+;Bri.N
23、o=Buff0-'0'Bri.level=Buff2-'0'if(Bri.level=0) /檢測是否將文件的值導入outtextxy(480,200+a*20,"NULL");elsei+;fclose(f);elseouttextxy(300,300,"the txt is nonentity");void InitQueue(LinkQueue &Q) /隊列初始化Q.front=Q.rear=(Queueptr)malloc(sizeof(Qnode);Q.front->next=NULL;int Q
24、ueue_Length(LinkQueue &Q) /求等待隊列當前長度int length=0;Queueptr p;p=Q.front;while(p->next)p=p->next;+length;return length; void EnQueue(LinkQueue &Q,int e) /將顧客插入隊尾Queueptr p;p=(Queueptr)malloc(sizeof(Qnode);p->num=e;p->next=NULL;Q.rear->next=p;Q.rear=p;int DeQueue(LinkQueue &Q)
25、 /隊頭出隊,e返回去編號Queueptr p;int e;p=Q.front->next;e=p->num;Q.front->next=p->next;if(Q.rear=p)Q.rear=Q.front;free(p);return e;int QueueEmpty(LinkQueue & Q) /判斷隊列是否為空return(Q.front=Q.rear? TRUE:FALSE); void customer_serve(int n) /理發(fā)cusn.starttime=currenttime; cusn.leavetime=cusn.durtime+cu
26、rrenttime;switch(cusn.select) /理發(fā)座位-1case 1:Achair-;click();break;case 2:Bchair-;click();break;case 3:Cchair-;click();break;default:break;cusn.serve_flag=TRUE; void customer_in()totalcustom+;custotalcustom.no=totalcustom;ime=currenttime; /記錄顧客進入時間custotalcustom.durtime=25+rand()%50
27、; /生成所需服務時間ertime=15+rand()%30; /下一個顧客到達時間custotalcustom.select=1+R%3; /生成服務等級1-3custotalcustom.turnover=(20.0000+custotalcustom.durtime*custotalcustom.select/1.0000)*(discount/100.0000);/單人營業(yè)額switch(custotalcustom.select)case 1:if(QueueEmpty(A)&&Achair>>0)customer_se
28、rve(totalcustom);elsecustotalcustom.serve_flag=FALSE; /否則入隊等待EnQueue(A,totalcustom);wait_len_A=wait_len_A+Queue_Length(A); /累計隊長char lengthA5; sprintf(lengthA,"%d",Queue_Length(A); outtextxy(100,400,lengthA);break;case 2:if(QueueEmpty(B)&&Bchair>>0)customer_serve(totalcustom)
29、;elsecustotalcustom.serve_flag=FALSE; /否則入隊等待EnQueue(B,totalcustom);wait_len_B=wait_len_B+Queue_Length(B); /累計隊長break;case 3:if(QueueEmpty&&Cchair>>0)customer_serve(totalcustom);elsecustotalcustom.serve_flag=FALSE; /否則入隊等待EnQueue(C,totalcustom);wait_len_C=wait_len_C+Queue_Length(C); /累
30、計隊長break;default:break;void customer_leave(int n) /顧客離開cusn.serve_flag=FALSE;switch(cusn.select) /理發(fā)座位+1case 1:Achair+;click();break;case 2:Bchair+;click();break;case 3:Cchair+;click();break;default:break;totaltime = totaltime+ertime;void list()aver_serve_time=totaltime/totalcust
31、om-c; wait_length=wait_len_A+wait_len_B+wait_len_C;aver_wait_len=wait_length/(totalcustom*1.00000); for(i=1;i<=totalcustom;i+)switch(cusi.select)case 1 :Atime=Atime+cusi.durtime;Aturnover=Aturnover+cusi.turnover;break;case 2:Btime=Btime+cusi.durtime;Bturnover=Bturnover+cusi.turnover;break;case 3:
32、Ctime=Ctime+cusi.durtime;Cturnover=Cturnover+cusi.turnover;break;default:break;void save()FILE *fp;int i;if(fp=fopen("result.txt","w")!=NULL)/打開文件char T1="開門時間: "fprintf(fp,"%s%d%c%dn",T1,h1,':',min1);char T2="關門時間:"fprintf(fp,"%s%d%c%d%
33、dn",T2,h2,':',min2,0);char bar="理發(fā)師人數(shù): "fprintf(fp,"%s%dn",bar,n);char bars="理發(fā)師編號及等級: "for(i=1;i<=n;i+)fprintf(fp,"%s%dt%dn",bars,Bri.No,Bri.level);char time="平均等待時間: "fprintf(fp,"%s%fn",time,aver_serve_time);char wait=&quo
34、t;平均等待長度: "fprintf(fp,"%s%fn",wait,aver_wait_len);char At="一級理發(fā)師營業(yè)時間: "fprintf(fp,"%s%dn",At,Atime);char Bt="二級理發(fā)師營業(yè)時間: "fprintf(fp,"%s%dn",Bt,Btime);char Ct="三級理發(fā)師營業(yè)時間: "fprintf(fp,"%s%dn",Ct,Ctime);char Atover="一級理發(fā)師營業(yè)
35、額: "fprintf(fp,"%s%fn",Atover,Aturnover);char Btover="二級理發(fā)師營業(yè)額: "fprintf(fp,"%s%fn",Btover,Bturnover);char Ctover="三級理發(fā)師營業(yè)額: "fprintf(fp,"%s%fn",Ctover,Cturnover);char tover="總營業(yè)額: "fprintf(fp,"%s%fn",tover,allturnover);char
36、zhekou="折扣:"fprintf(fp,"%s%fn",zhekou,discount);fclose(fp);/關閉文件 void click() /220,190,340,230MOUSEMSG m;while(true)m = GetMouseMsg();if(m.uMsg=WM_LBUTTONDOWN) if(m.x>=220 && m.x<=340 &&m.y>=190 && m.y<=230)currentstate(Achair,1);currentstate(B
37、chair,2);currentstate(Cchair,3);break;elseelsevoid close()MOUSEMSG m;while(true)m = GetMouseMsg();if(m.uMsg=WM_LBUTTONDOWN)if(m.x>=450 && m.x<=500 && m.y>=190 && m.y<=230) /450,190,500,230closegraph();printf("welcome to my shopn");break;void currentstate
38、(int e,int f) /e為椅子數(shù),f為等級k=f;h=e;for(d=1;d<=n;d+)setcolor(GREEN);rectangle(50+d*50),100,(90+d*50),130);for(d=1;d<=n;d+)int static g=0;if(g=h)break;elseif(Brd.level=k)g=g+1;setfillcolor(BLUE);fillrectangle(50+d*50),100,(90+d*50),107);elseif(Brd.level!=1&&Brd.level!=2&&Brd.level!=3)setfillcolor(BLACK);fillrectangle(50+d*50),100,(90+d*50),107);void clearstate()for(d=1;d<=n;d+)setfillcolor(WHITE);clearrectangle(50+d*50),100,(90+d*50),107);void initialize()Atime=0;B
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 細胞應激反應的
- 基于差動變壓器原理的多臂井徑儀探頭技術研究
- 2014-2020年精密空調(diào)行業(yè)咨詢報告
- 2024至2030年中國無煙全自動化燃煤氣化燃燒鍋爐數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年中國岸邊固定回轉吊行業(yè)投資前景及策略咨詢研究報告
- 2024至2030年中國雙端面機械密封數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年中國加強型輸送網(wǎng)帶行業(yè)投資前景及策略咨詢研究報告
- 2024至2030年中國CL雙直線杯數(shù)據(jù)監(jiān)測研究報告
- 2024年中國飼料塔市場調(diào)查研究報告
- 2024年中國船舶通訊導航專用電源市場調(diào)查研究報告
- 收費站安全培訓
- “立德樹人”背景下高中地理課程教學實踐研究
- 衛(wèi)生部婦產(chǎn)科診療規(guī)范及指南
- 中國馬克思主義與當代2021版教材課后思考題
- 新漢語水平考試HSK一級真題(含聽力材料和答案)
- 中華民族共同體概論課件專家版10第十講 中外會通與中華民族鞏固壯大(明朝時期)
- 自然地理學(伍光和版)第五章地貌
- 《C語言程序設計》 課件 3.4switch語句
- 2021-2022學年部編版高中語文選擇性必修上冊字音字形成語知識梳理
- 2023電信網(wǎng)和互聯(lián)網(wǎng)應用程序接口數(shù)據(jù)安全技術要求和測試方法
- 《后赤壁賦》課件
評論
0/150
提交評論