數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—機(jī)場(chǎng)管理系統(tǒng)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—機(jī)場(chǎng)管理系統(tǒng)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—機(jī)場(chǎng)管理系統(tǒng)_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—機(jī)場(chǎng)管理系統(tǒng)_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—機(jī)場(chǎng)管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告機(jī)場(chǎng)管理系統(tǒng) 目錄1.機(jī)場(chǎng)管理系統(tǒng)概述11.1 項(xiàng)目背景11.2 需求分析11.3 主要功能11.4 涉及知識(shí)點(diǎn)22.概要設(shè)計(jì)22.1系統(tǒng)的結(jié)構(gòu)圖 22.2 抽象數(shù)據(jù)類型定義32.3 文件結(jié)構(gòu)53.詳細(xì)設(shè)計(jì)53.1系統(tǒng)的功能模塊圖53.2 er圖 54.系統(tǒng)的實(shí)現(xiàn)104.1 系統(tǒng)關(guān)鍵算法114.2 系統(tǒng)調(diào)試過程114.3系統(tǒng)運(yùn)行界面賞析115.系統(tǒng)評(píng)價(jià)174.1系統(tǒng)的特點(diǎn)184.2系統(tǒng)的缺點(diǎn)186. 課程設(shè)計(jì)總結(jié) 198參考文獻(xiàn) 19一.機(jī)場(chǎng)管理系統(tǒng)概述1 .1項(xiàng)目背景:我的課程設(shè)計(jì)選擇了制作一個(gè)機(jī)場(chǎng)管理系統(tǒng),制作周期歷時(shí)將近兩個(gè)月,從c+、數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)的一開始便著手這項(xiàng)

2、工作,完成的作品基本按時(shí)間可以分為兩大塊:第一部分為訂票系統(tǒng),第二部分為停車場(chǎng)管理系統(tǒng)。1 .2需求分析: 訂票系統(tǒng)是基于兩個(gè)線性鏈表(乘客鏈表以及航線鏈表)的一系列操作的實(shí)現(xiàn),業(yè)務(wù)活動(dòng)包括:查詢、添加航線,客票預(yù)訂和辦理退票等。相對(duì)于書上的訂票系統(tǒng),增加了查詢和客票預(yù)訂功能。以鏈表來存放航線以及每條航線上的乘客信息,并且實(shí)現(xiàn)一些列關(guān)于鏈表的相關(guān)操作。每條航線涉及的信息有:終點(diǎn)站名、航班號(hào)、飛機(jī)號(hào)、飛行日期(星期幾)、成員定額、機(jī)票價(jià)格、訂票量、已訂票的客戶名單(包括姓名、訂票量、座位號(hào))。停車場(chǎng)管理是基于雙棧(用于構(gòu)造停車場(chǎng))和鏈?zhǔn)疥?duì)列(當(dāng)停車場(chǎng)滿時(shí),用于充當(dāng)便道,停放需要進(jìn)入停車場(chǎng)的車輛)

3、的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)進(jìn)行設(shè)計(jì),主要用于專門提供給載有貨物的運(yùn)輸車輛的停放。通過計(jì)時(shí),進(jìn)行收費(fèi),實(shí)現(xiàn)用戶和系統(tǒng)之間的交互式信息傳遞。以棧模擬停車場(chǎng),以隊(duì)列模擬車場(chǎng)外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“到達(dá)”或“離去”信息、汽車牌照號(hào)碼以及到達(dá)或離去的時(shí)刻。對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場(chǎng)內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留的時(shí)間不收費(fèi))。1 .3系統(tǒng)實(shí)現(xiàn)的操作和功能如下: 1.3.1訂票系統(tǒng):1、查詢航線:根據(jù)旅客提出的終點(diǎn)站名輸出下列信息:航班號(hào)、飛機(jī)號(hào)

