

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p> 第1章 停車場管理問題- 1 -</p><p> 1.1 問題描述- 1 -</p><p> 1.2 需求分析- 1 -</p><p> 1.3 概要設(shè)計- 2 -</p><p> 1.3.1 棧的抽象數(shù)據(jù)
2、類型的定義- 2 -</p><p> 1.3.2 隊列的抽象數(shù)據(jù)類型的定義- 2 -</p><p> 1.3.3 程序模塊- 3 -</p><p> 1.4 詳細設(shè)計- 4 -</p><p> 1.4.1 主要函數(shù)思想- 4 -</p><p> 1.4.2 時間結(jié)點類型- 4 -<
3、/p><p> 1.4.3 車輛進出站信息類型- 4 -</p><p> 1.4.4 停車場和便道信息類型- 4 -</p><p> 1.4.5 主函數(shù)和其它函數(shù)的偽碼算法- 5 -</p><p> 1.5 調(diào)試分析- 6 -</p><p> 1.5.1 程序改進- 6 -</p>
4、<p> 1.5.2 測試結(jié)果- 6 -</p><p> 1.6 課設(shè)總結(jié)- 8 -</p><p> 第2章 運動會分數(shù)統(tǒng)計問題- 9 -</p><p> 2.1 問題描述- 9 -</p><p> 2.2 需求分析- 9 -</p><p> 2.3 概要設(shè)計- 9 -&l
5、t;/p><p> 2.3.1 流程圖- 9 -</p><p> 2.3.2 程序功能說明- 10 -</p><p> 2.3.3 數(shù)據(jù)結(jié)構(gòu)設(shè)計- 11 -</p><p> 2.3.4 函數(shù)及變量說明- 11 -</p><p> 2.4 詳細設(shè)計- 12 -</p><p&g
6、t; 2.4.1 系統(tǒng)功能模塊- 12 -</p><p> 2.4.2 算法原理- 13 -</p><p> 2.5 調(diào)試分析- 13 -</p><p> 2.5.1 調(diào)試過程中出現(xiàn)的問題及處理方式- 13 -</p><p> 2.5.2 運行界面- 15 -</p><p> 2.6 課
7、設(shè)總結(jié)- 19 -</p><p> 參考文獻- 20 -</p><p> 附錄1:停車場管理問題- 21 -</p><p> 附錄2:運動會分數(shù)統(tǒng)計問題- 33 -</p><p><b> 停車場管理問題</b></p><p><b> 問題描述</b&
8、gt;</p><p> 設(shè)有一個可以停放n輛汽車的狹長停車場,它只有一個大門可以供車輛進出。車輛按到達停車場時間的早晚依次從停車場里面向大門口處停放(最先到大門的第一輛車停在車場的最里面)。如果停車場已放滿n輛車,則后開的車輛只能在停車場大門外的便道上等待,一旦停車場內(nèi)有車走開,則排在便道上的第一輛車就進入停車場。停車場內(nèi)如有某兩車要走開,在它之后進入停車場的車都必須退出停車場為它讓路,待其開出停車場后,這些
9、車輛再依原來的次序進場。每輛車在離開停車場時,都應根據(jù)它在停車場內(nèi)停留的時間的長短交費。如果停留在便道上的車未進停車場就要離去,允許其離去,不收停車費,并且仍然保持便道上的車的次序。停車場示意圖如圖1-1所示:</p><p> 圖 1-1停車場示意圖</p><p><b> 需求分析</b></p><p> 根據(jù)車輛到達停車場,離開
10、停車場時所停留的時間進行計時收費;</p><p> 當有車輛從停車場離開時,等待的車輛按順序進入停車場停放,實現(xiàn)停車場的調(diào)度功能;</p><p> 用順序棧來表示停車場,鏈隊表示停車場外的便道;</p><p> 顯示停車場信息和便道信息。</p><p><b> 概要設(shè)計</b></p>&
11、lt;p> 這個程序的關(guān)鍵是車輛的進站和出站操作,以及車場和通道之間的關(guān)系。由于停車場是一個狹長的,只有一個通道,先進后出,類似數(shù)據(jù)結(jié)構(gòu)中的棧結(jié)構(gòu),所以停車場用棧這種數(shù)據(jù)結(jié)構(gòu)來描述。外面的狹長通道,先進先出,所以用隊列這種數(shù)據(jù)結(jié)構(gòu)來描述。</p><p> 棧的抽象數(shù)據(jù)類型的定義</p><p> ADT stack{</p><p> 數(shù)據(jù)對象:D=
12、{ai|ai∈charset,i=1,2,……,n,n>=0}</p><p> 數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2……,n}</p><p><b> 基本操作:</b></p><p> InitStack(&S)</p><p> 操作結(jié)果:構(gòu)造一個空
13、棧S。</p><p> Push(&S,e)</p><p> 初始條件:棧S已經(jīng)存在。</p><p> 操作結(jié)果:在棧S的棧頂插入新的棧頂元素e。</p><p> Pop(&S,&e)</p><p> 初始條件:棧S已經(jīng)存在。</p><p> 操作
14、結(jié)果:刪除S的棧頂元素,并以e返回其值。</p><p> StackTraverse(S,visit())</p><p> 初始條件:棧S已經(jīng)存在。</p><p> 操作結(jié)果:從棧底到棧頂依次對S中的每一個元素調(diào)用函數(shù)visit().</p><p> }ADT stack</p><p> 隊列的抽象
15、數(shù)據(jù)類型的定義</p><p> 數(shù)據(jù)對象:D={ai|ai∈Elemset,i=1,2,……,n,n>=0}</p><p> 數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2……,n}</p><p> 約定其中ai為隊首,an為隊尾.</p><p><b> 基本操作:</b&
16、gt;</p><p> InitQueue(&Q)</p><p> 操作結(jié)果:構(gòu)造一個空隊列Q.</p><p> DestroyQueue(&Q)</p><p> 初始條件:隊列Q已存在.</p><p> 操作結(jié)果:隊列Q被銷毀,不再存在.</p><p>
17、 ClearQueue(&Q)</p><p> 初始條件:隊列Q已存在.</p><p> 操作結(jié)果:將Q清為空隊列.</p><p> QueueEmpty(Q)</p><p> 初始條件:隊列Q已存在.</p><p> 操作結(jié)果:若Q為空隊列,則返回True,否則返回False.</p
18、><p> QueueLength(Q)</p><p> 初始條件:隊列Q已經(jīng)存在.</p><p> 操作結(jié)果:返回Q的元素個數(shù),即隊列的長度.</p><p> GetHead(Q,&e)</p><p> 初始條件:Q為非空隊列.</p><p> 操作結(jié)果:用e返回Q的
19、對頭元素.</p><p> EnQueue(&Q,e)</p><p> 初始條件:隊列Q已存在.</p><p> 操作結(jié)果:插入元素e為Q新的隊尾元素.</p><p> DeleteQueue(&Q,&e)</p><p> 初始條件:Q為非空隊列.</p>&l
20、t;p> 操作結(jié)果:刪除Q的隊頭元素,并用e返回其值.</p><p> QueueTraverse(Q,visit())</p><p> 初始條件:Q已存在且非空.</p><p> 操作結(jié)果:從隊頭到隊尾,依次對Q的每一個數(shù)據(jù)元素調(diào)用函數(shù)visit().一旦visit()失敗,則操作失敗.</p><p> }ADT Q
21、ueue</p><p><b> 程序模塊</b></p><p><b> 1. 主程序模塊</b></p><p> Void main()</p><p><b> {</b></p><p><b> 聲明定義</b&
22、gt;</p><p><b> 調(diào)用棧與隊列的函數(shù)</b></p><p> 主信息(輸入初始操作信息)</p><p><b> }</b></p><p> 2.棧模塊---實現(xiàn)棧抽象數(shù)據(jù)類型</p><p> 3.隊列模塊---實現(xiàn)隊列抽象數(shù)據(jù)類型</
23、p><p> 4.結(jié)構(gòu)體模塊---用于對對象及變量的管理。</p><p> 各模塊之間的調(diào)用關(guān)系如下: </p><p><b> 主程序模塊</b></p><p><b> ↓</b></p><p><b> 結(jié)構(gòu)體模塊</b></p
24、><p><b> ↓</b></p><p><b> 棧模塊</b></p><p><b> ↓</b></p><p><b> 隊列模塊</b></p><p><b> 詳細設(shè)計</b><
25、;/p><p><b> 主要函數(shù)思想</b></p><p> 本程序是個簡單的棧與隊列的應用程序,其所用的函數(shù)也是棧與隊列的基本函數(shù),但在編寫函數(shù)時應特別注意它的面向?qū)ο笮耘c窗口化設(shè)計,切身為使用者著想。所以在運用一些函數(shù)時調(diào)用的基本語句有太多的重復,其目的在于實現(xiàn)它本來的基本目的。</p><p><b> 時間結(jié)點類型<
26、;/b></p><p> typedef struct time{ </p><p> int hour; </p><p><b> int min; </b></p><p> }Time; /*時間結(jié)點*/</p><p><b> 車輛進出站信息類型</b
27、></p><p> typedef struct Node{ </p><p> char num[10];</p><p> Time reach; </p><p> Time leave; </p><p> }CarNode; /*車輛信息結(jié)點*/ </p><p>
28、 停車場和便道信息類型</p><p> typedef struct Node{ </p><p> CarNode *stack[Max+1];</p><p><b> int top; </b></p><p> }SeqStackCar; /*模擬車站*/</p><p> t
29、ypedef struct car{ </p><p> CarNode *data;</p><p> struct car *next; </p><p> }QueueNode; </p><p> typedef struct Node{ </p><p> QueueNode *head; <
30、/p><p> QueueNode *rear; </p><p> }LinkQueueCar; /*模擬通道*/ </p><p> void InitStack(SeqStackCar *,int n); /*聲明棧*/</p><p> //初始化,創(chuàng)建兩個新棧S,S1</p><p> int Init
31、Queue(LinkQueueCar *); /*聲明便道*/</p><p> //初始化,創(chuàng)建一個隊列Q用于便道</p><p> int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*車輛進站*/</p><p> void Leave(SeqStackCar *,SeqStackCar *,LinkQue
32、ueCar *,int n); /*車輛出站*/</p><p> void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ </p><p> void InitStack(SeqStackCar *s,int n) /*初始化棧*/</p><p> 主函數(shù)和其它函數(shù)的偽碼算法</p><p>
33、; void main()</p><p><b> {//主程序</b></p><p> initialization(); //初始化</p><p><b> while(1){</b></p><p> scanf(...................);//根據(jù)提示信息輸入
34、想要的操作</p><p> switch(k){//根據(jù)輸入的數(shù)調(diào)用不同的函數(shù)</p><p><b> case 1:</b></p><p><b> case 2:</b></p><p> ....................</p><p><b
35、> }</b></p><p><b> }</b></p><p><b> }</b></p><p> typedef struct **{</p><p> //用于創(chuàng)建不同結(jié)構(gòu)體類型的指針與變量</p><p><b> }&
36、lt;/b></p><p> void PRINT(CarNode *p){</p><p><b> //調(diào)用輸出函數(shù)</b></p><p> Leave(*p,n)...................</p><p> 根據(jù)求解時間值來求得費用,并通過收據(jù)打印出來</p><p
37、><b> }</b></p><p><b> 調(diào)試分析</b></p><p><b> 程序改進</b></p><p> 本次課程設(shè)計,運用到了棧和隊列,總的調(diào)試比較順利,只是在調(diào)用棧與隊列的函數(shù)時遇到一些問題,比如我想通過鍵盤輸入來確定停車場的停車數(shù),所以初始化時那些操作函數(shù)必
38、須帶有停車數(shù)這個參數(shù)。</p><p> 在定義棧的元素最大空間時如果使用順序棧必須先給它賦初值,但如果通過鏈表就可以實現(xiàn)動態(tài)分配內(nèi)存,為棧動態(tài)開辟新空間。</p><p><b> 測試結(jié)果</b></p><p> 輸入停車場的容量4,收費3元/小時,不足一小時的按一小時算,如圖1-2所示:</p><p>
39、 圖 1-2 輸入停車場容量</p><p> 接著輸入4輛車的信息,然后查看停車場信息,如圖1-3所示:</p><p> 圖 1-3 查看停車場信息</p><p> 再輸入2輛車的信息,如圖1-4所示:</p><p> 圖 1-4 再輸入兩輛車</p><p> 最后選擇第2輛車離開,如圖1-5所示:
40、</p><p> 圖 1-5 第2輛車離開</p><p><b> 課設(shè)總結(jié)</b></p><p> 經(jīng)過這次課程設(shè)計,通過對程序的編制,調(diào)試和運行,使我更好的掌握了棧和隊列基本性質(zhì)和有關(guān)它們之間關(guān)系,得到了問題的解決方法,熟悉了各種調(diào)用的數(shù)據(jù)類型,在調(diào)試和運行過程中使我更加的了解和熟悉程序運行的環(huán)境,提高了我對程序調(diào)試分析的能力和
41、對錯誤的糾正能力。這次數(shù)據(jù)結(jié)構(gòu)的程序設(shè)計,對于我來說是一個挑戰(zhàn)。我對數(shù)據(jù)結(jié)構(gòu)的學習在程序的設(shè)計中也有所體現(xiàn)。課程設(shè)計是培養(yǎng)學生綜合運用所學知識、發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié)。而且在這次課設(shè)中我還學到了許多關(guān)于電腦方面的知識,這是在課堂上無法學到的。</p><p><b> 運動會分數(shù)統(tǒng)計問題</b></p><p><b>
42、問題描述</b></p><p> 參加運動會有n個學校,學校編號為1……n。比賽分成m個男子項目,和w個女子項目。項目編號為男子1……m,女子m+1……m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1;前三名的積分分別為:5、3、2;哪些取前五名或取前三名由學生自己設(shè)定。</p><p><b> 需求分析</b>&l
43、t;/p><p> 該系統(tǒng)具備的基本功能:該統(tǒng)計程序能產(chǎn)生各種成績單和得分報表:各校的成績單,內(nèi)容包括各學校所取得每項成績的項目號,名次(成績),姓名和得分;產(chǎn)生團體總分報表,內(nèi)容包括校號,男子團體總分,女子團體總分和團體總分。也能對其中的錯誤項進行修改或刪除。</p><p> 本課程設(shè)計主要解決在運動會上,將各個比賽項目所有獲得名次的同學的成績輸入;成績查詢;成績修改;成績刪除;以及成
44、績輸出。</p><p><b> 概要設(shè)計</b></p><p><b> 流程圖</b></p><p><b> 如圖2-1所示:</b></p><p> 圖 2-1 程序流程圖</p><p><b> 程序功能說明<
45、;/b></p><p> 該程序用于運動會上,涉及到比賽項目成績的輸入,某個學校在某個項目中獲得成績的查詢,某個學校在某個運動項目中獲得的成績的修改,某個學校在某個運動項目中獲得的成績的刪除,以及某個學校所有獲得成績的得分報表以及團體成績的得分報表。其中比賽成績的輸入可以按照運動項目舉行的次序輸入,也可以輸入自己指定的運動項目的成績;自己擴展的功能是“某個學校在某個項目中獲得成績的查詢,某個學校在某個運
46、動項目中獲得的成績的修改,某個學校在某個運動項目中獲得的成績的刪除”三項,這三項都要求輸入學校以及運動項目編號,通過這兩項作為參數(shù)具體的函數(shù)可以查詢、修改成績或者是刪除某項成績記錄,進而影響到最后得分報表的輸出。</p><p><b> 數(shù)據(jù)結(jié)構(gòu)設(shè)計</b></p><p> 創(chuàng)建了學生成績記錄結(jié)點:</p><p> struct R
47、E // 學生成績記錄</p><p><b> {</b></p><p> int iterm; //項目編號</p><p> int pos; //名次</p><p> int score; //成績</p><p> int snum; //學校
48、編號</p><p> char name[10]; //學生姓名</p><p><b> RE *next;</b></p><p><b> };</b></p><p> RE sc[20]={0};</p><p> 其中具體的操作主要采用的是一個鏈表的
49、結(jié)構(gòu),涉及到了鏈表的插入,鏈表的查找,以及鏈表的刪除等知識點。鏈表的插入解決了各個項目中獲得名次的同學的成績的輸入問題;鏈表的查找解決了運動項目成績的查詢;成績的刪除,先查找到其所在的結(jié)點,然后將該結(jié)點前后結(jié)點相連,再刪除該結(jié)點。</p><p><b> 函數(shù)及變量說明</b></p><p> void insertlist(int iterm,int n);
50、該函數(shù)用來添加成績記錄,iterm 是運動項目的編號,n為參加比賽的學??倲?shù),需要注意地是根據(jù)運動項目是奇數(shù)還是偶數(shù)來判定最后結(jié)果取前三還是前五名,這里用(iterm%2)是否為零來判斷。</p><p> RE *findlist(int snum,int fiterm);該函數(shù)用來查找指定的學校的某項目成績并返回該成績所在節(jié)點的前一個節(jié)點的地址,其中snum是要查找的學校的編號,而fiterm為要查找的運動
51、項目編號,返回一個指向RE型的指針,RE為定義的一個結(jié)構(gòu)體類型,用來存儲獲得名次的學生的基本信息(包括學生姓名,取得的名次,獲得的分數(shù),所在的學校編號以及運動項目編號)。</p><p> RE *findend(int snum); 查找并返回每個學校的最后一個數(shù)據(jù)節(jié)點的地址,函數(shù)返回類型同上,snum為學校編號。</p><p> void printlist1(int snu
52、m); 輸出每項具體的成績,snum為學校編號。</p><p> void printlist2(int snum,int m,int w); 輸出團體成績 ,m為男生項目數(shù),w為女生項目數(shù)。</p><p> void modlist(int snum,int miterm); 修改成績 miterm為要修改的項目編號。</p><p> v
53、oid deletelist(int snum,int diterm); 刪除成績記錄,diterm為要刪除的項目編號。</p><p> 還有主函數(shù)void main( )里用一個嵌套在do—while循環(huán)語句中的switch語句來控制要執(zhí)行操作的編號,用戶可以有多種選擇,根據(jù)不同的需要選擇不同的操作,這個也很關(guān)鍵。</p><p><b> 詳細設(shè)計</b>
54、;</p><p> 根據(jù)題目要求及本次課程設(shè)計的目的,采用結(jié)構(gòu)體來存儲每組數(shù)據(jù),定義運動會類和調(diào)用庫函數(shù)進行相應的操作?,F(xiàn)把相應的設(shè)計思路及各個函數(shù)解析如下:</p><p><b> 系統(tǒng)功能模塊</b></p><p> 示意圖如圖2-2所示:</p><p> 圖 2-2 系統(tǒng)功能圖</p>
55、<p><b> 算法原理</b></p><p> 該程序先采用了一個嵌套在do—while循環(huán)語句中的switch語句來控制要執(zhí)行操作的編號,用戶可以有多種選擇,根據(jù)不同的需要選擇不同的操作。其中具體的操作主要采用的是一個鏈表的結(jié)構(gòu),涉及到了鏈表的插入,鏈表的查找,以及鏈表的刪除等知識點。鏈表的插入解決了各個項目中獲得名次的同學的成績的輸入問題,具體為:為每個學校建立一個
56、頭結(jié)點,若該學校有同學取得名次,建立一個新的結(jié)點來存儲該同學的信息,并將其插到該學校所在鏈表的最后一個結(jié)點后面。鏈表的查找解決了運動項目成績的查詢,以及后面的成績的輸出、刪除都要用到鏈表的查找,查找時先將頭結(jié)點的地址賦給查找函數(shù),根據(jù)查找的條件依次與每個結(jié)點中相應的比較,若相等則輸出所需要的信息,否則返回“查找的元素不存在”信息。而成績的刪除,先查找到其所在的結(jié)點,然后將該結(jié)點前后結(jié)點相連,再刪除該結(jié)點;成績的修改要先查找到其所在的結(jié)點
57、,然后再重新錄入數(shù)據(jù);至于學校所獲得的各項成績的輸出,將該校所在的頭結(jié)點的地址賦給控制輸出的函數(shù),利用指針的移動依次將各項成績輸出,而團體成績的輸出,先要根據(jù)運動項目編號來確定是男生還是女生項目,然后再依次累加,分別得到男女生的團體得分</p><p><b> 調(diào)試分析</b></p><p> 調(diào)試過程中出現(xiàn)的問題及處理方式</p><p&
58、gt; 1、由于剛開始程序比較簡單,雖能運行,但處理錯誤的能力很低,后來經(jīng)過反復的添加修改,使程序能處理了錯誤,提高了健壯性。</p><p> 2、開始編時由于不太規(guī)范,編譯出錯后由于程序長,很難找到錯誤,后來規(guī)范了格式,錯誤容易找到了,以后編程要規(guī)范。</p><p> 3、算法的時間以及空間復雜度的分析:</p><p> 線性表使用的是順序結(jié)構(gòu),各種
59、算法的時間復雜度相對比較合理</p><p> 4、本程序相對來說比較容易看明白,其中涉及到的一些函數(shù)相對來說比較容易。通過調(diào)試,運行,基本上達到了要求,但還存在一些缺點。如:不夠人性化等。</p><p> 另外在void printlist1(int snum)函數(shù)中,當將要輸出成績的學校所在的鏈表的頭結(jié)點所指向的下一個結(jié)點的地址賦給temp的時候:</p><
60、p><b> RE *temp;</b></p><p> temp=&sc[snum-1];</p><p> temp=temp->next;</p><p> 要檢測temp是否為NULL,如果為NULL會發(fā)生溢出,程序無法向下繼續(xù)進行</p><p> 解決的方法是 加上 <
61、;/p><p> if(temp==NULL) </p><p> cout<<"該學校在該項目上沒有取得任何成績"<<endl;</p><p> 此句可以有效的防止溢出發(fā)生</p><p> 此類問題還發(fā)生在 void printlist2(int snum,int m,int w)和vo
62、id modlist(int snum,int miterm)里面,在后面的那個函數(shù)里面 RE *curr=findlist(snum,miterm);在這個賦值語句后面也要跟上 </p><p> if(curr==NULL) return;</p><p> curr=curr->next; </p><p> i
63、f(curr==NULL){</p><p> cout<<"該學校在該項目上沒有任何成績記錄"<<endl;</p><p><b> return;}</b></p><p> 這也是為了防止溢出的發(fā)生而設(shè)定的條件。</p><p> 在插入結(jié)點的時候是將其直接插
64、到該學校所在鏈表的最后,因此需要找到每個學校所在鏈表的最后一個結(jié)點的地址,而函數(shù)RE *findlist(int snum,int fiterm); 只是返回需要查找的結(jié)點的地址,不一定是最后一個結(jié)點,解決辦法是重新定義一個函數(shù),RE *findend(int snum);盡管這樣在效率上可能會有些差,因為每次插入的時候都要從頭結(jié)點開始查找,時間上的開銷會大一些,但還是可以解決上述問題的</p><p> 此外
65、,還有一些就是細節(jié)問題了,如:主函數(shù)中的</p><p> if(num>6||num<0) {</p><p> cout<<"輸入有誤,請重新輸入要操作的項目編號"<<endl;</p><p> cin>>num;}</p><p> 這個if語句判斷輸入的操作
66、編號是否在目錄中,如果超出范圍重新輸入;</p><p> 還有函數(shù)void insertlist(int iterm,int n)里面在用new申請空間的時候為防止內(nèi)存分配空間錯誤用下面的語句來監(jiān)控 </p><p> if(temp==NULL) </p><p> cout<<"內(nèi)存分配錯誤"<<endl;&
67、lt;/p><p> 以及函數(shù)void insertlist(int iterm,int n)里面在輸入學校編號的時候用下面的if語句判斷輸入的學校編號是否符合要求,如果超出范圍重新輸入</p><p> if(temp->snum>n) {</p><p> cout<<"輸入的學校編號有誤,請重新輸入"<<
68、;endl;</p><p> cin>>temp->snum;}</p><p><b> 運行界面</b></p><p> 首先運行文件運動會分數(shù)統(tǒng)計系統(tǒng)。如圖2-3所示:</p><p> 圖 2-3 程序界面</p><p> 輸入信息相關(guān)信息:添加學校如圖2
69、-4所示:</p><p> 圖 2-4 添加學校名稱</p><p> 輸入學校名稱和運動會的項目后如圖2-5所示:</p><p> 圖 2-5 添加學校后的界面</p><p> 學校編號查詢分數(shù)如圖2-6所示:</p><p> 圖 2-6 按學校編號查詢分數(shù)</p><p>
70、 按運動項目輸出各個學校的名次如圖2-7所示:</p><p> 圖 2-7 按項目輸出學校的名次</p><p> 按女團體總分排序如圖2-8所示:</p><p> 圖 2-8 按女團體成績排序</p><p> 按總成績輸出個學校如圖2-9所示:</p><p> 圖 2-9 按總成績排序</p
71、><p><b> 課設(shè)總結(jié)</b></p><p> 1.存在問題:程序有待簡化。</p><p> 2.提高:錯誤處理比較全面,而且能及時應對處理。</p><p> 3.這次課程設(shè)計使我對做系統(tǒng)的認識深刻了許多。雖然在整個設(shè)計過程中遇到很多問題不會解決,但在自己的努力以及同學老師的幫助下,最終完成了該系統(tǒng)。當看
72、到自己做的程序能運行時,心中充滿了成就感。在克服困難的過程中,對自己所學知識的掌握程度也有了比較清楚的了解。綜合起來,主要體現(xiàn)在以下幾個方面:首先,對數(shù)據(jù)結(jié)構(gòu)的掌握還不夠。雖然完成了程序,但是只用到了基本的結(jié)點以及鏈表,在數(shù)據(jù)結(jié)構(gòu)的選擇上避重就輕,覆蓋面較小,不能很好的體現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)的掌握度,同時也缺少了適當?shù)腻憻?,在這方面還需要自己主動去提高。</p><p> 其次,在程序整體的設(shè)計上還不夠完善,各模塊可
73、以適當增加內(nèi)容,界面還可以更加的人性化些,同時可考慮從面向?qū)ο蠓矫嫒胧?,這樣整個程序才具有更強的美觀性與實用性。</p><p> 最后,我覺得該程序還有很大的改進空間,譬如可以用多文件做,這樣功能更強大,也便于以后更好地改進和完善程序;而在程序的內(nèi)容方面,還能增加更多功能,以滿足不同需要的各種要求。</p><p> 但是,值得欣慰的是,該程序基本完成里設(shè)計要求,并能順利運行,界面清
74、晰易理解,且具備各項基本功能,易于操作;而且代碼部分有注釋,簡單易懂。</p><p> 總而言之,這次課程設(shè)計給了我很大啟發(fā),我明白了,不管遇到什么問題,只要抓住根源,不氣餒,從不同方面去攻破它,終究會成功,生活也是如此。</p><p><b> 參考文獻</b></p><p> [1] 譚浩強. C++程序設(shè)計. 北京:清華大學出
75、版社,2004.</p><p> [2] 王翠茹.劉軍. 數(shù)據(jù)結(jié)構(gòu). 北京:中國電力出版社,2006.</p><p> [3] 蘇仕華.賈伯琪,黃學俊. 數(shù)據(jù)結(jié)構(gòu)解析. 安徽:中國科學技術(shù)大學出版社,2009.</p><p> [4] 秦峰.袁志祥. 數(shù)據(jù)結(jié)構(gòu)例題詳解與課程設(shè)計指導. 北京:中國科學技術(shù)出版社,2009.</p><p
76、> 附錄1:停車場管理問題</p><p> /*停車場管理系統(tǒng)*/</p><p> #include<stdio.h></p><p> #include<stdlib.h> </p><p> #include<string.h></p><p> #incl
77、ude<malloc.h></p><p> /*------------------------------------------------------------------------------*/ </p><p> #define Max 10</p><p> int getn()</p><p><
78、b> {</b></p><p><b> int n;</b></p><p> printf("歡迎您光臨吉林市停車場,");</p><p> printf("本停車場每小時3元,不足一小時按一小時算.\n");</p><p> printf(&
79、quot;請輸入停車場可容納的車(最多20輛):");</p><p> scanf("%d",&n);</p><p> fflush(stdin);</p><p><b> do{</b></p><p> if(n<1 || n>10)</p>
80、<p><b> {</b></p><p> printf("輸入的車輛數(shù)不在要求范圍內(nèi),請重新輸入!");</p><p> scanf("%d",&n);</p><p> fflush(stdin);</p><p><b> }&
81、lt;/b></p><p> else break;</p><p> }while(n<1 || n>10);</p><p><b> return n;</b></p><p><b> }</b></p><p> typedef str
82、uct time{ </p><p> int hour; </p><p><b> int min; </b></p><p> }Time; /*時間結(jié)點*/ </p><p> typedef struct node{ </p><p> char num[10];</p&
83、gt;<p> Time reach; </p><p> Time leave; </p><p> }CarNode; /*車輛信息結(jié)點*/ </p><p> typedef struct NODE{ </p><p> CarNode *stack[Max+1];</p><p><
84、;b> int top; </b></p><p> }SeqStackCar; /*模擬車站*/</p><p> typedef struct car{ </p><p> CarNode *data;</p><p> struct car *next; </p><p> }Que
85、ueNode; </p><p> typedef struct Node{ </p><p> QueueNode *head; </p><p> QueueNode *rear; </p><p> }LinkQueueCar; /*模擬通道*/ </p><p> void InitStack(Seq
86、StackCar *,int n); /*聲明棧*/</p><p> int InitQueue(LinkQueueCar *); /*聲明便道*/</p><p> int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*車輛進站*/</p><p> void Leave(SeqStackCar *,SeqS
87、tackCar *,LinkQueueCar *,int n); /*車輛出站*/</p><p> void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ </p><p> void InitStack(SeqStackCar *s,int n) /*初始化棧*/</p><p><b> { <
88、/b></p><p><b> int i; </b></p><p> s->top=0; </p><p> for(i=0;i<=n;i++)</p><p> s->stack[s->top]=NULL; </p><p><b> }
89、</b></p><p> int InitQueue(LinkQueueCar *Q) /*初始化便道*/ </p><p><b> { </b></p><p> Q->head=(QueueNode *)malloc(sizeof(QueueNode)); </p><p> if(Q-
90、>head!=NULL) </p><p><b> { </b></p><p> Q->head->next=NULL; </p><p> Q->rear=Q->head; </p><p> return(1); </p><p><b>
91、 } </b></p><p> else return(-1); </p><p><b> } </b></p><p> void PRINT(CarNode *p) /*打印出站車的信息*/</p><p><b> { </b></p><p>
92、 int A1,A2,B1,B2;</p><p> int a,b,c; </p><p> printf("\n請輸入離開的時間:/**:**/"); </p><p> scanf("%d:%d",&(p->leave.hour),&(p->leave.min));</p>
93、<p> fflush(stdin);</p><p><b> do{</b></p><p> if(p->leave.hour<p->reach.hour || (p->leave.hour==p->reach.hour && p->leave.min<p->reach.min)
94、)</p><p><b> {</b></p><p> printf("輸入離開時間比進站時間早,請重新輸入!\n");</p><p> scanf("%d:%d",&(p->leave.hour),&(p->leave.min));</p><
95、p> fflush(stdin);</p><p><b> }</b></p><p> if(p->leave.hour<0 || p->leave.hour>=24 || p->leave.min<0 || p->leave.min>=60)</p><p><b>
96、 {</b></p><p> printf("輸入的時間格式有錯,請重新輸入!");</p><p> scanf("%d:%d",&(p->leave.hour),&(p->leave.min));</p><p> fflush(stdin);</p><
97、p><b> }</b></p><p> else break;</p><p> }while(p->leave.hour<p->reach.hour || (p->leave.hour==p->reach.hour && p->leave.min<p->reach.min) || p-&
98、gt;leave.hour<0 || p->leave.hour>=24 || p->leave.min<0 || p->leave.min>=60);</p><p> printf("車場現(xiàn)在有一輛車離開,請便道里的第一輛車進入車場!\n");</p><p> printf("出站的車的車牌號為:"
99、);</p><p> puts(p->num);</p><p> printf("\n");</p><p> A1=p->reach.hour; </p><p> A2=p->reach.min; </p><p> B1=p->leave.hour; &l
100、t;/p><p> B2=p->leave.min;</p><p> a=(B1-A1)*60+B2-A2;</p><p><b> if(a>=60)</b></p><p><b> {</b></p><p><b> b=a/60;&l
101、t;/b></p><p><b> c=a-60*b;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b>
102、; b=0;</b></p><p><b> c=a;</b></p><p><b> }</b></p><p> printf(" 謝謝光臨.");</p><p> printf("\n 收
103、 據(jù)\n");</p><p> printf("================================== 車牌號: ");</p><p> puts(p->num);</p><p> printf("\n");</p><p> printf(&q
104、uot;===================================================\n");</p><p> printf("|進車場時刻 | 出車場時刻 | 停留時間 | 應付(元)|\n");</p><p> printf("===========================================
105、=========\n");</p><p> printf("| %d:%d",p->reach.hour,p->reach.min);</p><p> printf(" | %d:%d",p->leave.hour,p->leave.min);</p><p> pr
106、intf(" | %d:%d",b,c);</p><p> printf(" | %2.1f",0.1*a);</p><p> printf(" |\n");</p><p> printf("---------------------------------
107、--------------------\n");</p><p><b> free(p);</b></p><p><b> } </b></p><p> int Arrival(SeqStackCar *Enter,LinkQueueCar *W,int n) /*車輛到達*/</p>
108、<p><b> { </b></p><p> CarNode *p; </p><p> QueueNode *t; </p><p><b> int a,b;</b></p><p> p=(CarNode *)malloc(sizeof(CarNode)); <
109、;/p><p> flushall(); </p><p> printf("\n請輸入車牌號(例:吉B12345):\n");</p><p> printf("請嚴格按照要求輸入車牌號,否則系統(tǒng)會出錯!\n");</p><p><b> do{</b></p>
110、<p> a=strlen("陜A1234");</p><p> b=strlen(gets(p->num));</p><p> fflush(stdin);</p><p><b> if(a!=b)</b></p><p><b> {</b>
111、;</p><p> printf("輸入車牌號格式錯誤,請重新輸入!\n");</p><p> gets(p->num);</p><p> fflush(stdin);</p><p><b> }</b></p><p> else break;<
112、/p><p><b> if(a!=b)</b></p><p> printf("輸入車牌號格式錯誤,請重新輸入!\n");</p><p> }while(a!=b);</p><p> if(Enter->top<n) /*車場未滿,車進車場*/</p><p
113、><b> { </b></p><p> Enter->top++; </p><p> printf("\n車輛在車場第%d位置.",Enter->top); </p><p> fflush(stdin);</p><p> printf("\n請輸入到達時
114、間:/**:**/"); </p><p> scanf("%d:%d",&(p->reach.hour),&(p->reach.min));</p><p> fflush(stdin);</p><p><b> do{</b></p><p> if
115、(p->reach.hour<0 || p->reach.hour>=24 || p->reach.min<0 || p->reach.min>=60)</p><p><b> {</b></p><p> printf("輸入的時間格式有錯,請重新輸入!");</p><p
116、> scanf("%d:%d",&(p->reach.hour),&(p->reach.min));</p><p> fflush(stdin);</p><p><b> }</b></p><p><b> else</b></p><
117、p><b> break;</b></p><p> }while(p->reach.hour<0 || p->reach.hour>=24 || p->reach.min<0 || p->reach.min>=60);</p><p> Enter->stack[Enter->top]=p; &
118、lt;/p><p> return(1); </p><p><b> } </b></p><p> else /*車場已滿,車進便道*/ </p><p><b> { </b></p><p> printf("\n請該車在便道稍作等待!")
119、;</p><p> t=(QueueNode *)malloc(sizeof(QueueNode)); </p><p> t->data=p; </p><p> t->next=NULL; </p><p> W->rear->next=t; </p><p> W->r
120、ear=t; </p><p> return(1); </p><p><b> } </b></p><p><b> } </b></p><p> void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W,int
121、n)</p><p> { /*車輛離開*/ </p><p> int i, room; </p><p> CarNode *p,*t; </p><p> QueueNode *q; </p><p> /*判斷車場內(nèi)是否有車*/ </p><p> if(Enter->
122、top>0) /*有車*/ </p><p><b> { </b></p><p> while(1) /*輸入離開車輛的信息*/ </p><p><b> { </b></p><p> printf("\n請輸入要離開的車在車場的位置/1--%d/:"
123、,Enter->top);</p><p> scanf("%d",&room);</p><p> fflush(stdin); </p><p> if(room>=1&&room<=Enter->top) break; </p><p><b> }
124、</b></p><p> while(Enter->top>room) /*車輛離開*/ </p><p><b> { </b></p><p> Temp->top++; </p><p> Temp->stack[Temp->top]=Enter->stac
125、k[Enter->top]; </p><p> Enter->stack[Enter->top]=NULL; </p><p> Enter->top--; </p><p><b> } </b></p><p> p=Enter->stack[Enter->top];
126、</p><p> Enter->stack[Enter->top]=NULL; </p><p> Enter->top--; </p><p> while(Temp->top>=1) </p><p><b> { </b></p><p> Ente
127、r->top++; </p><p> Enter->stack[Enter->top]=Temp->stack[Temp->top]; </p><p> Temp->stack[Temp->top]=NULL; </p><p> Temp->top--; </p><p><b
128、> } </b></p><p><b> PRINT(p);</b></p><p> /*判斷通道上是否有車及車站是否已滿*/ </p><p> if((W->head!=W->rear)&&Enter->top<n) /*便道的車輛進入車場*/</p>&l
129、t;p><b> {</b></p><p> q=W->head->next; </p><p> t=q->data; </p><p> Enter->top++; </p><p> printf("\n現(xiàn)在請便道上的車進入車場.該車的車牌號為:");&
130、lt;/p><p> puts(t->num);</p><p> printf("\n該車進入車場第%d位置.",Enter->top);</p><p> printf("\n請輸入現(xiàn)在的時間(即該車進站的時間)/**:**/:");</p><p> scanf("%d:
131、%d",&(t->reach.hour),&(t->reach.min));</p><p> fflush(stdin); </p><p><b> do{</b></p><p> if(t->reach.hour<0 || t->reach.hour>=24 || t-
132、>reach.min<0 || t->reach.min>=60)</p><p><b> {</b></p><p> printf("輸入的時間格式有錯,請重新輸入!");</p><p> scanf("%d:%d",&(t->reach.hour),&
133、amp;(t->reach.min));</p><p> fflush(stdin);</p><p><b> }</b></p><p><b> else</b></p><p><b> break;</b></p><p>
134、}while(t->reach.hour<0 || t->reach.hour>=24 || t->reach.min<0 || t->reach.min>=60);</p><p> W->head->next=q->next; </p><p> if(q==W->rear) W->rear=W->
135、head; </p><p> Enter->stack[Enter->top]=t; </p><p><b> free(q); </b></p><p><b> } </b></p><p> else printf("\n目前便道里沒有車.\n");
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 停車場管理-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---停車場管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告停車場管理系統(tǒng)
- 停車場管理系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)停車場管理系統(tǒng)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)停車場管理系統(tǒng)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)---停車場管理課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)停車場管理系統(tǒng)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理系統(tǒng)報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----停車場管理系統(tǒng)設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---停車場管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-- 停車場管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理系統(tǒng)
評論
0/150
提交評論