資源描述:
《排隊(duì)叫號(hào)系統(tǒng)(帶源程序)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、一、課程設(shè)計(jì)的主要內(nèi)容題目描述:利用隊(duì)列模擬一個(gè)排隊(duì)叫號(hào)系統(tǒng)。功能要求及說(shuō)明:(1)系統(tǒng)采用菜單方式操作,要求實(shí)現(xiàn)如下功能:(2)叫號(hào)排隊(duì):用戶叫號(hào)時(shí)將該用戶信息(用戶名)入隊(duì),并打印用戶排隊(duì)序號(hào)、等待人數(shù)。(3)業(yè)務(wù)處理:工作人員處理完前一業(yè)務(wù)后,從隊(duì)列頭中獲取一個(gè)用戶出隊(duì)并呼叫該用戶(終端打印輸出)。(4)隊(duì)列信息瀏覽:工作人員可隨時(shí)查看隊(duì)列中目前未處理的所有業(yè)務(wù)信息。(5)采用模塊化設(shè)計(jì)。二、概要設(shè)計(jì)1、本程序包含兩個(gè)模塊(1)主函數(shù)模塊:main(){定義及初始化;讓用戶控制程序,實(shí)現(xiàn)排隊(duì)叫號(hào)功能.}(2)排隊(duì)叫號(hào)系統(tǒng)單元模塊:主函數(shù)調(diào)用
2、排隊(duì)叫號(hào)系統(tǒng)單元模塊.2、排隊(duì)叫號(hào)的抽象數(shù)據(jù)類型定義:voidQueueInitiate(LQueue*Q)Q為結(jié)構(gòu)體指針;操作結(jié)果:使隊(duì)列初始化.intQueueNotEmpty(LQueueQ)判斷隊(duì)列是否為空;操作結(jié)果:若隊(duì)列為空,返回0;不為空,則返回1.intQueueAppend(LQueue*Q,intx)Q為結(jié)構(gòu)體指針,x傳輸用戶的序號(hào);操作結(jié)果:用戶叫號(hào)時(shí),使用戶序號(hào)按順序入隊(duì).intQueueDelete(LQueue*Q,int*d)*d傳輸隊(duì)頭元素;操作結(jié)果:處理對(duì)頭元素,并釋放頭結(jié)點(diǎn).voidDestroy(LQueue
3、Q)操作結(jié)果:用戶用完程序退出時(shí),摧毀隊(duì)列,釋放內(nèi)存.四詳細(xì)設(shè)計(jì)1、實(shí)現(xiàn)菜單函數(shù)voidmenu(){printf("****************************************************");printf("****************1.排隊(duì)叫號(hào)**************************");printf("****************2.業(yè)務(wù)處理**************************");printf("****************3.隊(duì)列信息瀏覽******
4、****************");printf("****************4.退出******************************");printf("****************************************************");}2、隊(duì)列初始化函數(shù)voidQueueInitiate(LQueue*Q)/*隊(duì)列初始化*/{Q->rear=NULL;/*尾指針為空*/Q->front=NULL;/*頭指針為空*/}3、判斷隊(duì)列是否為空函數(shù)intQueueNotEmpty(LQueu
5、eQ)/*隊(duì)列不能為空*/{if(NULL==Q.front)/*如果頭指針為空,則返回0*/{return0;}else{return1;}}4、實(shí)現(xiàn)排隊(duì)叫號(hào)函數(shù)intQueueAppend(LQueue*Q,intx)/*元素入隊(duì)*/{LQNode*p;/*p指針指向入隊(duì)元素*/if((p=(LQNode*)malloc(sizeof(LQNode)))==NULL)/*申請(qǐng)入隊(duì)元素空間*/{return0;}p->data=x;p->next=NULL;if(Q->rear!=NULL)/*隊(duì)尾不為空則將入隊(duì)元素插至隊(duì)尾后*/{Q->rea
6、r->next=p;}Q->rear=p;/*隊(duì)尾為空則隊(duì)尾指向入隊(duì)元素*/if(Q->front==NULL){Q->front=p;/*隊(duì)頭指向入隊(duì)元素*/}return1;}5、實(shí)現(xiàn)業(yè)務(wù)處理函數(shù)intQueueDelete(LQueue*Q,int*d)/*業(yè)務(wù)處理*/{LQNode*p;if(Q->front==NULL){return0;}else{*d=Q->front->data;/*讀取隊(duì)頭元素*/p=Q->front;Q->front=Q->front->next;/*頭結(jié)點(diǎn)向后移動(dòng)一個(gè)節(jié)點(diǎn)*/if(Q->front==NULL
7、){Q->rear=NULL;}free(p);/*釋放頭結(jié)點(diǎn)*/return1;}}6、釋放隊(duì)列函數(shù)voidDestroy(LQueueQ)/*摧毀隊(duì)列*/{LQNode*p,*p1;p=Q.front;/*p指針指向頭結(jié)點(diǎn)*/while(p!=NULL){p1=p;p=p->next;free(p1);/*逐個(gè)釋放隊(duì)列的節(jié)點(diǎn)*/}整個(gè)程序的流程圖如下:五調(diào)試分析1、該程序的關(guān)鍵就是弄清楚隊(duì)列及鏈表的操作方法和原理。首先保證沒(méi)有句法錯(cuò)誤,其次要保證寫(xiě)的函數(shù)沒(méi)有錯(cuò)誤,能正常完成要求所需的功能,然后盡量完善各功能,使用戶用起來(lái)更方便。2、叫號(hào)時(shí),輸
8、入不同的用戶名,隨時(shí)進(jìn)行業(yè)務(wù)處理和隊(duì)列信息瀏覽,查看相應(yīng)功能是否正確。3、本實(shí)習(xí)作業(yè)采用循序漸進(jìn)的策略,首先分別寫(xiě)好三個(gè)相應(yīng)功能的函數(shù),