4、、星期幾飛行、剩余票額等信息。2、承辦訂票業(yè)務(wù):根據(jù)客戶提出的要求(航班號(hào),訂票數(shù)額)查詢?cè)摵桨嗟钠鳖~情況,若尚有余票,則為客戶辦理訂票手續(xù),輸出座位號(hào),若已經(jīng)滿員或者余票額少于訂票額,則做出相應(yīng)的提示。3、承辦退票業(yè)務(wù):根據(jù)客戶提供的情況(航班以及客戶姓名),為客戶辦理退票手續(xù)1.3.2停車場(chǎng)管理系統(tǒng):1、車輛到達(dá):新來車輛時(shí)如果有空位,按順序?yàn)樵撥嚪峙渫\囄唬?2、車輛離開:車輛開走時(shí),交納相應(yīng)停車費(fèi)實(shí)現(xiàn)計(jì)費(fèi)功能,計(jì)費(fèi)標(biāo)準(zhǔn)為:按時(shí)間計(jì)費(fèi),1.5元/每分(車在便道不計(jì)費(fèi));3、打印車場(chǎng)情況:統(tǒng)計(jì)停車場(chǎng)的停車情況。打印停車場(chǎng)內(nèi)所停車輛的信息。1.3.3機(jī)場(chǎng)路徑查詢系統(tǒng): 1、顯示機(jī)場(chǎng)地圖信息:

5、在用戶界面繪制機(jī)場(chǎng)重要地點(diǎn)的標(biāo)識(shí)并且用數(shù)字編號(hào)。 2、輸入查詢路徑的起點(diǎn)終點(diǎn)。 3、顯示最短路徑:在機(jī)場(chǎng)地圖界面繪制兩點(diǎn)之間最短的路徑。1.4涉及數(shù)據(jù)結(jié)構(gòu)知識(shí)點(diǎn) 1結(jié)構(gòu)體、指針、多個(gè)類與方法的定義與使用。 2線性表的定義 3線性表的存儲(chǔ)(順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ))。 4線性表的查找、插入、刪除、按條件排序、遍歷。 5棧與隊(duì)列的定義。 6入棧出棧以及入隊(duì)。二、概要設(shè)計(jì):機(jī) 場(chǎng) 管 理 系 統(tǒng)2.1系統(tǒng)的結(jié)構(gòu)圖:停 車 場(chǎng) 管 理 系 統(tǒng)機(jī) 場(chǎng) 訂 票 系 統(tǒng)2.2抽象數(shù)據(jù)類型定義:航空訂票管理:typedef struct customer /*航線乘客信息*/ char name10; /*姓名*/

6、 int amount; /*定票數(shù)*/ int idinfor; /*個(gè)人信息*/ struct customer *next; /*指向下一乘客結(jié)點(diǎn)*/customer;typedef struct flight /*航線信息*/ char des_name10; /*終點(diǎn)站名*/ char flight_no6; /*航班號(hào)*/ char plane_no3; /*飛機(jī)號(hào)*/ int price; /*機(jī)票價(jià)格*/ int week_day; /*飛行周日*/ int customer_amount; /*乘員定額*/ int free_amount; /*剩余票數(shù)*/ customer

7、 *custname; /*該航班的已定票乘客名單*/ struct flight *next; /*指示下一航線結(jié)點(diǎn)*/flight,*pflight;class flight_managementpublic:flight_management();flight_management(flight_management &f);flight_management();void linemanagemenu(); /航線管理菜單void display_reserve(); /訂票乘客信息顯示 void bookingmenu(); /訂票菜單void line_add(); /添加航線vo

8、id line_search(); /按航班號(hào)查找航線且打印結(jié)果void line_see(); /顯示所有航線int empty_flight(); /判斷航線是否為空int find_line(pflight l,char *key); /核對(duì)航線是否唯一 int find_line(pflight l,char *key,pflight &p2,int &flight_no);/按航班號(hào)查找航線且返回標(biāo)志 int exitsystem(); /系統(tǒng)退出char continue(); /詢問是否繼續(xù)void errormess(); /報(bào)告出錯(cuò)void mainflightmenu();

