數(shù)據(jù)結構課程設計_停車場管理系統(tǒng)_c++_第1頁
數(shù)據(jù)結構課程設計_停車場管理系統(tǒng)_c++_第2頁
數(shù)據(jù)結構課程設計_停車場管理系統(tǒng)_c++_第3頁
數(shù)據(jù)結構課程設計_停車場管理系統(tǒng)_c++_第4頁
數(shù)據(jù)結構課程設計_停車場管理系統(tǒng)_c++_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、內(nèi)蒙古科技大學課程設計論文內(nèi)蒙古科技大學數(shù)據(jù)結構課 程 設 計題目 停車場管理器設計 院 系 信息工程學院 專 業(yè) 計算機科學與技術 姓 名 馬小強 學 號 1167111103 指 導 教 師 康懿 2013年7月5日內(nèi)蒙古科技大學課程設計任務書課程名稱數(shù)據(jù)結構課程設計設計題目停車場管理器設計指導教師康懿時間2013.6.242013.7.5一、教學要求1. 掌握數(shù)據(jù)結構與算法的設計方法,具備初步的獨立分析和設計能力2. 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設計、程序編碼、測試等基本方法和技能3. 提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力4. 訓練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)

2、范進行軟件開發(fā),培養(yǎng)軟件工作者所應具備的科學的工作方法和作風二、設計資料及參數(shù)每個學生在教師提供的課程設計題目中任意選擇一題,獨立完成,題目選定后不可更換。停車場管理器設計以結構體類型表示停車時間和車輛信息,在此基礎上借助棧完成對車輛的入場和出場操作,借助隊列完成輔助停車場便道,即存放等待入場車輛或輔助車場中的某輛車出場。要求設計類(或類模板)來描述棧、隊列、停車場及其操作,包含必要的構造函數(shù)和析構函數(shù),以及其他能夠完成如下功能的成員函數(shù):v 壓棧、退棧v 入隊列、出隊列v 車輛到場(有車位即入場,否則入便道等待)、車輛出場(任意位置車輛均可出場)v 查詢車輛信息、輸出停車場(包括停車位和便道

3、的車輛) 并設計主函數(shù)測試該類。三、設計要求及成果1. 分析課程設計題目的要求2. 寫出詳細設計說明3. 編寫程序代碼,調(diào)試程序使其能正確運行4. 設計完成的軟件要便于操作和使用5. 設計完成后提交課程設計報告四、進度安排資料查閱與討論(1天)系統(tǒng)分析(2天)系統(tǒng)的開發(fā)與測試(5天)編寫課程設計說明書和驗收(2天)五、評分標準1. 根據(jù)平時上機考勤、表現(xiàn)和進度,教師將每天點名和檢查2. 根據(jù)課程設計完成情況,必須有可運行的軟件。3. 根據(jù)課程設計報告的質(zhì)量,如有雷同,則所有雷同的所有人均判為不及格。4. 根據(jù)答辯的情況,應能夠以清晰的思路和準確、簡練的語言敘述自己的設計和回答教師的提問六、建議

4、參考資料1數(shù)據(jù)結構 (C語言版)嚴蔚敏、吳偉民 主編 清華大學出版社 2004.112數(shù)據(jù)結構課程設計案例精編(用C/C+描述),李建學 等 編著,清華大學出版社 2007.23.數(shù)據(jù)結構:用面向對象方法與C+語言描述,殷人昆 主編, 清華大學出版社 2007.6目錄目錄2第一章、需求分析3第一節(jié)、問題描述3第二節(jié)、基本要求3第二章、概要設計4第一節(jié)、設計思想4第二節(jié)、數(shù)據(jù)結構4第三節(jié)、程序模塊5第三章、詳細設計8第一節(jié)、數(shù)據(jù)類型8第二節(jié)、主要操作9第四章、測試與分析14第一節(jié)、調(diào)試過程中的主要問題14第二節(jié)、測試結果的分析與討論14第五章、用戶使用說明18第六章、總結18第七章、發(fā)

