(完整版)機房預定位系統(tǒng)_第1頁
(完整版)機房預定位系統(tǒng)_第2頁
(完整版)機房預定位系統(tǒng)_第3頁
(完整版)機房預定位系統(tǒng)_第4頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、合肥學院計算機科學與技術系課程設計報告20 12 20 13 學年第一 學期課程C 語言課程設計課程設計題目機房機位預訂系統(tǒng)學生姓名學號1204032015專業(yè)班級網絡工程( 2)班指導教師2013年1月語言課程設計C目錄一、課程設計目的2二、課程設計名稱及內容2三、對任務和要求的分析2四.詳細設計及實現3五、源代碼18六、程序測試24七、總結25語言課程設計C一、課程設計目的將理論教學中涉及到的知識點貫穿起來,對不同的數據類型、程序控制結構、數據結構作一比較和總結,結合設計題目進行綜合性應用,對所學知識達到融會貫通的程度。通過課程設計,學生在下述各方面的能力應該得到鍛煉:(1)進一步鞏固、加

2、深學生所學專業(yè)課程 C 語言教程的基本理論知識,理論聯(lián)系實際,進一步培養(yǎng)學生綜合分析問題,解決問題的能力。(2)全面考核學生所掌握的基本理論知識及其實際業(yè)務能力,從而達到提高學生素質的最終目的。(3)利用所學知識,開發(fā)小型應用系統(tǒng),掌握運用 C 語言編寫調試應用系統(tǒng)程序,訓練獨立開發(fā)應用系統(tǒng),進行數據處理的綜合能力。(4)對于給定的設計題目,如何進行分析,理清思路,并給出相應的數學模型。(5)掌握自頂而下的設計方法,將大問題進行模塊化,領會結構化程序設計的方法。( 6)熟練掌握 C 語言的基本語法,靈活運用各種數據類型。(7)進一步掌握在集成環(huán)境下如何調試程序(單步調試,設置斷點、觀察表達式,

3、分塊調試)和修改程序。二、課程設計名稱及內容課程設計名稱:機房機位預定系統(tǒng)設計內容:設計一個機房機位預定系統(tǒng),該系統(tǒng)要求對機房電腦機位進行管理和維護。 20 臺機器 , 從早八點到晚八點 , 每兩個小時一個時間段 .任務和要求: 20 臺機器,編號 1 到 20,從早八點到晚八點。兩小時一個時間段,每次可預定一個時間段。設計一個機房機位預定系統(tǒng),通過該系統(tǒng)實現對機房機位的預定管理。三、對任務和要求的分析可行研究階段的目標是:使工作人員從繁瑣的機位管理工作中解放出來;提高工作質量,使供需雙方都獲得滿意的結果;促進報表,提高工作效率。本系統(tǒng)包含的主要模塊有:(1)界面系統(tǒng)以菜單方式工作。(2)機位

4、預定,根據輸入的時間查詢是否有空機位,若有則預約,若無則提供最近的時間段,另:若用戶在非空時間上機,則將用戶信息列入等待列表。(3)查詢,根據輸入時間,輸出機位信息。(4)退出預定,根據輸入的時間,機器號撤銷該事件的預定!2語言課程設計C(5)查詢是否有等待信息,若有則提供最優(yōu)解決方案(等待時間盡量短) ,若無則顯示提示信息。程序達到的功能:機房機位模擬系統(tǒng)我的 預約查詢空位預約取消預約排隊查詢等帶狀態(tài)信息四 .詳細設計及實現1宏定義#include<stdio.h>#include<stdlib.h>#include<string.h>#define ti

5、me 6#define MAX 20#define T(r) (r-8)/2#define NULL 0struct xx/* 用戶信息 */int jh;char data10;struct xx *next;3語言課程設計Cstruct xx *head;struct cell/* 排隊的隊列 */int CNum;struct xx *first; /*指向隊列開頭*/struct xx *middle; /*指向排隊隊列*/struct xx *last; /* 指向對結尾 */Timetime;1 .主函數主函數一般設計的比較簡潔,只提供輸入 ,處理和輸出部分的函數調用.其中個功能模

6、塊用菜單方式選擇。本模塊通過do-while語句和 switch語句實現主菜單的顯示和對功能的選擇。用戶可以根據自己的需求選擇相應功能的序號,如果用戶輸入的數據在0到6 的范圍內, w將會被系統(tǒng)賦值為 1,程序結束循環(huán)進入下一步操作;如果用戶輸入的序號不再 0 到 6 的范圍內則系統(tǒng)會要求用戶重新輸入服務序號直到用戶輸入的數據在0 到 6的范圍內為止。4開始語言課程設計C顯示一系列功能模塊N輸入 n 的值 1-6Y根據的值調用各功能模塊函數返回主菜單【程序】main()/ 主函數模塊int i;for(i=0;i<time;i+)Timei.CNum=0;Timei.first=NULL

