模拟超市系统2_第1页
模拟超市系统2_第2页
模拟超市系统2_第3页
模拟超市系统2_第4页
模拟超市系统2_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、LOGO指指导教师导教师:于江德:于江德数数据据结构结构答答辩辩pptu 班班级级:物:物联网联网工程一班工程一班u 组员组员:郭珂珂:郭珂珂 李李龙龙 孙贝贝孙贝贝 齐齐佳佳佳佳u 项目名称:项目名称:用队列模拟一队通过丹尼斯超市交用队列模拟一队通过丹尼斯超市交 款处的顾客流款处的顾客流u 项目简介:项目简介:使用一个队列模拟一队通过丹尼斯超市交款处的顾客流。为了使用一个队列模拟一队通过丹尼斯超市交款处的顾客流。为了创建这个模拟,我们必须模拟排队时间和顾客通过流。我们可以通过一个循创建这个模拟,我们必须模拟排队时间和顾客通过流。我们可以通过一个循环模拟时间,每通过一个顾客代表一定的时间间隔环

2、模拟时间,每通过一个顾客代表一定的时间间隔例如,一分钟。我们例如,一分钟。我们可以使用一个队列模拟顾客流,队列中的一个数据项代表一位顾客。为了完可以使用一个队列模拟顾客流,队列中的一个数据项代表一位顾客。为了完成这个模拟,我们需要知道顾客加入交款处队列的频率、交款结算服务情况成这个模拟,我们需要知道顾客加入交款处队列的频率、交款结算服务情况和离开的频率和离开的频率u 问题分析:为了创建这个模拟系统,我们必须模拟排队时间和问题分析:为了创建这个模拟系统,我们必须模拟排队时间和 顾客通过流,在一定时间更新下列信息,即每一次通过循环。顾客通过流,在一定时间更新下列信息,即每一次通过循环。 完成交款服

3、务的总顾客数完成交款服务的总顾客数 这些顾客花费在排队等待的时间总和这些顾客花费在排队等待的时间总和 顾客花费在排队等待的最长时间顾客花费在排队等待的最长时间一一 项目的基本信息项目的基本信息二二 问题的分析问题的分析u第一部分第一部分我们可以通过一个循环模拟时间,每通过一个顾客代表我们可以通过一个循环模拟时间,每通过一个顾客代表一定的时间间隔。我们可以使用一个队列模拟顾客流,队列中的一定的时间间隔。我们可以使用一个队列模拟顾客流,队列中的一个数据项代表一位顾客。因此,我们需要知道顾客加入交款处一个数据项代表一位顾客。因此,我们需要知道顾客加入交款处队列的频率、交款结算服务情况和离开的频率。队

4、列的频率、交款结算服务情况和离开的频率。 在这里,我们调用了在这里,我们调用了srand()函数来产生随机数,系统在调用函数来产生随机数,系统在调用rand()之前都会自动调用()之前都会自动调用srand(),如果用户在,如果用户在rand()之之前曾调用过前曾调用过srand()给参数给参数seed指定了一个值,那么指定了一个值,那么 rand()就就 会将会将seed的值作为产生的值作为产生伪随机数伪随机数的初始值;而如果用户在的初始值;而如果用户在rand()前没有调用过前没有调用过srand(),那,那 么系统默认将么系统默认将1作为伪随机作为伪随机数的初始值。如果给了一个定值,那么

5、每次数的初始值。如果给了一个定值,那么每次rand()产生的随机产生的随机 数序列都是一样的。数序列都是一样的。二二 问题的分析问题的分析u所以为了避免上述情况的发生我们通常用所以为了避免上述情况的发生我们通常用srand(unsigned)time(0)或者或者srand(unsigned)time(NULL)来来 产生种子。如果仍然觉得时间间隔太小,产生种子。如果仍然觉得时间间隔太小,可可 以在以在(unsigned)time(0)或者或者(unsigned)time(NULL)后面乘上某后面乘上某个合适的整数。个合适的整数。u例如例如srand(unsigned)time(NULL)*1

6、0).功能模块及数据结构描述功能模块及数据结构描述u 功能模块:功能模块:u Status OpenForDay(EventList &ev, QCuEvent en, QCupp &q);/开门开门u Status CustomerArrived(EventList &ev, QCupp &q, QCuEvent en);/顾客到达顾客到达u Status CustomerDeparture(EventList &ev, QCupp &q, QCuEvent en);/顾客离开顾客离开u void CloseForDay();/关门关门u St

