程序設計_停車場管理系統匯總_第1頁
程序設計_停車場管理系統匯總_第2頁
程序設計_停車場管理系統匯總_第3頁
已閱讀5頁,還剩33頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、程序設計報告(2014 / 2015 學年 第1學期)題 目:停車場管理系統專業 組長學號姓名組員學號姓名指導教師 指導單位日期成員分工長 組、 Z7-自心亠司 結 刨和 查 據 昭痕題分 4口 部 報殍 驗 代 弟員 組分 4口 部 報 殍 驗 代 弟員 組析 分 求 b 需 的 要 塊 和 模 容 車 程 才產 tnK- 停1 分 4口 部 報 殍 驗 代 弟評分細則項 分 評秀等 中差守度 態 習 學匕匕 厶冃 功 題 mK1告 報簡短評語日月 名 年評分等級備格 及 不 及 中 爪 良 五 共 級 等 分 評停車場管理系統一、課題容和要求停車場管理是一個計時收費系統,同時也是一個能對車

2、位進行管理的系統,最基本的功能是實現停車、取車、查詢以及修改停車費費率等功能。同時,為了使用的方便和安 全的考慮設計了管理員能對密碼進行修改的功能。在停車的功能中采用了文件流的形式, 對車位、車牌號、車型都進行了保存,以便于查詢功能的實現,除此之外,也是為了能夠 實現在取車模塊中利用輸入的車牌號自動計算出停車的費用。停車位第一個為空的位置, 由程序查詢自動給出車位號,如果車位已滿要給出提示。取車時,需要根據車輛停泊時 間自動計算費用(半小時以半價計算,超出半小時不足一小時按一小時計算)并顯示在屏 幕上,可以隨時根據車牌查詢是否入庫。可以隨時根據車位查詢該位置上的相關信息。本系統對不同車型的費率

3、給出了默認值,管理員可以根據實際需要對費率進行修改。功能要求:用C/C+設計一個程序實現停車場管理系統,要求如下:(1) 管理人員根據口令進入系統;(2) 管理人員有權限對登陸賬號和密碼進行修改;(3) 管理車位信息(車位編號,狀態)和每小時的收費費率;(4) 停車時錄入汽車停泊信息(車牌號,車型,停泊位置,停泊開始時間);如果車位已滿要給出提示;(5) 取車時,根據車牌取,如果沒有給出提示;需要根據車輛停泊時間自動計算費用并顯 示在屏幕上。(6) 管理人員可以根據需要隨時更改每小時的收費費率。、需求分析停車場管理系統的功能框架圖如圖1所示圖1功能框架圖(1) 系統主要包括了管理員登陸、停車操

4、作、取車操作、信息查詢、費率修改這五大模塊,每個模塊都用用相應的函數來實現這些功能。(2) 在管理員登陸模塊中,設置了三次輸入機會,用戶名和密碼事先用文檔存儲,供使 用者進入系統;若管理員連續輸入密碼錯誤超過提示,則系統給出修改密碼或者退出系統 的提示,這些功能在函數名為load in ()的函數中實現。(3) 管理員登陸模塊結束之后便到了系統的主要界面,選擇操作1是停車模塊。在選擇停車操作之后,系統能夠實現“將第一個為空的位置,由程序查詢自動給出車位號,如果 車位已滿要給出提示”這一功能用函數 compare ()和jugement ()共同實現的。進入 停車模塊后,還應選擇不同的車型進行停

