計算機軟件及應用太原市公交查詢管理系統_第1頁
計算機軟件及應用太原市公交查詢管理系統_第2頁
計算機軟件及應用太原市公交查詢管理系統_第3頁
計算機軟件及應用太原市公交查詢管理系統_第4頁
計算機軟件及應用太原市公交查詢管理系統_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、目錄第一章 系統概述11.1建立系統的必要性11.2可行性分析11.3開發環境2第二章 系統需求分析32.1 系統需求32.2 功能需求32.3 組織結構42.4業務流程圖42.5數據流程圖52.6數據字典6第三章 系統設計部分83.1系統結構 83.2系統功能設計83.3系統設計方案 93.4代碼設計93.5輸入/輸出設計93.6數據庫設計·10第四章 系統實現174.1 系統功能截圖 174.2源代碼17第五章 系統調試與測試29 5.1調試29 5.2測試29結束語31參考文獻32第一章 系統概述1.1建立系統的必要性時代的進步,經濟的增長,伴隨著人類發展的進程,生活中的各種信

2、息也逐漸數字化、清晰化。公交車作為現代城市生活中一種重要的交通工具,其數量增多,車型也不再單一,雇用的司機增多,這樣使得公交車公司的車輛信息管理復雜化。在這樣的背景下,提出了計算機管理的公交車管理系統,輔助公交車運營公司對車輛進行管理,實現公交車、公交線路和司機管理科學化,更合理的利用資源。 城市公交是專門服務于市民出行的客運企業。它是城市社會和經濟活動的重要組成部分。伴隨著國民經濟和城市建設的快速發展,城市經濟的繁榮,人口的增加,城市必須解決好人們出行的需求。城市公交直接關系著城市的經濟發展和居民生活,對城市經濟具有全局性、先導性的影響,城市公交以其方便、快捷、容量大而成為城市交通的主體。但

3、是隨著公交系統的龐大,人們很難得到準確的公交信息,這樣給一些人的出行就帶來了不便。因此,急需一個方便、快捷的公交信息查詢方式,本系統通過瀏覽器查詢,實現中心控制、自動更新、更多的查詢方式等等更多更強大的功能。1.2可行性分析交通信息科技課程設計是數據庫課程設計內容之一,它是對交通信息技術課程的實際應用,通過該課程設計,使學生加深對課堂教學內容的理解,掌握信息化技術在城市交通中的應用和開發,增強學生分析和解決實際交通能力的問題,為在交通智能系統開發中應用相關知識解決實際問題打下基礎。當前我國城市公交乘客信息系統的發展處于一個較落后的水平,廣大乘客可以獲得信息的方式很少,需要大力發展我國的城市公交

4、乘客信息系統,本設計以某城市公交系統為開發對象,基于數據庫查詢技術,完成一個城市公交系統的出行線路查詢軟件。該系統主要根據實際的需求,以需求分析、系統的設計目標,并且重點進行系統功能模塊的詳細設計和實現,采用了VisualStudio.NET2003開發平臺和SQLServer2000數據庫,實現了車輛信息管理、司機信息管理、線路信息管理和車輛分配線路管理等功能。在針對數據操作方面,主要通過存儲過程的方式實現數據的添加、刪除和查詢等操作。通過系統測試,解決了公交車輛管理系統主要問題。本系統的核心是對選擇好的車次進行路線的查詢,或者輸入所要查詢的車站名,點擊“查詢”按鈕,查詢所有含有該站的車次及

5、相應的停靠站。此處既可以“精確查詢”也可以是“模糊查詢”,“模糊查詢”主要方便那些對站名不是很清楚,但知道其中的一部分的乘客,系統可以幫助他們快速的查出。1.3開發環境操作系統:Windows7開發軟件:MicrosoftVisualStudio.NET2003 數據庫:MicrosoftSQLServer2000第二章系統需求分析2.1 系統需求我國城市公交乘客信息系統的發展處于一個落后的水平,廣大乘客可以獲得信息的方式很少,公交信息的完整性和準確性得不到保證,而且還沒有專門的機構負責信息的發布和管理。出于這個目的,在老師的指導下,我設計了這個城市公交線路查詢系統。在對公交乘客出行心理特征進

