[VB.NET]適用於中華大學的選課篩選程式v1.0.0.3(更新20100615)

添加迴響 2010年6月15日

每次到了要初選、複選的時候,總是為了選課而傷腦筋

最大的困難點在於,哪些課有衝堂,哪些課沒衝堂...

還有  就是哪些課還有 剩下名額..每次都要拉到Excel排序、計算,就時間上而言 是比較耗時的

這...應該困擾很久了吧

以下這一套程式可以滿足以上的需求

撰寫程式花了:

10天

ico來源:

程式使用的圖檔(Clock.ico)為以下網站提供

http://www.iconarchive.com/

新版功能1.0.0.3:

關鍵字可以設定為 包含 還是 不包含
節次篩選可以[不包含上述選定時段]

程式功能:

(1)實現 課程查詢系統的查詢功能

(2)查詢結果列在一張表

(3)可選擇有空的時間(星期和節次) 和其他項目

(4)直接對照選課資料和 課程大綱

(5)可將喜歡的課程做勾選(顏色反白)

(6)當遇到不可抗拒的因素時(無法連線到 課程查詢系統)時會出現錯誤

(7)避免課程查詢系統的流量過大,因此設定為"分析資料後,每2秒抓一次網頁"

(8)程式下方的狀態列得知目前擷取的狀態

(9)30渺無法取得資料自動取消這次的工作

(10)可調整大小,如下圖

>目前程式在測試,可能會有非預期的狀況,請多多包涵...

程式截圖:

(1)程式主體

(2)進行視窗

(3)所有課程頁面

(4)篩選課程頁面

(5)課程網頁頁面

目前已知的Bug:

(1)有時系別清單未更新成功,這時請按[嘗試更新]

一般 未完成 ERROR:這裡有發生一個問題,有時系別清單未更新成功

程式技巧:

(1)網頁動作

WebBrowser的Document和DomDocument對網頁的操作幫助很大,例如:按網頁按鈕、輸入文字在TextBox上、POST...等

不過需要加入參考:Microsoft.mshtml [專案]→[加入參考]→[Microsoft.mshtml]

。選擇DropDownList項目->

Browser.Document.GetElementsByTagName(網頁標籤名稱"select").GetElementsByName(Name).Item(0).DomElement.SelectedIndex = 變數

。取得DropDownList項目->

Browser.Document.GetElementsByTagName(網頁標籤名稱"select").GetElementsByName(Name).Item(0).Children(i).InnerText

。選擇Button項目      ->

Browser.Document.GetElementsByTagName(網頁標籤名稱input").GetElementsByName(Name).Item(0).DomElement.Click()

。Form Post 表單 方式 WebBrowser1.Document.GetElementsByTagName(網頁標籤名稱"form").GetElementsByName("form3").Item(0).DomElement.submit()

。TextBox寫值進去 ->
Browser.Document.GetElementsByTagName(網頁標籤名稱"input").GetElementsByName(Name).Item(0).InnerText = 變數
。點網頁連結->
CourseWebBrowser.Document.GetElementsByTagName("a").DomElement.Click()

(2)要能夠操作網頁必須要看懂該網頁程式碼,可利用Firefox的FireBug套件幫忙

(3)WebBrowser遇到連線不穩定時會 有問題,此時就要判斷

01.前次的網頁跟這次的網頁一樣

02.利用Application.DoEvents()等待

03.利用變數WebBrowser.ReadyState = WebBrowserReadyState.Complete

WebBrowser.IsBusy = False

設逾時時間...來確定網頁

(4)當使用者選擇[V]選課時,使用CellContentClick和CellContentDoubleClick 事件

使用者勾選後,該列處於編輯狀態,這時我使用DataGridView.CommitEdit(DataGridViewDataErrorContexts.CurrentCellChange)方法確保資料已經寫進去

(5)幾乎每個控制項都有Ahchor和Dock這個屬性,當使用者改變視窗大小時,可以固定控制項,這兩個值只能設定一個,以最後設定的值優先(Mutual Exclusion)

(6)物件導向程式設計有其重要性

(7)利用DataView的RowFilter設定篩選條件,藉由寫一個Function來建立相關字串,如何撰寫,可參考這裡

撰寫之後的感想:

(1)看似簡單的功能,其實並不好寫

(2)微軟有這麼方便的工具讓我們使用,但是要經過練習才會上手

(3)MSDN很重要,很多時候需要查資料的

(4)網路也很重要,當你不知道該如何下手時,Google一下就有可參考的範例

(5)遇到困難時要想辦法Try,但也不要整天都在寫程式,這樣會失去人性...^^

程式下載:

(1)

v1.0.0.3 連結
v1.0.0.2 連結
v1.0.0.1 連結

由於此程式需要參考mshtml.dll檔,所以欲使用請加入參考,此Dll從.NET 裡面抓的加入參考的

由於程式需要這個檔案才能在其他台執行,所以才加入

如有侵權問題,請來信告知,我會儘快移除此檔

程式修正紀錄:

20100615|v1.0.0.3|新增 關鍵字的包含和不包含功能,節次篩選可以[不包含上述選定時段]

20100614|v1.0.0.2|修正只篩選關鍵字時的錯誤

20100129|v1.0.0.1|修正課程不一致的問題

20100129|v1.0.0.0|修改IE6、IE7出現讀取錯誤的問題

  1. 2010年3月15日 at 13:57 | #1
    黑馬

    我想學 VB.NET 請問有人要當家教嗎,可否和我聯絡 0938-385-500…

    版主回應:
    您好,建議您先買書先練習,如果有地方不清楚,可以上"程式技術交流"詢問

  1. 還沒有 trackbacks

訂閱迴響