5、現(xiàn)問題及錯誤分析20第一節(jié)、邏輯錯誤函數(shù)20第二節(jié)、修改前得代碼20第三節(jié)、錯誤描述20第四節(jié)、解決方案如下22第八章、參考文獻23附錄代碼:24第一章、需求分析根據(jù)題目要求,充分地分析和理解問題,描述系統(tǒng)的功能要求,明確問題要求做什么?以及限制條件是什么?第一節(jié)、問題描述隨著我國人民生活水平提高和汽車工業(yè)的高速發(fā)展越來越多的家庭擁有了汽車,但受到土地的限制,所以采用立體停車場是解決停車難的必然出路。立體停車場占地少,容量大利用效率高;泊車與取車全自動化,省時省力,安全防盜。本文主要以兩層停車場為例,設計一能完成存車與取車的停車場系統(tǒng)。有一個兩層的停車場, 每層有6個車位, 

6、;當?shù)谝粚榆囃M后才允許使用第二層. ( 停車場可用一個二維數(shù)組實現(xiàn), 每個數(shù)組元素存放一個車牌號 ) 每輛車的信息包括車牌號、 層號、 車位號、停車時間共4項, 其中停車時間按分鐘計算 。假設停車場初始狀態(tài)為第一層已經(jīng)停有4輛車, 其車位號依次為14 , 停車時間依次為20, 15, 10 , 5 . 即先將這四輛車的信息存入文件”car.dat”中( 數(shù)組的對應元素也要進行賦值 ) 。  停車

7、操作:當一輛車進入停車場時, 先輸入其車牌號, 再為它分配一個層號和一個車位號, 停車時間設為5 , 最后將新停入的汽車的信息添加文件”car.dat”中, 并將在此之前的所有車的停車時間加5。收費管理(取車): 當有車離開時, 輸入其車牌號, 先按其停車時間計算費用, 每5分鐘0.2元. (停車費用可設置一個變量進行保存), 同時從文件”car.dat”中刪除該車的信息, 并將該車對應的車位設置為可使用狀態(tài)(即二維數(shù)組對應元素清零). 按用戶的選擇來判斷

8、是否要輸出停車收費的總計。第二節(jié)、基本要求輸入的形式和輸入值的范圍程序以車牌號作為車主的身份驗證,以真實的汽車車牌號為準,當取車或停車時,需輸入車牌號,輸入字段長7位。輸出的形式用戶:當車主存車時,要求顯示空閑的車位,方便車主在層內(nèi)選擇(層間要滿足,如果第一層有空則必須停在第一層)。當車主取車時,可以根據(jù)客戶選擇,決定是否輸出憑據(jù)。管理員:能夠查詢?nèi)寇囕v的信息。程序所能達到的功能用戶存車:包括查找空位,選擇車位;用戶取車:包括出車,顯示憑據(jù)。更改停車場的狀態(tài)。停車場管理員:初始化停車場,查詢所有車的停車信息(歷史停車信息),進行一定的查詢功能。第二章、概要設計第一節(jié)、設計思想本停車場有兩層,

9、 每層有6個車位, 所以 停車場可用一個二維數(shù)組實現(xiàn),用來描述現(xiàn)停汽車的信息。 每輛車用一結構體表示,包括車牌號、 層號、 車位號、停車時間和停車標志位(標志是否停車)。當車入庫時,將更改二維數(shù)組的信息,當車出庫時,將信息寫入car.dat中。再次進入該系統(tǒng)時,還用這個二維數(shù)組,來接受car.dat數(shù)據(jù)的讀入,便于用戶以后的操作,防止停車信息的流失。此外,由于需要顯示所有汽車的停車信息,所以我們又加了一個顧客結構體,一個顧客鏈表,當存車時,新建用戶節(jié)點,并使用頭插法,插于鏈表(便于取車時查到用戶,補充完整用戶的信息),填寫用戶的相關信

