理发馆模拟系统试验报告_第1页
理发馆模拟系统试验报告_第2页
理发馆模拟系统试验报告_第3页
理发馆模拟系统试验报告_第4页
理发馆模拟系统试验报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程设计报告模拟理发馆的经营状况软件工程2012-3班 程大川 201201051002 韩 笑 2012010510092014年1月2日、问题描述 理发馆一天的工作过程如下:1)理发馆有N把理发椅,可同时为N位顾客进行理发。2)理发师分三个等级(一级、二级、三级),对应不同的服务收费。3)当顾客进门时,需选择某级别理发师,只要该级别的理发 师有空椅,则可立即坐下理发,否则需排队等候。一旦该级别的理发师有顾客理发完离去,排在队头的顾客 便可开始理发。5)若理发馆每天连续营业T分钟,求(1) 一天内顾客在理发馆内的平均逗留时间;(2)顾客排队等候理发的队列长度平均值;(3)营业时间到点

2、后仍需完成服务的收尾工作时间;(4)统计每天的营业额;(5)统计每天不同级别理发师的创收。基本要求:1)模拟理发馆一天的工作过程:必须采用事件驱动的离散模型 (参考教科书3,5节离散事件模拟p65);2)每个顾客到达和下一顾客到达时间的间隔应是随机的;3)理发师编号、理发师级别和每天的营业时间由用户输入;4)某顾客挑选某一个级别的理发师而不得时,选第一个队列排队等待;5)每个顾客进门时将生成三个随机数:durtime:进门顾客理发所需服务时间(简称:理发时间); intertime:下一顾客将到达的时间间隔(简称:间隔时I);select:服务选项。6)服务收费:应包含服务时间和理发师级别两个

3、因素。7)除了输出统计的数据外,还需要显示理发馆的状态,可以采 用文本方式(横向显示每张椅编号、理发师级别。纵向表示 等待该理发师理发的排队长度)。测试数据:用户输入每位理发师编号、级别号和营业的 时间,结合随机数进行测试。实现提示1)顾客进门和出门这两个时刻发生的事情称“事件”,按事件的先后次序逐个处理事件的工作方式称“事件驱动模拟”。离散事件驱动模型的特点是只关注和刻画事物的状态变化(即事件),不关心变化的过渡过程。模型靠每一个事件引发 其它事件的方式来维持运转。每个事件都有发生时间,模型 的运转实际就是按事件发生时间顺序逐个处理事件,处理 将产生新的事件。因此,建模的关键就是全面分析事物

4、的主要特点,抽象出几种能反映本质的事件和它们之间的驱动关系。系统时间就是当前事件的事件发生时间,它不是等间隔 变化而是跳跃变化的。2)数据结构:本题设计两个抽象数据类型队列抽象数据类型:登录排队等候理发的顾客情况。每个元 素应包括顾客进门时刻、理发师级别、理发所需时间。 N把 椅子又t应N个队列。事件链表抽象数据类型:登录顾客进门事件、出门事件。每个事件应包括事件类型(进门事件类型为 0,出门事件 类型按N把椅子所排队列分为为1、2、.N )和事件发 生的时刻occurtime。为便于按事件发生先后顺序逐一处 理事件,事件表应按“时刻”有序。3)对理发椅需要进行编号,使不同级别的理发师与编号的

5、理发椅相对应。二、系统简介开发环境:Codeblocks 12.11;利用基础数据结构来完成对理发馆经营状况的模拟整个系统共分为3个文件,分别为主文件BarberShop.exe 配置文件config.csv以及程序运行后产生的统计信息文件 statistics.txt三、总体设计(模块框架图)五、使用说明使用前请先使用excel表格配置config.csv,根据每个参数的填写要求填写填写完成后,打开主文件BarberShop.exe即可开始模拟理发馆经营状况模拟完成后,系统会生成statistics.txt文件,即理发馆经营状况的文件六、源程序#include#include#include

6、#include using namespace std; int nowTime,cusnum4;char barberName410010; struct settings int openTime;int endTime;int closeTime;int numBaber4;int fee4;int addFee4;int interTimeMo;int durTimeMo;int customNum;setting;struct answersint totalTime;int totalLenth;int customNum;int totalEarn;int closeTime;

