排队叫号系统(带源程序) 下载本文

内容发布更新时间 : 2024/11/6 0:36:35星期一 下面是文章的全部内容请认真阅读。

一、 课程设计的主要内容

题目描述:利用队列模拟一个排队叫号系统。 功能要求及说明:

(1) 系统采用菜单方式操作,要求实现如下功能:

(2) 叫号排队:用户叫号时将该用户信息(用户名)入队,并打印用户排队序号、等待人数。

(3) 业务处理:工作人员处理完前一业务后,从队列头中获取一个用户出队并呼叫该用户(终端打印输

出)。

(4) 队列信息浏览:工作人员可随时查看队列中目前未处理的所有业务信息。 (5) 采用模块化设计。

二、 概要设计

1、本程序包含两个模块

(1) 主函数模块: main(){

定义及初始化;

让用户控制程序,实现排队叫号功能. }

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

操作结果:用户用完程序退出时,摧毁队列,释放内存.

四 详细设计

1、实现菜单函数 void menu() {

printf (\ printf (\排队叫号**************************\\n\ printf (\业务处理**************************\\n\ printf (\队列信息浏览**********************\\n\ printf (\退出******************************\\n\ printf (\}

2、队列初始化函数

void QueueInitiate(LQueue * Q) /*队列初始化*/ { }

Q->rear=NULL; /*尾指针为空*/ Q->front=NULL; /*头指针为空*/

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指针指向入队元素*/ { }

p->data=x; p->next=NULL;

if(Q->rear!=NULL) /*队尾不为空则将入队元素插至队尾后*/ { }

Q->rear=p; /*队尾为空则队尾指向入队元素*/ if(Q->front==NULL) { } return 1;

Q->front=p; /*队头指向入队元素*/ Q->rear->next=p; return 0;

if((p=(LQNode *)malloc(sizeof(LQNode)))==NULL) /*申请入队元素空间*/

5、实现业务处理函数

int QueueDelete(LQueue * Q,int * d) /*业务处理*/ {

LQNode *p; if(Q->front==NULL) {

return 0;