公交車查詢系統
公交車查詢系統,公交車,查詢,系統
畢業(yè)設計
公交車查詢管理系統
摘 要…………………………………………………………………………1
Abstract………………………………………………………………………2
第一章 引言…………………………………………………………………4
1.1 課題背景……………………………………………………………………4
1.2 系統簡介……………………………………………………………………5
1. 3 開發(fā)軟件介紹………………………………………………………………6
第二章 系統的分析……………………………………………………………8
2.1 系統開發(fā)的目標和思想……………………………………………………9
2.2 系統的可行性分析…………………………………………………………13
第三章 系統的設計……………………………………………………………18
3.1 系統的功能結構設計………………………………………………………18
3.2 系統的數據庫設計
3.3 界面設計與代碼設計……………………………………………………………………23
…………………………………………………………24
結束語………………………………………………………………………………46
致謝…………………………………………………………………………………47
參考文獻…………………………………………………49
摘 要
隨著經濟的發(fā)展,社會的進步,計算機越來越深入到我們日常的工作學習及生活中,成為我們日常生活中不可缺少的輔助工具。 隨著科學技術的不斷提高,計算機科學日漸成熟,其強大的功能已為人們深刻認識,它已進入人類社會的各個領域并發(fā)揮著越來越重要的作用。它已經深入到日常工作和生活的方方面面,比如文字處理、信息管理、輔助設計、圖形圖像處理、教育培訓以及游戲娛樂等。各行各業(yè)的人們無須經過特別的訓練就能夠使用電腦完成許許多多復雜的工作。然而,雖然現在世界上已經充滿了多如牛毛的各種軟件,但它們依然不能滿足用戶的各種特殊需要,人們還不得不開發(fā)適合自己特殊需求的軟件。以前開發(fā)Windows應用軟件是專業(yè)人員的工作,需要掌握許多專業(yè)知識和經過特殊的培訓才能勝任?,F在不同了,即使你沒有接受過嚴格的程序設計訓練,使用Visual Basic也一樣能夠開發(fā)出功能強大、適合自己特殊需求的應用程序了。Visual Basic繼承了Basic語言易學易用的特點,特別適合于初學者學習Windows系統編程。
公交車查詢管理系統用計算機管理公交車路線信息的一種計算機應用技術的創(chuàng)新,在計算機還未普及之前公交車查詢管理都是由工作人們人工查詢的方式來操作的.現在一般的公交車查詢都采用計算機智能化管理,采用計算機作為工具的實用的計算機路線自動管理程序來幫助人們進行更有效的公交車路線查詢。公交車查詢管理系統是典型的信息管理系統(MIS),其開發(fā)主要包括后臺數據庫的建立和維護以及前端應用程序的開發(fā)兩個方面。對于前者要求建立起數據一致性和完整性強、數據安全性好的庫。而對于后者則要求應用程序功能完備,易使用等特點。
經過分析,我們使用 MICROSOFT公司的 VISUAL BASIC開發(fā)工具,利用其提供的各種面向對象的開發(fā)工具,尤其是數據窗口這一能方便而簡潔操縱數據庫的智能化對象,首先在短時間內建立系統應用原型,然后,對初始原型系統進行需求迭代,不斷修正和改進,直到形成用戶滿意的可行系統。
因為本人能力有限,加上時間緊迫,所以設計出來的本系統可能功能比較簡單,另外本系統是單機版,不能實現網絡互聯操作,這些都有待于我在以后的工作學習中進一步改進。
關鍵字:公交車查詢管理,MIS,visual basic ,數據庫
Abstract
With economic development, social progress, the computer and went to work learning and our daily lives, we become an indispensable tool in everyday life. As science and technology continue to improve, computer science increasingly mature, and its powerful functions for the people to deeply understand that it has entered human society in various fields and is playing an increasingly important role. It has to go down to the daily work and life, such as word processing, information management, aided design, graphics and video processing, as well as education and training game entertainment. All people without special training will be able to use computers to complete numerous complex. However, although now the world has been filled with an over-abundance of software, but they still can not meet the special needs of the various users, it also had to develop software suited to their particular needs. Professional Windows application software development before the work is needed in many professional knowledge and competence through special training. Different now, even if you have not received strict procedures designed training, the use of Visual Basic also like to develop a powerful, and suited to their special needs applications. Visual Basic inherited Basic language learn user-friendly features, and are particularly suited to new learner learning Windows system programming.
Transportation vehicles using computer management information management system of a computer model cars line information technology application innovation in the computer before the public has not yet universal car enquiries are managed by the working people to operate manual enquiries. Now the general public enquiries have adopted computer intelligent vehicle management using the computer as a tool for automatic computer line management procedures to help people more effectively model cars line enquiries. Public enquiry management system is a typical car information management system (MIS), including its main development background to the establishment and maintenance of the database and front-end application development 2. The request for the establishment of strong data consistency and integrity, good for the security of the data. For the latter request applications functions, such as easy to use features.
After analysis, we use Microsoft visual basic development tool companies, the use of its various object-oriented development tools, especially data that can be easily accessible and concise window manipulation database intelligent objects, the first prototype application system in a short time and then, computation of the initial prototype system needs to constantly revise and improve until the formation of a viable system of user satisfaction.
Because I limited capacity, coupled with time constraints, it designed the system may function relatively simple, and the system is single edition, not Internet operations network, which I have yet to learn that in future work to further improve.
keyword : public car enquiries management MIS,visual basic database
1.1 課題背景
公交車查詢管理系統用計算機管理公交車路線信息的一種計算機應用技術的創(chuàng)新,在計算機還未普及之前公交車查詢管理都是由工作人們人工查詢的方式來操作的.現在一般的公交車查詢都采用計算機智能化管理,采用計算機作為工具的實用的計算機路線自動管理程序來幫助人們進行更有效的公交車路線查詢。公交車查詢管理系統是典型的信息管理系統(MIS),其開發(fā)主要包括后臺數據庫的建立和維護以及前端應用程序的開發(fā)兩個方面。對于前者要求建立起數據一致性和完整性強、數據安全性好的庫。而對于后者則要求應用程序功能完備,易使用等特點。
1.2 系統簡介
本系統主要方便人們查詢自己的公交車路線,方便人們乘坐公交.
本系統主要由以下幾大功能組成:
一. 按車次查詢模塊
二. 按起終點站查詢
三. 查找經過站點最小的路線
1. 開發(fā)軟件介紹
Visual Basic 6.0是Micrsoft公司出品的開發(fā)工具,Visual Basic是一種可視化的,面向對象的Windows開發(fā)語言,它具有易用,通用和開發(fā)效率高的特點。隨著微軟對它不斷地改進以及計算機本身性能的提高,使得Visual Basic越來越適合一般的應用程序開發(fā)。正如Bill Gate所說,世界上絕大多數的Windows應用程序是用Visual Basic編寫的。在眾多的開發(fā)工具中,我們?yōu)槭裁匆x擇Visual Basic6.0呢?因為VB具有眾多其它開發(fā)工具所沒有的優(yōu)點!具體介紹如下:
u 開發(fā)的高效
u 語言的高效
u 編譯的高效
u 執(zhí)行的高效
u 維護的高效
基于以上理由,我們毫不憂郁的選擇了VB6.0做為我們的開發(fā)工具??!
主要的控件及其基本屬性,事件簡介
u 命令按鈕類的控件:
1) Caption屬性:用來顯示在控件上的標題。
2) Enable屬性:控制控件的激活狀態(tài)灰色或可用。
3) Appearance屬性:值為1時,則以3D效果顯示該控件,0則不然。
4) Backcolor屬性:用來改變在按鈕上顯示圖像的背景色。
5) Cancel屬性:該屬性決定按鈕是否為一個”取消”按鈕。
6) Default屬性:決定哪一個命令按鈕控件是窗體的缺省命令按鈕.
7) Font屬性:控制各種文字字體類型.
8) Left,top,height,width屬性:設定控件的位置與大小.
9) Style,picture屬性:決定按鈕的顯示方式是否為圖像形式出現.
10) Visible屬性:確定控件運行時是否為可見.
11) Index屬性:當控件為一控件數組時,此屬性值為該控件在數組的下標值.
12) DownPicture屬性:設置/返回一個對圖片的引用,該圖片在按鈕被單擊處于壓下狀態(tài)時顯示。
13) DisabledPicture屬性:設置/返回一個對圖片的引用,該圖片在控件無效時顯示在控件中。
14) MaskColor屬性:設置/返回一個在按鈕的圖片中作為“掩碼“的的顏色
15) Picture屬性:設置返回commandButton控件中要顯示的圖片。
u 命令按鈕類的事件:
1) 單擊事件――Click事件
(1) 觸發(fā)與適用
此事件是在一個命令按鈕對象上按下然后釋放一個鼠標按鈕時發(fā)生。命令按鈕的Click事件僅對當單擊鼠標時發(fā)生。
(2) 事件處理過程
按鈕單擊事件的處理過程為:
Private Sub object-Click(Index As Integer)
其中Object為引發(fā)該事件的對象名稱。如果是命令按鈕的控件是數組,則需要使用Index參數標識該控件。
2) 獲得焦點――GotFocus事件
(1) 觸發(fā)與適用
當命令按鈕獲得焦點產生該事件,獲得焦點可以通過諸如Tab切換或單擊對象之類的用戶動作,或在代碼中用SetFocus方法改變焦點來實現。
(2) 事件處理過程
命令按鈕GotFoucs事件處理過程為:
Private Sub Object-GotFocus(Index As Integer)
3) LostFocus事件:當一個對象失去焦點時發(fā)生
4) KeyDown事件:當命令按鈕具有焦點時按下一個鍵時發(fā)生
5) KeyUp事件:當命令按鈕具有焦點時釋放一個鍵時發(fā)生。
6) KeyPress事件:當用戶按下或松開一個ANSI鍵時發(fā)生。
7) MouseDown事件:當在命令按鈕上按下鼠標按鈕時發(fā)生。
8) MouseMove事件:當命令按鈕上移動鼠標時發(fā)生。
9) MouseUp事件:當在命令按鈕上釋放鼠標按鈕時發(fā)生。
u 標簽框類的控件類的控件:
1) Caption屬性:在應用程序界面上加入說明。
2) Autosize屬性:決定控件是否自動改變大小以顯示其全部內容。
3) Backstyle屬性:用以指示標簽是否透明.
4) Bordstyle屬性:用以設定控件是否有邊框。
u 文本框類的控件:
1) Text屬性:通過像text屬性賦值的方法來改變該屬性的值。
2) Maxlength屬性:該屬性設定在文本框控件中能夠輸入的最大字符數。
3) Multline屬性:該屬性設定text字符串中是否接受換行符。
4) Scrollbars屬性:該屬性決定是否為文本框加滾動條。
5) Passwordchar屬性:該屬性設定輸入文本的特殊顯示字符,在設計密碼程序時非常有用。
6) Change事件屬性:文本框的內容發(fā)生改變時,相應的控件之間發(fā)生相應的改變,具有即時性。
7) Keypress:事件由用戶在文本框控件中按任意鍵觸發(fā)。
8) Alignment屬性:設定控件中的文本對其方式
9) Appearance屬性:設定一個對象在運行時是否可以3D效果顯示。
10) BackColor屬性:設置返回背景色
11) BorderStyle屬性:設置對象的邊框樣式
12) DataField屬性:設定數據使用者將被綁定到的字段名
13) DataFormat屬性:設定DataFormat對象,用于數據綁定
14) DataMember屬性:從數據供應程序提供的幾個數據成員中返回/設定一個特定的數據成員
15) DataSource屬性:設定控件綁定的一個數據源
16) DragIcon屬性:設定圖標,它將在拖放操作中作為指針顯示
17) DragMode模式:設定一個值,確定在拖放操作中所用方式
18) Enabled屬性:設置/返回運行時TextBox是否相應用戶事件
19) Font屬性:設置/返回字體屬性
20) ForeColor屬性:設置/返回文本的前景色
21) Height屬性:設置/返回TextBox的高度
22) IMEMode屬性:設置/返回數值用來確定輸入方法編輯器的狀態(tài)
23) Index屬性:設置/返回唯一的標識控件數組中該控件的編號
24) Left屬性:設置/返回TextBox控件的水平位置
25) Locked屬性:設置/返回TextBox中文本是否可編輯
26) LinkItem屬性:設置/返回DDE與另一個應用程序會話時,傳給接受端的數據
27) MaxLength屬性:設置/返回一個值,指定在TextBox控件中能夠輸入的字符最大值
28) MouseIcon屬性:設置/返回自定義鼠標的圖標
29) Top屬性:設置/返回TextBox控件的垂直位置
30) Tag屬性:存儲過程所需的附加數據
u 文本框類的事件:
1) Change事件:當改變文本框內容時發(fā)生
2) Click事件:鼠標單擊控件時發(fā)生
3) DblClick事件:用鼠標左鍵雙擊控件時發(fā)生
4) DragDrop事件:在一個完整的拖放動作完成或使用Drag方法,并將其Action參數設置為2時發(fā)生
5) DragOver事件:在拖放操作正在進行時發(fā)生
6) GotFocus事件:當一個命令按鈕獲得焦點時發(fā)生
7) LinkClose事件:當一個DDE對話結束時發(fā)生
8) LinkError事件:當一個DDE對話框過程中出現錯誤時,該事件發(fā)生
9) KeyDown事件:當命令按鈕具有焦點時按下一個鍵時發(fā)生
10) Validate事件:在焦點轉換到另一個控件之前發(fā)生,此時該控件的Causes Validation 屬性值設置為True
u 單選按鈕類的控件:
1) Caption屬性:顯示在控件上的文本,是單選按鈕的標題。
2) Alignment屬性:決定單選按鈕的標題在控件上的位置。
3) Enable屬性:該控件為灰色時為false,表示運行時不可用。
4) Index屬性:屬性值表示為單選按鈕組成的控件中某個按鈕的索引值。
5) Tabindex屬性:建立控件時,vb自動為其分配一個tabindex值,利用tab鍵可以在控件之間切換焦點。
6) Value屬性:反映控件狀態(tài)的屬性,返回true表示已選擇了該按鈕。
7) Appearance 屬性:設置/返回一個對象在運行時是否以3D效果顯示。
8) BackColor 屬性:設置/返回背景色。
9) Container 屬性:設置/返回Form上的控件屬性。
10) DataField 屬性:設置/返回數據使用者將被綁定到的字段名。
11) DataFormat 屬性:設置/返回DataFormat對象,一個綁定對象將附加到它。
12) DisabledPicture 屬性:設置/返回一個對圖像的引用,該圖片在控件無效時顯示在控件中。
13) DownPicture 屬性:設置/返回一個對圖片的引用,該圖片在控件單擊下處于壓下狀態(tài)時顯示。
14) DragMode 屬性:設置/返回一個值,確定在拖放操作中所用的方式。
15) Font 屬性:設置/返回字體屬性。
16) FontBold 屬性:設置/返回字體粗體樣式。
17) FontItalic 屬性:設置/返回字體斜體樣式。
18) FontStrikethru 屬性:設置/返回字體刪除線樣式。
19) FontUnderLine 屬性:設置/返回字體下劃線樣式。
20) FontName 屬性:設置/返回控件中顯示文本所用的字體大小。
21) FontSize 屬性:設置/返回控件中顯示文本所用的字體大小
22) Height 屬性:設置/返回控件的高度。
23) MaskColor 屬性:設置/返回一個在控件的圖片中作為掩碼的顏色。
24) MousePointer 屬性:設置/返回一個值,該值指示在運行時當鼠標移動到對象上時顯示的指針類型。
u 單選按鈕類的常用事件:
1) Click 事件:鼠標單擊控件時發(fā)生。
2) DbClick事件: 當在一個對象上按下和釋放鼠標按鈕并再次按下和釋放按鈕時,該事件發(fā)生。
3) DragDrop事件:在一個完整的拖放動作或使用Drag方法,并將其Action參數設置位2時,該事件發(fā)生。
4) DragOver事件: 在拖放操作正在進行時發(fā)生。
5) GotFocus事件: 當獲的對象焦點時發(fā)生。
6) LostFocus事件:當對象失去焦點時發(fā)生。
7) KeyDown事件:當控件具有焦點時按下一個鍵時發(fā)生。
8) KeyUp事件: 當控件具有焦點時釋放一個鍵時發(fā)生。
9) KeyPress事件:當用戶按下或釋放ANSI一個鍵時發(fā)生。
10) MouseDown事件:當在控件上按下鼠標鍵時發(fā)生。
11) MouseMove事件:在控件上移動鼠標時發(fā)生。
12) MouseUp事件:在控件上釋放鼠標時發(fā)生。
u 復選按鈕類的控件:
1) Caption屬性:缺省為check1…。
2) Index屬性:該屬性值為復選框控件數組的下標.
3) Value屬性:value為0表空白,為1表勾號,為2表示灰色勾號.
4) Container屬性:Form控件上的容器。
5) DataChangeed屬性:設置/返回一個值,指出被綁定的控件中的數據已經被某進程修改。
6) DataField屬性:設置或返回數據使用者將被綁定到的字段名。
7) DataFormat 屬性:設置或返回DataFormat對象,用于數據綁定。
8) Datasource屬性:設置或返回控件綁定的一個數據源。
9) DisabledPicture屬性:設置或返回一個對圖片的引用,該圖片在控件無效時顯示在控件中。
10) DownPicture 屬性:設置或返回一個對圖片的引用,該圖片在控件被單擊處于壓下狀態(tài)時顯示。
11) DragIcon屬性:設置或返回圖標,它將在拖放操作中做為指針顯示。
12) DragMode屬性:設置返回一個值,確定在拖放操作中所用方式。
13) Font屬性:設置或返回字體的屬性。
14) Name屬性:設置或返回控件的標識名。
15) Value屬性:設置或返回控件的狀態(tài)。
u 復選按鈕類的控件的基本事件:
1) Click事件:鼠標單擊控件時發(fā)生。
2) DragDrop事件:在一個完整的拖放動作完成或使用Drag方法,并將其Action參數設置為2時發(fā)生。
3) DragOver事件:在拖放操作正在進行時發(fā)生。
4) GotFocus事件:在對象獲的焦點時發(fā)生。,
5) OLECompleteDrag事件:當源部件被放到目標時發(fā)生,并通知源部件拖放操作被執(zhí)行或取消。
6) OLEDragDrag事件:當源部件決定放操作能發(fā)生,卻源部件被放到目標部件時,此事件發(fā)生。
u 框架類的控件:
1) List屬性:列表框控件的表項是使用數組的方式保存,數組的每一個元素存儲列表控件的一個表項
1) Listcount屬性:控件列表部分項目的個數。
2) Mutselect屬性:可以設置列表框為單選或允許多選屬性.
3) Selectd屬性:標示一個數組,數組各元素為:
4) Selected(0),selected(1)…
u 滾動條類的控件:
1) Value屬性:滾動條上滑塊所在位置由value值所決定。
2) Max和min屬性:對value值的最大,最小進行限制。
3) Largechange屬性:用戶點擊滾動條與鍵頭之間的區(qū)域時,value的改變量。
4) OnClick事件:用來添加按鈕的單擊事件所執(zhí)行的程序代碼。
u 定時器類類的控件:
1) Interval屬性:表示定時的時間間隔,以毫秒為單位。
2) Enable屬性:為true時(缺省值),激活定時器開始計時;為false時處于休眠狀態(tài).
數據庫連接方式選擇
Visual basic6.0連接數據庫的主要方式以下幾種方式:一是:用data控件進行數據庫鏈接 ,二是利用adodc(ADO Data Control)進行數據庫鏈接 。三是: 利用DataEnvironment進行數據庫鏈接.四是利用ADO(ActiveX Data Objects)進行編程
:現在我們來大致對這幾種技術應用介紹:
一、 用data控件進行數據庫鏈接.
第一步:給窗體添加一個Data控件。
第二步:用Access建立一個名為Pad的數據庫,在庫中建立一個表Myset,給表添加四個字段:backcolor(數據),forecolor(文本),fontname(文本),fontsize(文本)。注意:請將庫文件存入程序所在目錄。
如果你的機器沒安裝有Access,可通過VB建庫。
二、 利用adodc(ADO Data Control)進行數據庫鏈接:
使用adodata控件訪問數據庫可以完全不用編寫代碼,只需要通過簡單的設置和操作其屬性就可以實現與數據庫的連接,通過綁定數據感知控件,就能提供一個訪問數據庫的界面,用來實現對數據庫的瀏覽,貼加,刪除,修改等操作.
三、 利用DAO對數據庫進行操縱:
在visual basic 中提供了兩種與jet數據引擎接口的方法:data控件與數據訪問對象(DAO)DAO是database object的英文縮寫,要訪問數據庫一方面數據庫要提供訪問接口,另一方面要在編程環(huán)境中有對數據庫的支持.
DAO模型是設計關系數據庫系統結構的對象類的集合.他們提供了管理關系型數據庫系統所需要的全部操作屬性和方法,這其中包括建立數據庫,定義表,字段和建立表間關系,定位和查詢數據庫等.
關系數據庫介紹:
關系數據庫是目前各類數據庫中最重要、最流行的數據庫,他應用數學方法來處理數據庫數據,是目前使用最廣泛的數據庫系統。20世紀70年代以后開發(fā)的數據庫管理系統產品幾乎都是基于關系的。在數據庫發(fā)展的歷史上,最重要的成就就是關系模型。
關系數據庫系統與非關系數據庫系統的區(qū)別是:關系系統只有“表“這一種數據結構;而非關系數據庫系統還有其他數據結構,對這些數據結構有其他的操作。
結構化查詢語言SQL(Structured Query Language)是一種介于關系代數與關系演算之間的語言,其功能包括查詢、操縱、定義和控制四個方面,是一個通用的、功能極強的關系數據庫語言。目前已成為關系數據庫的標準語言
?Microsoft?Access介紹:
使用?Microsoft?Access,可以在單一的數據庫文件中管理所有的信息。在這個文件中,用戶可以將自己的數據分別保存在各自獨立的存儲空間中,這些空間稱作表;可以使用聯機窗體來查看、添加及更新表中的數據;使用查詢來查找并檢索所要的數據;也可以使用報表以特定的版面布置來分析及打印數據。
如果要保存數據,請為每一種類型的信息創(chuàng)建一個表。如果要從查詢、窗體或報表中的多個表中將數據合并在一起,就要定義各個表之間的關系。
如果要搜索并檢索符合指定條件的數據,包括來自多個表中的數據,就要創(chuàng)建查詢。查詢的同時也可以更新或刪除多條記錄,并對數據執(zhí)行內嵌或自定義的計算。
如果要簡單地直接在某個表中查看、輸入及更改數據,請創(chuàng)建一個窗體。在打開一個窗體時,Microsoft?Access?將從一個或多個表中檢索數據,并使用用戶在“窗體向導”選擇的版面布局或所創(chuàng)建的版面布局,將窗體顯示在屏幕上。
如果要分析數據或將數據以特定的方式打印出來,請創(chuàng)建一個報表。例如,可以打印一份將數據分組并計算數據總和的報表,也可以打印另一份帶有各種數據格式的打印郵件標簽的報表。
第一章 系統的分析
第一章 系統的分析
2.1 系統開發(fā)的目標和思想
本系統開發(fā)目標是服務于人們查詢公交車路線信息,方便工作人員日常出行.
同時力求做到界面人性化,功能齊全,數據存儲安全.
2.2 系統的可行性分析
技術上:本系統采用visual basic 6.0與微軟的access作為數據庫,技術上開發(fā)難度一般.
經濟上:本系統服務于人們出行公交車查詢,提高了工作人員辦事效率,節(jié)省了開支.所以具有經濟上的可行性.
社會上:本系統同時也方便了廣大社會.所以具有社會可行性.
第二章 系統的設計
3.1 系統的功能結構設計
主界面
按車次查詢
按起點終點查詢
3.2 系統的數據庫設計
1.bus信息表:
3.2 界面設計與代碼設計
1關于界面設計:
代碼設計:
Option Explicit
Dim bt As Boolean
Private Sub Check1_Click()
If Check1.Value = 0 Then
Form1.IsBeginS = True
Else
Form1.IsBeginS = False
End If
End Sub
Private Sub Form_Load()
bt = True
End Sub
Private Sub Label1_Click()
End Sub
Private Sub Timer1_Timer()
bt = False
If Check1.Value = 0 Then
Form1.IsBeginS = True
Else
Form1.IsBeginS = False
End If
Load Form1
Form1.Show
Timer1.Enabled = False
End Sub
Private Sub Timer2_Timer()
Timer1.Enabled = True
Timer2.Enabled = False
End Sub
2:主界面設計:
代碼設計:
Dim bcbm As Boolean
Dim bcb1 As Boolean
Dim bcbs As Boolean
Dim bcbe As Boolean
Dim tm As Integer
Dim intpart As Integer
Public IsBeginS As Boolean
Public Sub showallstation()
' 以下代碼是用來把在數據庫的所有不同的車站顯示在起始站中
' 其思路是如果在啟動界面中,用戶選擇了更新數據庫,則掃描整個數據庫,并把不同的車站加到起始站中
' 并把這些車站名存放在一文本框中,以用于下次讀取
' 如果用戶沒有選擇更新數據庫,則直接從文件中讀取車站存放在起始站中
' 這樣做的好處是可以大大提高效率,如果每次啟動都要重新檢索數據庫,則要花費大量的時間
If IsBeginS = False Then '用戶選擇了更新數據庫
Dim strm As String
Dim mrc3 As ADODB.Recordset
Set mrc3 = New ADODB.Recordset
Set mrc3 = Adodc1.Recordset
mrc3.MoveFirst
Do While Not mrc3.EOF
For i = 1 To NC
strm = Text2(i).Text
If strm = "" Then
Exit For
End If
For j = 0 To cbs.ListCount
If cbs.List(j) = Trim(strm) Then
Exit For
End If
Next
If j > cbs.ListCount Then
cbs.AddItem Trim(strm)
End If
Next
mrc3.MoveNext
Loop
If Mid(App.path, Len(App.path) - 1, 1) <> "\" Then
Open App.path + "\allstation.dat" For Output As #1
Else
Open App.path + "allstation.dat" For Output As #1
End If
Print #1, CStr(cbs.ListCount)
For k = 0 To cbs.ListCount - 1
Print #1, , cbs.List(k)
Next
Close #1
Set mrc3 = Nothing
Else '用戶沒有選擇了更新數據庫
Dim strbs As String
Dim intnb As Integer
If Mid(App.path, Len(App.path) - 1, 1) <> "\" Then
Open App.path + "\allstation.dat" For Input As #1
Else
Open App.path + "allstation.dat" For Input As #1
End If
Input #1, strbs
intnb = CInt(Val(strbs))
For k = 0 To intnb - 1
Input #1, strbs
cbs.AddItem strbs
Next
Close #1
End If
End Sub
Public Sub showtitle(numt As Integer)
'用于顯示列表中的標題
For j = 0 To 2
If numt = 2 And j = 1 Then
Exit Sub
End If
MSF1(j).Clear
Dim i As Integer
With MSF1(j)
.Rows = 2
.Cols = NC + 3
.TextMatrix(0, 1) = "車次"
For k = 1 To NC + 1
.TextMatrix(0, k + 1) = "站" & CStr(k)
.ColWidth(k) = 1000
Next
.TextMatrix(0, NC + 2) = "備注"
.ColWidth(0) = 200
.ColWidth(NC + 1) = 1000
.FixedRows = 1
For i = 1 To NC
.ColAlignment(i) = 0
Next i
.FillStyle = flexFillSingle
.Col = 0
.Row = 0
.RowSel = 1
.ColSel = .Cols - 1
.CellAlignment = 4
.Row = 1
End With
Next
End Sub
Public Sub showdata(num As Integer)
'用于顯示按車站名進行的查詢
showtitle (num)
Dim j As Integer
Dim i As Integer
Dim mrc0 As ADODB.Recordset
Set mrc0 = New ADODB.Recordset
Set mrc0 = ExecuteSQL(txtsql)
If mrc0.EOF = False Then
mrc0.MoveFirst
With MSF1(num)
.Rows = 2
.Row = 1
Do While Not mrc0.EOF
.Rows = .Rows + 1
For i = 1 To mrc0.Fields.Count
If mrc0.Fields(i - 1) <> "Null" Then
.TextMatrix(.Row, i - 1) = mrc0.Fields(i - 1)
End If
Next i
.Row = .Row + 1
mrc0.MoveNext
Loop
End With
End If
Set mrc0 = Nothing
End Sub
Public Sub showSEdata(s As String, e As String, numb As Integer)
'用于顯示按起始站和終點站進行的查詢
'其思路是掃描整個數據庫,如果在一條記錄中有起點站和終點站則把該記錄加到列表中
'該過程用到了遞歸主要是由于起始站和終點站可以互換
digein = digein + 1 ' 用于記錄遞歸次數
If digein = 3 Then '第三次遞歸的時候,退出
a = MsgBox("沒有直達的車次!您是否需要轉車?", vbInformation + vbOKCancel, "詢問")
If a = vbOK Then
Label5.Visible = True
Cbm.Visible = True
MSF1(0).Visible = False
End If
Exit Sub
End If
showtitle (numb)
Dim j As Integer
Dim i As Integer
Dim m As Integer
Dim k As Integer
Dim ball As Boolean
Dim mrc As ADODB.Recordset
Set mrc = New ADODB.Recordset
Set mrc = Adodc1.Recordset
mrc.MoveFirst
With MSF1(numb)
.Rows = 2
.Row = 1
Do While Not mrc.EOF
ball = False
For m = 1 To NC
If Text2(m).Text = Trim(s) Then
ball = True
Exit For
End If
Next
If ball = True Then
For k = m To NC
If Text2(k).Text = Trim(e) Then
Exit For
End If
Next
End If
If ball = True And k <> NC + 1 Then
.Rows = .Rows + 1
For i = 1 To mrc.Fields.Count
If mrc.Fields(i - 1) <> "Null" Then
.TextMatrix(.Row, i - 1) = mrc.Fields(i - 1)
End If
Next i
.Row = .Row + 1
End If
mrc.MoveNext
Loop
End With
If numb = 0 Then
MSF1(0).Visible = True
MSF1(1).Visible = False
MSF1(2).Visible = False
Else
If numb = 2 Then
MSF1(0).Visible = False
MSF1(1).Visible = True
MSF1(2).Visible = True
End If
End If
If MSF1(0).Row = 1 And numb = 0 Then
Call showSEdata(e, s, numb)
End If
If MSF1(1).Row = 1 And numb = 1 Then
Call showSEdata(e, s, numb)
End If
If MSF1(2).Row = 1 And numb = 2 Then
Call showSEdata(e, s, numb)
End If
Set mrc = Nothing
End Sub
Private Sub Cbe_Change()
bcbm = False
Cbm.Text = ""
Cbm.Clear
Cbm.Visible = False
Label5.Visible = False
showtitle 0
MSF1(0).Visible = True
MSF1(1).Visible = False
MSF1(2).Visible = False
Label7.Visible = False
End Sub
Private Sub Cbe_DropDown()
bcbm = False
Cbm.Text = ""
Cbm.Clear
Label7.Visible = False
Cbm.Visible = False
Label5.Visible = False
showtitle 0
MSF1(0).Visible = True
MSF1(1).Visible = False
MSF1(2).Visible = False
End Sub
Private Sub Cbm_DropDown()
' 該過程的作用是當走起始站和終點站沒有直達的車時,查找所有的可用來轉車的車站名
' 其思路是先掃描整個數據庫,把有起始站的車站名的記錄存放在MSF1(1)中,把有終點站的車站名的記錄存放在MSF1(2)中
' 再掃描整個MSF1(1),對于每一條記錄中的每一個車站,再掃描MSF1(2)中的每一條記錄,如果該記錄中既包含該車站,又包含要查詢的終點站,則該車站符合要求
'該算法有一大好處是極大的提高了查詢的速度,因為,在掃描整個數據庫時,沒有內循環(huán)。這可是我想了好久才想出來的喲^-^
Label7.Visible = False
If bcbm = False Then
Label6.Caption = "正在搜索中..."
Form1.MousePointer = 11
Cbm.MousePointer = 11
Frame2.MousePointer = 11
Frame1.MousePointer = 11
Dim strs As String
Dim strm As String
Dim bfirst As Boolean
Dim bsec As Boolean
Dim mrc3 As ADODB.Recordset
Set mrc3 = New ADODB.Recordset
Set mrc3 = Adodc1.Recordset
Dim finishst() As String
Dim finnum As Integer
finnum = 0
mrc3.MoveFirst
MSF1(1).Clear
MSF1(2).Clear
Do While Not mrc3.EOF
For i = 1 To NC
strs = Text2(i).Text
Select Case strs
Case ""
Exit For
Case cbs.Text
With MSF1(1)
.Rows = .Rows + 1
For z = 1 To mrc3.Fields.Count
If mrc3.Fields(z - 1) <> "Null" Then
.TextMatrix(.Row, z - 1) = mrc3.Fields(z - 1)
End If
Next
.Row = .Row + 1
End With
Case Cbe.Text
With MSF1(2)
收藏