6、行分析的基礎上,考慮乘客選擇公交線路決策的因素,進行程序關鍵部分的框架設計。公交車管理系統是一個協助公交車運營商各單位對車輛進行全面的管理。在此之前,對于線路與車輛的管理采用的方式幾乎都是手工管理,其中的弊端顯而易見,即容易造成檔案資料的遺失,控制不集中,管理不規范等等問題。因此,在管理系統的實現上應該滿足以下需求:1.為保障系統的穩定性,對于可能發生問題的輸入要進行檢驗,同時要給出合理的提示信息。2.在管理上滿足公交車管理職能的基本需求,能夠方便的進行司機信息管理、車輛信息管理、線路信息管理和車輛與線路的分配管理。3.為公交車管理系統提供數據支持。4.與傳統的手工管理相比,應該添加用戶權限的

7、管理機制。保證系統安全性。 2.2 功能需求 根據對上述管理系統的業務流程、要求以及所要實現的目標,可以擬出以下的需求目標: 1、人員管理:有關司機各種信息的輸入、查詢和修改,包括司機姓名、性別、出生日期、家庭住址、初次領證時間、執照號碼、準駕車型、有效期起始時間、有效期結束時間等。2、車輛管理:車輛信息的輸入、查詢和修改,包括車號、類型、車主、發動機號、車架號、廠牌型號、車輛總質量、核定載客、登記時間、發證時間、顏色等。3、線路管理:線路信息的錄入、修改和查詢,包括班車號、司機姓名、首發班車時間、末班車時間、運行公里數、耗油量等。4、車輛分配線路管理:一個城市的運營線路可能復雜且數據量極大,

8、系統用戶可以進行線路的規劃管理。實現對車輛和線路分配的管理,包括添加、修改和刪除操作。5、車輛與司機的分配管理:為了維護好車輛,要求司機做好車輛的日程維護工作,落實具體責任。2.3 組織結構公交管理系統的整體結構分為公交管理信息前臺和公交管理信息后臺,管理信息前臺主要負責用戶可見系統的管理,包括會員登錄、會員信息維護、會員服務、乘車信息查詢、信息查詢、用戶投訴和友情鏈接。管理信息后臺主要通過系統工作人員來實現,進行系統維護、服務維護和系統維護等。公交管理信息前臺公交管理信息后臺會員登錄會員信息維護會員服務乘車信息查詢信息查詢用戶投訴友情鏈接線路維護服務維護系統維護公交管理系統圖2.1公交查詢管

9、理系統組織結構2.4業務流程圖根據系統的需求分析,得到本系統的功能要求如下:1.車輛信息的設置管理:系統合法用戶可以根據公司具體情況設置關于車輛的具體資料檔案。2.權限管理:為了很好的保證系統的安全性,公司相關負責人可以根據實際情況添加和刪除系統用戶。3.線路檔案管理:一個城市的運營線路可能復雜且數據量極大,系統用戶可以進行線路的規劃管理。4.站點管理:為了精確地為乘客提供便利,以及便于公交管理處工作人員的管理,對站點的分配進行規劃。5.站點單位管理:實現公交內部站點單位的各個方面的管理。圖2.2 公交查詢管理系統業務流程圖2.5數據流程圖從公交車系統總部查詢司機檔案和車輛檔案時需要通過檔案科