7、atus OrderInser(EventList &ev, QCuEvent en);/按时间顺序插入事件到事件表按时间顺序插入事件到事件表u int QLength(QCustomerp qn);/求窗口队列长度求窗口队列长度u int MinCuQueue(QCupp q);/求队最短的窗口求队最短的窗口功能模块及数据结构描述功能模块及数据结构描述u Status DelFirstEvent(EventList &ev);/删除事删除事件表中的第一个事件件表中的第一个事件u Status InitCuQueue(QCustomerp &qn);/初始初始化窗口队列

8、化窗口队列u Status EnCuQueue(QCustomerp &qn,QEptr Q);/进入队列进入队列u Status DeCuQueue(QCustomerp &qn,QCuElem &Q);/删除队列中的元素删除队列中的元素u Status GetQHead(QCustomerp qn,QCuElem &Q);/获得队列中的第一个元素获得队列中的第一个元素u Status DestoryQueue(QCustomerp qn);/销毁销毁队列队列u void Print_QStatus(QCustomerp QCu);/打打印队列长度印队列长度u

9、 void Bank_SimulationFunc();u void test(char str);u u typedef int Status;/自定义数据类型自定义数据类型u u typedef struct QCuEvent/事件和事件表事件和事件表u uint OccurTime;/事件发生时刻事件发生时刻uint NType; /事件类型,事件类型,0表示到达事件,表示到达事件,1至至4表示四个窗口的离开事件表示四个窗口的离开事件ustruct QCuEvent *next; /u QCuEvent, *EventList;/事件类型事件类型u typedef struct QCuE

10、lem/窗口前队列元素窗口前队列元素结构模块结构模块结构模块结构模块u uint ArrivalTime;/到达时间到达时间uint Duration;/办理事务所需时间办理事务所需时间ustruct QCuElem *next; /uQCuElem,*QEptr; /队列的数据元队列的数据元素类型,素类型,queue队列指针队列指针utypedef struct /窗口队列指针窗口队列指针uuQEptr front; /队头指针队头指针uQEptr rear; /队尾指针队尾指针uQCustomerp,*QCupp;三主要算法流程描述及部分核心算法主要算法流程描述及部分核心算法算法流程描述:

11、算法流程描述: 部分核心算法部分核心算法u /向事件中插入事件向事件中插入事件u Status OrderInser(EventList &ev, QCuEvent en)/Status OrderInser(EventList &ev, QCuEvent en)/队列的插入队列的插入u uEventList entemp,qtemp;EventList entemp,qtemp;uentemp = (EventList) malloc(sizeof(QCuEvent);/entemp = (EventList) malloc(sizeof(QCuEvent);/为时为时间表分

12、配存储空间间表分配存储空间uentemp-OccurTime = en.OccurTime;/?entemp-OccurTime = en.OccurTime;/?uentemp-NType = en.NType;entemp-NType = en.NType;uentemp-next = NULL;entemp-next = NULL;uif (!ev-next)if (!ev-next)u uev-next = entemp;ev-next = entemp;ureturn OK;return OK;u uqtemp = ev;qtemp = ev;uwhile(qtemp-next&am

13、p;qtemp-next-OccurTime next&qtemp-next-OccurTime next;qtemp = qtemp-next;u uentemp-next = qtemp-next;entemp-next = qtemp-next;uqtemp-next = entemp;qtemp-next = entemp;ureturn OK;return OK;u 核心算法核心算法u /删除事件表中的第一个事件删除事件表中的第一个事件u Status DelFirstEvent(EventList &ev) Status DelFirstEvent(EventLis

14、t &ev) u uEventList p;EventList p;up = ev-next;p = ev-next;uev-next = p-next;ev-next = p-next;ufree(p);free(p);ureturn OK;return OK;u u /求窗口队列长度求窗口队列长度u u int QLength(QCustomerp qn) int QLength(QCustomerp qn) u uQEptr qtemp;QEptr qtemp;uint i=0;/int i=0;/计数器,计算队列的长度计数器,计算队列的长度uqtemp = qn.front-n

15、ext;qtemp = qn.front-next;uwhile(qtemp)while(qtemp)u uqtemp = qtemp-next;qtemp = qtemp-next;ui+;/i+;/对列长度加对列长度加1 1u ureturn i;/return i;/返回返回i i值,队列长度值,队列长度u 核心算法核心算法u /求队最短的窗口求队最短的窗口u u int MinCuQueue(QCupp q) int MinCuQueue(QCupp q) uint i;int i;uint min;int min;ufor (i=1,min=1;i=windowsnum;i+)for (i=1,min=1;i=windowsnum;i+)u umin = QLength(qmin)=QLength(qi) ? min:i;min = QLength(qmin)=QLength(qi) ? min:i;u ureturn min;return min;u 四系统使用说明四系统使用说明四四 系统的使用说明系统的使用说明。四四 系统的使用说明系统的使用说明五课程实践总结五课程实践总结u 通过这次课程实践,

温馨提示

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

评论

0/150

提交评论