9、 /航空客運(yùn)訂票系統(tǒng)主菜單private: int customer_count; /*所有航線的定票乘客總數(shù)*/ flight *head; /*航線頭指針*/ flight *p2; /*航線結(jié)點(diǎn)指針*/ customer *custp1max; /*各條航線乘客結(jié)點(diǎn)指針*/ customer *replp1max; /*各條航線候補(bǔ)結(jié)點(diǎn)指針*/ int isempty; /*是否有定票乘客*/ customer *prior; /*滿足要求的定票乘客的前結(jié)點(diǎn)以作刪除操作void refundticketmenu();停車場(chǎng)管理:struct time int hour; int min;

10、 time& operator=(time &t); /*時(shí)間結(jié)點(diǎn)*/struct car /*棧內(nèi)停放車輛結(jié)點(diǎn)*/ string num;time reach; time leave; ;struct carnode /*隊(duì)列停放車輛結(jié)點(diǎn)*/string num;carnode *link;carnode(string str,carnode *ptr=null)num=str;link=ptr;class parkstack 停車棧private:struct car *elements;int top; int maxsize; 棧所能容納的最大停放數(shù)public:parkstack()

11、:top(-1),maxsize(max)elements=new carmaxsize;if(elements=null) cout內(nèi)存分配失敗endl;exit(1);parkstack()delete elements;void push(car x); 車輛入棧bool pop(car &x); 車輛出站bool isempty() 判斷車場(chǎng)是否為空return (top=-1)? true:false;bool isfull() 判斷車場(chǎng)是否已經(jīng)停滿return (top=maxsize-1)? true:false;int getsize() constreturn (top+1)

12、; 計(jì)算停車場(chǎng)已經(jīng)停放的車輛數(shù)void makeempty()top=-1; 停車場(chǎng)置空friend void parkpush(); /車輛進(jìn)場(chǎng)。 friend void parkpop(); /車輛出場(chǎng)。friend void waitpop(); /便道上的車輛進(jìn)入停車場(chǎng);friend void show(parkstack &x,waitqueue &y);/顯示停車場(chǎng)和便道車輛信息。;class hchstack/緩沖棧(該站用于停車場(chǎng)內(nèi)車輛退出時(shí)臨時(shí)存放其他車輛,具體定義與停車?;鞠嗤﹑rivate:struct car *elements;int top;int maxsiz

13、e;public:hchstack():top(-1),maxsize(max)elements=new carmaxsize; if(elements=null) cout內(nèi)存分配失敗endl;exit(1);hchstack()delete elements;void push(car x);bool pop(car &x);bool isempty() return (top=-1)? true:false;bool isfull()return (top=maxsize-1)? true:false;int getsize() constreturn (top+1);void make

14、empty()top=-1;friend void parkpop();/車輛出場(chǎng)。;class waitqueue/便道.無頭結(jié)點(diǎn)的鏈?zhǔn)疥?duì)列、private:carnode *front,*rear;public:waitqueue():rear(),front();waitqueue();bool enqueue(car x); 車輛入隊(duì)bool dequeue(car &x); 車輛出隊(duì)bool isempty() return (front=null)? true:false;int getsize(); 獲得隊(duì)列中停放車輛數(shù)目friend void parkpush(); /車輛進(jìn)場(chǎng)

15、。 friend void show(parkstack &x,waitqueue &y);/打印停車場(chǎng)信息函數(shù)。friend void waitpop(); /便道上的車輛進(jìn)入停車場(chǎng);;2.3 文件結(jié)構(gòu): 航空訂票管理:ticket.cpp 停車場(chǎng)管理: 停車場(chǎng).h,停車場(chǎng).cpp三、詳細(xì)設(shè)計(jì):3.1系統(tǒng)的模塊劃分創(chuàng)建航線查找航線查看所有航線航線管理訂票辦理退票辦理乘客管理機(jī) 場(chǎng) 管 理 系 統(tǒng)航空訂票管理車輛入場(chǎng)車輛出場(chǎng)打印停車場(chǎng)信息停車場(chǎng)管理終點(diǎn)站名航班號(hào)飛機(jī)型號(hào)機(jī)票價(jià)格飛行日期成員定額剩余票數(shù)乘客名單3.2 e-r圖:航 線 機(jī) 場(chǎng)乘客姓名乘客訂票數(shù)座位號(hào)信息車牌號(hào)駛?cè)霑r(shí)間離開時(shí)間場(chǎng)內(nèi)