10、,其檔案科儲存所有司機和車輛的檔案。公交車查詢前臺工作是通過管理處實現,管理處主要負責車輛運行線路、站點管理和車輛與站點單位管理。最后系統工作人員定時需要對系統進行安全維護。 司機檔案公交車系統總部檔案處理 系統權限檔案安全保護 車輛檔案線路信息資料 車輛運行線路系統內部設置 站點單位管理 站點管理圖2.3 公交查詢管理系統數據流程圖2.6數據字典(1)登錄表名字:登錄查詢表別名:描述:登錄名及密碼定義:字符位置:公交車系統總部(2)司機檔案表名字:司機名別名:描述:對司機檔案的查詢定義:字符、字母位置:檔案科(3)車輛檔案表名字:車輛檔案表別名:描述:對車輛的出行狀況及時間進行查詢定義:字符

11、、數字位置:檔案科(4)車輛運行線路表名字:車輛運行線路表別名:描述:對指定的車輛進行線路查詢定義:字符、字母位置:管理處(5)車輛設置管理表名字:車輛設置管理表別名:描述:對車輛進行管理及其分配定義:字符、字母位置:管理處(6)車輛與司機分配表名字:車輛與司機分配表別名:描述:對司機與車輛的分配管理定義:字符、字母位置:管理處第三章 系統設計3.1系統結構系統開發應用的是C/S 結構,C/S結構軟件(即客戶機/服務器模式)分為客戶機和服務器兩層,客戶機不是毫無運算能力的輸入、輸出設備,而是具有了一定的數據處理和數據存儲能力,通過把應用軟件的計算和數據合理地分配在客戶機和服務器兩端,可以有效地

12、降低網絡通信量和服務器運算量。由于服務器連接個數和數據通信量的限制,這種結構的軟件適于在用戶數目不多的局域網內使用。國內目前的大部分ERP(財務)軟件產品即屬于此類結構。目前大多數應用軟件系統都是Client/Server形式的兩層結構,由于現在的軟件應用系統正在向分布式的Web應用發展,Web和Client/Server 應用都可以進行同樣的業務處理,應用不同的模塊共享邏輯組件;因此,內部的和外部的用戶都可以訪問新的和現有的應用系統,通過現有應用系統中的邏輯可以擴展出新的應用系統。這也就是目前應用系統的發展方向。傳統的CS體系結構雖然采用的是開放模式,但這只是系統開發一級的開放性,在特定的應

13、用中無論是Client端還是Server端都還需要特定的軟件支持。由于沒能提供用戶真正期望的開放環境,C/S結構的軟件需要針對不同的操作系統系統開發不同版本的軟件, 加之產品的更新換代十分快,已經很難適應百臺電腦以上局域網用戶同時使用。而且代價高,效率低。3.2系統功能設計公交查詢系統的應用背景為:方便市民搭乘公交車出行、實時查詢公交信息、及時更新查詢數據。因此該系統主要功能劃分模塊如下:(1)查詢系統模塊該模塊實現公交查詢功能,可實現按線路和站點兩種查詢方式。(2)基本信息錄入、更新模塊信息更新:系統允許管理員級別的用戶對數據進行錄入、修改且存盤操作。信息統計:系統允許管理員級別的用戶對數據

14、進行統計、編輯、刪除的操作。保證現庫的真實性和實時性。(3)打印輸出系統可以將用戶查詢到的內容動態生成報表,并打印輸出。查詢系統基本信息錄入、更新打印輸出線路查詢站點查詢信息更新信息統計生成報表打印輸出公交查詢管理子系統圖3.1 公交查詢管理系統功能模塊圖3.3系統設計方案公交車管理系統是一個小型的數據庫系統。所以這里我們選擇SQL Server 數據庫和JAVA技術進行開發。Microsoft SQL Server 是一種關系型數據庫管理系統。首先建立SQL Server數據庫中的線路表其中包括車次編號、上行線、下行線和線路類型4中屬性列,車次信息表其中包括車次編號、所屬公司、票價和運營時間