7、;Timei.middle=NULL;Timei.last=NULL;while(1)printf(" 請輸入序號 !:n");printf("1.預定2.查詢空機位3.查詢預定的機位4. 取消預定5.參加排隊6.查詢等待者時間列表0.退出 n");scanf("%d",&i);switch(i)case 1:booking();break;case 2:inquir();break;case 3:search();break;case 4:cancel();break;case 5:paidui();break;5語言課程設

8、計Ccase 6:search_waiting();break;case 0:exit(0);default:printf("errorn");2.查詢我的狀態(tài)模塊 數據結構 我的原始數據是預約者預約的信息,將它儲存在用指針處理的鏈表中?!痉治觥扛鶕斎氲臅r間來判斷應該查詢的結構體,把其首地址賦給 pp,然后通過指針的移動,比較輸入的學號和存儲在該結構體中的 pp->data,來判斷我的預約狀態(tài) ,子函數 void search (): 本模塊的功能是通過調用函數指向隊列的指針查詢用戶輸入的時間段的機位狀態(tài)如果有空機位就在屏幕上顯示出來當前時刻的空機位的總數和所有的空

9、機位的序號,如果沒有空位則在屏幕上顯示有零臺空機位。流程圖 開始輸入要查詢的時間n,判斷 n 是否 820YNn=s(n)根據的n 值和輸入的學號來查找鏈表中是否有該值和其的位置, 從而達到查詢出我的狀態(tài)的目的提示:輸入錯誤,請重新輸入【程序】void search ()6語言課程設計Cint n;char xh10;struct xx *pp;system("cls");printf(" 輸入查詢時間 (24 hours 820 o'clock,include 8o'clock)n"); /*驗證輸入的時間*/scanf("%

10、d",&n);if(n>=8&&n<20)n=T(n);printf(" 請輸入學號 n");scanf("%s ",xh);pp=Timen.first;for(;pp->next!=NULL;pp=pp->next) /* 通過指針后移查找信息 */ if(strcmp(pp->jh,xh)=0)break;if(pp->jh!=0)printf("The computer number is %dn",pp->jh);else printf("

11、對不起 . 你依舊在等待列表中或者沒有預定");else printf("錯誤,請再次輸入 .n");3. 預約模塊 數據結構 定義兩個指向結構體的指針,用強制類型轉換使他們指向動態(tài)分配的存儲空間的首地址,把預約者的信息儲存在其中一個結構體中。若有空機位則提示用戶輸入其想要愛預定的機位號并留下學號并將其信息加入預定者信息鏈表中;若沒有空機位則向用戶顯示其想要預定的那臺機器最短的等待時間并提示是否等待,如果用戶愿意等待則提示用戶輸入其想要愛預定的機位號并留下學號將用戶的信息加入等待列表中。 分析在該模塊的設計中,要讓預約者按預約的順序儲存在結構體中。當預約者的總數小

12、于最大值時,就要用到通過指針的移動來把預約者的信息按順序儲存起來,用兩個不同的指針分別指向鏈表的開始,鏈表的結尾處。流程圖7語言課程設計C開始輸入時間 8-20調用 detail 函數 ,sumT 的值改變執(zhí)行一個循環(huán),進入后面的時間段輸出空機位數,是否等待Y調用指向隊列的指針,輸入預定機位號學號,追加一個結構體成員。返回主菜單【程序】void booking() /*預定模塊 */int n;char xh10;struct xx *pp;struct xx *p;system("cls");8語言課程設計Cprintf("輸入想要預定的時間 n");

13、scanf("%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum<MAX)printf("請輸入你的學號 n");scanf("%s",xh);if(Timen.first=NULL)pp=(struct xx *)malloc(sizeof(struct xx); /*動態(tài)申請存儲空間 */pp->jh=1; /*預定到第一臺機器 */strcpy(pp->data,xh);pp->next=NULL;Timen.first=pp;Time

14、n.last=pp;Timen.CNum+;printf("成功預定 n");elsepp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;p=Timen.last;pp->jh=Timen.CNum+1;printf("%d",pp->jh);Timen.last=pp;p->next=pp;Timen.CNum+; /*被預定的機器數目追加一*/printf("成功預定 n");else printf(&q

15、uot;沒有空余機位 !");else printf("錯誤 . 請再次輸入 .n");4. 查詢空機位模塊 分析根據輸入的時間確定 n 值,然后根據結構體中 Time 中的 Time n->Cnum 的值,求出最大值與該值的差即為空機位數。本模塊的功能是通過調用鏈表查詢用戶輸入的時間段的機位狀態(tài)如果有空機位就在屏幕上顯示出來當前時刻的空機位的總數和所有的空機位的序號,如果沒有空位則在屏幕上顯示有零臺空機位。流程圖9語言課程設計C輸入要查詢的時間 n 判斷 n 是否 820Yn s( n)N根據 n 的值判斷 TimeQueuen->Cnum 的值是否

16、小于最大值MAXYN空機位數 =MAX TimeQueuen ->CNum輸出:沒有空機位提示:輸入錯誤,請重新輸入【程序】void inquir()int n;printf("Please input the time you want to search.(24 hours 824oclock,include 8clock)n");scanf("%d",&n);if(n>=8&&n<20)n=S(n);if(TimeQueuen.CNum<MAX)printf("There are %d em

17、oty computer.n",MAX-TimeQueuen.CNum); else printf("Sorry!There is no empty computer!n");else printf("Error.Please input again.n");10語言課程設計C5. 排隊模塊 分析 該模塊主要是針對是否要排隊和如何排隊設計的。當預約者總數小于最大值時提示不用排隊。當預約者的總數大于最大值時就需要排隊。把排隊者的信息儲存在由指向結構體的指針指向的動態(tài)分配的存儲區(qū)域,然后連接到time n 的表尾。用指向等待隊列的指針指向排隊的第一

18、人,通過指針的移動,用指向表尾的指針指向真?zhèn)€鏈表的結尾。開始輸入時間 8-20調用 detail 函數 ,sumT 的值改變執(zhí)行一個循環(huán),進入后面的時間段輸出空機位數,是否等待Y在 Time n 中追加一個結構體成員。返回主菜單11語言課程設計C【程序】void paidui() /*排隊模塊 */int n;char xh10;struct xx *pp;struct xx *p;system("cls");printf("請輸入想要排隊的時間n");scanf("%d",&n);if(n>=8&&n&

19、lt;20)n=T(n);if(Timen.CNum>=MAX)printf("請輸入你的學號 n");scanf("%s",xh);if(Timen.CNum)=MAX)pp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;pp->jh=0;p=Timen.last; /*指向排隊隊列結尾處 */Timen.last=pp;p->next=pp;Timen.middle=pp;Timen.CNum+;printf("成

20、功排隊 n");elsepp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;pp->jh=0;p=Timen.last;Timen.last=pp;p->next=pp;Timen.CNum+;printf("成功排隊 n");else printf("有空余機位,無須等待 n");else printf("錯誤 . 再次輸入 .n");12語言課程設計C6. 取消預約模塊 分析要取消預約,有兩種情況,第

21、一是從有機位的人要取消預約,在該種情況下,排隊的第一人的位置就插入到該取消者的位置。而指向等待隊列首地址的指針就指向原來排隊的第二人。第二種情況就是取消約的人本來就在等待隊列中,只需要直接刪除該結點即可。流程圖N輸入要查詢的時間 n 判斷 n 是否 820Yn T(n)提示:輸入錯誤請重新輸入輸入學號,查找該鏈表中該信息的位置 i, i 是否不大于MAXYN退出預約,排隊者的第一人插入該預約退出預約者的位置?!境绦颉縱oid cancel() /*取消模塊 */int n;int i;char xh10;struct xx *pp;struct xx *q;struct xx *p;syste

22、m("cls");printf("請輸入預定的時間 n");scanf("%d",&n);if(n>=8&&n<20)13語言課程設計Cprintf("請輸入你的學號 .!n");scanf("%s",xh);n=T(n);pp=Timen.first;q=pp;for(i=1;q=pp,pp=pp->next,i+)if(strcmp(pp->data,xh)=0)break;if(i>MAX)if(pp->next=NULL)q-&

23、gt;next=NULL;Timen.last=q;free(pp);Timen.CNum-;printf("取消成功 !n");elseq->next=pp->next;free(pp);Timen.CNum-;printf("成功退出 !n");elseif(Timen.CNum>MAX)Timen.middle->jh=pp->jh;Timen.middle=Timen.middle->next;if(i=1) Timen.first=pp->next;else q->next=pp->next

24、;free(pp);Timen.CNum-;printf("成功取消預定 !n");else printf("錯誤,請再次輸入 .n");void search_waiting() /*查詢等待模塊 */int n;14語言課程設計Cstruct xx *q;system("cls");printf("查詢其他等待者的預定時間n");scanf("%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum>MAX)printf(

25、"等待列表 are:n");q=Timen.middle;for(;q->next!=NULL;q=q->next) printf("%sn",q->data);printf("%sn",Timen.last->data); /*輸出等待者 */else printf("這個時間段沒有預定者 n");else printf("錯誤。請再次輸入 .n");7. 查詢等待信息模塊 分析通過輸入的時間,判斷儲存該時間段的結構體鏈表,通過比較Timen 中 Cnum的值與最大值的

26、大小關系就可以得到是否有等待者的信息,本模塊通過讀取用戶輸入的時間先調用結構體鏈表在屏幕上顯示出用戶要查詢的時間段的包含用戶的機位號和學號。流程圖N輸入要查詢的時間 n 判斷 n 是否 820Yn s( n)提示:輸入錯誤請重新輸入根據 n 的值判斷 Time n->Cnum 的值是否小Y于最大值 MAXN有等待者沒有等待者【程序】void search_waiting() /*查詢等待模塊 */int n;struct xx *q;system("cls");15語言課程設計Cprintf("查詢其他等待者的預定時間n");scanf("

27、;%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum>MAX)printf("等待列表 are:n");q=Timen.middle;for(;q->next!=NULL;q=q->next) printf("%sn",q->data);printf("%sn",Timen.last->data); /*輸出等待者 */else printf("這個時間段沒有預定者 n");else printf(&quo

28、t;錯誤。請再次輸入 .n");main()/主函數模塊int i;for(i=0;i<time;i+)Timei.CNum=0;Timei.first=NULL;Timei.middle=NULL;Timei.last=NULL;16語言課程設計C開始N輸入時間 8-20Y調用Timen 中 Cnum 輸出到屏幕上,顯示等待信息返回主菜單【程序】void search_waiting() /* 查詢等待模塊*/int n;struct xx *q;system("cls");printf(" 查詢其他等待者的預定時間n");scanf(

29、"%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum>MAX)printf(" 等待列表are:n");q=Timen.middle;for(;q->next!=NULL;q=q->next) printf("%sn",q->data);printf("%sn",Timen.last->data); /*輸出等待者 */17語言課程設計Celse printf(" 這個時間段沒有預定者n");el

30、se printf(" 錯誤。請再次輸入.n");main()/ 主函數模塊int i;for(i=0;i<time;i+)Timei.CNum=0;Timei.first=NULL;Timei.middle=NULL;Timei.last=NULL;五、源代碼#include<stdio.h>#include<stdlib.h>#include<string.h>#define time 6#define MAX 20#define T(r) (r-8)/2#define NULL 0struct xx/* 用戶信息 */int

31、jh;char data10;struct xx *next;struct xx *head;struct cell/* 排隊的隊列 */int CNum;struct xx *first; /*指向隊列開頭*/struct xx *middle; /*指向排隊隊列*/struct xx *last; /* 指向對結尾 */Timetime;18語言課程設計Cvoid booking() /* 預定模塊 */int n;char xh10;struct xx *pp;struct xx *p;system("cls");printf(" 輸入想要預定的時間n&qu

32、ot;);scanf("%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum<MAX)printf(" 請輸入你的學號n");scanf("%s",xh);if(Timen.first=NULL)pp=(struct xx *)malloc(sizeof(struct xx); /* 動態(tài)申請存儲空間 */ pp->jh=1; /* 預定到第一臺機器 */strcpy(pp->data,xh);pp->next=NULL;Timen.first

33、=pp;Timen.last=pp;Timen.CNum+;printf(" 成功預定 n");elsepp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;p=Timen.last;pp->jh=Timen.CNum+1;printf("%d",pp->jh);Timen.last=pp;p->next=pp;Timen.CNum+;/* 被預定的機器數目追加一*/printf(" 成功預定 n");19語言

34、課程設計Celse printf(" 沒有空余機位!");else printf(" 錯誤 .請再次輸入 .n");void search()int n;char xh10;struct xx *pp;system("cls");printf(" 輸入查詢時間 (24 hours 820 o'clock,include 8o'clock)n"); /*驗證輸入的時間*/scanf("%d",&n);if(n>=8&&n<20)n=T(n);pr

35、intf(" 請輸入學號 n");scanf("%s",xh);pp=Timen.first;for(;pp->next!=NULL;pp=pp->next)/* 通過指針后移查找信息*/if(strcmp(pp->jh,xh)=0)break;if(pp->jh!=0)printf("The computer number is %dn",pp->jh);else printf(" 對不起 .你依舊在等待列表中或者沒有預定");else printf(" 錯誤,請再次輸入.

36、n");void paidui() /* 排隊模塊 */int n;char xh10;struct xx *pp;struct xx *p;system("cls");printf(" 請輸入想要排隊的時間n");scanf("%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum>=MAX)20語言課程設計Cprintf(" 請輸入你的學號n");scanf("%s",xh);if(Timen.CNum)=MA

37、X)pp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;pp->jh=0;p=Timen.last; /* 指向排隊隊列結尾處*/Timen.last=pp;p->next=pp;Timen.middle=pp;Timen.CNum+;printf(" 成功排隊 n");elsepp=(struct xx *)malloc(sizeof(struct xx);strcpy(pp->data,xh);pp->next=NULL;pp->j

38、h=0;p=Timen.last;Timen.last=pp;p->next=pp;Timen.CNum+;printf(" 成功排隊 n");else printf(" 有空余機位,無須等待n");else printf(" 錯誤 .再次輸入 .n");void inquir() /* 查詢空機位模塊*/int n;system("cls");printf(" 輸入想要查詢的時間 (24 hours 820o'clock,include 8 o'clock)n"); sc

39、anf("%d",&n);if(n>=8&&n<20)n=T(n);if(Timen.CNum<MAX)21語言課程設計Cprintf("There are %d empty computer!n",MAX-Timen.CNum); else printf(" 對不起 .沒有空余機位 n");else printf(" 錯誤 ,再次輸入 .n");void cancel() /* 取消模塊 */int n;int i;char xh10;struct xx *pp;stru

40、ct xx *q;struct xx *p;system("cls");printf(" 請輸入預定的時間n");scanf("%d",&n);if(n>=8&&n<20)printf(" 請輸入你的學號.!n");scanf("%s",xh);n=T(n);pp=Timen.first;q=pp;for(i=1;q=pp,pp=pp->next,i+)if(strcmp(pp->data,xh)=0)break;if(i>MAX)if(pp

41、->next=NULL)q->next=NULL;Timen.last=q;free(pp);Timen.CNum-;printf(" 取消成功 !n");elseq->next=pp->next;free(pp);Timen.CNum-;printf(" 成功退出 !n");elseif(Timen.CNum>MAX)Timen.middle->jh=pp->jh;22語言課程設計CTimen.middle=Timen.middle->next;if(i=1) Timen.first=pp->nex

42、t;else q->next=pp->next;free(pp);Timen.CNum-;printf(" 成功取消預定 !n");else printf(" 錯誤,請再次輸入.n");void search_waiting() /* 查詢等待模塊*/int n;struct xx *q;system("cls");printf(" 查詢其他等待者的預定時間n");scanf("%d",&n);if(n>=8&&n<20)n=T(n);if(Tim

43、en.CNum>MAX)printf(" 等待列表are:n");q=Timen.middle;for(;q->next!=NULL;q=q->next) printf("%sn",q->data);printf("%sn",Timen.last->data); /*輸出等待者 */else printf(" 這個時間段沒有預定者n");else printf(" 錯誤。請再次輸入.n");main()/ 主函數模塊int i;for(i=0;i<time;i

44、+)Timei.CNum=0;Timei.first=NULL;Timei.middle=NULL;Timei.last=NULL;23語言課程設計Cwhile(1)printf(" 請輸入序號 !:n");printf("1.預定2.查詢空機位3.查詢預定的機位4. 取消預定5.參加排隊6.查詢等待者時間列表0.退出 n");scanf("%d",&i);switch(i)case 1:booking();break;case 2:inquir();break;case 3:search();break;case 4:can

45、cel();break;case 5:paidui();break;case 6:search_waiting();break;case 0:exit(0);default:printf("errorn");六、程序測試1、預定功能2、查詢功能24語言課程設計C3、查詢預定機位的功能4、取消功能七、總結短短的一個星期的上機實習結束了。復習了理論知識、編程、調試、改錯,直至存盤,同樣的環(huán)節(jié)、同樣的工作步驟,重復又重復,枯燥而乏味;看似簡單的程序題,編寫后調試卻屢屢出錯。如何改如何錯,怎么編寫怎么調試失敗,心煩而意亂。但奇怪的是,越是如此,我越是不甘失敗。不斷地調試,反復地編寫。一旦在黑屏幕的左下角意外地發(fā)現所輸出的信息正是自己意想中的結果,那份驚喜,那

溫馨提示

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

評論

0/150

提交評論