10、息(車牌號,層號,車位號,車入庫時刻)。當出庫時,查找相應節(jié)點,補充完整用戶信息,包括(用戶留言,停車時間總計,花費)。當退出系統(tǒng)后,將已出庫的汽車的車主信息,寫入歷史文件list.dat中,便于管理員的查詢。將還未取走車的車主的信息存入臨時文件temp.dat中,防止系統(tǒng)關閉后數(shù)據(jù)信息的丟失,車主取車時找不到車。第二節(jié)、數(shù)據(jù)結構結構體Car,保存每個車位的停車信息。結構體Snode ,保存每個客戶的信息。結構體User,保存管理員信息。結構體Date,保存時間。數(shù)組Cars,保存整個停車狀況。鏈表CustList,保存所有客戶的信息,包括車已取走,和車未取走的。第三節(jié)、程序模塊(1)此停車場

11、管理系統(tǒng),主要分為以下若干模塊:首先定義用來模擬停車的數(shù)組,用來保存顧客信息的鏈表,保存管理員信息的結構以及全局變量,然后編寫主函數(shù),在此主函數(shù)中實現(xiàn)對其它各個模塊的調(diào)用。在主函數(shù)中首先調(diào)用option()函數(shù),出現(xiàn)歡迎用戶使用的界面,然后提示用戶進入此停車場管理系統(tǒng)后,再出現(xiàn)一個供用戶選擇的主界面(包括顧客界面和停車場管理員管理界面)。當用戶選擇顧客界面時,跳入到顧客界面,再次界面,用戶可以選擇存車、取車及返回主頁面。在用戶的選擇過程中,程序又分別存車,取車函數(shù)調(diào)用以及退出程序這三個函數(shù)模塊。其中,當存車時,調(diào)用了顯示空閑車位狀態(tài)的信息函數(shù),并調(diào)用了保存car.dat的函數(shù);當取車時,調(diào)用顯

12、示本次停車情況以及消費金額的函數(shù), 并調(diào)用了保存car.dat的函數(shù)。最后,在主界面選擇“退出”,保存歷史文件list.dat和臨時文件temp.dat。當用戶選擇車管系統(tǒng)時,調(diào)用管理員身份驗證函數(shù),從而跳入車管界面,然后相應的功能函數(shù),實現(xiàn)查詢所有停車信息。(2)在以上各個模塊中,出現(xiàn)的調(diào)用的函數(shù)為:/ 客 戶 void Customer(Car carsFLOORPNUMBER);void CustomerNote(char note100,CustList *cl);/存車int Enterpark(Car carsFLOORPNUMBER,char *license,int &

13、floor,int &pnumber);void GetDate(Date &date);bool IsFull(Car carsFLOORPNUMBER);bool IsSame(Car carsFLOORPNUMBER,char *license);/取車int CarOutMenu(char license,int &floor,int &pnumber,int &ptime,float &cost,char note100);bool IsEmpty(Car carsFLOORPNUMBER);void Print(char licens

14、e,int floor,int pnumber,int ptime,float &cost);void Leavepark(Car carsFLOORPNUMBER,char license,int &floor,int &pnumber,int &ptime,char note100);/-后臺管理-void Manage(Car carsFLOORPNUMBER); /保存到car.datvoid Savecars(Car carsFLOORPNUMBER);void FourCarIn(Car CarsFLOORPNUMBER); /初始停車場int Us

15、ertestAdd();/管理員身份驗證void Load(Car carsFLOORPNUMBER); /加載文件void Loadfile(Car carsFLOORPNUMBER,char license8,int floor,int pnumber,int ptime,int empty);void Showcars(Car carsFLOORPNUMBER,CustList *cl); /顯示停車場現(xiàn)存車void Message(CustList *clr); /顯示客戶信息void News();/發(fā)布消息void Income(CustList *cl,char day,floa

16、t &amount); /一些查詢void CheckOneCar(CustList *clr,char *license);/后臺中關于單鏈表的void InitCustList(CustList *&cl);void InsertToFirst(CustList *cl,char *license,int floor,int pnumber,Date date);void InsertToLst(CustList *cl,char *license,int floor,int pnumber,int ptime,float cost,Date date);void Sear