15、4種屬性,站點信息表包括站點名和臨近建筑物2種屬性,管理員信息表包括用戶名和密碼兩種屬性。實現用戶的使用和管理員的管理設計。然后對應填入數據并且通過觸發器實現剩余時間等于計劃時間減完成時間的功能。最后,在JAVA中編入程序實現要求。3.4代碼設計該系統所涉及的代碼,一方面體現了系統內部的管理層次,另一方面也便于系統輸入和輸出操作。在系統運行過程中,用戶查詢公交線路時,只需登錄界面后在線路和站名中輸入相關信息,系統便自動將其信息調出來,用戶可以隨時為滿足自己的需求進行系統查詢。3.5輸入/輸出設計公交查詢管理系統是一種服務于大眾的需求系統,在系統的輸入、輸出設計上遵循的是滿足用戶需求的同時也要便

16、于使用。輸入界面的窗口要考慮到屏幕格式以及降低數據輸入的錯誤率,為此在程序中加入了對輸入數據的校驗和判斷等功能,如在輸入界面時只需輸入線路或站名即可,系統可根據所輸入的信息進行系統查詢,得到所需信息或與之相近的信息內容進行輸出。用戶在輸入和輸出界面中可根據自己的需求隨時通過系統聯機查詢。下面為輸入界面:圖3.2 輸入界面3.6數據庫設計數據庫技術作為數據管理技術,是計算軟件領域的一個重要分支,產生于60年代末。現已形成相當規模的理論體系和實用技術。優秀的數據庫設計是成功的基石。萬丈高樓平地起,數據庫設計如同高樓的基石,是開發高品質應用的前提。本任務主要完成該系統的后臺數據庫部分,研究的內容主要

17、包括以下幾部分:1、要求查閱資料,通過實踐完成以上工作。2、要求從系統角度出發整體分析和構建應用系統,充分利用開發環境提供的開發技術,開發出界面友好、功能實用的應用系統。3、采用軟件工程的方法完成本設計,培養軟件開發綜合能力、軟件系統架構設計能力和軟件過程實施能力。4、通過開發系統,了解公交客運公司管理等相關知識3.6.1概念設計概念設計的目標是產生反映城市公交查詢系統需求的數據庫概念結構,即概念模式。概念模式是獨立于數據庫邏輯結構,獨立于數據庫的DBMS。1)E-R模型E-R模型是對現實世界的一種抽象,它的主要成分是實體、聯系和屬性,使用這三種成分,我們可以建立許多應用環境的ER模型。2)E

18、-R模型的操作在利用ER模型進行概念設計的過程中,常常需要對ER圖進行種種變換,這些變換又成為ER模型的操作,包括實體類型、聯系類型和屬性的分類、合并和增刪等等。3)利用ER方法的數據庫概念設計利用ER方法進行數據庫概念設計,可以分成三步進行:首先設計局部ER模式,然后把各局部ER模式綜合成一個全局ER模式,最后對全局ER模式進行優化,得到最終的ER模式,即概念模式。設計局部的ER模式通常,一個數據庫系統都是為各個不同用戶服務的,各個用戶對數據的觀點可能不一樣,信息需求也可能不同。在設計數據庫概念結構時,為了更好的模擬現實世界,一個有效地策略是“分而治之”,即先分別考慮各個用戶的信息需求,形成

19、局部概念結構,然后再綜合全局結構,在ER方法中,局部概念結構又稱為局部ER模式。4)聯系定義E-R模型的“聯系”用于刻畫實體之間的關聯,一種完整的方式是對局部結構中任意兩個實體類型,一句需求分析的結果,考察局部結構中任意兩個實體類型之間是否存在聯系,若有聯系,進一步確認是1:N、N:M還是1:1等。還要考察一個實體類型內部是否存在聯系,兩個實體類型之間是否存在聯系,多個實體類型之間是否存在聯系,等等。在公交管理系統的數據庫設計中,先進行概念模型的建立:站點作為公交查詢管理的一個實體,它擁有站點編號、站點類型、站點名稱這些屬性。它與另一個實體“線路”存在著線路站點對應的聯系,實體“線路”擁有始發

