版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
東北大學(xué)信息科學(xué)與工程學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告題目立體化停車場管理課題組長張曉峰課題組成員曹喬家王子驕專業(yè)名稱計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)計(jì)1307指導(dǎo)教師楊雷 2015年1月課程設(shè)計(jì)任務(wù)書題目:立體化停車場管理問題描述:設(shè)停車場有地上和地下兩層,統(tǒng)一管理。地下停車場采用單入口和單出口。地上停車場采用南北方向的雙口,每個(gè)口都有一個(gè)入口和出口。停車順序先地上,后地下。地上入口處各有一個(gè)單車道的等候通道,并允許等候的車輛因急事從等候通道直接開走。設(shè)計(jì)要求:設(shè)計(jì)停車場模擬管理程序。(1)采用棧、隊(duì)列和有序表等數(shù)據(jù)結(jié)構(gòu)。(2)等候車輛的管理。(3)地下、地上停車位的管理。(4)停車計(jì)費(fèi)功能。(5)其它完善性功能。指導(dǎo)教師簽字:年月日目錄1課題概述 11.1課題任務(wù) 11.2課題原理 11.3相關(guān)知識(shí) 12需求分析 12.1課題調(diào)研 12.2用戶需求分析 13方案設(shè)計(jì) 23.1總體功能設(shè)計(jì) 23.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 23.3函數(shù)原型設(shè)計(jì) 33.4主算法設(shè)計(jì) 43.5用戶界面設(shè)計(jì) 44方案實(shí)現(xiàn) 44.1開發(fā)環(huán)境與工具 44.2程序設(shè)計(jì)關(guān)鍵技術(shù) 44.3個(gè)人設(shè)計(jì)實(shí)現(xiàn) 44.3.1張曉峰設(shè)計(jì)實(shí)現(xiàn) 44.3.2曹喬家設(shè)計(jì)實(shí)現(xiàn) 114.3.3王子驕設(shè)計(jì)實(shí)現(xiàn) 155測試與調(diào)試 195.1個(gè)人測試 195.1.1張曉峰測試 195.1.2曹喬家測試 205.1.3王子驕測試 215.2組裝與系統(tǒng)測試 215.3系統(tǒng)運(yùn)行 226課題總結(jié) 246.1課題評(píng)價(jià) 246.2團(tuán)隊(duì)協(xié)作 256.3團(tuán)隊(duì)協(xié)作 256.4個(gè)人設(shè)計(jì)小結(jié) 256.4.1張曉峰設(shè)計(jì)小結(jié) 256.4.2曹喬家設(shè)計(jì)小結(jié) 256.4.3王子驕設(shè)計(jì)小結(jié) 257附錄A課題任務(wù)分工 26A-1課題程序設(shè)計(jì)分工 26A-2課題報(bào)告分工 27附錄B課題設(shè)計(jì)文檔(光盤) 28B-1課程設(shè)計(jì)報(bào)告(電子版) 28B-2源程序代碼(*.H,*.CPP) 28B-3工程與可執(zhí)行文件) 28B-4屏幕演示錄像文件(可選) 28附錄C用戶操作手冊(可選) 28C.1運(yùn)行環(huán)境說明 28C.2操作說明 28-43-1課題概述1.1課題任務(wù)【問題描述】設(shè)停車場有地上和地下兩層,統(tǒng)一管理。地下停車場采用單入口和單出口。地上停車場采用南北方向的雙口,每個(gè)口都有一個(gè)入口和出口。停車順序先地上,后地下。地上入口處各有一個(gè)單車道的等候通道,并允許等候的車輛因急事從等待通道直接開走?!驹O(shè)計(jì)要求】設(shè)計(jì)停車場模擬管理程序。(1)采用棧、隊(duì)列和有序表等數(shù)據(jù)結(jié)構(gòu)。(2)等候車輛的管理。(3)地下、地上停車位的管理。(4)停車計(jì)費(fèi)功能。(5)其它完善性功能。1.2課題原理本程序主要運(yùn)用棧來模擬停車場,建立上下兩個(gè)棧來模擬上下停車場,一列表模擬車場便道,按照從終端輸入的數(shù)據(jù)序列進(jìn)行模擬管理,把停車的車位信息保存在新建的鏈表中,每組輸入的數(shù)據(jù)保存車牌號(hào),自動(dòng)生成車位號(hào)和車輛到達(dá)時(shí)間保存在鏈表中,對(duì)每一組的數(shù)據(jù)輸出信息,包括車輛到達(dá)時(shí)間,離開時(shí)間,及停車費(fèi)用,用隊(duì)列保存便車道停靠的車輛,以及車輛的登記和離開,最后的棧是以順序棧結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列和鏈表以鏈?zhǔn)浇Y(jié)構(gòu)實(shí)現(xiàn)。1.3相關(guān)知識(shí)本實(shí)驗(yàn)主要運(yùn)用鏈表、棧、隊(duì)列等數(shù)據(jù)結(jié)構(gòu),運(yùn)用C語言中的指針、數(shù)組字符串等相關(guān)知識(shí)。2需求分析2.1課題調(diào)研通過在網(wǎng)上對(duì)各個(gè)停車場的調(diào)查,我們查到停車場有車輛的入場登記,車輛的離開及費(fèi)用,還有就是車輛的信息保存,每個(gè)車輛有車牌號(hào),到達(dá)和離開時(shí)間及停車費(fèi)用等等。2.2用戶需求分析本程序采用簡單的界面,使使用者可以簡單可了解軟件的使用,界面簡單、大方。鏈表保存的車位信息,只需輸入車牌號(hào),其他車位信息自動(dòng)由系統(tǒng)生成,可以免去使用的其他操作,為使用者省事,省力。同時(shí)本軟件的使用達(dá)到人性化,方便化,便于使用者的使用。3方案設(shè)計(jì)3.1總體功能設(shè)計(jì)本軟件要實(shí)現(xiàn)對(duì)進(jìn)入停車場的車輛登記功能,車輛離開的收費(fèi)功能,以及車輛進(jìn)入便車道的等待及從便車道,還有對(duì)車輛信息的查詢和對(duì)車場進(jìn)入和離開車輛的統(tǒng)計(jì)。3.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)(1)時(shí)間的結(jié)構(gòu)體structnow_time{ intmday;inthour;intmin;}(2)車位信息的結(jié)構(gòu)體structinformation{intsetnumber;charnum[10];structnow_timereach;structnow_timeleave;}set[MAX*2](3)便車道隊(duì)列typedefstruct{ char*base;intfront;intrear;}SqQueue(4)停車場的棧typedefstruct{ int*base;int*top;intstacksize;}SqStack(5)車位信息的鏈表typedefstructLNode{ struct { intstnumber;charnum[10];structnow_timereach;structnow_timeleave;floatfee;inttotalhour; }data;structLNode*next;}LNode,*LinkList3.3函數(shù)原型設(shè)計(jì)()voidCreateList_L(LinkList&L)建立車輛信息鏈表()StatusinitStack1(SqStack&S)建立地上停車場的棧()StatusinitStack2(SqStack&S)建立地下停車場的棧()StatusPush(SqStack&S,inte)車輛入棧即出場()StatusPop(SqStack&S,int&e)車輛出棧即入場()StatusinitQueue(SqQueue&Q)建立便車道的隊(duì)列()StatusQueueLength(SqQueueQ)計(jì)算便車道的車輛數(shù)量()Statusstack_empty(SqStackS)判斷停車場是否車滿()voidenterstop(LinkListclist,SqStack&S,charnumber[10],int*come,inti)車輛進(jìn)入停車場()Statusleavestop(LinkListllist,LinkListclist,SqStack&S,SqQueue&Q,int*come,int*leave,inti)車輛離開停車場()voidccord(LinkListclist,inti,intsetnumber)信息登記()StatusListInsert_Link(LinkList&L,inti,intsetnumber)保存車輛到來的信息()voidcopy(char*a,char*b)進(jìn)行車位號(hào)的比對(duì)()StatuslListInsert_Link(LinkList&llist,inti,intlset,inttotalhour,floatfee,intday,inthour,intmin)保存車輛離開的信息()voidshowcome(LinkListlist)顯示車輛到來時(shí)間()voidshowleave(LinkListlist)顯示車輛離開時(shí)間3.4主算法設(shè)計(jì) 程序運(yùn)行時(shí),當(dāng)車輛入場時(shí),車輛信息保存在鏈表里,并出棧來表示進(jìn)入一輛車,其車位和時(shí)間自動(dòng)生成,當(dāng)汽車離場時(shí),輸入車位信息,顯示時(shí)間,費(fèi)用。并把車輛離開時(shí)間等保存在離開的鏈表里,然后通過車位信息的輸入,即出場和離場鏈表表示輸出。3.5用戶界面設(shè)計(jì)主界面分別有車輛登記,車輛離場,車場信息,退出系統(tǒng)四個(gè)功能,進(jìn)入車輛登記窗口輸入車牌號(hào),自動(dòng)生成車位信息顯示。車輛離場窗口進(jìn)入輸入車場及車位信息,即彈出車位信息及停車費(fèi)用。車位信息即顯示地上下停車場進(jìn)出車輛的車輛信息,包括到達(dá)時(shí)間、離開時(shí)間、車位號(hào)、車牌號(hào)、停車費(fèi)用等。退出系統(tǒng)即退出本軟件。4方案實(shí)現(xiàn)4.1開發(fā)環(huán)境與工具本程序在window7下實(shí)現(xiàn)和運(yùn)行,并使用VisualC++6.0編譯的。4.2程序設(shè)計(jì)關(guān)鍵技術(shù)本程序主要用棧來保存車位車位的信息,當(dāng)車場為空時(shí),棧此時(shí)是滿的,而當(dāng)車場滿時(shí),棧是空的。所以當(dāng)車輛入場時(shí)是出棧,而車輛進(jìn)場時(shí)時(shí)出棧。此外就是車輛信息的保存在鏈表里。因?yàn)槭堑厣舷聝蓚€(gè)停車場,故我們采用兩個(gè)棧和兩個(gè)鏈表來保存其對(duì)應(yīng)的信息,我們還采用了系統(tǒng)時(shí)間,減少了使用者的輸入。4.3個(gè)人設(shè)計(jì)實(shí)現(xiàn)4.3.1張曉峰設(shè)計(jì)實(shí)現(xiàn)設(shè)計(jì)時(shí)間車位兩個(gè)結(jié)構(gòu)體,以及時(shí)間函數(shù)。主函數(shù)的設(shè)計(jì)。保存車輛到達(dá)與離開信息(利用鏈表)(1)時(shí)間與車位信息的結(jié)構(gòu)體源程序:structnow_time{ intmday;inthour;intmin;};structinformation{intsetnumber;charnum[10];structnow_timereach;structnow_timeleave;}set[MAX*2];(2)保存車輛到來信息源程序:車輛信息,包括車牌號(hào),到達(dá)時(shí)間。儲(chǔ)存在鏈表中,后續(xù)查詢車場信息中利用此函數(shù)。StatusListInsert_Link(LinkList&L,inti,intsetnumber){ LNode*p,*s; intj;p=L;j=0;while(p&&j<i-1) { p=p->next;++j; }if(!p||j>i-1) returnERROR;s=(LinkList)malloc(sizeof(LNode));s->data.stnumber=set[setnumber].setnumber;s->data.reach.hour=set[setnumber].reach.hour;s->data.reach.mday=set[setnumber].reach.mday;s->data.reach.min=set[setnumber].reach.min;copy(s->data.num,set[setnumber].num);s->next=p->next;p->next=s;returnOK;}(3)保存車輛離開離開時(shí),記錄離開時(shí)間,算出總時(shí)間,為后續(xù)計(jì)算費(fèi)用做鋪墊。同樣將信息儲(chǔ)存在鏈表中,在離開停車場函數(shù)中利用該函數(shù)。StatuslListInsert_Link(LinkList&llist,inti,intlset,inttotalhour,floatfee,intday,inthour,intmin){ LNode*p,*s;intj;p=llist;j=0;while(p&&j<i-1) { p=p->next;++j; } if(!p||j>i-1) returnERROR;s=(LinkList)malloc(sizeof(LNode));s->data.fee=fee;s->data.totalhour=totalhour;s->data.stnumber=lset;s->data.leave.mday=day;s->data.leave.hour=hour;s->data.leave.min=min;copy(s->data.num,set[lset].num);s->next=p->next;p->next=s;returnOK;}(4)時(shí)間函數(shù)源代碼:采用系統(tǒng)時(shí)間,日小時(shí)分鐘格式。分為入場時(shí)間和出場時(shí)間。voidshowcome(LinkListlist){ LNode*p;p=list->next;while(p) { printf("\n%s\t%d號(hào)\t%d日%d時(shí)%d分",p->data.num,p->data.stnumber,p->data.reach.mday,p->data.reach.hour,p->data.reach.min); p=p->next; }}voidshowleave(LinkListlist){ LNode*p; p=list->next; while(p) { printf("\n%s\t%d號(hào)\t%d日%d時(shí)%d分",p->data.num,p->data.stnumber,p->data.leave.mday,p->data.leave.hour,p->data.leave.min); p=p->next; }}(5)主函數(shù):本程序的關(guān)鍵所在。對(duì)所有函數(shù)進(jìn)行調(diào)用,并實(shí)現(xiàn)界面的顯示。登記,離開,查詢,退出四個(gè)部分。主菜單的建立,界面設(shè)計(jì)等。voidmain(){ intchoice1,choice2,choice3,wait,ture=1;inti;intcome1=0; intleave2=0; intcome3=0; intleave4=0;int*p1,*p2,*p3,*p4;p1=&come1; p2=&leave2;p3=&come3;p4=&leave4;charnumber[10];SqStackstack_set1;SqStackstack_set2;SqQueuequeue_turn;initStack1(stack_set1);initStack2(stack_set2);initQueue(queue_turn);LinkListllist1,llist2,clist1,clist2;CreateList_L(llist1);CreateList_L(clist1);CreateList_L(llist2);CreateList_L(clist2);for(i=1;i<=MAX+1;i++) { set[i].setnumber=i; set[i].num[1]='#'; }system("color3B");printf("\n\n\n\n\n\n\n\n\n*******************歡迎使用停車場管理系統(tǒng),按任意鍵進(jìn)入主菜單******************");do { getchar(); system("cls"); printf("歡迎使用停車場管理系統(tǒng)\n\n\n"); printf("主菜單\n\n"); printf("*1*汽車登記\n"); printf("*2*汽車離場\n");printf("*3*車場信息\n"); printf("*0*退出系統(tǒng)\n\n"); printf("***請(qǐng)按提示輸入:\n"); scanf("%d",&choice1); switch(choice1) { case1: system("cls");printf("***********************汽車登記******************\n\n\n"); if(!stack_empty(stack_set1))//進(jìn)入停車場 { printf("\n*請(qǐng)輸入您的車牌號(hào)(例:遼A3475):"); scanf("%s",number); enterstop(clist1,stack_set1,number,p1,1); } elseif(!stack_empty(stack_set2)) { printf("\n*請(qǐng)輸入您的車牌號(hào)(例:遼A3475):"); scanf("%s",number); enterstop(clist2,stack_set2,number,p3,2); } else//進(jìn)入便車道等待 { wait=w_total(queue_turn); printf("******您好,當(dāng)前停車場已滿,有%d在等待!*****\n您是否愿意進(jìn)入便車道等待:\n",wait); printf("*1*:愿意等待!\t\t*2*:不愿意等待\n"); while(ture==1) { scanf("%d",&choice3); getchar(); switch(choice3) { case1: enterlane(queue_turn,wait);//汽車進(jìn)入便車道 printf("***您好,請(qǐng)進(jìn)入便車道等待***!"); ture=0; break; case2: printf("\n***汽車離開!"); ture=0; break; default: printf("\n***您好,輸入錯(cuò)誤,請(qǐng)重新輸入!"); } } ture=1; } break; case2: system("cls"); printf("***********************汽車離場******************\n\n\n"); printf("*1*地上車場\n"); printf("*2*地下車場\n"); scanf("%d",&choice2); switch(choice2) { case1: printf("****************地上停車場******************\n"); leavestop(llist1,clist1,stack_set1,queue_turn,p1,p2,1); break; case2: printf("*****************地下停車場*****************\n"); leavestop(llist2,clist2,stack_set2,queue_turn,p3,p4,2); break; default: printf("***您輸入的有誤,請(qǐng)重新輸入:"); } break; case3:/*今天信息的顯示*/ system("cls"); printf("***********************車場信息******************\n\n"); if((come1+come3)==0) printf("**********無車輛到達(dá)!\n"); else { printf("**********到達(dá)%d輛車:",come1+come3);printf("\n**汽車信息*車牌號(hào)*\t*車位號(hào)*\t*到達(dá)時(shí)間*\t"); printf("\n*地上車場*\t"); showcome(clist1); printf("\n*地下車場*\t"); showcome(clist2); printf("\n"); } if((leave2+leave4)==0) printf("**********無車輛離開!\n"); else { printf("**********離開%d輛車:",leave2+leave4); printf("\n**汽車信息:**車牌號(hào)**\t**車位號(hào)**\t**到達(dá)時(shí)間**\t"); printf("\n**地上車場:\t"); showleave(llist1); printf("\n**地下車場:\t"); showleave(llist2); } break; case0: system("cls"); printf("***************退出停車系統(tǒng)!******************\n"); break; default: printf("***您輸入的有誤,請(qǐng)重新輸入:"); } getchar(); } while(choice1!=0);}4.3.2曹喬家設(shè)計(jì)實(shí)現(xiàn)設(shè)計(jì)進(jìn)入停車場和離開停車場函數(shù),結(jié)合之前棧,鏈表,隊(duì)列以及數(shù)組。(1)進(jìn)入停車場源代碼:voidenterstop(LinkListclist,SqStack&S,charnumber[10],int*come,inti){ inte;*come=*come+1;Pop(S,e);set[e].setnumber=e; copy(set[e].num,number); structtm*newtime;charam_pm[]="AM";time_tlong_time;time(&long_time);newtime=localtime(&long_time);set[e].reach.hour=newtime->tm_hour; set[e].reach.mday=newtime->tm_mday;set[e].reach.min=newtime->tm_min;printf("\n\n************請(qǐng)核對(duì)您的停車信息***************\n");printf("*停車牌號(hào)*:%s\n",set[e].num); if(i==1) printf("*地上車場*:%d\n",set[e].setnumber); if(i==2) printf("*地下車場*:%d\n",set[e].setnumber);printf("*到達(dá)時(shí)間*:%d:%d:%d\n",set[e].reach.mday,set[e].reach.hour,set[e].reach.min);ccord(clist,*come,set[e].setnumber);}利用出棧函數(shù)來表示車輛進(jìn)入停車場,等同于車位出停車場。利用set數(shù)組,存儲(chǔ)進(jìn)入車場的車輛信息。包括進(jìn)入時(shí)間,車號(hào)等。時(shí)間函數(shù)的時(shí)候,顯示到達(dá)時(shí)間,并按先下后上的順序,選擇上下兩個(gè)停車場,并輸出。(2)離開停車場源代碼:Statusleavestop(LinkListllist,LinkListclist,SqStack&S,SqQueue&Q,int*come,int*leave,inti){ charnumber[10];intt,lset;intj=1;inttotalhour;floatfee;printf("***請(qǐng)輸入您的停車位號(hào):"); do { scanf("%d",&lset);getchar(); for(inti=0;i<=MAX;i++) { if(set[lset].num[1]=='#') j=0; } if(j==0) { printf("*****車場并沒有停車*******\n"); returnERROR; } else { if(lset>MAX||lset<1) { printf("*****您輸入有誤,該車號(hào)并不存在!*******\n***請(qǐng)重新輸入您的車位號(hào):\n"); t=1; } else { if(set[lset].num[1]=='#') { printf("***該車位為空,不能進(jìn)行離開操作!***\n***請(qǐng)重新輸入您的車位號(hào):\n"); t=1; } else { structtm*newtime; charam_pm[]="AM"; time_tlong_time; time(&long_time);newtime=localtime(&long_time);totalhour=(newtime->tm_mday-set[lset].reach.mday)*24*60+(newtime->tm_hour-set[lset].reach.hour)*60+(newtime->tm_min-set[lset].reach.min);fee=price*totalhour;printf("***********以下是您本次停車的信息************\n");printf("*停車牌號(hào)*:%s\n",set[lset].num); printf("*停車位號(hào)*:%d\n",set[lset].setnumber);printf("*到達(dá)時(shí)間*:%d:%d:%d\n",set[lset].reach.mday,set[lset].reach.hour,set[lset].reach.min);printf("*離開時(shí)間*:%d:%d:%d\n",newtime->tm_mday,newtime->tm_hour,newtime->tm_min);printf("*停車費(fèi)用*:%f",fee);printf("\n\n\n\t*********謝謝您的光臨,祝您一路平安********!\n\n");printf("\n\n\n\n\t\t\tmention:pressanykeycontinue!");getchar();system("cls");*leave=*leave+1;lListInsert_Link(llist,*leave,lset,totalhour,fee,newtime->tm_mday,newtime->tm_hour,newtime->tm_min);set[lset].num[1]='#'; Push(S,lset); if(!EmptyQueue(Q)) { DeQueue(Q); printf("\n***請(qǐng)停在停車便道的客戶進(jìn)入停車場!***\n"); if(i==1)//判斷車場 { printf("\n***輸入您的車牌號(hào)(例:遼A3475):"); scanf("%s",number); enterstop(clist,S,number,come,1); t=0; } if(i==2) { printf("\n***輸入您的車牌號(hào)(例:遼A3475):"); scanf("%s",number); enterstop(clist,S,number,come,2); t=0; } } else t=0; } } } } while(t==1); returnOK;}離開停車場,包括計(jì)費(fèi)的顯示,信息存儲(chǔ)在鏈表中。其中包含出場費(fèi)用的計(jì)算,按分鐘計(jì)時(shí)。實(shí)現(xiàn)輸入車位號(hào)即顯示車輛信息(車號(hào),進(jìn)場時(shí)間)離開時(shí),顯示所需費(fèi)用。最后利用一個(gè)便車道的判空,判斷是否有車輛等待入場,如果有,則停在剛剛空出的車位上。若沒有,返回0;4.3.3王子驕設(shè)計(jì)實(shí)現(xiàn)停車場棧的建立,便車道的建立,保存車位信息,地上地下兩個(gè)車場,判斷車場是否已滿,便車道上的車輛數(shù)目函數(shù)。(1)便車道的建立源代碼:便車道用一隊(duì)列表示。typedefstruct{ char*base;intfront;intrear;}SqQueue;(2)代表停車場的棧建立源代碼:typedefstruct{ int*base;int*top;intstacksize;}SqStack;(3)保存車位信息:在進(jìn)入停車場時(shí),要把車輛信息保存在鏈表中,調(diào)用此函數(shù)可以實(shí)現(xiàn)該功能。信息包括車牌號(hào)以及入場時(shí)間。typedefstructLNode{ struct { intstnumber;charnum[10];structnow_timereach;structnow_timeleave;floatfee;inttotalhour; }data;structLNode*next;}LNode,*LinkList;voidcopy(char*a,char*b){ inti; for(i=0;(a[i]=b[i])!='\0';i++) {;}}voidCreateList_L(LinkList&L){ L=(LinkList)malloc(sizeof(LNode));L->next=NULL;}voidccord(LinkListclist,inti,intsetnumber){ListInsert_Link(clist,i,setnumber);}(4)建立地上地下兩個(gè)停車場:題目要求兩個(gè)停車場,建立方法相同,最大車位號(hào)相等。StatusinitStack1(SqStack&S){inti; S.base=(int*)malloc(MAX*sizeof(int)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=MAX; for(i=1;i<=MAX;i++) { *S.top++=i; }returnOK;}StatusinitStack2(SqStack&S){inti; S.base=(int*)malloc(MAX*sizeof(int)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=MAX; for(i=1;i<=MAX;i++) { *S.top++=i; } returnOK;}(5)便車道的建立與判斷是否已滿:便車道在后續(xù)的離開停車場時(shí)調(diào)用。如車道上有車等待,當(dāng)車場中有車離開時(shí),進(jìn)行一次車道判空。若非空,則進(jìn)入車場并停在對(duì)應(yīng)的車位。StatusinitQueue(SqQueue&Q){ Q.base=(char*)malloc(100*sizeof(char[10]));if(!Q.base) exit(OVERFLOW); Q.front=Q.rear=0;returnOK;}Statusstack_empty(SqStackS){ if(S.top==S.base) returnOK;elsereturnERROR;}(6)棧的相關(guān)函數(shù):由于本程序設(shè)計(jì)的車場,是以滿棧的形式。即車位號(hào)已經(jīng)將車場占滿。車輛入棧,相當(dāng)于車位號(hào)出戰(zhàn)。以實(shí)現(xiàn)在車輛進(jìn)入時(shí),輸出車位號(hào)信息。所以入棧為有車離開車場,出棧為有車進(jìn)入車場。StatusPush(SqStack&S,inte){ if(S.top-S.base>=S.stacksize) { if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; } *S.top++=e; returnOK;StatusPop(SqStack&S,int&e){ if(S.top==S.base) returnERROR; e=*--S.top; returnOK;}(7)計(jì)算便車道車輛數(shù)目:計(jì)算隊(duì)列長度,即車輛數(shù)目。StatusQueueLength(SqQueueQ){ return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;}Statusw_total(SqQueueQ){returnQueueLength(Q);};(8)隊(duì)列判空:StatusEnQueue(SqQueue&Q,inte){ if((Q.rear+1)%MAXQSIZE==Q.front) returnERROR;Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAXQSIZE;returnOK;}(9)進(jìn)入車道等待:Statusenterlane(SqQueue&Q,intwaitenumber){ EnQueue(Q,waitenumber);returnOK;}設(shè)計(jì)的函數(shù),均被后續(xù)進(jìn)出停車場所使用,實(shí)現(xiàn)對(duì)應(yīng)功能。5測試與調(diào)試 5.1個(gè)人測試5.1.1張曉峰測試5.1.2曹喬家測試5.1.3王子驕測試5.2組裝與系統(tǒng)測試把各個(gè)函數(shù)通過主函數(shù)的調(diào)用來實(shí)現(xiàn)停車場的各個(gè)功能的實(shí)現(xiàn),當(dāng)進(jìn)入主函數(shù),再調(diào)用各個(gè)副函數(shù)來實(shí)現(xiàn)功能的實(shí)現(xiàn)。操作名稱操作流程操作結(jié)果和輸出登錄系統(tǒng)打開登錄頁面,按任意鍵進(jìn)入主菜單從登錄系統(tǒng)到進(jìn)入主菜單,花費(fèi)1秒時(shí)間?;緷M足了系統(tǒng)顯示要求。車輛登記輸入車牌號(hào)確定即自動(dòng)生成車位信息用列表的方式顯示出了符合條件的記錄。從服務(wù)器端返回信息,花費(fèi)50毫秒-100毫秒,滿足要求。汽車離場進(jìn)入窗口,輸入車場及車位信息自動(dòng)生成車輛的到達(dá)離開時(shí)間及停車費(fèi)用。退出系統(tǒng)點(diǎn)擊退出本軟件執(zhí)行結(jié)束,退出系統(tǒng)。5.3系統(tǒng)運(yùn)行(1).進(jìn)入系統(tǒng)(2).進(jìn)入主菜單(3.).進(jìn)入汽車登記(4).進(jìn)入汽車離場系統(tǒng)(5).進(jìn)入車位信息6課題總結(jié) 6.1課題評(píng)價(jià)(1)系統(tǒng)功能總結(jié):①登記功能:車輛進(jìn)入停車場時(shí),對(duì)車輛的信息進(jìn)行登記,包括車牌號(hào),進(jìn)入停車場的時(shí)間,將信息儲(chǔ)存在鏈表中;②收費(fèi)功能:再離開停車場時(shí),系統(tǒng)將利用時(shí)間函數(shù)計(jì)算出車輛在停車場中的時(shí)長,并計(jì)算出所需費(fèi)用,顯示在離開信息中;③查詢功能:可查詢停車場全天的信息,包括場內(nèi)現(xiàn)有車輛以及離開車輛的信息,包含所有的登記信息以及離開時(shí)間費(fèi)用信息;(2)程序運(yùn)行評(píng)價(jià):本程序說明清晰易懂,使用時(shí)按照說明操作即可。用棧表示車場,隊(duì)列存儲(chǔ)車輛。事項(xiàng)車輛與車號(hào)的一一對(duì)應(yīng)。但對(duì)于界面方面,不夠美觀,程序也不夠?qū)嵱?。由于本程序只做了管理方面的?shí)現(xiàn),所以在采集數(shù)據(jù)方面還需要手動(dòng)輸入。由于開發(fā)能力和時(shí)間所限,本程序目前還需要在一定程度上進(jìn)行改進(jìn)和完善,根據(jù)以后運(yùn)行問題以及學(xué)習(xí)的新知識(shí),我們可以在功能方面進(jìn)一步加強(qiáng)。6.2團(tuán)隊(duì)協(xié)作在此次數(shù)據(jù)結(jié)構(gòu)課程實(shí)驗(yàn)中。我們學(xué)會(huì)了在編程過程中要學(xué)會(huì)各個(gè)成員的合作,以及各個(gè)函數(shù)的組合調(diào)用,在編程中我們要積極向老師請(qǐng)教,各個(gè)成員之間的團(tuán)隊(duì)合作,積極配合,才能更好地完成一個(gè)完整的、成功的程序。6.3下一步工作 通過這次編程實(shí)驗(yàn),我們意識(shí)到了我們的知識(shí)還遠(yuǎn)遠(yuǎn)不過,我們還要繼續(xù)學(xué)習(xí)我們尚未了解的知識(shí),并且把我們現(xiàn)有的知識(shí)要學(xué)會(huì)靈活運(yùn)用,熟練的掌握我們現(xiàn)在的知識(shí),并為以后的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。我們還要繼續(xù)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的其他知識(shí),為將來的編程打下基礎(chǔ)。6.4個(gè)人設(shè)計(jì)小結(jié)6.4.1張曉峰設(shè)計(jì)小結(jié)經(jīng)過這些天的編程上機(jī)實(shí)驗(yàn),使我們更加深入的了解數(shù)據(jù)結(jié)構(gòu)這門課程,數(shù)據(jù)結(jié)構(gòu)不僅僅要求我們具有熟練的知識(shí),還要我們有豐富的實(shí)際實(shí)驗(yàn)的經(jīng)驗(yàn),使我們能更加地熟練運(yùn)用數(shù)據(jù)結(jié)構(gòu)這門課來解決我們面對(duì)的問題,對(duì)我們將來做更大的程序有非常大的幫助。還懂得了團(tuán)隊(duì)合作的重要性。6.4.2曹喬家設(shè)計(jì)小結(jié)這次課程設(shè)計(jì)使我對(duì)配合的能力有了更深的了解。還有規(guī)范的書寫代碼的格式和程序的調(diào)試,更重要的是又能熟練地運(yùn)用數(shù)據(jù)結(jié)構(gòu)這門課程學(xué)會(huì)的知識(shí)來解決實(shí)際中遇到的問題。6.4.3王子驕設(shè)計(jì)小結(jié)我在這個(gè)編程實(shí)驗(yàn)中,充分的了解各個(gè)成員的默契配合的重要性。結(jié)構(gòu)的健壯性在一再的更改后已經(jīng)初具容錯(cuò)能力,更具穩(wěn)定性。提高了用戶的體驗(yàn)。此次課程設(shè)計(jì)給日后的程序設(shè)計(jì)積累了寶貴的經(jīng)驗(yàn)財(cái)富,日后的程序設(shè)計(jì)一定會(huì)更加順暢,完善。7附錄A課題任務(wù)分工 A-1課題程序設(shè)計(jì)分工學(xué)號(hào)姓名程序設(shè)計(jì)函數(shù)原型、類)功能說明20133999張曉峰structnow_timestructinformationStatusListInsert_Link(LinkList&L,inti,intsetnumber)()StatuslListInsert_Link(LinkList&llist,inti,intlset,inttotalhour,floatfee,intday,inthour,intmin)()voidshowcome(LinkListlist)voidshowleave(LinkListlist)時(shí)間結(jié)構(gòu)體車位信息的結(jié)構(gòu)體保存車輛到來保存車輛離開時(shí)間函數(shù)主函數(shù)20133977曹喬家voidenterstop(LinkListclist,SqStack&S,charnumber[10],int*come,inti)()Statusleavestop(LinkListllist,LinkListclist,SqStack&S,SqQueue&Q,int*come,int*leave,inti)()進(jìn)入停車場離開停車場20133992王子驕typedefstruct()typedefstruct()typedefstructLNode()StatusinitStack1(SqStack&S)()StatusinitStack2(SqStack&S)()StatusinitQueue(SqQueue&Q)()StatusPush(SqStack&S,inte)()Statusenterlane(SqQueue&Q,intwaitenumber)()便車道建立停車場上下建立保存車位信息入棧出棧計(jì)算便車道車輛數(shù)A-2課題報(bào)告分工章節(jié)內(nèi)容完成人1課題概述1.1課題任務(wù)1.2課題原理1.3相關(guān)知識(shí)張曉峰2需求分析2.1課題調(diào)研2.2用戶需求分析曹喬家3方案設(shè)計(jì)3.1總體功能設(shè)計(jì)3.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)3.3函數(shù)原型設(shè)計(jì)3.4主算法設(shè)計(jì)3.5用戶界面設(shè)計(jì)張曉峰曹喬家王子驕張曉峰4方案實(shí)現(xiàn)4.1開發(fā)環(huán)境與工具4.2程序設(shè)計(jì)關(guān)鍵技術(shù)4.3個(gè)人設(shè)計(jì)實(shí)現(xiàn)4.3.14.3.24.3.3張曉峰張曉峰張曉峰曹喬家王子驕5測試與調(diào)試5.1個(gè)人測試5.1.15.1.25.1.35.2組裝與系統(tǒng)測試5.3系統(tǒng)運(yùn)行張曉峰曹喬家王子驕王子驕曹喬家6課題總結(jié)6.1課題評(píng)價(jià)6.2團(tuán)隊(duì)協(xié)作6.3下一步工作6.4個(gè)人設(shè)計(jì)心得6.4.16.4.26.4.3張曉峰張曉峰曹喬家王子驕附錄B課題設(shè)計(jì)文檔(光盤)B-1課程設(shè)計(jì)報(bào)告(電子版) B-2源程序代碼(*.H,*.CPP) B-3工程與可執(zhí)行文件)B-4屏幕演示錄像文件(可選)附錄C用戶操作手冊 C.1運(yùn)行環(huán)境說明 C.2操作說明B-2.源程序代碼#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#defineOK1#defineNULL0#defineERROR0#defineTURE1#defineFALSE0#defineOVERFLOW-2#defineMAXQSIZE100//最大容量#defineMAX3//車庫容量#defineprice0.5//費(fèi)用typedefintStatus;structnow_time{ intmday;inthour;intmin;};//時(shí)間structinformation{intsetnumber;charnum[10];structnow_timereach;structnow_timeleave;}set[MAX*2];//車位信息typedefstruct{ char*base;intfront;intrear;}SqQueue;//便車道typedefstruct{ int*base;int*top;intstacksize;}SqStack;//停車場typedefstructLNode{ struct { intstnumber;charnum[10];structnow_timereach;structnow_timeleave;floatfee;inttotalhour; }data;structLNode*next;}LNode,*LinkList;//保存車位信息voidcopy(char*a,char*b){ inti; for(i=0;(a[i]=b[i])!='\0';i++) {;}}voidCreateList_L(LinkList&L){ L=(LinkList)malloc(sizeof(LNode));L->next=NULL;}StatusListInsert_Link(LinkList&L,inti,intsetnumber){ LNode*p,*s; intj;p=L;j=0;while(p&&j<i-1) { p=p->next;++j; }if(!p||j>i-1) returnERROR;s=(LinkList)malloc(sizeof(LNode));s->data.stnumber=set[setnumber].setnumber;s->data.reach.hour=set[setnumber].reach.hour;s->data.reach.mday=set[setnumber].reach.mday;s->data.reach.min=set[setnumber].reach.min;copy(s->data.num,set[setnumber].num);s->next=p->next;p->next=s;returnOK;}//保存車輛到來StatuslListInsert_Link(LinkList&llist,inti,intlset,inttotalhour,floatfee,intday,inthour,intmin){ LNode*p,*s;intj;p=llist;j=0;while(p&&j<i-1) { p=p->next;++j; } if(!p||j>i-1) returnERROR;s=(LinkList)malloc(sizeof(LNode));s->data.fee=fee;s->data.totalhour=totalhour;s->data.stnumber=lset;s->data.leave.mday=day;s->data.leave.hour=hour;s->data.leave.min=min;copy(s->data.num,set[lset].num);s->next=p->next;p->next=s;returnOK;}//保存車輛離開voidccord(LinkListclist,inti,intsetnumber){ListInsert_Link(clist,i,setnumber);}StatusinitStack1(SqStack&S){inti; S.base=(int*)malloc(MAX*sizeof(int)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=MAX; for(i=1;i<=MAX;i++) { *S.top++=i; }returnOK;}//建立地上車庫StatusinitStack2(SqStack&S){inti; S.base=(int*)malloc(MAX*sizeof(int)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=MAX; for(i=1;i<=MAX;i++) { *S.top++=i; } returnOK;}//建立地下車庫StatusinitQueue(SqQueue&Q){ Q.base=(char*)malloc(100*sizeof(char[10]));if(!Q.base) exit(OVERFLOW); Q.front=Q.rear=0;returnOK;}//建立便車道Statusstack_empty(SqStackS){ if(S.top==S.base) returnOK;elsereturnERROR;}//判斷車位是否滿StatusPush(SqStack&S,inte){ if(S.top-S.base>=S.stacksize) { if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; } *S.top++=e; returnOK;}//入棧StatusPop(SqStack&S,int&e){ if(S.top==S.base) returnERROR; e=*--S.top; returnOK;}//彈棧StatusQueueLength(SqQueueQ){ return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;}Statusw_total(SqQueueQ){returnQueueLength(Q);};//計(jì)算在便車道的車輛總數(shù)StatusEnQueue(SqQueue&Q,inte){ if((Q.rear+1)%MAXQSIZE==Q.front) returnERROR;Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAXQSIZE;returnOK;}Statusenterlane(SqQueue&Q,intwaitenumber){ EnQueue(Q,waitenumber);returnOK;}//進(jìn)入便車道等待voidenterstop(LinkListclist,SqStack&S,charnumber[10],int*come,inti){ inte;*come=*come+1;Pop(S,e);set[e].setnumber=e; copy(set[e].num,number); structtm*newtime;charam_pm[]="AM";time_tlong_time;time(&long_time);newtime=localtime(&long_time);set[e].reach.hour=newtime->tm_hour; set[e].reach.mday=newtime->tm_mday;set[e].reach.min=newtime->tm_min;printf("\n\n************請(qǐng)核對(duì)您的停車信息***************\n");printf("*停車牌號(hào)*:%s\n",set[e].num); if(i==1) printf("*地上車場*:%d\n",set[e].setnumber); if(i==2) printf("*地下車場*:%d\n",set[e].setnumber);printf("*到達(dá)時(shí)間*:%d:%d:%d\n",set[e].reach.mday,set[e].reach.hour,set[e].reach.min);ccord(clist,*come,set[e].setnumber);}//進(jìn)入停車場StatusDeQueue(SqQueue&Q){ if(Q.front==Q.rear) returnERROR; Q.front=(Q.front+1)%MAXQSIZE; returnOK;}StatusEmptyQueue(SqQueueQ){ if(Q.front==Q.rear) returnOK;elsereturnERROR;}//離場Statusleavestop(LinkListllist,LinkListclist,SqStack&S,SqQueue&Q,int*come,int*leave,inti){ charnumber[10];intt,lset;intj=1;inttotalhour;floatfee;printf("***請(qǐng)輸入您的停車位號(hào):"); do { scanf("%d",&lset);getchar(); for(inti=0;i<=MAX;i++) { if(set[lset].num[1]=='#') j=0; } if(j==0) { printf("*****車場并沒有停車*******\n"); returnERROR; } else { if(lset>MAX||lset<1) { printf("*****您輸入有誤,該車號(hào)并不存在!*******\n***請(qǐng)重新輸入您的車位號(hào):\n"); t=1; } else { if(set[lset].num[1]=='#') { printf("***該車位為空,不能進(jìn)行離開操作!***\n***請(qǐng)重新輸入您的車位號(hào):\n"); t=1; } else { structtm*newtime; charam_pm[]="AM"; time_tlong_time; time(&long_time);newtime=localtime(&long_time);totalhour=(newtime->tm_mday-set[lset].reach.mday)*24*60+(newtime->tm_hour-set[lset].reach.hour)*60+(newtime->tm_min-set[lset].reach.min);fee=price*totalhour;printf("***********以下是您本次停車的信息************\n");printf("*停車牌號(hào)*:%s\n",set[lset].num); printf("*停車位號(hào)*:%d\n",set[lset].setnumber);printf("*到達(dá)時(shí)間*:%d:%d:%d\n",set[lset].reach.mday,set[lset].reach.hour,set[lset].reach.min);printf("*離開時(shí)間*:%d:%d:%d\n",newtime->tm_mday,newtime->tm_hour,newtime->tm_min);printf("*停車費(fèi)用*:%f",fee);printf("\n\n\n\t*********謝謝您的光臨,祝您一路平安********!\n\n");printf("\n\n\n\n\t\t\tmention:pressanykeycontinue!");getchar();system("cls");*leave=*leave+1;lListInsert_Link(llist,*leave,lset,totalhour,fee,newtime->tm_mday,newtime->tm_hour,newtime->tm_min);set[lset].num[1]='#'; Push(S,lset); if(!EmptyQueue(Q)) { DeQueue(Q); printf("\n***請(qǐng)停在停車便道的客戶進(jìn)入停車場!***\n"); if(i==1)//判斷車場 { printf("\n***輸入您的車牌號(hào)(例:遼A3475):"); scanf("%s",number); enterstop(clist,S,number,come,1); t=0; } if(i==2) { printf("\n***輸入您的車牌號(hào)(例:遼A3475):"); scanf("%s",number); enterstop(clist,S,number,come,2); t=0; } } else t=0; } } } } while(t==1); returnOK;}voidshowcome(LinkListlist){ LNode*p;p=list->next;while(p) { printf("\n%s\t%d號(hào)\t%d日%d時(shí)%d分",p->data.num,p->data.stnumber,p->data.reach.mday,p->data.reach.hour,p->data.reach.min); p=p->next; }}//入場時(shí)間voidshowleave(LinkListlist){ LNode*p; p=list->next; while(p) { printf("\n%s\t%d號(hào)\t%d日%d時(shí)%d分",p->data.num,p->data.stnumber,p->data.leave.mday,p->data.leave.hour,p->data.leave.min); p=p->next; }}//出場時(shí)間//主函數(shù)voidmain(){ intchoice1,choice2,choice3,wait,ture=1;inti;intcome1=0; intleave2=0; intcome3=0; intleave4=0;int*p1,*p2,*p3,*p4;p1=&come1; p2=&leave2;p3=&come3;p4=&leave4;charnumber[10];SqStackstack_set1;SqStackstack_set2;SqQueuequeue_turn;initStack1(stack_set1);initStack2(stack_set2);initQueue(queue_turn);LinkListllist1,llist2,clist1,clist2;CreateList_L(llist1);CreateList_L(clist1);CreateList_L(llist2);CreateList_L(clist2);for(i=1;i<=MAX+1;i++) { set[i].setnumber=i; set[i].num[1]='#'; }system("color3B");printf("\n\n\n\n\n\n\n\n\n*******************歡迎使用停車場管理系統(tǒng),按任意鍵進(jìn)入主菜單******************");do { getchar(); system("cls"); printf("歡迎使用停車場管理系統(tǒng)\n\n\n"); printf("主菜單\n\n"); printf("*1*汽車登記\n"); printf("*2*汽車離場\n");printf("*3*車場信息\n"); printf("*0*退出系統(tǒng)\n\n"); printf("***請(qǐng)按提示輸入:\n"); scanf("%d",&choice1); switch(choice1) { case1: system("cls");printf("***********************汽車登記******************\n\n\n"); if(!stack_empty(stack_set1))//進(jìn)入停車場 { printf("\n*請(qǐng)輸入您的車牌號(hào)(例:遼A3475):"); scanf("%s",number); enterstop(clist1,stack_set1,number,p1,1); } elseif(!stack_empty(stack_set2)) { printf("\n*請(qǐng)輸入您的車牌號(hào)(例:遼A3475):"); scanf("%s",number); en
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 磁帶錄音機(jī)項(xiàng)目運(yùn)營指導(dǎo)方案
- 真空吸塵器產(chǎn)品供應(yīng)鏈分析
- 沼氣出料機(jī)產(chǎn)品供應(yīng)鏈分析
- 安裝照明設(shè)備行業(yè)市場調(diào)研分析報(bào)告
- 測繪儀器產(chǎn)品供應(yīng)鏈分析
- 電子鎖細(xì)分市場深度研究報(bào)告
- 垃圾處理行業(yè)營銷策略方案
- 工業(yè)用和商用貨盤的出租行業(yè)營銷策略方案
- 西洋參市場分析及投資價(jià)值研究報(bào)告
- 平底小船產(chǎn)品供應(yīng)鏈分析
- GB/T 16739.1-2023汽車維修業(yè)經(jīng)營業(yè)務(wù)條件第1部分:汽車整車維修企業(yè)
- 動(dòng)火監(jiān)護(hù)人培訓(xùn)資料
- 變壓器生產(chǎn)工藝設(shè)計(jì)
- 2023年北京大學(xué)醫(yī)學(xué)部招考聘用模擬預(yù)測(共1000題)筆試備考題庫及答案解析
- 附件5教師思想動(dòng)態(tài)與心理健康狀況摸排表
- 尼古拉伊萬諾維奇布哈林
- shell腳本教程詳細(xì)講解(很好)
- 高中英語新課程標(biāo)準(zhǔn)試題含答案(四套)
- 北人不識(shí)菱北人食菱
- 2023年高考作文備考之議論文解析及范文:兼聽則明
- 【教學(xué)設(shè)計(jì)】大貓What's for breakfast
評(píng)論
0/150
提交評(píng)論