c語(yǔ)言程序設(shè)計(jì)-機(jī)房機(jī)位預(yù)約模擬_第1頁(yè)
c語(yǔ)言程序設(shè)計(jì)-機(jī)房機(jī)位預(yù)約模擬_第2頁(yè)
c語(yǔ)言程序設(shè)計(jì)-機(jī)房機(jī)位預(yù)約模擬_第3頁(yè)
c語(yǔ)言程序設(shè)計(jì)-機(jī)房機(jī)位預(yù)約模擬_第4頁(yè)
c語(yǔ)言程序設(shè)計(jì)-機(jī)房機(jī)位預(yù)約模擬_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、C語(yǔ)言課程設(shè)計(jì) 機(jī)房機(jī)位預(yù)約模擬 一.題目要求20臺(tái)機(jī)器,從早八點(diǎn)到晚八點(diǎn),每?jī)蓚€(gè)小時(shí)一個(gè)時(shí)間段.需要實(shí)現(xiàn)的功能:(1) 查詢,根據(jù)輸入的時(shí)間,輸出機(jī)位信息.(2) 機(jī)位預(yù)定,根據(jù)輸入的日期和時(shí)間段查詢是否有空機(jī)位,若有則預(yù)約,若無(wú)則提供最近空機(jī)時(shí)間段.另:若用戶要求在非空時(shí)間上機(jī),則將用戶信息插入該時(shí)間段的等待列表.(3) 退出預(yù)定,根據(jù)輸入的時(shí)間,撤消該時(shí)間的餓預(yù)定.(4) 查詢是否有等待信息,若有則按順序顯示聯(lián)系方式,若無(wú)則顯示提示信息.二.需求分析根據(jù)題目要求,需要提供機(jī)位信息和預(yù)約信息,應(yīng)該用鏈表來(lái)存儲(chǔ),應(yīng)提供指針的操作:在程序中,需要查詢是否有空機(jī)位和等待者和處理預(yù)約和取消預(yù)約問(wèn)題

2、,應(yīng)提供查詢,顯示,預(yù)定,刪除,修改等操作;另外還要提供鍵盤式選擇菜單實(shí)現(xiàn)功能選擇.三.總體設(shè)計(jì)現(xiàn)在分析整個(gè)一下整個(gè)系統(tǒng),根據(jù)上面的需求分析,可以將這個(gè)系統(tǒng)的設(shè)計(jì)分為如下六大模塊:查詢我的預(yù)約狀態(tài),查詢空位,預(yù)約,取消預(yù)約,排隊(duì),查詢等待信息.機(jī)房機(jī)位模擬系統(tǒng)我的預(yù)約狀態(tài)查詢空位預(yù)約取消預(yù)約排隊(duì)查詢等帶信息四.詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)1宏定義#include#include#include#define LENGTH 6/*總時(shí)段數(shù)*/#define MAX 2 #define S(r) (r-8)/2/*計(jì)算在哪個(gè)時(shí)段數(shù)*/ struct node int locat; char data10;/*學(xué)

3、號(hào),假設(shè)為聯(lián)系方式*/ struct node *next;struct node *head;struct cell int CNum;/*連接在該時(shí)段頭結(jié)點(diǎn)的總機(jī)器數(shù)目*/ struct node *first;/*指向整個(gè)隊(duì)列的開頭*/ struct node *middle;/*指向等待預(yù)約隊(duì)列*/ struct node *last;/*指向整個(gè)隊(duì)列的結(jié)尾*/TimeQueueLENGTH;2.主函數(shù)輸入n,判斷n是否是0-6顯示一系列功能信息主函數(shù)一般設(shè)計(jì)的比較簡(jiǎn)潔,只提供輸入,處理和輸出部分的函數(shù)調(diào)用.其中個(gè)功能模塊用菜單方式選擇。NY根據(jù)n的值調(diào)用各功能模塊函數(shù)【程序】 mai