20、時間、終發時間、線路編號、備注這些屬性。在此概念模型中,實體“車次”和“站點”是多對多的聯系。下面就是描述關系的E-R圖:圖3.3公交查詢管理系統E-R圖5)設計全局ER模式所有全局ER模式都設計好了后,接下來就是把它們綜合成單一的全局概念結構,全局概念結構不僅要支持所有局部ER模式,而且必須合理地表示一個完整的,一致的數據庫概念結構。(1)確定公共實體類型為了給多個局部ER模式的合并提供開始合并的基礎,首先要確定各局部結構中的公共實體類型,在這一步中我們僅根據實體類型名認定公共實體類型。一般把同名實體類型作為實體公共類型的一類候選,把具有相同鍵的實體類型作為公共實體類型的另一候選。(2)局部

21、ER模式的合并合并的原則是:首先進行兩兩合并,先合并那些現實世界中有聯系的局部結構,合并從公共實體類型開始,最后再加入獨立的局部結構。(3)消除沖突沖突分為三類:屬性沖突、結構沖突、命名沖突。設計全局ER模式的目的不在于把若干局部ER模式形式上合并為一個ER模式,而在于消除沖突,使之成為能夠被所有用戶共同理解和接受的同一概念模型。(4)全局ER模型的優化在得到全局ER模式后,為了提高數據庫系統的效率,還應進一步依據處理需求對ER模式進行優化,一個好的全局ER模式,能夠準確、全面的反映用戶功能需求外,還應滿足下列條件:實體類型的個數要盡量的少,實體類型所含的屬性個數要盡量的減少,實體類型間聯系無

22、冗余。3.6.2 邏輯設計概念結構是獨立于任何一種數據模型的信息結構。邏輯結構設計的任務就是把概念結構設計好的基本ER圖轉換為與DBMS產品所支持的數據模型相符合的邏輯結構。邏輯結構一般分為3步進行:(1)將概念結構轉換為一般的關系、網狀、層次模型;(2)將轉化來的關系、網狀、層次模型向特定DBMS支持下的數據模型轉換;(3)對數據模型進行優化。關系模式的邏輯結構是一組關系模式的集合。ER圖則是由實體型、實體的屬性和實體型之間的聯系3個要素組成的。所以將ER圖轉換為關系模型實際上就是將實體型、實體的屬性和實體型之間的聯系轉換為關系模式。實體型之間有以下不同的情況:1. 一個1:1聯系可以轉換為

23、一個獨立的關系模式,也可以與任意一端對應的關系模式合并。如果轉換為一個獨立的關系模式,則與該聯系相連的各實體的碼以及聯系本身的屬性均轉換為關系的屬性,每個實體的碼均是該關系的候選碼。如果與某一端實體對應得關系模式合并,則需要在該關系模式的屬性中加入另一個關系模式的碼和聯系本身的屬性。2. 一個1:N聯系可以轉化為一個獨立的關系模式,也可以與N端對應分關系模式合并。如果轉化為一個獨立的關系模式,則與該聯系相連的各實體的碼以及聯系本身的屬性均轉換為關系的屬性,而關系的碼為N端實體的碼。3. 一個M:N聯系轉換為一個關系模式。與該聯系相連的各實體的碼以及聯系本身的屬性均轉化為關系的屬性,各實體的碼組

24、成關系的碼或關系碼的一部分。4. 3個或3個以上實體間的一個多元聯系可以轉換為一個關系模式。與該多元聯系相連的各實體的碼以及聯系本身的屬性均轉換為關系的屬性,各實體的碼組成關系的碼或關系碼的一部分。5. 具有相同碼的關系模式可合并。一個實體型轉換為一個關系模式。實體的屬性就是關系的屬性,實體的碼就是關系的碼。下面把ER圖轉換為關系模型。關系的碼用下橫線標出:站點(站點編號,站點名稱,站點類型)線路(線路編號,始發時間,終發時間,備注)站點單位(單位編號,單位名稱)管理員(管理員名稱,姓名,年齡)檔案(檔案編號,檔案類型)3.6.3規范化一個低一級范式的關系模式,通過模式分解可以轉化為若干個高一