5、車,這一過程會調用putcar ()和gettime ()函數,用來給出不同車型的費率和調用停車時的系統時間。(4) 通常選擇了停車操作之后取車和查詢功能才會有意義,所以取車和查詢公共主要是 使用了 campare ()函數,調用strcmp ()字符串比較函數對輸入的車牌號和停車時的 車牌號進行比較,若相同,則返回該車位,達到取車和查詢的作用。(5) 不同的停車場可以根據需要修改每種車型的車輛對應的費率。這個功能在修改費率 的模塊中實現。(6 )根據不同的車型以及其停泊時間收費,間差乘以單價就是最后收費,其中取車時, 需要根據車輛停泊時間自動計算費用(半小時以半價計算,超出半小時不足一小時按

6、一小 時計算)并顯示在屏幕上。這個功能需要調用系統時間,因此在整個程序中包含了頭文件 后(#“ clude<time.h> )利用結構這種數據類型來實現。三、概要設計1.主要結構體為了實現停車場管理系統的停車、取車、查詢、修改功能,主要用一個 while循環, 通過輸入的數字選擇相應的操作。同時為了實現每個模塊的功能,引用一些相應的子函數。 下面是主要結構體的流程圖:魚X KK壘譽治】亠匸 一I 二-I一_K筆旁7T二圖2 主要結構體流程圖2.主要函數流程圖(1 )管理員登陸模塊管理員登陸模塊是用函數load in ()來實現的,在loadin ()函數中對賬號和密碼都 有三次的輸

7、入機會,用變量ai來記錄輸入的次數,當ai>=3時,進入修改密碼的界 面。在修改密碼模塊了,用strcpy ()函數將輸入的字符串adpasswordl賦值給密 碼adpassword (adpassword為全局變量,所以才能起到修改的作用)。修改完成密 碼后,在loadin ()函數中再次調用load in ()函數,這樣在修改密碼后就能重新回到登陸界面進行登陸,大體程序流程圖如下:圖3管理員登陸模塊流程圖鷲、牙忘i=J(2)比較函數compare ()在停車場管理系統的取車、查詢模塊中都需要用到輸入“車牌號判斷停車場中是 否有該車”這個功能,而compare ()函數就是用來實現這

8、個功能的。其大概思路是, 通過輸入的字符串與系統儲存有的字符串進行比較,如果字符串相等就返回一個0,如果不相等就返回非0,而通過0和非0的控制,便能實現判斷的功能,其流程圖如 下所示:TT貽BtrettLp < S 1 9 3 1 > 何l釈b匕機足西砂贈冋mw艮寸旦白勺車血寸9EiH:q-圖4 字符串比較函數流程圖(3)搜索空車位函數jugement ()對于停車操作來說,需要在所有停車位中找到第一個空車位,并返回這個車位。在該系統中,這個功能由函數jugement ()來實現。設int型變量j為車位編號,利 用數字positionj的值是否為1,來判斷是車位是否為空(這里是將

9、1視為有車,0 為無車)。絡心圖5搜索空車位函數流程圖在這個函數中還要注意:在用 while循環對每個車位進行逐個判斷的時候,j 一定要小于停車場的總車位。除此之外,返回第一個空車位表示將要在這個車位進行停車,因 此要重新將positionj的值置為1。四、源程序代碼#i nclude <iostream>#in elude <stri ng>#in elude <time.h>#in clude<fstream>using n amespace std;class carpublic:char no10;int pos;double fee;v

10、oid putcar();void takecar();void cha ngefee();class Timepublic: int hour;int min;void getime();;char adpassword10="123456"char adn ame10="wcx"int i,poi;in t positio n50=0;全局變量car cari n 50;Time catime50;double Fee仁6.0, Fee2=5.0, Fee3=4.0 , Fee4=3.0 ;int jugeme nt();int compare();

11、void search_ no();void search_positi on();void load in();void mai n()/ 管 理 員 登 陸 模loadi n();int k=0;cout<<""<<e ndl;cout«"請選擇:"<<"nnt-<v"nnt停車操作"<<"nnt2.取車操作"<<"nnt3.查詢信息"<<"nnt4.修改車費"<<

12、;"nnt5.退出"<<"nnt-/登陸模塊結束ofstream outfile(” 車輛信息.txt",ios:app); if(! outfile)cerr«"ope n error!"<<e ndl;exit(1);while(ci n> >k)if(k=1)i=jugement(); 通過jugement() 函數返回第一個空的車位 icout«"" <<e ndl;cout«"t請輸入車牌號:";cin>

13、;>carini.no; /用戶輸入停在第i個車位的車牌號cari ni.putcar();cout«"請選擇:"<<"nnt-II<<"nnt停車操作"<<"nnt2.取車操作"<<"nnt3.查詢信息"<<"nnt4.修改車費"<<"nnt5.退出"<<"nntnn"stri ng time1;time_t t;time(&t);tim

14、e1=ctime(& t);cout<<time1;/ 導入系統時間outfile«carini.no<<" "<<time1<<endl;con ti nue;if(k=2)poi=compare();carin poi.takecar();cout«"請選擇:"vv"nnt<v"nnt.停車操作"<<"nnt2.取車操作"<<"nnt查詢信息"<<"nnt

