ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:194.39KB ,
资源ID:3133681      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3133681.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(排队叫号系统带源程序.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

排队叫号系统带源程序.docx

1、排队叫号系统带源程序一、课程设计的主要内容题目描述:利用队列模拟一个排队叫号系统。功能要求及说明:(1)系统采用菜单方式操作,要求实现如下功能:(2)叫号排队:用户叫号时将该用户信息(用户名)入队,并打印用户排队序号、等待人数。(3)业务处理:工作人员处理完前一业务后,从队列头中获取一个用户出队并呼叫该用户(终端打印输出)。(4)队列信息浏览:工作人员可随时查看队列中目前未处理的所有业务信息。(5)采用模块化设计。 二、 概要设计1、本程序包含两个模块(1) 主函数模块:main()定义及初始化;让用户控制程序,实现排队叫号功能.(2) 排队叫号系统单元模块:主函数调用排队叫号系统单元模块.2

2、、排队叫号的抽象数据类型定义:void QueueInitiate(LQueue * Q)Q为结构体指针;操作结果:使队列初始化.int QueueNotEmpty(LQueue Q)判断队列是否为空;操作结果:若队列为空,返回0;不为空,则返回1.int QueueAppend(LQueue * Q,int x)Q为结构体指针,x传输用户的序号;操作结果:用户叫号时,使用户序号按顺序入队.int QueueDelete(LQueue * Q,int * d)*d传输队头元素;操作结果:处理对头元素,并释放头结点.void Destroy(LQueue Q)操作结果:用户用完程序退出时,摧毁队

3、列,释放内存.四 详细设计1、实现菜单函数void menu() printf (*n); printf (*1.排队叫号*n); printf (*2.业务处理*n); printf (*3.队列信息浏览*n); printf (*4.退出*n); printf (*n);2、队列初始化函数void QueueInitiate(LQueue * Q) /*队列初始化*/ Q-rear=NULL; /*尾指针为空*/ Q-front=NULL; /*头指针为空*/3、判断队列是否为空函数int QueueNotEmpty(LQueue Q) /*队列不能为空*/ if(NULL=Q.front

4、) /*如果头指针为空,则返回0*/ return 0; else return 1; 4、实现排队叫号函数int QueueAppend(LQueue * Q,int x) /*元素入队*/ LQNode * p; /*p指针指向入队元素*/ if(p=(LQNode *)malloc(sizeof(LQNode)=NULL) /*申请入队元素空间*/ return 0; p-data=x; p-next=NULL; if(Q-rear!=NULL) /*队尾不为空则将入队元素插至队尾后*/ Q-rear-next=p; Q-rear=p; /*队尾为空则队尾指向入队元素*/ if(Q-fr

5、ont=NULL) Q-front=p; /*队头指向入队元素*/ return 1;5、实现业务处理函数int QueueDelete(LQueue * Q,int * d) /*业务处理*/ LQNode *p; if(Q-front=NULL) return 0; else *d=Q-front-data; /*读取队头元素*/ p=Q-front; Q-front=Q-front-next; /*头结点向后移动一个节点*/ if(Q-front=NULL) Q-rear=NULL; free(p); /*释放头结点*/ return 1; 6、释放队列函数void Destroy(LQ

6、ueue Q) /*摧毁队列*/ LQNode *p,*p1; p=Q.front; /*p指针指向头结点*/ while(p!=NULL) p1=p; p=p-next; free(p1); /*逐个释放队列的节点*/ 整个程序的流程图如下:五 调试分析1、该程序的关键就是弄清楚队列及链表的操作方法和原理。首先保证没有句法错误,其次要保证写的函数没有错误,能正常完成要求所需的功能,然后尽量完善各功能,使用户用起来更方便。2、叫号时,输入不同的用户名,随时进行业务处理和队列信息浏览,查看相应功能是否正确。3、本实习作业采用循序渐进的策略,首先分别写好三个相应功能的函数,然后再加入主函数中,以保

7、证整个程序的正确性,也便于随时调整,改正各种错误。调试程序很耗时间,比较的麻烦,往往改动一个地方能影响到很多位置。六 测试结果1、通过写该程序,充分理解队列及链表的操作原理,熟悉队列的操作。2、主函数调用子函数时,涉及到参数的传递,要注意到程序里面还有局部变量与全局变量的区别,要时刻注意变量的值,循环调用就要注意到各个子函数的返回值。3、该程序完整地实现了排队叫号系统的功能,程序简洁、明了,用户使用起来方便。七 用户使用说明1、本程序在VC下能正常运行。2、程序运行后,出现主菜单,用户首先选择排队叫号功能,输入账号,回车结束,程序会显示用户的序号以及前面排队的人数;3、叫号多次,再选择业务处理

8、功能,程序会打印第一个用户的序号,并叫其来办理业务;4、业务处理完后,返回主菜单,选择队列信息浏览功能,程序会打印出当前未办理业务的人数、用户队列序号和相应用户的账号;5、做完后,退出程序。源程序:# include # include typedef char DataType;# include CallSystem.hint main(void) int i=0,countx=0,j=0; int a; char username2020; LQueue lqueue; DataType rturn; QueueInitiate(&lqueue); QueueNotEmpty(lqueu

9、e); while(1) system(cls); menu(); printf(请选择相应功能:); scanf(%d,&a); fflush(stdin); switch(a) case 1: /*排队叫号*/ printf(请输入您的账号:); scanf(%s,usernamei); i+; countx+; if(0=QueueAppend(&lqueue,i) printf(内存不足,警告!n); return; printf(您的序号是%03d 您前面有%d个人n,i,countx-1); fflush(stdin); printf(n操作完成,是否继续(N退出,任意键继续)n)

10、; scanf(%c,&rturn); if(rturn=N) return; break; case 2: /*业务处理*/ int temp=0; if(0=countx) printf(无人排队,警告!n); return; QueueDelete(&lqueue,&temp); printf(请%03d号用户来前台办理业务n,temp); countx-; fflush(stdin); printf(n操作完成,是否继续(N退出,任意键继续)n); scanf(%c,&rturn); if(rturn=N) return; break; case 3: /*队列信息浏览*/ LQNod

11、e * p; int temp; p=lqueue.front; printf(还有%d个人的业务未处理:n,countx); while(p!=NULL) temp=p-data; printf(%03d:,temp); p=p-next; printf(%sn,usernamej); j+; fflush(stdin); printf(n操作完成,是否继续(N退出,任意键继续)n); scanf(%c,&rturn); if(rturn=N) return; break; case 4: /*退出*/ Destroy(lqueue); return; break; default: bre

12、ak; 封装的头文件:typedef struct qnode int data; struct qnode * next;LQNode;typedef struct LQNode * front; LQNode * rear;LQueue;void menu() printf (*n); printf (*1.排队叫号*n); printf (*2.业务处理*n); printf (*3.队列信息浏览*n); printf (*4.退出*n); printf (*n);void QueueInitiate(LQueue * Q) Q-rear=NULL; Q-front=NULL;int Q

13、ueueNotEmpty(LQueue Q) if(NULL=Q.front) return 0; else return 1; int QueueAppend(LQueue * Q,int x) LQNode * p; if(p=(LQNode *)malloc(sizeof(LQNode)=NULL) return 0; p-data=x; p-next=NULL; if(Q-rear!=NULL) Q-rear-next=p; Q-rear=p; if(Q-front=NULL) Q-front=p; return 1;int QueueDelete(LQueue * Q,int * d) LQNode *p; if(Q-front=NULL) return 0; else *d=Q-front-data; p=Q-front; Q-front=Q-front-next; if(Q-front=NULL) Q-rear=NULL; free(p); return 1; void Destroy(LQueue Q) LQNode *p,*p1; p=Q.front; while(p!=NULL) p1=p; p=p-next; free(p1);

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2