25、級范式的關系模式的集合,這種過程叫做規范化規范化的基本思想是逐步消除數據依賴中不合適的部分,使模式中的各關系模式達到某種程度的“分離”,即“一事一地”的模式設計原則。讓一個關系描述一個概念、一個實體或者實體間的一種聯系。若多于一個概念就把它“分離”出去。因此所謂規范化實質上是概念的單一化。根據邏輯設計中的關系模式:1. 站點S-T-A(站點編號,站點名稱,站點類型)其中由站點編號能得到站點名稱和站點類型,站點的碼是站點編號。函數依賴有:(站點編號,站點名稱) P 站點類型站點編號 F 站點名稱站點編號 F 站點類型如圖 3.4所示。站點編號站點類型站點名稱圖3.4S-T-A中的函數依賴消除部分

26、函數依賴將關系模式S-T-A分解為兩個關系模式:ST(站點編號,站點類型)SA(站點編號,站點名稱)關系模式ST與SA中的屬性間的函數依賴可以用圖 3.5和圖 3.6表示如下。ST: 站點編號站點名稱圖3.5ST中的函數依賴SA:站點類型站點編號圖 3.6 SA中的函數依賴2. 線路L-I-N(線路編號,始發時間,終發時間,備注)其中線路編號能得出始發時間、終發時間和備注,線路的碼是線路編號。函數依賴有:線路編號 F (始發時間,終發時間,備注)如圖 3.7所示。始發時間線路編號終發時間備注圖3.7L-I-N中的函數依賴3.站點單位S-T-D(單位編號,單位名稱)站點單位的碼是單位編號,函數依

27、賴有:單位編號 F (單位名稱)如圖3.8所示。單位編號單位名稱圖3.8 S-T-D中的函數依賴4.管理員A-M-T(管理員職稱,姓名,年齡)實體管理員的碼是管理員職稱,由管理員職稱能得到姓名和年齡,因為存在重名的誤差,所以由姓名不能得出年齡。函數依賴有:管理員職稱 F (姓名,年齡)姓名如圖3.9所示。管理員職稱年齡圖3.9A-M-T中的函數依賴5.檔案R-C-D(檔案編號,檔案類型)實體檔案的碼是檔案編號,函數依賴有:檔案編號 F (檔案類型)如圖3.10所示:檔案類型檔案編號圖3.10 R-C-D中的函數依賴第四章系統實現4.1 系統功能截圖系統主頁面功能實現如圖4.1所示。圖4.1 公

28、交查詢系統主頁面站點查詢功能頁面如圖4.2所示。圖4.2 站點查詢功能頁面4.2源代碼公交查詢系統功能代碼如下所示:#include<iostream>#include<fstream>#include<cstring>using namespace std;int count;int M40004000;class BinaryTree;class BinaryTreeNodefriend BinaryTree;public:BinaryTreeNode()LeftChild=RightChild=0;BinaryTreeNode(const char *

29、e)strcpy(data,e);LeftChild=RightChild=0;BinaryTreeNode(const char *e,BinaryTreeNode *l,BinaryTreeNode *r)strcpy(data,e);LeftChild=l;RightChild=r;private:char data5;BinaryTreeNode *LeftChild,*RightChild;/左子樹,右子樹;/二叉樹類定義class BinaryTreepublic:BinaryTree()root=0;BinaryTree()Delete(); /刪除結點void Delete()

30、PostOrder(Free,root);root=0;int Height()constreturn Height(root);int Size()count=0;PreOrder(Add1,root);return count;BinaryTreeNode* Insert(char *x);BinaryTreeNode* Search(const char *x) const;private:BinaryTreeNode* root;/樹根void PreOrder(void(*Visit)(BinaryTreeNode* u),BinaryTreeNode* t);void PostOr

