排队叫号系统带源程序精品模板.docx
- 文档编号:10995486
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:16
- 大小:107.41KB
排队叫号系统带源程序精品模板.docx
《排队叫号系统带源程序精品模板.docx》由会员分享,可在线阅读,更多相关《排队叫号系统带源程序精品模板.docx(16页珍藏版)》请在冰豆网上搜索。
排队叫号系统带源程序精品模板
一、课程设计的主要内容
题目描述:
利用队列模拟一个排队叫号系统。
功能要求及说明:
(1)系统采用菜单方式操作,要求实现如下功能:
(2)叫号排队:
用户叫号时将该用户信息(用户名)入队,并打印用户排队序号、等待人数。
(3)业务处理:
工作人员处理完前一业务后,从队列头中获取一个用户出队并呼叫该用户(终端打印输出)。
(4)队列信息浏览:
工作人员可随时查看队列中目前未处理的所有业务信息。
(5)采用模块化设计.
二、概要设计
1、本程序包含两个模块
(1)主函数模块:
main(){
定义及初始化;
让用户控制程序,实现排队叫号功能.
}
(2)排队叫号系统单元模块:
主函数调用排队叫号系统单元模块.
2、排队叫号的抽象数据类型定义:
voidQueueInitiate(LQueue*Q)
Q为结构体指针;
操作结果:
使队列初始化。
intQueueNotEmpty(LQueueQ)
判断队列是否为空;
操作结果:
若队列为空,返回0;不为空,则返回1.
intQueueAppend(LQueue*Q,intx)
Q为结构体指针,x传输用户的序号;
操作结果:
用户叫号时,使用户序号按顺序入队.
intQueueDelete(LQueue*Q,int*d)
*d传输队头元素;
操作结果:
处理对头元素,并释放头结点.
voidDestroy(LQueueQ)
操作结果:
用户用完程序退出时,摧毁队列,释放内存。
四详细设计
1、实现菜单函数
voidmenu()
{
printf("****************************************************\n”);
printf("****************1.排队叫号**************************\n");
printf(”****************2.业务处理**************************\n”);
printf("****************3。
队列信息浏览**********************\n");
printf("****************4.退出******************************\n");
printf("****************************************************\n");
}
2、队列初始化函数
voidQueueInitiate(LQueue*Q)/*队列初始化*/
{
Q—〉rear=NULL;/*尾指针为空*/
Q—>front=NULL;/*头指针为空*/
}
3、判断队列是否为空函数
intQueueNotEmpty(LQueueQ)/*队列不能为空*/
{
if(NULL==Q。
front)/*如果头指针为空,则返回0*/
{
return0;
}
else
{
return1;
}
}
4、实现排队叫号函数
intQueueAppend(LQueue*Q,intx)/*元素入队*/
{
LQNode*p;/*p指针指向入队元素*/
if((p=(LQNode*)malloc(sizeof(LQNode)))==NULL)/*申请入队元素空间*/
{
return0;
}
p—>data=x;
p—〉next=NULL;
if(Q—〉rear!
=NULL)/*队尾不为空则将入队元素插至队尾后*/
{
Q->rear—>next=p;
}
Q->rear=p;/*队尾为空则队尾指向入队元素*/
if(Q-〉front==NULL)
{
Q-〉front=p;/*队头指向入队元素*/
}
return1;
}
5、实现业务处理函数
intQueueDelete(LQueue*Q,int*d)/*业务处理*/
{
LQNode*p;
if(Q—>front==NULL)
{
return0;
}
else
{
*d=Q—〉front—〉data;/*读取队头元素*/
p=Q-〉front;
Q—>front=Q—>front->next;/*头结点向后移动一个节点*/
if(Q-〉front==NULL)
{
Q—>rear=NULL;
}
free(p);/*释放头结点*/
return1;
}
}
6、释放队列函数
voidDestroy(LQueueQ)/*摧毁队列*/
{
LQNode*p,*p1;
p=Q。
front;/*p指针指向头结点*/
while(p!
=NULL)
{
p1=p;
p=p—〉next;
free(p1);/*逐个释放队列的节点*/
}
整个程序的流程图如下:
五调试分析
1、该程序的关键就是弄清楚队列及链表的操作方法和原理。
首先保证没有句法错误,其次要保证写的函数没有错误,能正常完成要求所需的功能,然后尽量完善各功能,使用户用起来更方便。
2、叫号时,输入不同的用户名,随时进行业务处理和队列信息浏览,查看相应功能是否正确.
3、本实习作业采用循序渐进的策略,首先分别写好三个相应功能的函数,然后再加入主函数中,以保证整个程序的正确性,也便于随时调整,改正各种错误。
调试程序很耗时间,比较的麻烦,往往改动一个地方能影响到很多位置。
六测试结果
1、通过写该程序,充分理解队列及链表的操作原理,熟悉队列的操作。
2、主函数调用子函数时,涉及到参数的传递,要注意到程序里面还有局部变量与全局变量的区别,要时刻注意变量的值,循环调用就要注意到各个子函数的返回值。
3、该程序完整地实现了排队叫号系统的功能,程序简洁、明了,用户使用起来方便。
七用户使用说明
1、本程序在VC下能正常运行。
2、程序运行后,出现主菜单,用户首先选择排队叫号功能,输入账号,回车结束,程序会显示用户的序号以及前面排队的人数;
3、叫号多次,再选择业务处理功能,程序会打印第一个用户的序号,并叫其来办理业务;
4、业务处理完后,返回主菜单,选择队列信息浏览功能,程序会打印出当前未办理业务的人数、用户队列序号和相应用户的账号;
5、做完后,退出程序。
源程序:
#include h〉 #include〈stdlib.h〉 typedefcharDataType; #include"CallSystem.h" intmain(void) { inti=0,countx=0,j=0; inta; charusername[20][20]; LQueuelqueue; DataTyperturn; QueueInitiate(&lqueue); QueueNotEmpty(lqueue); while (1) { system(”cls”); menu(); printf(”请选择相应功能: ”); scanf(”%d”,&a); fflush(stdin); switch(a) { case1: /*排队叫号*/ { printf(”请输入您的账号: ”); scanf("%s”,username[i]); 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",&rturn); if(rturn==’N') return; } break; case2: /*业务处理*/ { inttemp=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; case3: /*队列信息浏览*/ { LQNode*p; inttemp; p=lqueue.front; printf(”还有%d个人的业务未处理: \n",countx); while(p! =NULL) { temp=p—>data; printf("%03d: ",temp); p=p—>next; printf("%s\n",username[j]); j++; } fflush(stdin); printf(”\n操作完成,是否继续(N退出,任意键继续)\n"); scanf(”%c",&rturn); if(rturn=='N’) return; } break; case4: /*退出*/ { Destroy(lqueue); return; } break; default: break; } } } 封装的头文件: typedefstructqnode { intdata; structqnode*next; }LQNode; typedefstruct { LQNode*front; LQNode*rear; }LQueue; voidmenu() { printf("****************************************************\n”); printf(”****************1。 排队叫号**************************\n"); printf(”****************2.业务处理**************************\n"); printf("****************3。 队列信息浏览**********************\n"); printf("****************4.退出******************************\n"); printf(”****************************************************\n"); } voidQueueInitiate(LQueue*Q) { Q->rear=NULL; Q—>front=NULL; } intQueueNotEmpty(LQueueQ) { if(NULL==Q。 front) { return0; } else { return1; } } intQueueAppend(LQueue*Q,intx) { LQNode*p; if((p=(LQNode*)malloc(sizeof(LQNode)))==NULL) { return0; } p->data=x; p—〉next=NULL; if(Q-〉rear! =NULL) { Q-〉rear—>next=p; } Q—〉rear=p; if(Q—〉front==NULL) { Q—>front=p; } return1; } intQueueDelete(LQueue*Q,int*d) { LQNode*p; if(Q—>front==NULL) { return0; } else { *d=Q—>front-〉data; p=Q->front; Q->front=Q->front—〉next; if(Q—>front==NULL) { Q—>rear=NULL; } free(p); return1; } } voidDestroy(LQueueQ) { LQNode*p,*p1; p=Q。 front; while(p! =NULL) { p1=p; p=p->next; free(p1); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 排队 叫号 系统 源程序 精品 模板