17、chCust(CustList *&cl,char *license,float cost,int ptimecount,char note);void SaveListTemp(CustList *cl);/保存到temp.datvoid SaveList(CustList *cl); /保存到list.datvoid DeleteAll(CustList *cl);void ReadFromList(CustList *cl);void LoadList(CustList *clr);void DeleteByNote(CustList *cl);(3)各模塊之間的調(diào)用關系以及算法

18、設計下圖是個模塊之間的調(diào)用關系(如圖2-1):退出停車場管理員界面顯示憑據(jù)客戶留言返回主頁輸入車牌號退出退出顯示車位,客戶選擇車牌有效輸入車牌號退出一個客戶每天收入客戶信息車輛信息初始停車場返回主頁存車界面取車界面客戶界面進入主頁面否是滿注:在取、存操作后,會自動保存信息到car.dat中。在每次退出系統(tǒng)時,會保存list.dat和temp.dat。圖2-1模塊調(diào)用關系第三章、詳細設計實現(xiàn)概要設計中定義的所有數(shù)據(jù)類型,對主要操作寫出實現(xiàn)算法,對主程序和其他模塊寫出算法,寫出函數(shù)的調(diào)用關系。第一節(jié)、數(shù)據(jù)類型結構體Car,保存每個車位的停車信息。struct Carchar license8;in

19、t floor;int pnumber;int ptime;int empty;/標志位,有車為1,無車為0;結構體Snode ,保存每個客戶的信息。struct Snodechar license8;/車牌號Date date;/停車的時刻int floor;int pnumber;int ptimecount;/本次停車總時間float cost;char note100;/顧客留言Snode *next;結構體User,保存管理員信息。struct Userchar id10;char name10;char password10;結構體Date,保存時間。struct Datechar

20、 day11;char shike9;char weekday10;數(shù)組Cars,保存整個停車狀況。Car CarsFLOORPNUMBER;鏈表,保存所有客戶的信息,包括車已取走,和車未取走的。typedef struct Snode CustList;第二節(jié)、主要操作(1)存車:int Enterpark(Car carsFLOORPNUMBER,char *license,int &floor,int &pnumber)/輸入車牌號,判斷車牌號的有效性cout<<"請輸入車牌號:"char licen8;cin>>licen;w

21、hile(!licen)|(strlen(licen)!=7)cout<<"輸入有誤!請重新輸入車牌號:"cin>>licen;/查看是否有重復while(1)if(IsSame(cars,licen)=1)cout<<"已經(jīng)存在這輛車,請重新輸入:"<<endl;cin>>licen;else break;/判斷車場是否已經(jīng)滿了/查看是否有空位,并顯示。便于客戶選擇int i,j;if(IsFull(cars)=1)cout<<"已經(jīng)沒有空車位了,謝謝惠顧!正在跳轉到顧客

22、界面。"<<endl;return 0;int sign=1;/sign 標志第幾層有空位0表一,1表二cout<<"您可以選擇的車位"<<endl;cout<<"-"<<endl;cout.setf(ios:left);cout.width(8);cout<<"樓層"cout.width(8);cout<<"車位號"cout<<endl;for(i=0;i<FLOOR;i+)if(sign=0) bre

23、ak;for(j=0;j<PNUMBER;j+) if(carsij.empty=0)&&(i=0)sign=0;cout.setf(ios:left);cout.width(8);cout<<i+1;cout.width(8);cout<<j+1<<endl;if(j=PNUMBER-1) break;else if(carsij.empty=0)&&(i=1)cout.setf(ios:left);cout.width(8);cout<<i+1;cout.width(8);cout<<j+1&