15、1.修改車費"<<"nnt.退出"<<"nntnn"con ti nue;if(k=3)int x;while(1)cout«"請輸入數子選擇需要的操作:"<<e ndl;cout<<""<<e ndl;cout«"nnt"<<"nnt1查詢車牌號"<<"nnt2.查詢車位"<<"nnt3.退出查詢"<&l

16、t;"nnt-nn"cin> >x;if(x=1)search_no();break;else if(x=2)search_positi on();break;else if(x=3)break;elsecout«"t選擇錯誤,請重新選擇:"cout«"請選擇:"<<"nnt-<<"nnt停車操作<<"nnt2.取車操作<<"nnt3.查詢信息vv"nnt0.修改車費II<<"nnt&

17、#171;5.退出"<<"nntnn"outfile.close();if(k=4)cari ni.cha ngefee();con ti nue;if(k=5)exit(0);/loadin()void load in()char an 10, ap10;int ai=0;"vve ndl;coutvv" 歡迎使用XX停車場管理系統while(1)cout<<""<<e ndl;coutvv"請輸入管理員用戶名:";cin»an;if(strcmp(ad n

18、ame,a n)coutvv"此用戶名不存在!n"ai+;if(ai=3)exit(0);con ti nue;elsecoutvv"請輸入密碼:"cin> >ap;if(!strcmp(adpassword,ap)break; else coutvv"密碼錯誤!n"ai+;if(ai=3)cout<<""<<e ndl;coutvv"密碼連續輸入錯誤3次,請重新選擇操作:cout«""<<e ndl;coutvv".

19、修改密碼"<<endl;coutvv" >.退出系統"<<endl;coutvv""vve ndl;int k;while(ci n> >k)if(k=1)coutvv"請輸入新的密碼,密碼不超過 10位數:char adpassword110;cin> >adpassword1;strcpy(adpassword,adpassword1);coutvv"你的新密碼是:"vvendl;coutvvadpasswordvve ndl;"vve ndl;&

20、quot;vve ndl;load in();break;if(k=2)exit(O);if(k!=1 &&k!=2)coutvv"輸入錯誤,請重新輸入:return;con ti nue;coutvv"登陸成功!" <<endl;jugeme nt()/int jugeme nt() /判斷出第一個空的車位 int j=0;while(positio nj=1 &&j<50)j+;cout«"共有50個停車位,當前可使用停車位:"v<50-jv<endl;cout<

21、v""v<e ndl;coutvv"本停車場收費標準如下:"<<e ndl;cout<<""<<e ndl;coutvv"貨車每小時"vvFeelvv" 元,客車每小時"<<Fee2<<"元,轎車每小時"<<Fee3<<"元,其它車輛每小時"wFeedw"元。"<<endl;coutvv" 注:停車時間小于30分鐘的按0.5個

22、小時計算,超過30分鐘但不足1小時 的按1個小時收費"<<endl;if(j<50)positionj=1;/當找到第一個空車位時(即 position=0時,并且滿足車位號j<100的情況下),然后選擇該車位停車,/停車后將position重新置為1,表示該車位現在已經停車了。(在這種情況下表示找到空車位后就必須停在這個車位上)return j;/compare。int compare。char ch10;cout«"t請輸入車牌號:";cin> >ch;for(int k=0;k<50;k+)if(!strc

23、mp(ch,carink.no)/ 將輸入的車牌號與停車場上的每個位子的車輛進行比較(包括那些沒停車的車位)if(positioncarink.pos-1=1)/ 在 car:putcar()函數中因為要輸出車位號,所以將對象數組 carink.pos 變為了 carink.pos+1,/于是用數組position找已經停車的車位時要將其處理為carink.pos-1return (cari n k.pos-1);break;if(k=50)return k;/car:putcar()void car:putcar()int t; /車輛類型的變量while(1)cout«"

24、;請選擇車型:"<<e ndl;cout<<""<<e ndl;cout«"nnt<<"nnt貨車請輸入1"<<"nnt客車請輸入2"<<"nnt轎車請輸入3"<<"nnt其他車輛請輸入4<<"nnt-nn"cin> >t;if(t=1)cari ni.fee=Fee1;break;else if(t=2)cari ni.fee=Fee2;break

25、;else if(t=3)cari ni.fee=Fee3;break;else if(t=4)carin i.fee=Fee4;break;n"coutvv"輸入錯誤!請重新輸入: if(i=50) cout«"對不起,車位已滿! n"carini.pos=i+1; / 自動輸出車位號,數組里 0表示第一位,而車位的第一位是 1,所以 carini.pos=i+1;cout<v"nnt"cout<v"nnt已成功選擇車位!車位號是:"<<carini.pos<<end

26、l;catimei.getime();cout<<"nnt現在時間是:"v<catimei.hourvv":"vvcatimei.min«endl;cout<<"nnt"<<e ndl;/car:takecar()void car:takecar()int hour1, min1;double charge;if(poi<50)通過取車操作后,重新將該車位設定為空車位positi on poi=0;/hour仁catimepoi.hour;mi n1=catimepoi.mi

27、n;catimepoi.getime();hour仁catimepoi.hour-hour1;mi n1=catimepoi.mi n-mi n1;if(min1<30) 計算出停車時間,不足30分鐘的按30分鐘計算charge=cari n poi.fee*hour1+cari n poi.fee*0.5;elsecharge=cari n poi.fee*hour1+cari n poi.fee;cout<<"t 車費為:"vvchargevv" 元.n"/計算出車費輸出elsecout«"t無此車!n"

28、;/Time:getime()void Time:getime()struct tm *n ewtime;time_t Ion g_time;time_t 用來定義長整型數 Ion g_time time( &lon g_time );n ewtime = localtime( &lon g_time );hour= newtime->tm_hour;min=n ewtime->tm_mi n;/search_no()void search_ no()int poi=compare();if(poi<50)cout<<"t此車已入庫,車位

29、為:"<<poi+1<<e ndl;elsecoutvv"t此車沒有入庫。n"/根據車牌號查詢是否入庫/search_positon()void search_positi on()int loc;cout«" " <<e ndl;coutvv"t車位號是:"/ 根據車位查詢車位狀態cin>> loc;if(positi on loc-1=1)cout<<"t 車牌號:"<<carinloc-1.no«endl;c

30、out<<"t 停車時間:"<<catimeloc-1.hour<<":"<<catimeloc-1.min<<endl;停車直到現在的時間elsecout<<"t此車位無車!"/ void car:cha ngefee()cout«"請選擇修改的車型:"cout<<"nnt<<"nnt修改貨車費用請輸入1"<<"nnt修改客車費用請輸入2"<

31、<"nnt修改轎車費用請輸入3"<<"nnt修改其他費用請輸入4"<<"nnt退出修改請輸入5"nn"vv"nntint type;cin> >type;while(1)if(type=1)double feel;coutvv"每小時貨車費用:"cin>> feel;Fee仁feel;cout«"車費修改成功!"<<endl; break;else if(type=2)double fee2;cout

32、«"每小時客車費用:"cin>> fee2;Fee2=fee2;cout«"車費修改成功!"<<endl;break;else if(type=3)double fee3;coutvv"每小時轎車費用:"cin>> fee3;Fee3=fee3;cout«"車費修改成功!"<<endl; break;else if(type=4)double fee4;coutvv"每小時轎車費用:"cin>> fee4;

33、Fee4=fee4;coutvv"車費修改成功!"<<endl;break;else if(type=5)break;coutvv"請選擇:"IIvv"nnt<<"nnt.停車操作"<<"nnt2.取車操作"<<"nntB.查詢信息"<<"nnt1.修改車費"<<"nnt.退 出"<<"nntnn"程 序 結 束/五、測試數據及其結果分析(1)

34、 修改密碼時密碼長度超過限制引起的錯誤匕:停車場管理索統驗牧稈序停車場管理系猟Debug'停車場管理系銃戲請輸入新的密碼.密碼不超過述位數;你的新密碼昱;歡迎使用囂停車場管理系絡 常輸入管理貫用戶名呃X 業用戶名不存在*請輸入管理員用戶名:圖6修改密碼時密碼長度超過限制的錯誤登陸界面因為修改密碼的時候字符串長度設置為 10個字符,當密碼長度超過10位就會引起部 錯誤(字符 WCX '為正確的登陸賬號)。如果設置一個密碼的字符長度判斷功能的函數,能讓輸入超過十位后重新輸入,就可以解決這個問題(2) 賬號輸入錯誤引起的不能正常退出圖7賬號輸入錯誤引起的不能正常退出的界面圖賬號連續輸