16、停車場(chǎng)停車費(fèi)用便道車牌號(hào)四、系統(tǒng)的實(shí)現(xiàn):4.1 系統(tǒng)關(guān)鍵算法4.1.1對(duì)于航空訂票管理有以下主要的方法實(shí)現(xiàn): 因?yàn)轫?yè)數(shù)的限制,再者航空訂票系統(tǒng)書上已經(jīng)有程序,雖然有增加內(nèi)容,但是為了節(jié)省空間,所以這里只列出的函數(shù),沒有寫出具體的程序,看程序可以看源程序。1./*-航線添加函數(shù)-*/void flight_management:line_add()2. /*-訂票辦理函數(shù)-*/void flight_management:bookingmenu()3. /*-退票辦理函數(shù)-*/void flight_management:refundticketmenu()4. /*-航線查找函數(shù)-*/*fin

17、d_line()為重載函數(shù)*/5. /*-航班查找函數(shù)-*/void flight_management:line_search()6./*-訂票乘客信息-*/void flight_management:display_reserve()4.1.2對(duì)于停車場(chǎng)管理系統(tǒng)有四個(gè)主要的函數(shù):1.車輛到達(dá)時(shí),用于進(jìn)行對(duì)車輛的操作,程序代碼如下:void parkpush()/車輛進(jìn)場(chǎng)。bool gauge=true;cout歡迎光臨!n請(qǐng)輸入車牌號(hào):(十位以內(nèi))c.num;for(int i=0;i=p.top;i+)/不讓車輛重復(fù)進(jìn)場(chǎng)if(c.num=p.elementsi.num) cout停車場(chǎng)