24、lt;<endl;cout<<"-"<<endl;int temf;cout<<"請輸入車位號:"cin>>temf;while(1)if(carssigntemf-1.empty=0)&&(temf>=1&&temf<=6)/修改一個車位的信息carssigntemf-1.empty=1;floor=carssigntemf-1.floor=sign+1;pnumber=carssigntemf-1.pnumber=temf;strcpy(carssign

25、temf-1.license,licen);strcpy(license,licen);carssigntemf-1.ptime=0;/修改整個停車場的信息for(i=0;i<FLOOR;i+)for(j=0;j<PNUMBER;j+)if(carsij.empty=1)carsij.ptime+=5;break;else cout<<"輸入有誤!請輸入車位號"<<endl;cin>>temf;return 1;(2)取車:void Leavepark(Car carsFLOORPNUMBER,char license,int

26、 &floor,int &pnumber,int &ptime,char note100)/判斷車位是否已空if(IsEmpty(cars)=1) cout<<"停車場已沒有車停放!請確定您是否停車。"<<endl;return;/查找車位int sign=1;/標志位,車庫有該車為1,沒有賦值為零,初始值為0int i,j;while(sign)for(i=0;i<FLOOR;i+)for(j=0;j<PNUMBER;j+)if(strcmp(carsij.license,license)=0)sign=0;fl

27、oor=i;pnumber=j;ptime=carsij.ptime;if(sign)cout<<"您剛才輸入的車牌號不存在!"<<endl;cout<<"請重新輸入:"cin>>license;if(sign=0) cout<<"車已找到,請稍等。"<<endl;strcpy(note,"0000000000");floor+=1;pnumber+=1;/system ("cls");/延時for(i=0;i<100

28、000000;i+);/車出庫,將車位空出carsfloor-1pnumber-1.floor =0;carsfloor-1pnumber-1.pnumber =0;carsfloor-1pnumber-1.ptime=0;carsfloor-1pnumber-1.empty=0;strcpy(carsfloor-1pnumber-1.license," ");/由于floor,pnumber與實際的二位數(shù)組有區(qū)別,加1第四章、測試與分析進行系統(tǒng)測試,輸出測試結果。測試數(shù)據(jù)應該全面、完整,并對測試結果進行分析。第一節(jié)、調(diào)試過程中的主要問題由于此停車場管理系統(tǒng)是分模塊設計的,

29、而且在程序的實現(xiàn)過程中又使用了清屏函數(shù),所以,運行時用戶選擇任務并且執(zhí)行完任務后,又會回到供用戶選擇功能的主界面,因此整個程序從整體上來講結構清晰,使用方便。本程序的調(diào)試運行,總體上情況良好,但中間也出現(xiàn)了一些小問題。其中比較有代表性的主要問題有:第二節(jié)、測試結果的分析與討論 主界面(如圖4-1)圖4-1系統(tǒng)主界面 客戶界面(如圖4-2)圖4-2客戶界面 存車(如圖4-3)圖4-3存車界面 取車(如圖4-4)圖4-4取車界面 管理員界面(如圖4-5)圖4-5管理員界面第五章、用戶使用說明1、 進入主界面2、 選擇:(1)客戶界面; (2)停車場管理員界面; (3)退出;3、進入客戶界面(1)、

30、停車,填寫車牌號等信息然后返回;(2)、取車,輸入車牌號和自己的信息,出示憑據(jù),可以進行評價,然后返回主頁;4、進入停車場管理員界面(1)、查看停車場初始化信息;(2)、選擇車輛,查看它的詳細信息;(3)、進一步查看客戶的信息;(4)、清點一天的收入;(5)、返回主頁,退出;第六章、總結在這次的課程設計中不僅檢驗了我所學習的知識,也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。在設計過程中,和同學們相互探討,相互學習。我學會了運籌帷幄,學會了寬容,學會了理解,也學會了做人與處世,這次課程設計對我來說受益良多。課程設計是我們專業(yè)課程知識綜合應用的實踐訓練,這是我們

31、邁向社會,從事職業(yè)工作前一個必不少的過程“千里之行始于足下”通過這次課程設計,我深深體會到這句千古名言的真正含義我今天認真的進行課程設計,學會腳踏實地邁開這一步,就是為明天能穩(wěn)健地在社會大潮中奔跑打下堅實的基礎。我這次設計的科目是數(shù)據(jù)結。數(shù)據(jù)結構,是一門研究非數(shù)值計算的程序設計問題中計算機的操作對象(數(shù)據(jù)元素)以及它們之間的關系和運算等的學科,而且確保經(jīng)過這些運算所得到的新結構仍然是原來的結構類型。作為一門獨立的課程在國外是從1968年才開始設立的。1968年美國唐歐克努特教授開創(chuàng)了數(shù)據(jù)結構的最初體系,他所著的計算機程序設計技巧第一卷基本算法是第一本較系統(tǒng)地闡述數(shù)據(jù)的邏輯結構和存儲結構及其操作

