![排队叫号系统(带源程序)_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/2dff70ad-5c6b-4bb7-b456-9be5802d27cd/2dff70ad-5c6b-4bb7-b456-9be5802d27cd1.gif)
![排队叫号系统(带源程序)_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/2dff70ad-5c6b-4bb7-b456-9be5802d27cd/2dff70ad-5c6b-4bb7-b456-9be5802d27cd2.gif)
![排队叫号系统(带源程序)_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/2dff70ad-5c6b-4bb7-b456-9be5802d27cd/2dff70ad-5c6b-4bb7-b456-9be5802d27cd3.gif)
![排队叫号系统(带源程序)_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/2dff70ad-5c6b-4bb7-b456-9be5802d27cd/2dff70ad-5c6b-4bb7-b456-9be5802d27cd4.gif)
![排队叫号系统(带源程序)_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/2dff70ad-5c6b-4bb7-b456-9be5802d27cd/2dff70ad-5c6b-4bb7-b456-9be5802d27cd5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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=NUL
4、L; /*头指针为空*/3、推断队列是否为空函数int QueueNotEmpty(LQueue Q) /*队列不能为空*/if(NULL=Q.front) /*假如头指针为空,则返回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->
5、rear!=NULL) /*队尾不为空则将入队元素插至队尾后*/Q->rear->next=p;Q->rear=p; /*队尾为空则队尾指向入队元素*/if(Q->front=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=
6、Q->front->next; /*头结点向后移动一个节点*/if(Q->front=NULL)Q->rear=NULL;free(p); /*释放头结点*/return 1;6、释放队列函数void Destroy(LQueue Q) /*摧毁队列*/LQNode *p,*p1;p=Q.front; /*p指针指向头结点*/while(p!=NULL)p1=p;p=p->next;free(p1); /*逐个释放队列的节点*/整个程序的流程图如下:五 调试分析1、该程序的关键就是弄清楚队列及链表的操作方法和原理。首先保证没有句法错误,其次要保证写的函数没有错误,
7、能正常完成要求所需的功能,然后尽量完善各功能,使用户用起来更便利。2、叫号时,输入不同的用户名,随时进行业务处理和队列信息扫瞄,查看相应功能是否正确。3、本实习作业接受循序渐进的策略,首先分别写好三个相应功能的函数,然后再加入主函数中,以保证整个程序的正确性,也便于随时调整,改正各种错误。调试程序很耗时间,比较的麻烦,往往改动一个地方能影响到很多位置。六 测试结果1、通过写该程序,充分理解队列及链表的操作原理,生疏队列的操作。2、主函数调用子函数时,涉及到参数的传递,要留意到程序里面还有局部变量与全局变量的区分,要时刻留意变量的值,循环调用就要留意到各个子函数的返回值。3、该程序完整地实现了排
8、队叫号系统的功能,程序简洁、明白,用户使用起来便利。七 用户使用说明1、本程序在VC下能正常运行。2、程序运行后,消灭主菜单,用户首先选择排队叫号功能,输入账号,回车结束,程序会显示用户的序号以及前面排队的人数;3、叫号多次,再选择业务处理功能,程序会打印第一个用户的序号,并叫其来办理业务;4、业务处理完后,返回主菜单,选择队列信息扫瞄功能,程序会打印出当前未办理业务的人数、用户队列序号和相应用户的账号;5、做完后,退出程序。源程序:# include <stdio.h># include <stdlib.h>typedef char DataType;# includ
9、e "CallSystem.h"int main(void) int i=0,countx=0,j=0; int a; char username2020; LQueue lqueue; DataType rturn; QueueInitiate(&lqueue); QueueNotEmpty(lqueue); while(1) system("cls"); menu(); printf("请选择相应功能:"); scanf("%d",&a); fflush(stdin); switch(a) ca
10、se 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"); scanf("%c",&r
11、turn); 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",&rt
12、urn); if(rturn='N') return; break; case 3: /*队列信息扫瞄*/ LQNode * 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
13、退出,任意键连续)n"); scanf("%c",&rturn); if(rturn='N') return; break; case 4: /*退出*/ Destroy(lqueue); return; break; default: break; 封装的头文件:typedef struct qnode int data; struct qnode * next;LQNode;typedef struct LQNode * front; LQNode * rear;LQueue;void menu() printf ("*n&q
14、uot;); 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 QueueNotEmpty(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->fron
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学英语课《This is my home》教学设计与反思
- 个人股权委托代持合同
- 个人自建房质押贷款合同
- 临时劳动合同安全免责约定
- 个人房产转让合同A
- 事业单位临时工劳动合同
- 2025年城市公共交通燃油供应合同
- 上海销售合同范本
- 个人房产变更所有权合同
- 交通管理局智能交通系统采购合同
- 屋面细石混凝土保护层施工方案及方法
- 2024年1月山西省高三年级适应性调研测试(一模)理科综合试卷(含答案)
- 110kv各类型变压器的计算单
- 双减政策之下老师如何打造高效课堂
- 5A+Chapter+1+Changes+at+home+课件(新思维小学英语)
- 安徽省2023年中考数学试卷(附答案)
- 护工(陪护)培训教材(完整版)资料
- 机械加工生产计划排程表
- 女性生殖系统解剖与生理 生殖系统的血管淋巴和神经
- 易制毒化学品安全管理制度汇编
- GB/T 35506-2017三氟乙酸乙酯(ETFA)
评论
0/150
提交评论