4、n() /*主函數(shù)*/ int i; for(i=0;idata,來(lái)判斷我的預(yù)約狀態(tài)。 流程圖輸入要查詢的時(shí)間n,判斷n是否820YNn=s(n)根據(jù)的n值和輸入的學(xué)號(hào)來(lái)查找鏈表中是否有該值和其的位置,從而達(dá)到查詢出我的狀態(tài)的目的提示:輸入錯(cuò)誤,請(qǐng)重新輸入【程序】void Inquir() int n; int i; char Infor10; struct node *q; struct node *Rem; printf(Please input the time you want to search!(24 xiao shi zhi between8 and 20 oclock,incl

5、ude 8oclock)n); scanf(%d,&n); if(n=8&nnext,i+) if(strcmp(Rem-data,Infor)=0)break; if(Rem-locat!=0) printf(The computer number you have during this period period is %dn,Rem-locat); else printf(Sorry,you are still in the waiting queue!);else printf(Error.Please input again.n)(2)查詢空機(jī)位模塊分析根據(jù)輸入的時(shí)間確定n值,然后

6、根據(jù)結(jié)構(gòu)體中TimeQueue中的TimeQueuen-Cnum的值,求出最大值與該值的差即為空機(jī)位數(shù)。流程圖輸入要查詢的時(shí)間n判斷n是否820Yns(n)N根據(jù)n的值判斷TimeQueuen-Cnum的值是否小于最大值MAXYN空機(jī)位數(shù)=MAXTimeQueuen-CNum輸出:沒(méi)有空機(jī)位提示:輸入錯(cuò)誤,請(qǐng)重新輸入【程序】 void inquir() int n; printf(Please input the time you want to search.(24 hours 824 oclock,include 8 clock)n); scanf(%d,&n); if(n=8&n20)

7、n=S(n); if(TimeQueuen.CNumCnum的值是否小于最大值MAX提示:已經(jīng)沒(méi)有空機(jī)位輸入預(yù)約者的學(xué)號(hào)TimeQueuen.first是否為空YN把預(yù)約者的信息插入到鏈表的表尾把預(yù)約者信息儲(chǔ)存在鏈表的第一個(gè)結(jié)點(diǎn)【程序】void booking()/*/ int n; char Infor10; struct node *Rem; struct node *p; printf(Please input the time you want to book!n); scanf(%d,&n); if(n=8&n20) n=S(n); if(TimeQueuen.CNumlocat=1

8、; strcpy(Rem-data,Infor); Rem-next=NULL; TimeQueuen.first=Rem; TimeQueuen.last=Rem; TimeQueuen.CNum+; printf(Succeed to book!n); else Rem=(struct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=NULL; p=TimeQueuen.last; Rem-locat=TimeQueuen.CNum+1; printf(%d,Rem-locat); TimeQueuen

9、.last=Rem; p-next=Rem; TimeQueuen.CNum+; printf(Succeed to book!n); else printf(There is no empty computer!n); else printf(Error.Please input again.n); (4)排隊(duì)模塊 分析該模塊主要是針對(duì)是否要排隊(duì)和如何排隊(duì)設(shè)計(jì)的。當(dāng)預(yù)約者總數(shù)小于最大值時(shí)提示不用排隊(duì)。當(dāng)預(yù)約者的總數(shù)大于最大值時(shí)就需要排隊(duì)。把排隊(duì)者的信息儲(chǔ)存在由指向結(jié)構(gòu)體的指針指向的動(dòng)態(tài)分配的存儲(chǔ)區(qū)域,然后連接到TimeQueuen的表尾。用指向等待隊(duì)列的指針指向排隊(duì)的第一人,通過(guò)指針的移動(dòng),

10、用指向表尾的指針指向真?zhèn)€鏈表的結(jié)尾。流程圖N輸入要查詢的時(shí)間n判斷n是否820Y提示:輸入錯(cuò)誤請(qǐng)重新輸入ns(n)根據(jù)n的值判斷TimeQueuen-Cnum的值是否小于最大值MAXNYNY提示:還有空機(jī)位,不需要排隊(duì)。Cnum是否MAX把排隊(duì)者的信息連接到鏈表的結(jié)尾處,即排隊(duì)的第一個(gè)把排隊(duì)者的信息聯(lián)接到隊(duì)尾處。【程序】 void waiting()/*/ int n; char Infor10; struct node *Rem; struct node *p; printf(Please input the time you want to wait!n); scanf(%d,&n); i

11、f(n=8&n=MAX) printf(Please input your No!n); scanf(%s,Infor); if(TimeQueuen.CNum)=MAX) Rem=(struct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=NULL; Rem-locat=0; p=TimeQueuen.last; TimeQueuen.last=Rem; p-next=Rem; TimeQueuen.middle=Rem; TimeQueuen.CNum+; printf(Succeed to in

12、the queue。n); else Rem=(struct node *)malloc(sizeof(struct node); strcpy(Rem-data,Infor); Rem-next=NULL; Rem-locat=0; p=TimeQueuen.last; TimeQueuen.last=Rem; p-next=Rem; TimeQueuen.CNum+; printf(Succeed to in the queue。n); else printf(There is still have empty computer。No wait!); else printf(Error.P

13、lease input again.n); (5)取消預(yù)約模塊分析 要取消預(yù)約,有兩種情況,第一是從有機(jī)位的人要取消預(yù)約,在該種情況下,排隊(duì)的第一人的位置就插入到該取消者的位置。而指向等待隊(duì)列首地址的指針就指向原來(lái)排隊(duì)的第二人。第二種情況就是取消預(yù)約的人本來(lái)就在等待隊(duì)列中,只需要直接刪除該結(jié)點(diǎn)即可。流程圖N輸入要查詢的時(shí)間n判斷n是否820 Y提示:輸入錯(cuò)誤請(qǐng)重新輸入ns(n)輸入學(xué)號(hào),查找該鏈表中該信息的位置i,i是否不大于MAXNY退出預(yù)約,排隊(duì)者的第一人插入該預(yù)約者的位置。 退出預(yù)約【程序】void cancel() int n; int i;/*記載刪除點(diǎn)的隊(duì)列位置*/ char In

14、for10; struct node *Rem; struct node *q; struct node *p; printf(Please input the time you have booked.n); scanf(%d,&n); if(n=8&nnext,i+) if(strcmp(Rem-data,Infor)=0)break; if(iMAX)/*注意退出預(yù)定的情況包括退出在等待隊(duì)列中預(yù)定的情況!*/ if(Rem-next=NULL) q-next=NULL; TimeQueuen.last=q; free(Rem); TimeQueuen.CNum-; printf(“Suc

15、ceed to out the queue!n); else q-next=Rem-next; free(Rem); TimeQueuen.CNum-; printf(Succeed to out the queue!n); else if(TimeQueuen.CNumMAX) TimeQueuen.middle-locat=Rem-locat; TimeQueuen.middle=TimeQueuen.middle-next; if(i=1) TimeQueuen.first=Rem-next; else q-next=Rem-next; free(Rem); TimeQueuen.CNu

16、m-; printf(Succeed to out the queue!n); else printf(Error.Please input again.n); (6)查詢等待信息模塊分析通過(guò)輸入的時(shí)間,判斷儲(chǔ)存該時(shí)間段的結(jié)構(gòu)體鏈表,通過(guò)比較TimeQueuen中Cnum的值與最大值的大小關(guān)系就可以得到是否有等待者的信息。流程圖N輸入要查詢的時(shí)間n判斷n是否820Yns(n)提示:輸入錯(cuò)誤請(qǐng)重新輸入根據(jù)n的值判斷TimeQueuen-Cnum的值是否小于最大值MAX YYN有等待者沒(méi)有等待者【程序】void inquir_waiting() int n; struct node *q; pri

17、ntf(Please input the time you want to search the waiter.n); scanf(%d,&n); if(n=8&nMAX) printf(The waiter are:n); q=TimeQueuen.middle; for(;q-next!=NULL;q=q-next) printf(%sn,q-data); printf(%sn,TimeQueuen.last-data); else printf(There is no waiter during this period!n); else printf(Error.Please input

18、 again.n); 五實(shí)現(xiàn)結(jié)果: (1)主菜單如下: (2)選3,進(jìn)入預(yù)約模塊: (3)選1,進(jìn)入“查詢我的預(yù)約狀態(tài)”模塊: (4)選2,進(jìn)入查詢空機(jī)位模塊: (5)選4,進(jìn)入取消預(yù)約模塊: (6)選5,進(jìn)入排隊(duì)等待模塊: (7)選6,進(jìn)入查詢等待信息模塊: (8)選0,結(jié)束程序: 按任意鍵,則結(jié)束運(yùn)行,返回源程序。六總結(jié) 短短的一個(gè)星期的上機(jī)實(shí)習(xí)結(jié)束了。復(fù)習(xí)了理論知識(shí)、編程、調(diào)試、改錯(cuò),直至存盤,同樣的環(huán)節(jié)、同樣的工作步驟,重復(fù)又重復(fù),枯燥而乏味;看似簡(jiǎn)單的程序題,編寫后調(diào)試卻屢屢出錯(cuò)。如何改如何錯(cuò),怎么編寫怎么調(diào)試失敗,心煩而意亂。但奇怪的是,越是如此,我越是不甘失敗。不斷地調(diào)試,反復(fù)地編寫。一旦在黑屏幕的左下角意外地發(fā)現(xiàn)所輸出的信息正是自己意想中的

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論