31、der(void(*Visit)(BinaryTreeNode* u),BinaryTreeNode* t);static void Free(BinaryTreeNode* t)delete t;static void Output(BinaryTreeNode* t)cout<<t->data<<' 'static void Add1(BinaryTreeNode* t)count+;int Height(BinaryTreeNode* t)const;/前序遍歷void BinaryTree:PreOrder(void(*Visit)(Bin

32、aryTreeNode* u),BinaryTreeNode* t)if(t)Visit(t);PreOrder(Visit,t->LeftChild);PreOrder(Visit,t->RightChild);/后序遍歷void BinaryTree:PostOrder(void(*Visit)(BinaryTreeNode* u),BinaryTreeNode* t)if(t)PostOrder(Visit,t->LeftChild);PostOrder(Visit,t->RightChild);Visit(t);int BinaryTree:Height(Bin

33、aryTreeNode* t)constif(!t) return 0;int hl=Height(t->LeftChild);/左子樹的高度int hr=Height(t->RightChild);/右子樹的高度if(hl>hr) return +hl;else return +hr;BinaryTreeNode* BinaryTree:Insert(char *x)BinaryTreeNode *p=root,*pp=0;while(p)pp=p;if(strcmp(p->data,x)>0)p=p->LeftChild;else if(strcmp(p

34、->data,x)<0)p=p->RightChild;else return 0;BinaryTreeNode *r=new BinaryTreeNode(x);if(root)if(strcmp(x,pp->data)<0)pp->LeftChild=r;elsepp->RightChild=r;else root=r;return r;BinaryTreeNode* BinaryTree:Search(const char *x) constBinaryTreeNode *p=root;while(p)if(strcmp(x,p->data

35、)<0)p=p->LeftChild;else if(strcmp(x,p->data)>0)p=p->RightChild;else cout<<p->data<<endl;break;return p;void main()BinaryTree Bus_Stop;char Stop5;ifstream fin("公汽線路信息.txt");while(fin)if(fin.get()='S')for(int i=0;i<4;i+)fin>>Stopi;Stop4=0;Bus_St

36、op.Insert(Stop);cout<<Bus_Stop.Size()<<endl;Bus_Stop.Search("3958");/注:此次公交線路優化查詢系統中的輸入文件名為“公汽線路信息.txt”#include<iostream>#include<fstream>#include<cstring>using namespace std;const int MAX=100000000; /無窮大const int S_TO_T=20; /用戶自定義的轉化參數,即乘客愿意以一塊錢換取20分鐘const in

37、t T1=3;const int N=524;const int M=4000;const int TB1=3; /shijianconst int TB2=5;const int Count=3957;const int BSB=13;const int SS=5; const int SB=7;const BN=520;bool Bus_LineN=0; int BusMM2; /0: data 1: lineint busline;void ReNew(const int &start,const int &end,const int &line,const in

38、t &d,bool flag)int min;if(flagline)min=(d+19)/20*S_TO_T+d*T1;elsemin=d*T1+S_TO_T;if(!Busstartend0)Busstartend0=min;Busstartend1=line;return;if(min<Busstartend0)Busstartend0=min;Busstartend1=line;void ReNew1(const int &start,const int &end,const int &line)int min=BSB;if(!Busstarten

39、d0)Busstartend0=min;Busstartend1=line;return;if(min<Busstartend0)Busstartend0=min;Busstartend1=line;void ReNew2(const int &start,const int &end,const int &line,const int &d)int min;min=d/2*SS+3*S_TO_T;if(!Busstartend0)Busstartend0=min;Busstartend1=line;return;if(min<Busstartend

40、0)Busstartend0=min;Busstartend1=line;void ReNew3(const int &start,const int &end,const int &line)int min=SB;if(!Busstartend0)Busstartend0=min;Busstartend1=line;return;if(min<Busstartend0)Busstartend0=min;Busstartend1=line;void ReNew4(const int &start,const int &end,const int &

41、amp;line)int min=BS;if(!Busstartend0)Busstartend0=min;Busstartend1=line;return;if(min<Busstartend0)Busstartend0=min;Busstartend1=line;int Better1(const int &start,const int &end,int &path)int min=MAX;int temp,key;for(int i=1;i<M;i+)if(Busstarti0&&Busiend0)temp=Busstarti0+Bu