35、入錯誤后卻進入了系統,之所以出現這個原因是因為在判斷賬號的錯誤 次數的循環中沒有正常退出,代碼如下:if(strcmp(adname,an) cout«"此用戶名不存在!n"ai+;if(ai=3)return ; /在這里只要把return改為exit ( 0)后就能得到正確結果 con ti nu e;修改得到的正確結果如下圖所示: 一一歡迎使用刖停車坂管理系統輸人管理員用戶名3敘常輸入管理員用戶名"沁 丘用戶暑不存缶冃戶名不存在*_ss any key to con七inuiEG ;停車場管理系統驗收程序停車場置理系統Xb ug停車場管理系統.ex

36、e圖8 賬號輸入錯誤正常退出系統的界面圖(3) 選擇停車操作后顯示的停車費率盤點矯棘鬻巾融按個小時收費共有個停車位,當前可使坤停車位:58 本停車場收費標準如下汪圖9修改停車費率前信息顯示圖剛進入系統是若沒有選擇修改車費的操作,此時顯示的費率則是系統默認的,這是由于程序里將代表四種車型的費率的變量Feel、Fee2、Fee3、Fee4的設為了全局并且賦了初值。修改了車費費率的圖如下:晁個停車仏當前可使用停車位:弭本停車場農肺滋嚇護議黯肩粛1i擁嘲譎暨僵翳翩隸盟辭按1個阿塢圖10 修改停車費率后信息顯示圖不足的是必須是選擇了停車操作之后車位的信息和費率才能顯示出來,實用性差了一些。六、調試過程中

37、的問題(1) .字符串比較函數strcmp ()的使用在C/C+語言中,常用strcmp ()函數來比較兩個字符串,一般形式為strcmp(字符串S1,字符串S2)。當S仁S2時,返回值為0,否則為非零。在管理員用戶登 錄模塊處理輸入的賬號和密碼時就使用了該功能:if(strcmp(adname,an)/an 為用戶輸入的賬號coutvv"此用戶名不存在!n"這里在設計的時候比較容易出錯,因為若兩個字符串不相等,則strcmp ()返回的值是非零,在if條件下為真,所以才會輸出用戶名不存在,在看程序的時候很 容易會看成是兩個字符串相等后輸出用戶名不存在。在運用string類

38、提供的strcmp ( s1,s2)的函數時還需要參數s1和s2的類型, 若s1和s2的類型都char的時候,則編譯器不會報錯,若 s1和s2的類型都為 string的時候編譯器便會提示類型錯誤,這時候應修改為strcmp (s1.c_strc ,s2.c_strc )這樣才能對strcmp ()函數的正確使用(2) continue 和 break 的使用在while和for的循環中,continue和break是非常常見的用來控制循環的語 句,continue和break的使用不相同而且還很容易出錯。有一種最常見的錯誤 便是非法使用,比如在一些非 while、for、if這些循環或者判斷的

39、語句下使用, 編譯器在編譯的時候就會給出“ illegal break ”或者“ illegal continue ”這 樣的報錯,這是比較容易修改的錯誤的;還有一種是比較難發現的錯誤,就是 在很多循環嵌套的時候經常會發現不知道程序跳到哪一步了。比如在“管理員 登陸”模塊的時候就出現過修改密碼后一直停在輸入賬號和密碼這個這里,在 load in ()的后面加入break語句后就能解決問題了。而這就需要用visual C+ 自帶的調試器進行調試,去發現錯誤。調試的一般思路是在你覺得最有可能出錯的地方,或者你不確定循環是不是跳 到的地方按F9設置斷言,然后按F5進行局部調試,等到程序運行到斷言的位 置后再一步一步按F10進行判斷,就能發現哪里出錯了,這是比較可靠地判斷 出錯誤的方法。(3) Car類設計的作用在停車場管理系統中,多次調用了同一輛車的車牌號、停車費用、車位,因此為了編程的方便,將車牌號、費用和車位這些變量設為類car的公有成員。同時還申明了 car類的對象數組carin為全局變量,數組的大小表示停車位的多少, 每個停車位用全局變量i來表示。這樣做的好處是使函數書寫方便,比如說,當 要用到第i個車位的車牌號,只要用carini.no就可

溫馨提示

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

評論

0/150

提交評論