32、的著作“數(shù)據(jù)結構”在計算機科學中是一門綜合性的專業(yè)基礎課。數(shù)據(jù)結構是介于數(shù)學、計算機硬件和計算機軟件三者之間的一門核心課程。數(shù)據(jù)結構這一門課的內(nèi)容不僅是一般程序設計(特別是非數(shù)值性程序設計)的基礎,而且是設計和實現(xiàn)編譯程序、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)及其他系統(tǒng)程序的重要基礎。一、積累了寶貴的經(jīng)驗我這次課程設計代碼中主要使用了鏈表的循環(huán)和遍歷這兩中操作。循環(huán)鏈表(Circular Linked List)是單鏈表的另一種形式,它是一個首尾相接的鏈表。其特點是將單鏈表最后一個結點的指針域由NULL改為指向頭結點或線性表中的第一個結點,就得到了單鏈形式的循環(huán)鏈表,并稱為循環(huán)單鏈表。類似地,還有多重鏈的循環(huán)

33、鏈表。在循環(huán)單鏈表中,表中所有結點被鏈在一個環(huán)上,多重循環(huán)鏈表則是將表中的結點鏈在多個環(huán)上。為了使某些操作實現(xiàn)起來方便,在循環(huán)單鏈表中也可設置一個頭結點。這樣,空循環(huán)鏈表僅由一個自成循環(huán)的頭結點表示。所謂遍歷(Traversal),是指沿著某條搜索路線,依次對樹中每個結點均做一次且僅做一次訪問。訪問結點所做的操作依賴于具體的應用問題。這次課程設計我選中的題目是個人資料的管理。編寫了一個可以簡易使用的個人資料管理系統(tǒng),可以進行資料的輸入和管理。雖然在我的程序中有一部分是從網(wǎng)上搜索得來的,但我已經(jīng)竭力將所獲得的信息變成自己的資源,動手上機操作,在了解和看懂的基礎上有所改變和創(chuàng)新,但是在的程序軟件中

34、還有部分的不足,需要加以更新。僅管,我并沒能很好的利用所學數(shù)據(jù)結構的知識,但我也盡了自己最大的努力用我所學來完成這次的課程設計。同時,通過這次課程設計,我認識到了自己動手實踐的弱勢,特別是在編程方面,知道了計算機的實踐操作是很重要的,只有通過上機編程才能充分的了解自己的不足。二、對以后的學習充滿了信心和期待通過這次的課程設計,更是讓我深刻認識到自己在學習中的不足,同時也找到了克服這些不足的方法,這也是一筆很大的資源。在以后的時間中,我們應該利用更多的時間去上機實驗,加強自學的能力,多編寫程序,相信不久后我們的編程能力都會有很大的提高能設計出更多的更有創(chuàng)新的作品。第七章、發(fā)現(xiàn)問題及錯誤分析第一節(jié)

35、、邏輯錯誤函數(shù)void Loadfile(Car cars26,char license10,int floor,int pnumber,int ptime,int empty )函數(shù)的功能是在每次運行程序時,加載車庫里原來已經(jīng)存在的還沒有儲庫的車第二節(jié)、修改前得代碼void Loadfile(Car cars26,char license10,int floor,int pnumber,int ptime,int empty ) if(!license)return;int j=0; while(cars0j.empty !=0)j+;strcpy(cars0j.license,licens

36、e);cars0j.floor =floor;cars0j.pnumber =pnumber;cars0j.ptime =ptime;cars0j.empty =empty;第三節(jié)、錯誤描述這個函數(shù)有問題,(每次讀入都是按00,01,02,03,04順序加載,一個一個的,從而造成了兩個問題:車庫“假滿現(xiàn)象” 和“刪除后重新加載時只能按順序加載 ”),同時不夠簡練,重用性不高。錯誤的一種結果:“假滿現(xiàn)象”:1.并且上限只能加載第一層的六個車位,第七次調(diào)用該函數(shù)時就會報錯原來車庫已經(jīng)存儲的 六 輛車(如圖7-1):圖7-1錯誤報告第七輛車來時雖然可以停車,保存之后 ,但是下次加載車庫中七條數(shù)據(jù)時就

