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

上传人:b****1 文档编号:1691104 上传时间:2023-05-01 格式:DOCX 页数:16 大小:194.40KB
下载 相关 举报
排队叫号系统带源程序.docx_第1页
第1页 / 共16页
排队叫号系统带源程序.docx_第2页
第2页 / 共16页
排队叫号系统带源程序.docx_第3页
第3页 / 共16页
排队叫号系统带源程序.docx_第4页
第4页 / 共16页
排队叫号系统带源程序.docx_第5页
第5页 / 共16页
排队叫号系统带源程序.docx_第6页
第6页 / 共16页
排队叫号系统带源程序.docx_第7页
第7页 / 共16页
排队叫号系统带源程序.docx_第8页
第8页 / 共16页
排队叫号系统带源程序.docx_第9页
第9页 / 共16页
排队叫号系统带源程序.docx_第10页
第10页 / 共16页
排队叫号系统带源程序.docx_第11页
第11页 / 共16页
排队叫号系统带源程序.docx_第12页
第12页 / 共16页
排队叫号系统带源程序.docx_第13页
第13页 / 共16页
排队叫号系统带源程序.docx_第14页
第14页 / 共16页
排队叫号系统带源程序.docx_第15页
第15页 / 共16页
排队叫号系统带源程序.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《排队叫号系统带源程序.docx》由会员分享,可在线阅读,更多相关《排队叫号系统带源程序.docx(16页珍藏版)》请在冰点文库上搜索。

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

排队叫号系统带源程序

一、课程设计的主要内容

题目描述:

利用队列模拟一个排队叫号系统。

功能要求及说明:

(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

#include

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);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

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

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