42、siend0;if(min>temp)key=i;min=temp;path=key;return min;int Better2(const int &start,const int &end,int path)int Min=MAX;int key;for(int i=1;i<M;i+)for(int j=1;j<M;j+)if(Busstarti0&&Busij0&&Busjend0)key=Busstarti0+Busij0+Busjend0; if(Min>key)Min=key;path0=i;path1=j;

43、return Min;int Better3(const int &start,const int &end,int path)int Min=MAX;int key;for(int i=1;i<M;i+)for(int j=1;j<M;j+)for(int k=1;k<M;k+)if(Busstarti0&&Busij0&&Busjk0&&Buskend0)key=Busstarti0+Busij0+Busjk0+Buskend0;if(Min>key)cout<<key<<

44、9; 'Min=key;path0=i;path1=j;path2=k;return Min;void main()int i,k;for(i=1;i<M;i+)for(int j=1;j<M;j+)for(int l=0;l<2;l+)Busijl=0; /初始化ifstream fin("公汽線路信息.txt");bool flag=0;bool round=false;char s,c;char Round3; /標志環行char line100;int start;int end;int num70;/*信息數據輸入開始!* * */whi

45、le(fin)if(s=fin.get()='L')if(round)for(i=2;i<k;i+)for(int j=1;j<i;j+)ReNew(numi,numj,busline,k-i+j,Bus_Line);round=false;fin>>busline;fin.get();fin.getline(line,100);if(strcmp(line,"分段計價。")=0)Bus_Linebusline=1;if(c=fin.get()='S')flag=1;fin>>start;elseRound

46、0=c;fin>>Round1;Round2=0;if(strcmp(Round,"環")=0)round=true;flag=0;while(fin.get()!='S');fin>>start;k=1;elseif(s='S')fin>>end;if(start=end)k=0;numk=start;if(flag)for(i=1;i<=k;i+) ReNew(numi,end,busline,k-i+1,Bus_Line); ReNew(end,numi,busline,k-i+1,Bus_Li

47、ne);elseif(Round)for(i=1;i<=k;i+)ReNew(numi,end,busline,k-i+1,Bus_Line);elsefor(i=1;i<=k;i+) ReNew(numi,end,busline,k-i+1,Bus_Line);start=end;k+;while(fin1)if(s=fin1.get()='D')fin1>>busline;busline+=Count;while(fin1.get()!='S'); fin1>>start; k=1;ReNew3(busline,start

48、,0);ReNew4(start,busline,0);elseif(s='S')fin1>>end;numk=start;for(i=1;i<=k;i+)ReNew1(numi,end,busline);ReNew1(end,numi,busline);start=end;k+; ReNew3(busline,start,0);ReNew4(start,busline,0);while(fin2)round=false;if(s=fin2.get()='T')fin2>>busline;if(busline=2)round=tru

49、e;busline+=BN;while(fin2.get()!='D'); fin2>>start; start+=Count; k=1;elseif(s='D')fin2>>end;end+=Count;numk=start;if(round)for(i=1;i<=k;i+)ReNew2(numi,end,busline,k-i+1);else for(i=1;i<=k;i+) ReNew2(numi,end,busline,k-i+1); ReNew2(end,numi,busline,k-i+1); start=end;

50、k+;for(i=2;i<k;i+)for(int j=1;j<i;j+)ReNew2(numi,numj,busline,k-i+j);/*成功獲取數據!* */cout<<Bus335917461<<endl;cout<<Bus174617841<<endl;cout<<Bus178418281<<endl;cout<<"Enter two station:"<<endl;int key,path5;cin>>start>>end;while(start&&end)cout<<Better1(start,end,key)<<endl;cout<<key<<endl;cout<<Busstartkey1<<

溫馨提示

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

評論

0/150

提交評論