37、會發(fā)生溢出錯誤 (如圖7-2、圖7-3)圖7-2溢出錯誤(1) 圖7-3溢出錯誤(2)錯誤的另一種種結果:2.假設文件原來的保存的車停信息位(0,0)(0,3)(1,0)(1,2)經(jīng)過加載后,(0,0)保存在00;(0,3)保存在02;(1,0)保存在03;(1,2)保存在04;即只能順序加載(如圖7-4、圖7-5)圖7-4加載錯誤(1) 圖7-5加載錯誤(2)第四節(jié)、解決方案如下void Loadfile(Car cars26,char license10,int floor,int pnumber,int ptime,int empty ) if(!license)return;strcp

38、y(carsfloor-1pnumber-1.license,license);carsfloor-1pnumber-1.floor =floor;carsfloor-1pnumber-1.pnumber =pnumber;carsfloor-1pnumber-1.ptime =ptime;carsfloor-1pnumber-1.empty =empty;第八章、參考文獻1數(shù)據(jù)結構 (C語言版)嚴蔚敏、吳偉民 主編 清華大學出版社 2004.112 數(shù)據(jù)結構課程設計案例精編(用C/C+描述),李建學 等 編著,清華大學出版社 2007.23. 數(shù)據(jù)結構:用面向對象方法與C+語言描述,殷人昆

39、主編, 清華大學出版社 2007.6附錄代碼:#include <iostream.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#define FLOOR 2#define PNUMBER 6struct Carchar license10;int floor;int pnumber;int ptime;int empty;/標志位,有車為1,無車為0;/顧客信息節(jié)點struct Customerchar license

40、10;/車牌號char date64;/停車的時刻int ptimecount;/本次停車總時間float cost;char note100;/顧客留言Customer *next;/顧客信息鏈表typedef Customer CustList;/管理員struct Userchar id10;char name10;char password10;int UsertestAdd();void Load(Car cars26);void Loadfile(Car cars26,char license10,int floor,int pnumber,int ptime,int empty)

41、;void FourCarIn(Car Cars26);void Enterpark(Car cars26);void Showcars(Car cars26);void Savecars(Car cars26);bool IsEmpty(Car cars26);void Print(char license,int floor,int pnumber,int ptime,float &cost);void Leavepark(Car cars26,char license,int &floor,int &pnumber,int &ptime,float &am

42、p;cost,char note100);void CarOutMenu(char license,int &floor,int &pnumber,int &ptime,float &cost,char note100);void Manage(Car cars26);void InitCustList(CustList *&cl);void CreateCustList(CustList *&cl,char *license);void GetDate(char tmp64);void SearchCust(CustList *&cl,

43、char *license,float cost,int pcount);void Customer(Car cars26);void CustomerNote(char note100);void EachGuideInfor(Car c);/游客個人信息的自我查詢void EachGuideInfor(Car c)cout.setf(ios:left);cout.width(10);cout<<"車牌號"cout.width(8);cout<<"樓層"cout.width(8);cout<<"車位號&qu

44、ot;cout.width(8);cout<<"停車開始時間"<<endl;cout.setf(ios:left);cout.width(10);cout<<c.license;cout.width(8);cout<<c.floor;cout.width(8);cout<<c.pnumber;cout.width(8);cout<<c.ptime<<endl;/顧客留言void CustomerNote(char note100)cout<<"請留言:"cin

