




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、沈陽航空航天大學北方科技學院課程設計說明書 課程名稱 軟件技術基礎 教 學 部 專 業(yè) 電子信息工程 班 級 B041202 學 號 B04120206 學生姓名 孫鵬飛 指導教師 2012年6月24日-27日目 錄1 問題描述12 需求分析13 概要設計131抽象數(shù)據(jù)類型定義132模塊劃分34 詳細設計541數(shù)據(jù)類型的定義542主要模塊的算法描述65 測試分析116 課程設計總結14參考文獻14附錄(源程序清單)151 問題描述設停車場是一個可停放n輛汽車的狹長通道,且只有一個門可供出入。汽車在停車場內(nèi)按車輛到達時間的先后順序,依次由北向南排列(門在最南端,最先到達的第一輛車停放在車場的最北
2、端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛汽車即可開入;當停車場內(nèi)某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原順序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。2 需求分析(1)根據(jù)車輛到達停車場到車輛離開停車場時所停留的時間進行計時收費。(2)當有車輛從停車場離開時,等待的車輛按順序進入停車場停放。實現(xiàn)停車場的調(diào)度功能。(3)用順序棧來表示停車場,鏈隊表示停車場外的便道。(4)顯示停車場信息和便道信息。(5)程序執(zhí)行的命令為:車輛進入停車場 車輛離開停車場
3、顯示停車場的信息。3 概要設計31抽象數(shù)據(jù)類型定義(1)棧的抽象數(shù)據(jù)類型定義AST Stack數(shù)據(jù)對象:D=ai|aiElemSet,i=1,2,.,n, n0數(shù)據(jù)關系:R1=<ai-1,ai>|ai-1,aiD,i=2,.,n約定an端為棧頂,a1端為棧底?;静僮鳎?#160;InitStack(&S) 操作結果:構造一個空棧S。DestroyStack(&S)初始條件:棧S已存在。操作結果:棧S被銷毀。ClearStack(&S)初始條件:棧S已存在。操作結果:將棧S清為空棧。StackEmpty(S)初始條件:棧S已存在。操作結果:若棧S為
4、空棧,則返回TRUE,否則FALSE。StackLength(s)初始條件:棧S已存在。操作結果:返回S的元素個數(shù),既棧的長度。GetTop(S,&e)初始條件:棧S已存在且非空。操作結果:用e返回S的棧頂元素。Push(&S,e)初始條件:棧S已存在。操作結果:插入元素e為新的棧頂元素。Pop(&S,&e)初始條件:棧S已存在且非空。操作結果:刪除S的棧頂元素,并用e返回其值。StackTraverse(S,visit()初始條件:棧S已存在且非空。 操作結果:從棧底到棧頂依次對S的每個數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit()失敗,則操作失
5、效。ADT Stack(2)隊列的抽象數(shù)據(jù)類型定義ADT Queue數(shù)據(jù)對象:D=ai|aiElemSet,i=1,2,.,n,n0數(shù)據(jù)關系:R1=<ai-1,ai>|ai-1,aiD,i=2,.,n約定其中a1端為隊列頭,an為隊列尾?;静僮鳎篒nitQueue(&Q)操作結果:構造一個空隊列Q。DestroyQueue(&Q)初始條件:隊列Q已存在。操作結果:隊列Q被銷毀,不再存在。ClearQueue(&Q)初始條件:隊列Q已存在。操作結果:將Q清為空隊列。QueueEmpty(Q)初始條件:隊列Q已存在。操作結果:若Q為空隊列,則返回TRUE,否則
6、FALSE。QueueLength(Q)初始條件:隊列Q已存在。操作結果:返回Q的元素個數(shù),即隊列的長度。GetHead(Q,&e)初始條件:Q為非空隊列。操作結果:用e返回的隊頭元素。EnQueue(&Q,e)初始條件:隊列Q已存在。操作結果:插入元素e為Q的新的隊尾元素。DeQueue(&Q,&e)初始條件:Q為非空隊列。操作結果:刪除Q的隊頭元素,并用e返回其值。QueueTraverse(Q,visit()初始條件:Q已存在且非空。操作結果:從隊頭到隊尾,依次對Q的每個數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit() 失敗,則操作失敗。ADT
7、 Queue 32模塊劃分本程序包括六個模塊:(1)主程序模塊void main()初始化停車站;初始化讓路的臨時棧;初始化通道;輸出主菜單:車輛到達、車輛離開與計費、查看停車場信息;(2)入場模塊int arrive(SqStack *In,LinkQueue *W)車輛進入停車場;計算停車費用(3)出場模塊void leave(SqStack *In,SqStack *Out,LinkQueue *W)車輛離開停車場;(4)輸出模塊void info(SqStack S,LinkQueue W) 輸出停車場信息; (5)棧模塊實現(xiàn)棧的抽象數(shù)據(jù)類型(6)隊列模塊實現(xiàn)隊列的抽象數(shù)據(jù)類型4 詳細
8、設計41數(shù)據(jù)類型的定義int MAX; /*定義一個全局變量用來存儲車庫最大容量*/ float price;/* 定義一個全局變量用來存儲每車每小時的費用*/ typedef struct time int hour; int min; Time; /*時間結點*/ typedef struct node char num10; Time reach; Time leave; Car; /*車輛信息結點*/ typedef struct NODE Car *stack100; int top; SqStack; /*停車站*/ typedef struct car Car *data; st
9、ruct car *next; QNode; typedef struct Node QNode *head; QNode *rear; LinkQueue; /*通道*/ 42主要模塊的算法描述本程序主要分為四部分:(1)主函數(shù)及程序框架、(2)車輛到達模塊、(3)車輛離開模塊、(4)顯示車輛信息模塊,由梁偉明、段慶龍、丁磊和我合作編寫,我主要負責leave(車輛離開)函數(shù)部分。(1)主函數(shù)void main() SqStack In,Out; LinkQueue Wait; int ch; InitStack(&In); /*初始化停車站*/ InitStack(&Out)
10、; /*初始化讓路的臨時棧*/ InitQueue(&Wait); /*初始化通道*/ while(1) printf("-歡迎使用停車場管理系統(tǒng)-n");printf("t本系統(tǒng)由5011工作室開發(fā),作者:鄧春國、段慶龍、梁偉明、丁磊。nn");printf("請輸入停車場的容量:");scanf("%d",&MAX);printf("請輸入停車場的收費標準(元/小時):");scanf("%f",&price);printf("您輸入的停
11、車場容量為%d位,費用為%2.1f元/小時。n",MAX,price);printf("n(1)車輛到達n(2)車輛離開n(3)停車場信息n(4)退出系統(tǒng)n請選擇n");while(1) ch=getch();switch(ch) case 49:arrive(&In,&Wait);break; /*車輛到達*/ case 50:leave(&In,&Out,&Wait);break; /*車輛離開*/ case 51:info(In,Wait);break; /*輸出車站信息*/case 52:printf("謝
12、謝使用!");exit(0); /*退出主程序*/ default:printf("n按鍵無效,請重新按鍵選擇!");/*49-52分別表示“1”-“4”這四個按鍵的鍵值*/system("CLS");printf("-歡迎使用停車場管理系統(tǒng)-n");printf("t本系統(tǒng)由CG工作室開發(fā),作者:鄧春國、段慶龍、梁偉明、丁磊。nnn");printf("您輸入的停車場容量為%d位,費用為%2.1f元/小時。n",MAX,price);printf("n(1)車輛到達n(2)
13、車輛離開n(3)停車場信息n(4)退出系統(tǒng)n請選擇n"); (2)車輛離開模塊算法分析void leave(SqStack *In,SqStack *Out,LinkQueue *W) /*車輛離開*/ int room;Car *p,*t;QNode *q;/*開始定義一個整型變量room,用來記錄要離開的車輛在停車場的位置,定義車輛結點指針p和t和隊列結點指針q。*/ if(In->top>0) /*有車*/ while(1) printf("n請輸入車在停車場的位置(1-%d):",In->top); scanf("%d"
14、;,&room); if(room>=1&&room<=In->top) break; /*判斷停車場內(nèi)是否有車,如果有車,就輸入要離開的車輛在停車場的位置,否則就提示停車場沒車。這里用了while循環(huán)語句,如果輸入的車輛位置超出范圍,就要重新輸入。*/while(In->top>room) /*車輛離開*/Out->top+;Out->stackOut->top=In->stackIn->top;In->stackIn->top=NULL;In->top-;/*如果棧頂位置In->to
15、p大于要離開的車位置room(即要離開的車不在停車場的門口)的話,在要離開的車輛前面的車就要先離開,開到臨時停車場,即臨時棧中,因此Out所表示的臨時棧的棧頂top加1,用來表示臨時停車場增加1輛車;接著把該車的信息拷貝到棧Out中,然后刪除棧In的棧頂(即這輛車開走)。*/p=In->stackIn->top; In->stackIn->top=NULL;In->top-;while(Out->top>=1) In->top+;In->stackIn->top=Out->stackOut->top; Out->st
16、ackOut->top=NULL; Out->top-; /*直到要離開的車輛前面的車都開到臨時停車場之后,該車才離開,離開之后,該車的信息結點In->stackIn->top置空,然后棧頂In->top減1。之后就判斷臨時停車場是否有車,有車就一輛一輛的開回停車場里面,因此停車場的棧頂In->top 加1,然后就把臨時停車場的車結點的信息拷貝到停車場的車結點上,接著刪除臨時停車場車的結點 (即Out->stackOut->top=NULL;Out->top-;)。*/PRINT(p,room); if(W->head!=W->
17、rear)&&In->top<MAX) q=W->head->next;t=q->data;In->top+; printf("n便道的%s號車進入車場第%d號停車位。",t->num,In->top); printf("n請輸入現(xiàn)在的時間(格式“*:*”):"); scanf("%d:%d",&(t->reach.hour),&(t->reach.min); W->head->next=q->next;if(q=W->
18、rear) W->rear=W->head; In->stackIn->top=t; free(q);/*判斷(W->head!=W->rear)&&In->top<MAX(即通道上是否有車及停車場是否已滿),如果便道有車且停車場未滿,通道的車便可進入停車場,此時指針q指向便道的頭,即隊頭,然后停車場的棧頂In->top 加1以便增加新的車輛,接著輸入隊頭的車輛信息,即要進去停車場的車的信息,然后便道隊列的頭結點指向q(即剛進入停車場的車的結點)的后繼結點,即原隊列中第二輛車的結點,接著判斷剛離開的車是否是最后一輛車,如果是
19、,就把隊列置空,即隊頭等于隊尾;之后就把結點t(即要進入停車場的車)的信息拷貝到停車場棧頂?shù)能囍?,最后釋放p的空間,即原隊頭結點。*/ else printf("n停車場里沒有車n"); /*沒車*/printf("請按任意鍵返回");getch(); leave函數(shù)流程圖如圖4.1所示:結束開始判斷停車場是否有車圖4.1 leave函數(shù)流程圖否是是是車臨時停車場的車回到停車場便道的車先進入停車場否判斷便道否有車否判斷前面是否有其他車且停車場未滿輸入離開車輛的信息車輛離開前面的車先進入臨時停車場輸出停車場里沒有車定義必要的變量5 測試分析測試數(shù)據(jù)及結果如
20、下:輸入停車場的容量4,收費5元/小時,接著查看停車場的信息,如圖5.1所示:圖5.1 停車場系統(tǒng)初始化示意圖接著輸入4輛車的信息,然后查看停車場信息,如圖5.2所示:圖5.2 車輛進入停車場示意圖再輸入1輛車的信息,然后查看停車場信息,如圖5.3(a)和圖5.3(b)所示:圖5.3(a) 車輛進入便道示意圖圖5.3(b) 車輛進入便道示意圖最后選擇車輛離開,輸入第2輛車離開,再查看停車場信息,如圖5.4(a)和圖5.4(b)所示:圖5.4(a) 車輛離開示意圖圖5.4(b) 車輛離開示意圖6 課程設計總結通過這次課程設計使我充分的理解了用棧和隊列實現(xiàn)模擬停車場的基本原理,知道了棧的順序存儲結
21、構和隊列的鏈式存儲結構的定義和算法描述,同時也學會了編寫停車場問題的程序。雖然此次的程序不是很完備,沒有加入一些更完善的功能,但是總體還是一個比較能體現(xiàn)數(shù)據(jù)結構知識點能力的程序了,當然只是相對于我這個初學者來說。在剛開始編程的時候,我感到有點無從下手,但經(jīng)過對題目的詳細分析和思考之后,我就知道具體應該做什么,怎么做了。經(jīng)過幾天和同組同學的一起研究,我們分工完成了這個程序,完成這個程序,我學到了很多東西,這是在課堂上無法做到的。參考文獻1 黃同成,黃俊民,董建寅數(shù)據(jù)結構M北京:中國電力出版社,20082 董建寅,黃俊民,黃同成數(shù)據(jù)結構實驗指導與題解M北京:中國電力出版社,20083 嚴蔚敏,吳偉
22、民. 數(shù)據(jù)結構(C語言版)M. 北京:清華大學出版社,20024 劉振鵬,張曉莉,郝杰數(shù)據(jù)結構M北京:中國鐵道出版社,2003附錄(源程序清單)#include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h"int MAX; /*定義一個全局變量用來存儲車庫最大容量*/ float price;/*每車每小時的費用*/ typedef struct time int hour; int min; Time; /*時間結點*/
23、typedef struct node char num10; Time reach; Time leave; Car; /*車輛信息結點*/ typedef struct NODE Car *stack100; int top; SqStack; /*停車站*/ typedef struct car Car *data; struct car *next; QNode; typedef struct Node QNode *head; QNode *rear; LinkQueue; /*通道*/ void InitStack(SqStack *); /*初始化棧*/ int InitQueu
24、e(LinkQueue *); /*初始化便道*/ int arrive(SqStack *,LinkQueue *); /*車輛到達*/ void leave(SqStack *,SqStack *,LinkQueue *); /*車輛離開*/ void info(SqStack,LinkQueue); /*顯示停車場信息*/ void PRINT(Car *p,int room);void InitStack(SqStack *s) /*初始化棧*/ int i; s->top=0; for(i=0;i<=MAX;i+) s->stacks->top=NULL; i
25、nt InitQueue(LinkQueue *Q) /*初始化便道*/ Q->head=(QNode *)malloc(sizeof(QNode); if(Q->head!=NULL) Q->head->next=NULL; Q->rear=Q->head; return(1); else return(-1); void main() SqStack In,Out; LinkQueue Wait; int ch; InitStack(&In); /*初始化停車站*/ InitStack(&Out); /*初始化讓路的臨時棧*/ InitQ
26、ueue(&Wait); /*初始化通道*/ while(1) printf("-歡迎使用停車場管理系統(tǒng)-n");printf("t本系統(tǒng)由5011工作室開發(fā),作者:鄧春國、段慶龍、梁偉明、丁磊。nn");printf("請輸入停車場的容量:");scanf("%d",&MAX);printf("請輸入停車場的收費標準(元/小時):");scanf("%f",&price);printf("您輸入的停車場容量為%d位,費用為%2.1f元/小時
27、。n",MAX,price);printf("n(1)車輛到達n(2)車輛離開n(3)停車場信息n(4)退出系統(tǒng)n請選擇n");while(1) ch=getch();switch(ch) case 49:arrive(&In,&Wait);break; /*車輛到達*/ case 50:leave(&In,&Out,&Wait);break; /*車輛離開*/ case 51:info(In,Wait);break; /*輸出車站信息*/case 52:printf("謝謝使用!");exit(0);
28、/*退出主程序*/ default:printf("n按鍵無效,請重新按鍵選擇!");/*49-52分別表示“1”-“4”這四個按鍵的鍵值*/system("CLS");printf("-歡迎使用停車場管理系統(tǒng)-n");printf("t本系統(tǒng)由CG工作室開發(fā),作者:鄧春國、段慶龍、梁偉明、丁磊。nnn");printf("您輸入的停車場容量為%d位,費用為%2.1f元/小時。n",MAX,price);printf("n(1)車輛到達n(2)車輛離開n(3)停車場信息n(4)退出系統(tǒng)
29、n請選擇n"); int arrive(SqStack *In,LinkQueue *W) /*車輛到達*/ Car *p; QNode *t; p=(Car *)malloc(sizeof(Car); flushall(); printf("n停車場還有%d停車位(若停車位為0,車可先進入便道等待)",MAX-In->top);printf("n請輸入車牌號碼(例:湘D0734):"); gets(p->num); if(In->top<MAX) /*停車場未滿,車進車場*/ In->top+;printf(&q
30、uot;n停車的位置:%d號停車位。",In->top); printf("n請輸入車到達的時間(格式“*:*”):"); scanf("%d:%d",&(p->reach.hour),&(p->reach.min); In->stackIn->top=p;printf("請按任意鍵返回");getch(); return(1); else /*停車場已滿,車進便道*/ printf("n停車位已滿,該車須在便道等待!"); t=(QNode *)malloc
31、(sizeof(QNode); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; printf("請按任意鍵返回"); getch();return(1); void leave(SqStack *In,SqStack *Out,LinkQueue *W) /*車輛離開*/ int room; Car *p,*t; QNode *q; /*判斷車場內(nèi)是否有車*/ if(In->top>0) /*有車*/ while(1) /*輸入離開車輛的信息*/ printf("n
32、請輸入車在停車場的位置(1-%d):",In->top); scanf("%d",&room); if(room>=1&&room<=In->top) break; while(In->top>room) /*車輛離開*/ Out->top+; Out->stackOut->top=In->stackIn->top; In->stackIn->top=NULL; In->top-; p=In->stackIn->top; In->stack
33、In->top=NULL; In->top-; while(Out->top>=1) In->top+; In->stackIn->top=Out->stackOut->top; Out->stackOut->top=NULL; Out->top-; PRINT(p,room); /*判斷通道上是否有車及車站是否已滿*/ if(W->head!=W->rear)&&In->top<MAX) /*便道的車輛進入停車場*/ q=W->head->next; t=q->d
34、ata; In->top+; printf("n便道的%s號車進入車場第%d號停車位。",t->num,In->top); printf("n請輸入現(xiàn)在的時間(格式“*:*”):"); scanf("%d:%d",&(t->reach.hour),&(t->reach.min); W->head->next=q->next;if(q=W->rear) W->rear=W->head; In->stackIn->top=t; free(q); else printf("n停車場里沒有車n"); /*沒車*/printf("請按任意鍵返回");getch();void info1(SqStack *S) /*列表輸出車場信息*/ int i; if(S->top>0)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年喀什年道路旅客運輸從業(yè)資格證模擬試題
- 跨境物流運輸服務協(xié)議規(guī)定事項
- 企業(yè)上市主要法律問題及解決對策-曹平生
- 2025年電梯安裝改造維修作業(yè)特種作業(yè)操作證考試試卷(案例分析篇)
- 2025年導游資格證考試筆試旅游企業(yè)運營管理與實踐案例分析試卷
- 2025電子商務師(初級)職業(yè)技能鑒定試卷:電子商務行業(yè)發(fā)展趨勢預測與分析試題
- 農(nóng)業(yè)合作開發(fā)項目風險分擔協(xié)議
- 制造業(yè)離職證明及勞動經(jīng)歷聲明(6篇)
- 2025年電解質(zhì)分析儀項目申請報告模板
- 2025年春季芳香保健師(初級)職業(yè)技能鑒定試卷在線測試與備考指南
- 融資擔保行業(yè)2024年信用回顧與2025年展望 -新世紀
- 曹楊二中自招數(shù)學試卷
- (新疆一模)2025屆高三高考適應性檢測分學科第一次模擬考試 生物試卷(含答案解析)
- 中職高二數(shù)學測試卷01(高教版2023拓展模塊一下冊全部)(原卷版)
- 醫(yī)院反腐倡廉廉潔行醫(yī)專題黨課宣講課件
- 大數(shù)據(jù)分析與應用知到智慧樹章節(jié)測試課后答案2024年秋西安理工大學
- 抗精神病與精神藥品區(qū)別
- 手術室抗菌藥物的使用
- 乳腺癌患者靜脈管理
- 地球化學復習資料
- 《接觸網(wǎng)施工》課件 4.8.1 交叉線岔安裝
評論
0/150
提交評論