18、中已經(jīng)有這輛車,不能重復(fù)進(jìn)場(chǎng)。endl;gauge=false;if(gauge)if(!p.isfull()/場(chǎng)不滿時(shí),車輛進(jìn)場(chǎng),初始化進(jìn)場(chǎng)時(shí)間p.push(c); cout請(qǐng)輸入進(jìn)場(chǎng)時(shí)間。p.elementsp.top.reach; cout您的車輛已存入停車場(chǎng),請(qǐng)放心!按任意鍵返回endl;getch(); elsecout抱歉。停車場(chǎng)已滿,車輛進(jìn)入便道暫時(shí)停放。按任意鍵返回endl;w.enqueue(c);getch();2.當(dāng)便道車輛進(jìn)入停車場(chǎng),程序代碼如下:void waitpop()/便道上的車輛進(jìn)入停車場(chǎng);if(!w.isempty()&!p.isfull()w.dequeu

19、e(c);cout停車場(chǎng)有空位,牌號(hào)為:c.num的車從便道上進(jìn)入停車場(chǎng)。endl;p.push(c);cout便道上的車輛進(jìn)入停車場(chǎng),請(qǐng)輸入進(jìn)場(chǎng)時(shí)間。p.elementsp.top.reach;/p.elementsp.top.reach=time(null);cout車輛停放在p.top+1號(hào)車位,按任意鍵返回endl;getch();3.車輛出場(chǎng),代碼如下:void parkpop()/車輛出場(chǎng)。if(p.isempty() cout停車場(chǎng)中沒有車輛存放。endl;elseint i=-1;string num;cout請(qǐng)輸入出場(chǎng)車輛的車牌號(hào):num;for(int z=0;z=p.to

20、p;z+)if(p.elementsz.num=num) i=z;if(i=-1) cout停車場(chǎng)中沒有這輛車。i;j-)/將要出場(chǎng)車前方車輛移動(dòng)到臨時(shí)棧。p.pop(c);h.push(c); p.pop(c); cout請(qǐng)輸入出場(chǎng)時(shí)間。c.leave;cout應(yīng)繳車費(fèi)money(c.reach,c.leave)元(1.5元/分鐘)endl; while(!h.isempty()/將臨時(shí)棧中的車輛送回停車場(chǎng)。h.pop(c);p.push(c);waitpop();getch();4.顯示停車場(chǎng)信息,代碼如下:void show(parkstack &x,waitqueue &y)if(!p

21、.isempty() if(!x.isfull() cout停車場(chǎng)中現(xiàn)有車位max-x.getsize()個(gè)。endl;cout停車場(chǎng)已停車輛有:endl;for(int i=0; i=p.top; i+)coutp.elementsi.num ;coutendl;if(x.isfull() cout停車場(chǎng)已滿,便道上有y.getsize()輛車等候。endl;cout按任意鍵返回week_dayweek_day7)不能識(shí)別錯(cuò)誤。 改正:將week_day定義為int 型變量, 原語(yǔ)句中的cinp2-week_day 改為 cin&p2-week_day;再次運(yùn)行,該問題得到了解決!但是又發(fā)現(xiàn)

22、了新的問題:當(dāng)某航線的票已經(jīng)全部定完后,按要求在乘客信息菜單里會(huì)顯示“票已經(jīng)售完”,但是運(yùn)行時(shí)卻顯示的是“還有剩余的票”。 經(jīng)過分析代碼得出錯(cuò)誤原因:在訂票乘客信息的函數(shù)display_reserve()中的有關(guān)票是否售完的條件語(yǔ)句有問題原來的這段代碼如下:while(p2!=null) coutnameflight_noplane_noamountdes_nameidinfor; if(p2-amount =1) cout還有多余的票!n; else coutnext; 其中的有關(guān)票是否售完的條件語(yǔ)句:if(p2-amount=1)中的指針p2錯(cuò)誤,p2是乘客信息節(jié)點(diǎn)的指針,p2-amoun

23、t表示乘客的訂票數(shù)。應(yīng)把該條件語(yǔ)句改為if( p1-free_amount=1)p1是航線節(jié)點(diǎn)指針,p1-free_amount表示剩余票的數(shù)量4.3系統(tǒng)運(yùn)行界面賞析:航空訂票系統(tǒng)如圖所示:添加航線界面:查看航線界面:查詢航線界面:訂票界面:退票辦理菜單:停車場(chǎng)系統(tǒng)主界面:車輛進(jìn)站界面:打印停車場(chǎng)信息界面:車輛出站且便道上的車輛入站:五.系統(tǒng)評(píng)價(jià)5.1系統(tǒng)的特點(diǎn) 本機(jī)場(chǎng)管理系統(tǒng)覆蓋知識(shí)面較廣,基本涵蓋了c+ 所有的知識(shí)點(diǎn),尤其是對(duì)c+ 類和結(jié)構(gòu)體,以及指針方面進(jìn)行了充分的應(yīng)用。同時(shí)體系結(jié)構(gòu)所采用的線性表以及相關(guān)操作廣泛涉及了數(shù)據(jù)結(jié)構(gòu)的知識(shí)。并且雖然書上已經(jīng)有了航空售票系統(tǒng),但是我在書上的基礎(chǔ)上對(duì)系統(tǒng)有了完善和改進(jìn),增加了一些功能,再加上停車場(chǎng)管理系統(tǒng),完善了機(jī)場(chǎng)的知識(shí)。5.2系統(tǒng)的缺點(diǎn) 由于是第一次做這樣大型的程序,雖然付出了很大的努力,但是最終的作品依然是漏洞百出,問題多多。在這里全面反思一下自己的問題: 1.在程序中,很難對(duì)數(shù)據(jù)的輸入做出嚴(yán)格的要求限制,因此當(dāng)輸入錯(cuò)誤的數(shù)據(jù)時(shí),程序會(huì)發(fā)生各種各樣意想

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論