排隊叫號系統(tǒng)帶源程序_第1頁
排隊叫號系統(tǒng)帶源程序_第2頁
排隊叫號系統(tǒng)帶源程序_第3頁
排隊叫號系統(tǒng)帶源程序_第4頁
排隊叫號系統(tǒng)帶源程序_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一、 課程設計的主要內容題目描述:利用隊列模擬一個排隊叫號系統(tǒng)。功能要求及說明:(1) 系統(tǒng)采用菜單方式操作,要求實現(xiàn)如下功能:(2) 叫號排隊:用戶叫號時將該用戶信息(用戶名)入隊,并打印用戶排隊序號、等待人數(shù)。(3) 業(yè)務處理:工作人員處理完前一業(yè)務后,從隊列頭中獲取一個用戶出隊并呼叫該用戶(終端打印輸出)。(4) 隊列信息瀏覽:工作人員可隨時查看隊列中目前未處理的所有業(yè)務信息。(5) 采用模塊化設計。 二、 概要設計1、本程序包含兩個模塊(1) 主函數(shù)模塊:main()定義及初始化;讓用戶控制程序,實現(xiàn)排隊叫號功能.(2) 排隊叫號系統(tǒng)單元模塊:主函數(shù)調用排隊叫號系統(tǒng)單元模塊.2、排隊叫

2、號的抽象數(shù)據(jù)類型定義: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、實現(xiàn)菜單函數(shù)void menu() printf ("*n"); printf ("*1.排隊叫號*n"); printf ("*2.業(yè)務處理*n"); printf ("*3.隊列信息瀏覽*n"); printf ("*4.退出*n"); printf ("*n");2、隊列初始化函數(shù)void QueueInitiate(LQueue * Q) /*隊列初始化*/Q->rear=NULL; /*尾指針為空*/Q->front=NULL; /

4、*頭指針為空*/3、判斷隊列是否為空函數(shù)int QueueNotEmpty(LQueue Q) /*隊列不能為空*/if(NULL=Q.front) /*如果頭指針為空,則返回0*/return 0; else return 1; 4、實現(xiàn)排隊叫號函數(shù)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->rear

5、!=NULL) /*隊尾不為空則將入隊元素插至隊尾后*/Q->rear->next=p;Q->rear=p; /*隊尾為空則隊尾指向入隊元素*/if(Q->front=NULL)Q->front=p; /*隊頭指向入隊元素*/return 1;5、實現(xiàn)業(yè)務處理函數(shù)int QueueDelete(LQueue * Q,int * d) /*業(yè)務處理*/LQNode *p;if(Q->front=NULL)return 0; else*d=Q->front->data; /*讀取隊頭元素*/p=Q->front;Q->front=Q-&g

6、t;front->next; /*頭結點向后移動一個節(jié)點*/if(Q->front=NULL)Q->rear=NULL;free(p); /*釋放頭結點*/return 1;6、釋放隊列函數(shù)void Destroy(LQueue Q) /*摧毀隊列*/LQNode *p,*p1;p=Q.front; /*p指針指向頭結點*/while(p!=NULL)p1=p;p=p->next;free(p1); /*逐個釋放隊列的節(jié)點*/整個程序的流程圖如下:五 調試分析1、該程序的關鍵就是弄清楚隊列及鏈表的操作方法和原理。首先保證沒有句法錯誤,其次要保證寫的函數(shù)沒有錯誤,能正常完

7、成要求所需的功能,然后盡量完善各功能,使用戶用起來更方便。2、叫號時,輸入不同的用戶名,隨時進行業(yè)務處理和隊列信息瀏覽,查看相應功能是否正確。3、本實習作業(yè)采用循序漸進的策略,首先分別寫好三個相應功能的函數(shù),然后再加入主函數(shù)中,以保證整個程序的正確性,也便于隨時調整,改正各種錯誤。調試程序很耗時間,比較的麻煩,往往改動一個地方能影響到很多位置。六 測試結果1、通過寫該程序,充分理解隊列及鏈表的操作原理,熟悉隊列的操作。2、主函數(shù)調用子函數(shù)時,涉及到參數(shù)的傳遞,要注意到程序里面還有局部變量與全局變量的區(qū)別,要時刻注意變量的值,循環(huán)調用就要注意到各個子函數(shù)的返回值。3、該程序完整地實現(xiàn)了排隊叫號系

8、統(tǒng)的功能,程序簡潔、明了,用戶使用起來方便。七 用戶使用說明1、本程序在VC下能正常運行。2、程序運行后,出現(xiàn)主菜單,用戶首先選擇排隊叫號功能,輸入賬號,回車結束,程序會顯示用戶的序號以及前面排隊的人數(shù);3、叫號多次,再選擇業(yè)務處理功能,程序會打印第一個用戶的序號,并叫其來辦理業(yè)務;4、業(yè)務處理完后,返回主菜單,選擇隊列信息瀏覽功能,程序會打印出當前未辦理業(yè)務的人數(shù)、用戶隊列序號和相應用戶的賬號;5、做完后,退出程序。源程序:# include <stdio.h># include <stdlib.h>typedef char DataType;# include &q

9、uot;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) case 1

10、: /*排隊叫號*/ 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操作完成,是否繼續(xù)(N退出,任意鍵繼續(xù))n"); scanf("%c",&rturn

11、); if(rturn='N') return; break; case 2: /*業(yè)務處理*/ int temp=0; if(0=countx) printf("無人排隊,警告!n"); return; QueueDelete(&lqueue,&temp); printf("請%03d號用戶來前臺辦理業(yè)務n",temp); countx-; fflush(stdin); printf("n操作完成,是否繼續(xù)(N退出,任意鍵繼續(xù))n"); scanf("%c",&rturn)

12、; if(rturn='N') return; break; case 3: /*隊列信息瀏覽*/ LQNode * p; int temp; p=lqueue.front; printf("還有%d個人的業(yè)務未處理:n",countx); while(p!=NULL) temp=p->data; printf("%03d:",temp); p=p->next; printf("%sn",usernamej); j+; fflush(stdin); printf("n操作完成,是否繼續(xù)(N退出,任

13、意鍵繼續(xù))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"

14、); printf ("*1.排隊叫號*n"); printf ("*2.業(yè)務處理*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->fr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論