7、int baberEarn4100;answer;typedef structint time;int durTime;int level;event;typedef struct char name10;int inTime,outTime,durTime;custom;bool operator(const event& a,const event& b)priority_queue elist;queue barber4100;void show()(system(cls);printf(欢迎使用理发馆经营状况模拟系统n);printf(使用此系统前请先配置config.csv文件,注意

8、不要更改预设字段n);printf(即将导入配置文件,);system(pause);)void showStatus(int t,int type,int kk,int ii,char *name)(system(cls);printf(当前时间:.2d:%.2d:%.2d 当前状态:”,t/3600,t%3600/60,t%60);if(tsetting.endTime)printf(正在营业,欢迎光临!n);elseprintf(已经打烽,欢迎明天光临!n);printf(今日已经接待顾客 d位,当前顾客数共 d位n,answer.customNum,cusnum1+cusnum2+cu

9、snum3);if(type=0)printf(n顾客s,服务等级:%d级,进店理发n,name,kk); elseprintf(n顾客s,服务等级: d级,离开店铺n,name,kk);printf(n当前店内状态n);printf(*n);printf( 一级服务区理发师共 %d位,顾客共%d位n,setting.numBaber1,cusnum1);for(int i=0;isetting.numBaber1;i+) (printf(理发师 %8s 等待人数 3d,barberName1i,(int)barber1i.size();if(kk=1&i=ii)if(type=0)print

10、f( ,name);printf(n);)printf(”*n);printf(n*n);printf(二级服务区理发师共 %d位,顾客共%d位n,setting.numBaber2,cusnum2);for(int i=0;isetting.numBaber2;i+) (printf(理发师 %8s 等待人数 3d,barberName2i,(int)barber2i.size(); if(kk=2&i=ii)if(type=0)printf( ,name);printf(n);printf(*n);printf(n*n);printf(三级服务区理发师共%d位,顾客共%d位n,settin

11、g.numBaber3,cusnum3);for(int i=0;isetting.numBaber3;i+)(printf(理发师 %8s 等待人数 3d”,barberName3i,(int)barber3i.size(); if(kk=3&i=ii)if(type=0)printf( ,name);printf(n);printf(*nn);system(pause);void showCount() (system(cls);FILE *fp;fp=fopen(statistics.txt,w);fprintf(fp,忙碌的一天了,看看今天的经营状况吧nn);int u=setting

12、.openTime,v=setting.endTime;fprintf(fp,今天的营业时间为.2:%.2:%.2-%.2:%.2:%.2肝,山3600川3600/60山60”3600,丫3600/60,丫60);v=answer.closeTime;fprintf(fp,”关门时间为 .2d:%.2d:%.2dn,v/3600,v%3600/60,v%60);int babernum=setting.numBaber1+setting.numBaber2+setting.numBaber3;fprintf(fp,今天理发是共d位,共接待顾客 d位 n,babernum,answer.cust

13、omNum);v=answer.totalTime/answer.customNum;fprintf(fp,每位顾客的平均逗留时间为00:%.2d:%.2d,平均等待人数为%d位,v/60,v%60,answer.totalLenth/answer.customNum);for(int k=1;k=3;k+)for(int i=0;isetting.numBaberk;i+)answer.totalEarn+=answer.baberEarnki;fprintf(fp,今天的营业额为 %d 元n,answer.totalEarn);fprintf(fp,*n);fprintf(fp, 一级服务

14、区理发师共 %d 位n,setting.numBaber1);for(int i=0;isetting.numBaber1;i+)fprintf(fp,理发师%8s创收 %d元n,barberName1i,answer.baberEarn1i);fprintf(fp,*fprintf(fp,n*n);fprintf(fp,二级服务区理发师共 %d 位n,setting.numBaber2);for(int i=0;isetting.numBaber2;i+)fprintf(fp,理发师%8s创收 %d元 n,barberName2i,answer.baberEarn2i);fprintf(fp

15、,*n);fprintf(fp,n*n);fprintf(fp,三级服务区理发师共 %d 位n,setting.numBaber3);for(int i=0;isetting.numBaber3;i+)fprintf(fp,理发师%8s创收 %d元n,barberName3i,answer.baberEarn3i);fprintf(fp, I*fclose(fp);system(statistics.txt);printf(感谢使用! n);system(pause);void getConfig()int u,v;answer.customNum=0;FILE *fp;fp=fopen(co

16、nfig.csv,r);fscanf(fp,%*s);fscanf(fp,%*s ,%d:%d,&u,&v);setting.openTime=u*3600+v*60;fscanf(fp,%*s ,%d:%d,&u,&v);setting.endTime=u*3600+v*60;for(int i=1;i=3;i+)fscanf(fp,%*s ,%d,&setting.numBaberi); for(int i=1;i=3;i+) fscanf(fp,%*s ,%d,&setting.feei);fscanf(fp,%*s ,%d,&setting.addFeei);fscanf(fp,%*s

17、 ,%d,&u);erTimeMo=2*u;fscanf(fp,%*s ,%d,&u);setting.durTimeMo=2*u;fclose(fp);void getname(char *s)int n=rand()%5+3;s0=A+rand()%26;for(int i=1;in;i+)si=rand()%26+a;sn=0;void init()getConfig();while(!elist.empty() elist.pop();srand(time(NULL);nowTime=setting.openTime;answer.customNum=answer.closeTime=

18、answer.totalEarn=answer.totalLenth=answer.totalTime=0;for(int i=0;i4;i+) cusnumi;for(int k=1;k=3;k+)for(int i=0;isetting.numBaberk;i+)answer.baberEarnki=0;getname(barberNameki);int charge(int level,int time)if(time=1800)return setting.feelevel;elsereturn setting.feelevel+(time-1800)/600*setting.addF

19、eelevel;void makeEvent() event tem;tem.time=nowTime+rand()%erTimeMo+1;tem.level=rand()%3+1;tem.durTime=rand()%setting.durTimeMo+1;nowTime=tem.time;if(nowTime=setting.endTime)answer.customNum+;answer.customNum+;elist.push(tem);cusnumtem.level+;)void choose(event now) int minlen=0;for(int i=0;isetting

20、.numBabernow.level;i+)if(barbernow.leveli.size()barbernow.levelminlen.size() minlen=i;)queue &q=barbernow.levelminlen;custom tem;tem.inTime=now.time;tem.durTime=now.durTime;getname();if(q.empty()tem.outTime=tem.inTime+tem.durTime;elsetem.outTime=q.back().outTime+tem.durTime;answer.totalLenth+=(int)q

21、.size();showStatus(tem.inTime,0,now.level,minlen,); q.push(tem);)void customOut(event& now)for(int k=1;k=3;k+)for(int i=0;isetting.numBaberk;i+) queue &q=barberki;while(!q.empty()&q.front().outTime=now.time)(answer.totalTime+=q.front().outTime-q.front().inTime; answer.baberEarnki+=charge(k,q.front()

22、.durTime); cusnumk-;showStatus(q.front().outTime,1,k,i,q.front().name);q.pop();void close()(for(int k=1;k=3;k+)for(int i=0;isetting.numBaberk;i+)(queue &q=barberki;while(!q.empty()(answer.totalTime+=q.front().outTime-q.front().inTime;answer.baberEarnki+=charge(k,q.front().durTime);answer.closeTime=m

23、ax(answer.closeTime,q.front().outTime);cusnumk-;showStatus(q.front().outTime,1,k,i,q.front().name);q.pop();void deal() (makeEvent();while(!elist.empty()(event now=elist.top();elist.pop();customOut(now);choose(now);makeEvent();close();showCount();int main()show();init();deal();return 0;)七、测试结果1、配置理发馆

24、模拟系统参数打开用excel打开con巾g.csv文件,按照要求填写参数并保存& H 0 B * * X Bi ccnfig.csvH181234567, 以AA参数开门时间关门时间格式/范围/单位一级理发师数量二级理发师数量三级理发师数量一级基础收费超过30分钟每十分钟收费二级基础收费10超过30分钟每十分钟收费)11121314三级基础收费超过30分钟每十分钟收费来客平均间隔时间顾客平均理发时间hh :mni kh 二 mm 1-100 1-100 1-100数值8:0021:00432元元元元元元秒秒105O O212、打开主文件,按任意键继续3、理发店经营状况模拟开始,开门后 7分39

25、秒,第一位顾客Dtvvgu进=| 叵PT3-|店,需要的服务等级为1级,选择了等待人数最少的理发师之一 Vldabo,1 GXUsersXDearChDsktopBarberShoprexe弟前时间:,8再土皿当前状态,正鳍叱;欢迎光临, 与日己纪接待顾客T位,当前顾客瘢莅顾客配uugu,服务等级:1级,进店理发当前店内状态务区理发!I(lf UIdaho?!j Gyjftwn理发师理发师SJb Lt a,数数数数 位人人人人顾客共1位0 ei5ktopIBarberShoPrexe漱迎光临T当前时间二.41.46当前状态:正在鬻 与日已经接待顾客2位,输顾客旃国顾客配uugu,服务等级:1级

26、,离开店铺当前店内状态0 &也队人人人一魏务区理发!J 理袁I市 U Idaho 理爰饰GyjftwnSJb Lt a顾客共啦1 Dtyugu 0顾客共啦 B0 0三级思务区理发IJ陇像山顾客翔.位 理发 Buzwpfs等苣人熬0理Ql而Ubqdgn第存人数0请按任意键继续. 一 .5、陆陆续续的来往之后,在中午12:56分,已经接待了 32名顾客,当 前店铺共4名顾客 C:UsersDearChiiDesktopBarberShop.exe尊幽密恋舞睛鼐套欢迎光.顾客加u”,服务等级:3级,离开店铺当前店内状态而币币发 Im 二 m 二 0t Bt_ 建理也,顾客共2位-J t s L三例量务区理发师甥俅L顾客期位 理发师B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论