停車場系統(tǒng)程序設(shè)計總結(jié)1
總結(jié)
c語言程序設(shè)計是一門重要的專業(yè)基礎(chǔ)課,通過這次課程設(shè)計使我了解了c
語言程序設(shè)計的思想,并且掌握了程序設(shè)計的基本方法,為后續(xù)課程打下了堅實的基礎(chǔ)。同時,這次課程設(shè)計又是一次實踐性較強(qiáng)的知識應(yīng)用,在對我進(jìn)行程序設(shè)計基礎(chǔ)理論與技術(shù)技巧能力訓(xùn)練的同時,更加培養(yǎng)了我解決實際問題的編程能力。
在設(shè)計過程中,首先要解決的是與同學(xué)的合作,接下來分工與協(xié)商,共同探
討,大家取長補短,認(rèn)清自己的不足之處和薄弱環(huán)節(jié),加以彌補和加強(qiáng),要做出一個好的程序就要有不懈追求的精神和對理想崇高的追求,有一種不完成不罷休的精神。c語言作為一種高級編程語言具有方便靈活的特點,適合各種類型的軟件開發(fā),為我們以后學(xué)習(xí)單片機(jī)非常有用。
在設(shè)計初期,根據(jù)題目的要求和所學(xué)的知識,車庫中的車輛是先進(jìn)后出的,
是棧結(jié)構(gòu),便道上的車輛是先進(jìn)先出的,是一個隊列,結(jié)構(gòu)很明顯,但是現(xiàn)階段我所學(xué)的基礎(chǔ)知識不夠,掌握的不多,對應(yīng)用棧和隊列來解決這個問題有一定的困難,因此我在整個設(shè)計中使用了結(jié)構(gòu)體數(shù)組,運用一個結(jié)構(gòu)體數(shù)組來同時記錄車庫和便道中車輛的信息,這樣也可以起到一個連續(xù)記錄數(shù)據(jù)的功能,完成設(shè)計要求的任務(wù)。
課程設(shè)計為我提供了一個既動手又動腦,獨立實踐的機(jī)會,將課本上的知識與實踐相結(jié)合起來,提高了我適應(yīng)實際,實踐編程的能力。
在這一系統(tǒng)中用到了結(jié)構(gòu)體,它讓我更加鞏固了結(jié)構(gòu)體的特點和用法,本設(shè)
計最好使用的結(jié)構(gòu)是棧和隊列,但是我們現(xiàn)階段還未作學(xué)習(xí),使用起來不是很流暢,因此我在這個設(shè)計中使用了結(jié)構(gòu)體,使用了新的思路。
總之,這次課程設(shè)計挖掘了我潛在的能力,是我更加自信,也對編程更加有
興趣,為以后的學(xué)習(xí)打下了良好的基礎(chǔ)。
擴(kuò)展閱讀:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理系統(tǒng)設(shè)計報告[1]
《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計
停車場管理系統(tǒng)
班級:*********指導(dǎo)教師:***學(xué)號:***********姓名:***小組成員:*****************完成日期:201*年3月6日成績:________________
目錄
第2頁共17頁
課程設(shè)計目的
1、通過課程設(shè)計,加深對《數(shù)據(jù)結(jié)構(gòu)》這一課程所學(xué)內(nèi)容的進(jìn)一步理解與鞏固。2、通過課程設(shè)計,加深對結(jié)構(gòu)化設(shè)計思想的理解,能對系統(tǒng)功能進(jìn)行分析,并設(shè)計合
理的模塊化結(jié)構(gòu)。
3、通過課程設(shè)計,提高程序開發(fā)功能,能運用合理的控制流程編寫清晰高效的程序。4、通過課程設(shè)計,訓(xùn)練C程序調(diào)試能力,能將一個中小型各級組織系統(tǒng)聯(lián)調(diào)通過。5、通過課程設(shè)計,開發(fā)一個中小型系統(tǒng),掌握系統(tǒng)研發(fā)全過程。6、通話課程設(shè)計,培養(yǎng)分析問題、解決實際問題的能力。二、課程設(shè)計內(nèi)容①問題描述:
設(shè)有一個可以停放n輛汽車的狹長停車場,它只有一個大門可以供車輛進(jìn)出。車輛按到達(dá)停車場時間的早晚依次從停車場最里面向大門口處停放(最先到達(dá)的第一輛車放在停車場的最里面)。如果停車場已放滿n輛車,則后來的車輛只能在停車場大門外的便道上等待,一旦停車場內(nèi)有車開走,則排以便道上的第一輛車就進(jìn)入停車場。停車場內(nèi)如有某輛車要開走,在它之后進(jìn)入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進(jìn)場。每輛車在離開停車場時,都應(yīng)根據(jù)它在停車場內(nèi)停留的時間長短交費。如果停留在便道上的車未進(jìn)停車場時,允許其離去,不收停車費,并且仍然保持在便道上等待的車輛的次序。編制一程序模擬該停車場的管理。②基本要求:
要求程序輸出每輛車到達(dá)后的停車位置(停車場或便道上),以及某輛車離開停車場應(yīng)交納的費用和它在停車場內(nèi)停留的時間。③實現(xiàn)提示:
汽車的模擬輸入信息格式可以是:(到達(dá)/離去,汽車牌照號碼,到達(dá)/離去的時刻)。例如,(‘A’,1,5)表示1號牌照車在5這個時刻到達(dá),而(‘D’,5,20)表示5號牌照車在20這個時刻離去。整個程序可以在輸入信息為(‘E’,0,0)時結(jié)束。本題可用棧和
第3頁共17頁
隊列來實現(xiàn)。三、概要設(shè)計
1、設(shè)計思想
此停車場管理系統(tǒng)是在一個狹長的通道上的,而且只有一個大門可以供車輛進(jìn)出,并且要實現(xiàn)停車場內(nèi)某輛車要離開時,在它之后進(jìn)入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進(jìn)場的功能,就可以設(shè)計兩個堆棧,其中一個堆棧用來模擬停車場,另一個堆棧用來模擬臨時停車場,該臨時停車場用來存放當(dāng)有車輛離開時,原來停車場內(nèi)為其讓路的車輛。至于當(dāng)停車場已滿時,需要停放車輛的通道可以用一個鏈隊列來實現(xiàn)。當(dāng)停車場內(nèi)開走一輛車時,通道上便有一輛車進(jìn)入停車場,此時只需要改變通道上車輛結(jié)點的連接方式就可以了,使通道上第一輛車進(jìn)入停車場這個堆棧,并且使通道上原來的第二輛車成為通道上的第一輛車,此時只需將模擬通道的鏈隊列的頭結(jié)點連到原來的第二輛車上就可以了。2、實現(xiàn)方法
對于此停車場管理系統(tǒng)的實現(xiàn),就是用兩個堆棧來分別模擬停車場以及停車場內(nèi)車輛為其它車輛讓路時退出停車的臨時停放地點。至于通道上車輛的停放則用一個鏈隊列來實現(xiàn),此時,通道上車輛的離開或者進(jìn)入停車場只需改變此鏈隊列上的結(jié)點而已。對于要對停車場內(nèi)的車輛根據(jù)其停放時間收取相應(yīng)的停車費用,可以記錄下車輛進(jìn)入以及離開停車場的時間,再用時間差乘以相應(yīng)的單價并且打印出最后的費用就可以實現(xiàn)了。3、主要模塊
①此停車場管理系統(tǒng),主要分為以下若干模塊:
首先定義用來模擬停車場的堆棧以及用來模擬通道的鏈隊列為全局變量,然后編寫主函數(shù),在此主函數(shù)中實現(xiàn)對其它各個模塊的調(diào)用。在主函數(shù)中首先調(diào)用option()函數(shù),出現(xiàn)歡迎用戶使用的主界面,然后提示用戶進(jìn)入此停車場管理系統(tǒng)后,再出現(xiàn)一個供用戶選擇的界面,在用戶的選擇過程中,程序又分別調(diào)用車輛的到達(dá)、車輛的離開、停車場內(nèi)停放車輛的信息以及退出程序這四個函數(shù)模塊。其中,在車輛的離開那個模塊函數(shù)中又調(diào)用了打印離開車輛信息的函數(shù),在停車場內(nèi)停放車輛信息的那個模塊函數(shù)中,又分別調(diào)用了顯示停車場上車輛信息的函數(shù)以及顯示便道上車輛信息的函數(shù)。最后,
第4頁共17頁
從調(diào)鼐的這四個函數(shù)中回到主函數(shù)結(jié)束整個程序的運行。②在以上各個模塊中,出現(xiàn)的調(diào)用的函數(shù)為:voidInitStack(SeqStackCar*s);intInitQueue(LinkQueueCar*Q);option();
intArrival(SeqStackCar*Enter,LinkQueueCar*W);
voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W);voidPRINT(CarNode*p);
voidList(SeqStackCarS,LinkQueueCarW);voidList1(SeqStackCar*S);voidList2(LinkQueueCar*W);4、模塊間關(guān)系
第5頁共17頁
四、調(diào)試分析
(1)調(diào)試過程中的主要問題
由于此停車場管理系統(tǒng)是分模塊設(shè)計的,而且在程序的實現(xiàn)過程中又使用了清屏函數(shù),所以,運行時用戶選擇任務(wù)并且執(zhí)行完任務(wù)后,又會回到供用戶選擇功能的主界面,因此整個程序從整體上來講結(jié)構(gòu)清晰,使用方便。本程序的調(diào)試運行,總體上情況良好,但中間也出現(xiàn)了一些小問題。其中比較有代表性的主要問題有:
當(dāng)停車場已經(jīng)達(dá)到最大容量,但仍有車輛進(jìn)入停車場的時候,運行界面上沒有出現(xiàn)或者說出現(xiàn)了但又跳掉了“停車場已滿,該車輛需在便道上等待!”的提示信息。我們小組成員經(jīng)過反復(fù)商量討論,并且在查閱了多種資料后,在那一個printf語句后加了一個getch(),此時,程序運行結(jié)果就符合要求了。(2)測試結(jié)果的分析與討論
①歡迎界面
②車輛到達(dá)
第6頁共17頁
③車輛離開
④車輛信息(車場)
第7頁共17頁
⑤車輛信息(便道)
五、用戶手冊
這個程序用來實現(xiàn)對停車場內(nèi)車輛的管理,整個操作界面為中文,更加符合人性化的標(biāo)
第8頁共17頁
準(zhǔn),使得用戶使用方便,而且每一個操作都有提示,使得初次接觸該程序的用戶也能很快適應(yīng)程序的操作。
這個程序操作簡單,對于車牌號,只需輸入車牌號上的數(shù)字就行,而且對于進(jìn)出停車場的時間,也簡化了操作,只需輸入當(dāng)時的時刻就行,沒有具體到小時和分鐘,但也許這也是該程序不足之處所在。而且該程序也給用戶提供了選擇的機(jī)會,當(dāng)點擊運行該程序后,如果想退出程序,可以輸入n或N退出該運行程序。
至于使用過程中的更具體的問題,可以參照該報告書中調(diào)試分析那一項的屏幕截圖,整個程序的運行界面大致就如上述屏幕截圖的內(nèi)容。六、附錄1、源程序代碼
#include#include
#include#defineMAX2/*車庫容量*/#defineprice3/*每車每時刻費用*/typedefstructnode{intnum;intreachtime;intleavetime;
}CarNode;/*車輛信息結(jié)點*/typedefstructNODE
{CarNode*stack[MAX+1];inttop;
}SeqStackCar;/*模擬車站*/typedefstructcar{CarNode*data;structcar*next;}QueueNode;typedefstructNode{QueueNode*head;
第9頁共17頁
QueueNode*rear;
}LinkQueueCar;/*模擬通道*/
/*---------------------------------------------------------------------------*//*函數(shù)聲明部分*/
voidInitStack(SeqStackCar*);/*初始化棧*/intInitQueue(LinkQueueCar*);/*初始化便道*/
intArrival(SeqStackCar*,LinkQueueCar*);/*車輛到達(dá)*/
voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);/*車輛離開*/voidList(SeqStackCar,LinkQueueCar);/*顯示存車信息*/voidPRINT(CarNode*p);
/*---------------------------------------------------------------------------*/voidoption()
{inti;charchoice;
gotoxy(0,0);
for(i=1;i
if(choice=="N"||choice=="n")exit(0);}
voidmain()
{SeqStackCarEnter,Temp;LinkQueueCarWait;intch;
system("graftabl936");option();
InitStack(&Enter);/*初始化車站*/
InitStack(&Temp);/*初始化讓路的臨時棧*/InitQueue(&Wait);/*初始化通道*/while(1){clrscr();
printf("\\n\\n\\t\\t\\t1.車輛到達(dá)請選擇1");printf("\\n\\n\\t\\t\\t2.車輛離開請選擇2");printf("\\n\\n\\t\\t\\t3.車輛信息請選擇3");printf("\\n\\n\\t\\t\\t4.退出程序請選擇4");printf("\\n\\n\\t\\t\\t現(xiàn)在請選擇以上信息:");
while(1)
{scanf("%d",&ch);printf("\\n");
if(ch>=1&&ch
}}/*------------------------------------------------------------------------------*/
voidInitStack(SeqStackCar*s)/*初始化棧*/{inti;s->top=0;
for(i=0;istack[s->top]=NULL;
}intInitQueue(LinkQueueCar*Q)/*初始化便道*/{Q->head=(QueueNode*)malloc(sizeof(QueueNode));if(Q->head!=NULL){Q->head->next=NULL;Q->rear=Q->head;return(1);
}else
return(-1);
}voidPRINT(CarNode*p)/*打印出站車的信息*/{intA1,A2;
printf("\\n\\t\\t\\t請輸入離開時間:");scanf("%d",&(p->leavetime));
printf("\\n\\t\\t\\t離開車輛的車牌號:%d",p->num);
printf("\\n\\n\\t\\t\\t離開車輛到達(dá)時間:%d",p->reachtime);printf("\\n\\n\\t\\t\\t離開車輛離開時間:%d",p->leavetime);A1=p->reachtime;A2=p->leavetime;
printf("\\n\\n\\t\\t\\t停車場管理費用:%d",(A2-A1)*price);free(p);}
第12頁共17頁
intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*車輛到達(dá)*/{CarNode*p;QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));flushall();
printf("\\t\\t\\t請輸入到達(dá)車輛車牌號:");scanf("%d",&(p->num));
if(Enter->toptop++;
printf("\\n\\t\\t\\t該車輛在停車場的位置是:%d\\n",Enter->top);printf("\\n\\t\\t\\t請輸入該車輛到達(dá)的時間:");scanf("%d",&(p->reachtime));Enter->stack[Enter->top]=p;return(1);}
else/*車場已滿,車進(jìn)便道*/
{printf("\\n\\t\\t\\t停車場已滿該車輛需在便道上等待!");getch();
t=(QueueNode*)malloc(sizeof(QueueNode));t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;return(1);}}
voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)/*車輛離開*/{inti,room;CarNode*p,*t;QueueNode*q;/*判斷車場內(nèi)是否有車*/if(Enter->top>0)/*有車*/
第13頁共17頁{while(1)/*輸入離開車輛的信息*/
{printf("\\t\\t\\t停車場里停放的車輛總數(shù):%d",Enter->top);printf("\\n\\n\\t\\t\\t請輸入要離開車輛的位置:");scanf("%d",&room);if(room>=1&&roomtop)break;}
while(Enter->top>room)/*車輛離開*/{Temp->top++;
Temp->stack[Temp->top]=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;}
p=Enter->stack[Enter->top];
Enter->stack[Enter->top]=NULL;Enter->top--;
while(Temp->top>=1)
{Enter->top++;
Enter->stack[Enter->top]=Temp->stack[Temp->top];Temp->stack[Temp->top]=NULL;Temp->top--;}
PRINT(p);
/*判斷通道上是否有車及車站是否已滿*/
if((W->head!=W->rear)&&Enter->tophead->next;t=q->data;Enter->top++;printf("\\n\\n\\t\\t\\t便道的%d
號車進(jìn)入車場第%d
置.",t->num,Enter->top);
printf("\\n\\n\\t\\t\\t請輸入現(xiàn)在的時間:");scanf("%d",&(t->reachtime));
第14頁共17頁
位
W->head->next=q->next;if(q==W->rear)W->rear=W->head;
Enter->stack[Enter->top]=t;free(q);}else
printf("\\n\\n\\t\\t\\t便道里沒有車.\\n");}
else
printf("\\n\\n\\t\\t\\t車場里沒有車.");/*沒車*/}
voidList1(SeqStackCar*S)/*列表顯示車場信息*/{inti;
if(S->top>0)/*判斷車站內(nèi)是否有車*/{printf("\\n\\t\\t\\t車場:");
printf("\\n\\n\\t\\t\\t位置到達(dá)時間車牌號\\n");for(i=1;itop;i++){printf("%26d",i);
printf("%6d",S->stack[i]->reachtime);printf("%10d",S->stack[i]->num);printf("\\n");}}
else
printf("\\n\\t\\t\\t車場里沒有車");}
voidList2(LinkQueueCar*W)/*列表顯示便道信息*/{QueueNode*p;p=W->head->next;
if(W->head!=W->rear)/*判斷通道上是否有車*/{printf("\\n\\t\\t\\t等待車輛的號碼為:");
第15頁共17頁
while(p!=NULL)
{printf("%-10d",p->data->num);
p=p->next;}
printf("\\n");}else
printf("\\n\\t\\t\\t便道里沒有車.");}
voidList(SeqStackCarS,LinkQueueCarW){intflag,tag;flag=1;while(flag)
{printf("\\n\\t\\t\\t請選擇1|2|3:");
printf("\\n\\n\\t\\t\\t1.車場\\n\\n\\t\\t\\t2.便道\\n\\n\\t\\t\\t3.返回\\n\\n\\t\\t\\t");
while(1)
{scanf("%d",&tag);
if(tag>=1||tag
地相聯(lián)接在了一起。在這次課程設(shè)計中,不僅培養(yǎng)了我開發(fā)一個中小型程序的能力,而且也培養(yǎng)了我的團(tuán)隊合作能力。在這次對停車場管理系統(tǒng)的開發(fā)過程中,我們小組成員互相合作,互相幫助,其中有程序功能成功實現(xiàn)時的欣喜,也有遇到問題、解決問題時的執(zhí)著以及迷茫。在這次課程設(shè)計中,使得我很好地了解了在開發(fā)程序過程中合作的重要性。
在這周課程設(shè)計中,我們小組所開發(fā)的停車場管理系統(tǒng),基本上可以完成每一項功能。汽車進(jìn)入停車場的信息、離開停車場的信息以及通道上的信息都可以在程序上一一實現(xiàn)。但是,該程序也有不足的地方。主要表現(xiàn)在車輛的車牌號上,現(xiàn)實中的車牌號是一串字符,可是,在這個程序中,為了簡便起見,我們就車牌號定義為了整型,這個與現(xiàn)實是有些不符的。還有一個可以改進(jìn)的地方就是記錄車輛進(jìn)入停車場以及離開停車場的時間,應(yīng)該精確到小時以及分鐘的,可是在程序中,為了簡便起見,我們只是設(shè)置成了一個時刻,所以,在這方面還是有待改進(jìn)的。改進(jìn)的程序中,還應(yīng)該增加時間的判斷功能,即停車場內(nèi)有可能有車輛停放的時間超過一天。
還有一個很重要的問題,對于停車場內(nèi)可以停放的最多車輛數(shù),為了測試數(shù)據(jù)的方便,我在程序中,定為了2,在實際使用中,可以改變程度開頭的宏定義以增加停車場的容量。
總之,在這周的課程設(shè)計中,我以及我們這組的收獲還是挺大的,不僅對于專業(yè)課有了更好的認(rèn)識,而且在合作的過程中更加了解了團(tuán)隊精神的重要性。
第17頁共17頁
友情提示:本文中關(guān)于《停車場系統(tǒng)程序設(shè)計總結(jié)1》給出的范例僅供您參考拓展思維使用,停車場系統(tǒng)程序設(shè)計總結(jié)1:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。