![課程設(shè)計(jì)總結(jié)報(bào)告模板_第1頁(yè)](http://file4.renrendoc.com/view/3f8e20d4893c4e3ccc1a162dbf662e30/3f8e20d4893c4e3ccc1a162dbf662e301.gif)
![課程設(shè)計(jì)總結(jié)報(bào)告模板_第2頁(yè)](http://file4.renrendoc.com/view/3f8e20d4893c4e3ccc1a162dbf662e30/3f8e20d4893c4e3ccc1a162dbf662e302.gif)
![課程設(shè)計(jì)總結(jié)報(bào)告模板_第3頁(yè)](http://file4.renrendoc.com/view/3f8e20d4893c4e3ccc1a162dbf662e30/3f8e20d4893c4e3ccc1a162dbf662e303.gif)
![課程設(shè)計(jì)總結(jié)報(bào)告模板_第4頁(yè)](http://file4.renrendoc.com/view/3f8e20d4893c4e3ccc1a162dbf662e30/3f8e20d4893c4e3ccc1a162dbf662e304.gif)
![課程設(shè)計(jì)總結(jié)報(bào)告模板_第5頁(yè)](http://file4.renrendoc.com/view/3f8e20d4893c4e3ccc1a162dbf662e30/3f8e20d4893c4e3ccc1a162dbf662e305.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)課程編號(hào):B數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)總結(jié)報(bào)告姓名 學(xué)號(hào) 班級(jí) 指導(dǎo)教師姜琳穎實(shí)驗(yàn)名稱數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)開(kāi)設(shè)學(xué)期2017-2018第一學(xué)期開(kāi)設(shè)時(shí)間第1周第3周報(bào)告日期2017年9月12日評(píng)定成績(jī)?cè)u(píng)定人評(píng)定日期2017-9-25東北大學(xué)軟件學(xué)院第一章需求分析。問(wèn)題的定義設(shè)計(jì)一個(gè)景點(diǎn)管理系統(tǒng),分為管理員和游客兩部分,需要幫助景區(qū)更為方便的管理景區(qū),規(guī)劃道路,幫助游客更為方便地找到自己想要的信息問(wèn)題分析為游客提供景點(diǎn)分布圖,景點(diǎn)簡(jiǎn)介,景點(diǎn)查詢,以及查詢路線選擇等相關(guān)建議;為管理員提供添加
2、景點(diǎn),刪除景點(diǎn),添加道路,以及發(fā)布公告的功能,考慮到景區(qū)的實(shí)際情景,整個(gè)項(xiàng)目應(yīng)該設(shè)計(jì)為一個(gè)手機(jī)App,這樣才能滿足用戶需求,方便用戶操作研究意義這是一個(gè)與實(shí)際相連的小項(xiàng)目,以方便游客游覽和景區(qū)管理作為最終目的,提供高效的算法,和簡(jiǎn)潔的界面,方便用戶操作,這樣有利于學(xué)生寫(xiě)的作業(yè)與社會(huì)實(shí)際情況相連,考慮確實(shí)需求 第二章系統(tǒng)設(shè)計(jì)2.1總體設(shè)計(jì) 基本數(shù)據(jù)結(jié)構(gòu): eq oac(,1)list: MyListprivate final static int INIT_CAPACITY;private Object mList;private int mCurrentCapacity;private int
3、 mSize;public void add(T item); public void remove(int index); public T get(int index); public void set(int index, T item); public int size(); eq oac(,2)隊(duì)列: MyQueueprivate Object queue; private int front; private int nItems; private int maxSize = 100;public void add(T item)public T remove()public bo
4、olean isEmpty()public int size() eq oac(,3)棧: MyStack private int capacity = 10; private int length = 0; private Object stack;public boolean isEmpty()public boolean isFull()public void push(Object obj)public T pop()public int size() eq oac(,4)鄰接表: Graphpublic MyList adjList;public MyList visit; eq o
5、ac(,5)邊: EdgeNodepublic int index; public String name;public boolean flag = true;public int value; public EdgeNode nextArc; eq oac(,6)點(diǎn): VertexNode public String name;public Attraction attraction;public EdgeNode firstArc = new EdgeNode();游客操作的定義 : eq oac(,1)提供所有景點(diǎn)之間的距離: void outputGraph() eq oac(,2)
6、搜索相關(guān)的景點(diǎn): ArrayList findByName(String keyword) eq oac(,3)通過(guò)歡迎度來(lái)排序: ArrayList sortByPopular() eq oac(,4)通過(guò)岔路數(shù)進(jìn)行排序: ArrayList sortByStreetNum() eq oac(,5)找最短路徑的長(zhǎng)度: int shortestDistance(String start,String end) eq oac(,6)找最短路: String shortestRoute(String Start,String end) eq oac(,7)獲取所有景點(diǎn): ArrayList get
7、AllAttraction() eq oac(,8)獲取所有的道路: ArrayList getAllStreet() eq oac(,9)提供導(dǎo)游回路: String outputloop() eq oac(,10)登記車(chē)輛: String registerCar(String license) eq oac(,11)駛出車(chē)輛: String leaveCar(String lisence) 管理員操作定義: eq oac(,1)添加新景點(diǎn): void addAtrraction(VertexNode newAttraction) eq oac(,2)添加道路: String addStre
8、et(String start,String end,int distance) eq oac(,3)刪除景點(diǎn): boolean deletAttraction(String name) eq oac(,4)維護(hù)道路: void maintainStreet(String start,String end) eq oac(,5)發(fā)布公告: void sendNotice() 2.2程序設(shè)計(jì) Dijkstra算法找最短路徑 eq oac(,1)初始時(shí),S只包含了初始的起點(diǎn),即S=v,v的距離為0。U包含著v之外的所有節(jié)點(diǎn),即U=其余節(jié)點(diǎn),若v與U中頂點(diǎn)有邊,則正常有權(quán)值,若不是u與v無(wú)直接的邊相
9、接,則的權(quán)值為無(wú)窮大。 eq oac(,2)從U中選取一個(gè)距離v最小的頂點(diǎn)k,把k,加入S中。 eq oac(,3)以k為新考慮的中間點(diǎn),修改U中各頂點(diǎn)的距離,若從源點(diǎn)v到頂點(diǎn)u的距離(經(jīng)過(guò)頂點(diǎn)k)比原來(lái)距離(不經(jīng)過(guò)頂點(diǎn)k)短,則修改頂點(diǎn)u的距離值,修改后的距離值為頂點(diǎn)k的距離加上邊上的權(quán)。 eq oac(,4)重復(fù)步驟2和3直到所有頂點(diǎn)都包含在S中哈密爾頓回路找最短的導(dǎo)游回路 eq oac(,1)初始時(shí),S中只包含一個(gè)起點(diǎn),即S=v eq oac(,2)遍歷所有與v,相鄰的節(jié)點(diǎn),選取最近的頂點(diǎn)k加入,檢查集合中是否形成了回路,若存在,則換其他點(diǎn),若沒(méi)有,則k便成了新的v節(jié)點(diǎn) eq oac(,
10、3)重復(fù)步驟2,直到將所有節(jié)點(diǎn)都包含在S中 第三章 系統(tǒng)實(shí)現(xiàn)與調(diào)試 3.1 景區(qū)路線圖的初始化 我將所需要的數(shù)據(jù)放進(jìn)了數(shù)據(jù)庫(kù),然后再錄入數(shù)據(jù),通過(guò)Graph,VertexNode和EdgeNode三個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)保存這個(gè)鄰接表 while (rs.next() / 初始各頂點(diǎn)信息String name = rs.getString(name);String introduce = rs.getString(introduce);int popularity = rs.getInt(popularity);int streetNum = rs.getInt(streetnum);G.adjList
11、.add(new VertexNode(name, new Attraction(name, introduce, popularity, streetNum);G.adjList.get(i).firstArc = null;G.visit.add(false);i+;v = G.adjList.size();/ 初始化頂點(diǎn)數(shù)目的信息sql = select * from route;stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();i = 0;while (rs.next() / 根據(jù)路徑形成圖String start =
12、 rs.getString(start);String end = rs.getString(end);int v1 = Index(start);int v2 = Index(end); EdgeNode enode1 = new EdgeNode(); = start;enode1.index = v1;enode1.value = rs.getInt(distance);enode1.nextArc = G.adjList.get(v2).firstArc;G.adjList.get(v2).firstArc = enode1; EdgeNode enode2 =
13、new EdgeNode(); = end;enode2.index = v2;enode2.value = rs.getInt(distance);enode2.nextArc = G.adjList.get(v1).firstArc;G.adjList.get(v1).firstArc = enode2; 3.2 景區(qū)管理模塊(1)添加景點(diǎn)public void addAtrraction(VertexNode newAttraction) / 添加新景點(diǎn) G.adjList.add(newAttraction); v = G.adjList.size();(2)刪除
14、景點(diǎn) enode = new EdgeNode();enode = G.adjList.get(v).firstArc;while (enode != null) EdgeNode pEnode = new EdgeNode();EdgeNode bEnode = new EdgeNode();pEnode = G.adjList.get(enode.index).firstArc;bEnode = G.adjList.get(enode.index).firstArc;if (pEnode.index = v) G.adjList.get(enode.index).firstArc = pE
15、node.nextArc; else pEnode = pEnode.nextArc;while (pEnode != null) if (pEnode.index = v) bEnode.nextArc = pEnode.nextArc;break;pEnode = pEnode.nextArc;enode = enode.nextArc;G.adjList.remove(v); (3)添加道路 int v1 = Index(start);int v2 = Index(end); EdgeNode enode1 = new EdgeNode(); = start;eno
16、de1.index = v1;enode1.value = distance;enode1.nextArc = G.adjList.get(v2).firstArc;G.adjList.get(v2).firstArc = enode1; EdgeNode enode2 = new EdgeNode(); = end;enode2.index = v2;enode2.value = distance;enode2.nextArc = G.adjList.get(v1).firstArc;G.adjList.get(v1).firstArc = enode2; 3.3 景點(diǎn)
17、的查找與排序(1)景點(diǎn)的查找public ArrayList findByName(String keyword) / 搜索相關(guān)的景點(diǎn)ArrayList result = new ArrayList();ArrayList attractions = getAllAttraction();for (int i = 0; i = 0 | attractions.get(i).introduce.indexOf(keyword) = 0) result.add(attractions.get(i);return result;(2)景點(diǎn)排序 public ArrayList sortByPopul
18、ar() / 通過(guò)歡迎度來(lái)排序ArrayList attractions = getAllAttraction();for (int i = 0; i attractions.size(); i+) for (int j = i + 1; j attractions.size(); j+) if(attractions.get(i).popularity attractions.get(j).popularity) Attraction temp = attractions.get(i);attractions.set(i, attractions.get(j);attractions.set
19、(j, temp);return attractions;3.4 兩景點(diǎn)間最短路徑(1)得到最短路徑的長(zhǎng)度 EdgeNode enode = G.adjList.get(x).firstArc;/ 初始化distancewhile (enode != null) distanceenode.index = enode.value;enode = enode.nextArc; for (int k = 1; k v; k+) int second = inf;int pIndex = x;/ 選取用于松弛的點(diǎn)for (int i = 0; i v; i+) if (!(G.visit.get(i
20、) & distancei second) pIndex = i;second = distancei;G.visit.set(pIndex, true);EdgeNode enode1 = G.adjList.get(pIndex).firstArc;for (int i = 0; i (distancepIndex + temp) distancei = distancepIndex + temp; return distanceIndex(end); (2)得到最短路徑public String shortestRoute(String start, String end) int di
21、stance = new intv + 1;int p = new intv + 1v + 1;/ 初始化distancefor (int i = 0; i v; i+) distancei = inf;for (int i = 0; i v; i+) for (int j = 0; j v; j+) pij = -1;/ 初始化visit的值for (int i = 0; i v; i+) G.visit.set(i, false);int x = Index(start);distancex = 0;G.visit.set(x, true);EdgeNode enode = G.adjLi
22、st.get(x).firstArc;/ 初始化distancewhile (enode != null) distanceenode.index = enode.value;/ 若存在直接路徑penode.index0 = x;penode.index1 = enode.index;enode = enode.nextArc; for (int k = 1; k v; k+) int second = inf;int pIndex = x;/ 選取用于松弛的點(diǎn)for (int i = 0; i v; i+) if (!(G.visit.get(i) & distancei second) p
23、Index = i;second = distancei;G.visit.set(pIndex, true);EdgeNode enode1 = G.adjList.get(pIndex).firstArc;for (int i = 0; i (distancepIndex + temp) distancei = distancepIndex + temp;for (int j = 0; j v; j+) pij = ppIndexj;if (pij = -1) / 在pw第一個(gè)等于-1的地方加上頂點(diǎn)wpij = i;break; int pEnd = Index(end);String ro
24、ute = ;/ 最短路徑for (int i = 0; i -1) route += G.adjList.get(ppEndi).name;if (i + 1 = v | ppEndi + 1 = -1) break; else route += -;return route; (3) 導(dǎo)游線路圖設(shè)計(jì)public String outputloop() / 提供導(dǎo)游回路boolean visit = new booleanv + 1;for (int i = 0; i v; i+) visiti = false;int start = 0;/ 先假定從第一個(gè)值開(kāi)始int result = n
25、ew intv + 1;EdgeNode enode = new EdgeNode();int next = start;visitstart = true;int k = 0;int value = inf;while (next != -1) enode = G.adjList.get(next).firstArc;resultk+ = next; next = -1;value = inf; while (enode != null) if (!visitenode.index & enode.value value) next = enode.index;value = enode.v
26、alue;enode = enode.nextArc;if (next != -1) visitnext = true;String ans = ;for (int i = 0; i ;return ans;3.6輸出車(chē)輛的進(jìn)出信息(1)車(chē)輛登記public String registerCar(String license) / TODO Auto-generated method stub String result = ;Car car = new Car(license);if (!parking.isFull() car.setStratDate();parking.push(car
27、); result = 車(chē)輛 + license + 停在 + (MAX_SIZE - parking.size()+1) + 號(hào)停車(chē)場(chǎng); else waitting.add(car);result = 停車(chē)場(chǎng)已經(jīng)滿了,請(qǐng)?jiān)?(MAX_SIZE-waitting.size()+1)+號(hào)便道等候;System.out.println(result);return result;(2)車(chē)輛移出public String leaveCar(String license) / TODO Auto-generated method stub / System.out.println(parking.si
28、ze();String ans = 沒(méi)有這輛車(chē);/在停車(chē)場(chǎng)中找要駛出的車(chē)輛 if(parking.size()0) Car car = parking.pop(); while (!car.getLicense().equals(license)&!parking.isEmpty() quitting.push(car);car = parking.pop(); if(car.getLicense().equals(license) car.setEndDate();ans = 車(chē)輛+car.getLicense()+已經(jīng)駛出,停車(chē)時(shí)間+car.getPeroid()/1000+秒;/將讓位的
29、車(chē)輛依次回歸while (!quitting.isEmpty() parking.push(quitting.pop();/用等待的車(chē)輛來(lái)填補(bǔ)空位if (!waitting.isEmpty() Car pCar = waitting.remove();pCar.setStratDate();parking.push(pCar); /System.out.println(車(chē)輛+pCar.getLicense()+已經(jīng)停入+(MAX_SIZE-parking.size()+1)+停車(chē)場(chǎng)); return ans;第四章系統(tǒng)測(cè)試 1、測(cè)試公告(1)測(cè)試用例:在管理頁(yè)面,嘗試添加公告(2)測(cè)試結(jié)果:
30、eq oac(,1)問(wèn)題:添加的公告,無(wú)法及時(shí)回顯 eq oac(,2)解決方案:添加監(jiān)聽(tīng)函數(shù)EventListener,當(dāng)有公告添加時(shí),將主頁(yè)中顯示公告的部分刷新一下2、測(cè)試最短路(1)測(cè)試用例:查詢兩個(gè)景點(diǎn)之間的距離,填寫(xiě)名字(2)測(cè)試結(jié)果 eq oac(,1)問(wèn)題:當(dāng)輸入地點(diǎn)的名字都是正確時(shí),是沒(méi)有問(wèn)題,但是當(dāng)有景點(diǎn)的名稱輸入錯(cuò)誤,會(huì)有bug生成 eq oac(,2)解決方案:將用戶輸入,改為用戶選擇,提供景點(diǎn)目錄,讓用戶進(jìn)行選擇第五章結(jié)論 系統(tǒng)頁(yè)面展示首頁(yè)模塊此頁(yè)面上方是一個(gè)輪播窗口,提供景區(qū)展示和推廣的照片的內(nèi)容,下方是公告部分,通知所有景點(diǎn)內(nèi)的游客景點(diǎn)展示模塊此頁(yè)面提供查看全部景點(diǎn),對(duì)景點(diǎn)按照歡迎度和岔路數(shù)進(jìn)行排序,和搜索景點(diǎn)功能 路線模塊此模塊包括查詢最短路徑,查詢最短回路,看景點(diǎn)分布圖,以及停
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- N-Ethyl-4-methoxyamphetamine-hydrochloride-生命科學(xué)試劑-MCE-8599
- 2025年度商業(yè)門(mén)面使用權(quán)轉(zhuǎn)讓合同
- 2025年度電梯應(yīng)急救援預(yù)案制定與演練合同
- 2025年度解除租賃合同解除條件爭(zhēng)議調(diào)解協(xié)議書(shū)
- 施工現(xiàn)場(chǎng)安全風(fēng)險(xiǎn)管控制度
- 科技發(fā)展趨勢(shì)宇宙生命探索與地球應(yīng)用
- 個(gè)人房屋租賃給企業(yè)合同范例
- 兩子女離婚財(cái)產(chǎn)分割合同范本
- 2025屆畢業(yè)生就業(yè)實(shí)習(xí)合同協(xié)議
- 個(gè)人委托代理合同書(shū)樣本
- 電子技術(shù)說(shuō)課課件
- 探索者三維建筑結(jié)構(gòu)建模設(shè)計(jì)軟件說(shuō)明書(shū)
- 實(shí)驗(yàn)動(dòng)物飼養(yǎng)人員崗位競(jìng)聘演講范文匯報(bào)報(bào)告范文
- 商業(yè)地產(chǎn)市場(chǎng)競(jìng)品樓盤(pán)市場(chǎng)調(diào)研表格
- 社會(huì)治安視頻監(jiān)控系統(tǒng)項(xiàng)目技術(shù)及設(shè)計(jì)方案
- GB/T 709-2019熱軋鋼板和鋼帶的尺寸、外形、重量及允許偏差
- FZ/T 54007-2019錦綸6彈力絲
- DB11-T 291-2022日光溫室建造規(guī)范
- 2021-2022學(xué)年山東省淄博市高二(下)期末英語(yǔ)試卷(附答案詳解)
- 北師大版高中數(shù)學(xué)選修4-6初等數(shù)論初步全套課件
- 紀(jì)檢知識(shí)答題測(cè)試題及答案
評(píng)論
0/150
提交評(píng)論