45、>>note;/存車void Enterpark(Car cars26)cout<<"input your license"<<endl;char licen10;cin>>licen;while(!licen)cout<<"input your license"<<endl;cin>>licen;/判斷車庫是否已經(jīng)滿了,順便將原來的ptime加5int i,j;for(i=0;i<2;i+)for(j=0;j<6;j+)if(carsij.empty=1)c

46、arsij.ptime +=5;elsecarsij.floor =i+1;carsij.pnumber =j+1;carsij.ptime=5;carsij.empty=1;strcpy(carsij.license,licen);return; /如果使用break,則只能跳出單層循環(huán),/顯示停車信息/cout<<"顯示停車信息?(Y:是,N:否)"<<endl;/cout<<"請選擇:"/char a;/cin>>a;/if(a='Y')/EachGuideInfor(cars);/取

47、車void Leavepark(Car cars26,char license,int &floor,int &pnumber,int &ptime,float &cost,char note100)/判斷車位是否已空if(IsEmpty(cars)=1) cout<<"停車場已沒有車停放!請確定您是否停車。"<<endl;return;/查找車位int sign=1;/標志位,車庫有該車為1,沒有賦值為零,初始值為0int i,j;while(sign)for(i=0;i<2;i+)for(j=0;j<6

48、;j+)if(strcmp(carsij.license,license)=0)sign=0;floor=i;pnumber=j;ptime=carsij.ptime;if(sign)cout<<"您剛才輸入的車牌號不存在!"<<endl;cout<<"請重新輸入:"cin>>license;if(sign=0) cout<<"車已找到,請稍等。"<<endl;floor+=1;pnumber+=1;/system ("cls");/延時for

49、(i=0;i<1000000000;i+);/車出庫,將車位空出carsfloor-1pnumber-1.floor =0;carsfloor-1pnumber-1.pnumber =0;carsfloor-1pnumber-1.ptime=0;carsfloor-1pnumber-1.empty=0;strcpy(carsfloor-1pnumber-1.license," ");/由于floor,pnumber與實際的二位數(shù)組有區(qū)別,加1/取車的菜單項void CarOutMenu(char license,int &floor,int &pnum

50、ber,int &ptime,float &cost,char note100)cout<<"1 輸出憑據(jù)"<<endl;cout<<"2 留言"<<endl;cout<<"3 直接退出"<<endl;while(1)cout<<"請選擇:"int i;cin>>i;if(i<1|i>3)cout<<"您的操作非法!"<<endl;continue;

51、switch(i)case 1:cout<<"-現(xiàn)有汽車停車信息-"<<endl;Print(license,floor,pnumber,ptime,cost);break;case 2:CustomerNote(note);break;case 3:break;if(i=1|i=2) continue;else break;/得到當前時間void GetDate(char tmp64)time_t t = time( 0 ); strftime(tmp, sizeof(tmp), "%Y/%m/%d %X %A",localti

52、me(&t) );bool IsEmpty(Car cars26)int i,j;for(i=0;i<2;i+)for(j=i;j<6;j+)if(carsij.empty=1) return false;return true;/逐條添加記錄到car.dat中void Savecars(Car cars26)FILE* fp = fopen("car.txt","wb");if(fp=NULL)cout<<"Can not open this file"<<endl;return;/to

53、fileCar car;int i=0;int j=0;while(i<2)while(j<6)if(carsij.empty =1)car.floor =carsij.floor ;strcpy(car.license ,carsij.license );car.pnumber =carsij.pnumber ;car.ptime =carsij.ptime ; car.empty=carsij.empty ;/fwrite(&cars,sizeof(car),1,fp); / 如果寫成這樣,每次都從car00地址開始寫入,回報原來的內(nèi)容覆蓋掉,加深了我對fwrite()

54、的理解fwrite(&car,sizeof(car),1,fp);j+;i+;fclose(fp);void Load(Car cars26)FILE* fp = fopen("car.txt","rb");if(fp=NULL)cout<<"can not open this file"<<endl;return;Car car;int n;while(!feof(fp)/read one car informationn = fread(&car,sizeof(car),1,fp);if(n!=1)break;/cout<<car.license <<" "<<car.floor <<" "<<car.pnumber <<&

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論