Visual Basic 6.0 (VB6) 程式語言案例學習 (08. 大學校務管理系統)
Visual Basic 6.0 (VB6) 程式語言案例學習 (08. 大學校務管理系統)¶
8.1 問題¶
自政府開辦社區大學以來,吸引了許多社會人士學習新知,而社區大學初期因為尚未有任何電腦化作業的程式,因此完全採用人工作業。由於社區大學並不像正式學校有強制的規範,造成作業上的困難,問題變數相當的繁多。例如:學員在已開課後前來報名、學員證遺失、未繳學費、沒有成績、…、等等。類似的問題層出不窮,如果沒有電腦化,社區大學職員必須翻閱許多記錄本才能完成案件處理。
因此提出電腦化的需求,筆者開始收集需求,發現社區大學的資料變化必須相當有彈性才行,由於社區大學採自願自修方式上課,因此就連講師也是依照個人意願而開課,學生視個人狀況前來上課,除此之外上課點名或是成績是與一般學校相同,但每位講師資料、學員資料、學期資料、開課資料、成績資料、…、等等。都必須保留下來,因為這是一種累積學分制,沒有限制學員何時來上課,學員可以今年修完,隔了兩三年後繼續修讀,藉時還是必須將學員所有學分計算出來。而開課資料則每年編碼不同,還有統計資料必須配合教育部的規範。
8.2 需求¶
表格 8‑1 「大學校務管理系統」系統目的分析表
版本:1.0 | 要做什麼 | 不要做什麼(不要做不代表不會做) |
---|---|---|
能做什麼 | (第一格:必要項目) | (第二格:次要項目) |
講師資料能夠新增、刪除、修改。 | 能直接在講師操作介面中,替講師開課。 | |
學員管理要能以群組的方式管理。 | 能夠列出講師曾經開過的課程。 | |
群組要能新增、刪除、修改。 | 要能統計群組內的學員資料。 | |
學員管理要能新增、刪除、修改、列印。 | 學員管理要能夠查詢的到選課資料、成績資料、繳費情形、出勤紀錄。 | |
學員管理要能夠合併群組、刪除勾選項目、移動勾選項目。 | 學員管理要能夠列印成績、複選課程。 | |
學員管理要能夠搜尋學員。 | 學員管理要能夠列印地址名條。 | |
課程管理分為學期規劃、課程規劃、點名冊、成績冊、通訊錄、學員證。 | 學期規劃要能夠統計該學期的相關資料。 | |
學期規劃要能夠新增、刪除、修改、設定。 | 通訊錄可以列印班級通訊錄。 | |
課程規劃要依照學期而新增、刪除、修改。 | 學員證可以單筆列印、勾選列印、全班列印、自動列印、取消列印。 | |
點名冊要能夠學期及日期來過濾資料。 | ||
點名冊可以以電腦紀錄出勤狀況。 | ||
成績冊可以以學期過濾,找到該課的所有學員。 | ||
成績冊可以輸入成績。 | ||
成績冊可以歸零重新輸入。 | ||
通訊錄可以依照學期過濾。 | ||
學員證可以依照學期過濾。 | ||
不能做什麼(不能做代表不需要做) | (第三格:不必要項目) | (第四格:不需要項目) |
講師資料能夠匯出Excel。 | 資料庫要能夠重新整理。 | |
學員管理要能夠匯入照片,而照片要能在列印學員證時自動套用。 | 資料庫以SQL Server來開發。 | |
學期規劃要能夠匯出學員資料。 | ||
課程規劃要能夠匯出學員資料以及課表資料。 | ||
點名冊可以列印空白點名單。 | ||
點名冊可以匯出全勤學員。 | ||
成績測可以列印空白成績單、個人成績單、班級成績單。 |
表格 8‑2 「大學校務管理系統」系統目標分析表
版本: | 重要 | 不重要 |
---|---|---|
優先 | (重) | (急) |
講師資料能夠新增、刪除、修改。 | 能直接在講師操作介面中,替講師開課。 | |
學員管理要能以群組的方式管理。 | 能夠列出講師曾經開過的課程。 | |
群組要能新增、刪除、修改。 | 要能統計群組內的學員資料。 | |
學員管理要能新增、刪除、修改、列印。 | 學員管理要能夠查詢的到選課資料、成績資料、繳費情形、出勤紀錄。 | |
學員管理要能夠合併群組、刪除勾選項目、移動勾選項目。 | 學期規劃要能夠統計該學期的相關資料。 | |
學員管理要能夠搜尋學員。 | ||
課程管理分為學期規劃、課程規劃、點名冊、成績冊、通訊錄、學員證。 | ||
學期規劃要能夠新增、刪除、修改、設定。 | ||
課程規劃要依照學期而新增、刪除、修改。 | ||
點名冊要能夠學期及日期來過濾資料。 | ||
點名冊可以以電腦紀錄出勤狀況。 | ||
成績冊可以以學期過濾,找到該課的所有學員。 | ||
成績冊可以輸入成績。 | ||
成績冊可以歸零重新輸入。 | ||
通訊錄可以依照學期過濾。 | ||
學員證可以依照學期過濾。 | ||
不急迫 | (輕) | (緩) |
講師資料能夠匯出Excel。 | 資料庫要能夠重新整理。 | |
學員管理要能夠匯入照片,而照片要能在列印學員證時自動套用。 | ||
學期規劃要能夠匯出學員資料。 | ||
課程規劃要能夠匯出學員資料以及課表資料。 | ||
點名冊可以列印空白點名單。 | ||
點名冊可以匯出全勤學員。 | ||
成績測可以列印空白成績單、個人成績單、班級成績單。 | ||
學員管理要能夠列印地址名條。 | ||
通訊錄可以列印班級通訊錄。 | ||
學員管理要能夠列印成績、複選課程。 | ||
學員證可以單筆列印、勾選列印、全班列印、自動列印、取消列印。 |
表格 8‑3 「大學校務管理系統」系統規格表
規格項目 | 規格內容 | 備註 |
---|---|---|
主選單 | 講師管理、學員管理、課程管理、重新整理、結束 | … |
講師管理 | 講師資料能夠新增、刪除、修改。 | … |
能直接在講師操作介面中,替講師開課。 | ||
能夠列出講師曾經開過的課程。 | ||
講師資料能夠匯出Excel。 | ||
學員管理 | 學員管理要能以群組的方式管理。 | … |
群組要能新增、刪除、修改。 | ||
學員管理要能新增、刪除、修改、列印。 | ||
學員管理要能夠合併群組、刪除勾選項目、移動勾選項目。 | ||
學員管理要能夠搜尋學員。 | ||
要能統計群組內的學員資料。 | ||
學員管理要能夠查詢的到選課資料、成績資料、繳費情形、出勤紀錄。 | ||
學員管理要能夠列印成績、複選課程。 | ||
學員管理要能夠列印地址名條。 | ||
學員管理要能夠匯入照片,而照片要能在列印學員證時自動套用。 | ||
課程管理 | 課程管理分為學期規劃、課程規劃、點名冊、成績冊、通訊錄、學員證。 | … |
學期規劃要能夠新增、刪除、修改、設定。 | ||
學期規劃要能夠統計該學期的相關資料。 | ||
學期規劃要能夠匯出學員資料。 | ||
課程規劃要依照學期而新增、刪除、修改。 | ||
課程規劃要能夠匯出學員資料以及課表資料。 | ||
點名冊要能夠學期及日期來過濾資料。 | ||
點名冊可以以電腦紀錄出勤狀況。 | ||
成績冊可以以學期過濾,找到該課的所有學員。 | ||
成績冊可以輸入成績。 | ||
成績冊可以歸零重新輸入。 | ||
成績測可以列印空白成績單、個人成績單、班級成績單。 | ||
通訊錄可以依照學期過濾。 | ||
通訊錄可以列印班級通訊錄。 | ||
點名冊可以列印空白點名單。 | ||
點名冊可以匯出全勤學員。 | ||
學員證可以依照學期過濾。 | ||
學員證可以單筆列印、勾選列印、全班列印、自動列印、取消列印。 | ||
重新整理 | 資料庫要能夠重新整理。 | … |
8.3 特色¶
這是一所社區大學的校務管理程式,完整性相當高,從講師資料、學員資料、開課資料、教育部要求的報表資料、成績計算、通訊錄列印、…、等等。是一套相當完整的校務系統。
8.4 使用工具¶
語言 | 軟體 |
---|---|
MS Visual Basic | MS Visual Basic 6.0、MS Access |
8.5 系統架構¶
初期規劃使用本系統人員約有兩名,因此採取MS Access的資料庫來製作。只有兩名使用人員就採用MS Access資料庫就足夠了,畢竟資料衝突的情形發生率太少了,而本系統也有防範機制。可以等待其中一員使用完畢後,再繼續處理。
首先為了資料庫的安全性,基本上都將資料庫附檔名改為.VDB,這防止使用者誤點開啟了資料庫。當然還有加密機制,不過本範例已經為讀者取消掉加密的部分了。以下為各位介紹基本重要的檔案。
LTY-A.VDB:加密過的廠商授權碼,密碼是免費授權,原創:賴岱佑。
LTY-D.VDB:最重要的資料庫,紀錄所有資料。
LTY-F-39.VDB:條碼字型檔。
LTY-I.VDB:產品資訊的資料庫,產品的啟動畫面就包含在這裡面。
LTY-S.VDB:用戶受權碼,密碼是free;檔案列表,用來檢查檔案完整性。
系統一開始時會先檢查廠商授權碼,而後檢查用戶受權碼,並檢查所有檔案的完整性,通過這些檢查之後,才會到輸入帳號密碼的登入畫面,預設的帳號是demo;密碼是demo。
看到這些需求之後,是否覺得相當困惑,到底哪一些要先做,哪一些後做呢?其實可以用最簡單的想法來看,倘若客戶無法提供現成的資料檔,供我們測試的時候,那建議先做輸入介面,在做輸入介面的時候順便調整資料結構欄位,輸入介面在此時就變得相當重要了,因為你無法得知使用者會輸入甚麼樣的資料,光是電話號碼就有好幾種輸入格式,因此你必須在介面上加以限制,避免錯誤的資料進入到資料庫中。
而後再由產出的觀點反看,看客戶最終希望拿到甚麼樣的資料,有的是Excel檔案,有的是列印出來的報表。能夠與輸入介面直接有關連的,就可以先產出出來,例如:輸入學員資料,列印學員資料。這兩種中間只隔了一個資料庫,因此您可以先掠過其他的額外功能,例如:搜尋學員資料、匯入學員照片。這些優先權可以降低一點,因為這樣做,不但很快的就有雛型給客戶看,而且還能得到正確的回應,進而去修正。
8.6 程式實作¶
由於系統程式碼超過萬行,因此筆者特別在程式碼中加入註解,協助讀者分析修改,就不在本書中列出,有興趣的讀者可以參考筆者原始碼的註解,使用單步執行,相信有經驗的讀者一下子就可以融會貫通,請用模組化的觀念來看這個系統,將會讓您的思緒更加清晰。
Step 1:如圖 8-1。預設管理者的帳號:demo,密碼:demo。
圖 8‑1
Step 2:如圖 8-2。講師管理。
圖 8‑2
Step 3:如圖 8-3。學員管理。
圖 8‑3
Step 4:如圖 8-4。課程管理。
圖 8‑4
8.7 修改重點¶
其實眼尖的讀者應該早就發現,筆者所提供的原始碼做了修改,例如:資料庫加密、授權碼加密、版權提示修改、啟動畫面修正、…、等等。這都是為了要讓讀者可以修改為自己的版本,因此將所有商業化的保護機制全部去除。相反的若讀者需要商業化,就要反其道而行,資料庫應該要加密、授權碼加密、版權提示修改、…、等等。
其次,要成為真正穩定的網路版本,就應該將資料庫上載到SQL Server,這才是正確的做法,目前筆者提供的版本,可以讓使用者以磁碟共享的方式,三到五人存取資料庫,但有遇到某人大量修改資料庫時,會造成其他使用者必須先等待,方可繼續操作。像這類的優先權問題,正確的作法應該交給SQL Server來處理,才是正確的解決之道。
最後,有時處理資料量過大時,實在不適合直接存取資料庫,應該先讀取出來到陣列內,作外部處理後,再寫回資料庫,這樣可以非常有效率的處理資料。讀者可以是著在資料庫某一欄位中循序將一萬筆數值資料加一,跟先讀出一萬筆資料到陣列中,在陣列內加一,寫回資料庫。速度和穩定度都是陣列比較好。
除此之外,本系統有設計網站式報名系統,連接的資料庫是與本系統相同的,其做法就是依照報名日期產生群組名稱,而當天報名的學員就會紀錄在所屬的群組之下,而管理人員核對無誤後,就可以透過管理功能將學員搬移至正確的群組。但因為該網站還包含連結其他系統的資料庫,因此無法分享給讀者,不過撰寫報名網站相當容易,讀者只需要了解本系統的資料結構即可。
8.8 結論¶
開發這類系統程式,必須有良好的溝通管道,筆者因為中間的溝通者,角色扮演不好,常常有誤導的情形發生,因此這時候筆者只好親上火線,直接與溝通者溝通,了解需求。這雖然很累人,但卻才能夠達成任務。
其實若要良性循環,應該是業務必須先學習系統程式,甚至模擬客戶端的情形,要練習的比客戶還要熟悉系統,這樣才能替客戶規劃出適合的系統。也能隨時的解決客戶的問題。而開發人員也才能得到正確的回應,進而改版修正。
只可惜筆者在開發本系統時,業務本身對系統完全不了解,只知一二,就信口開河。然後等著筆者去滅火,這就是一種不良的惡性循環,因為業務讓客戶認為只要開口就甚麼都做得到,不管後續問題,所以常常遇到修改好新版程式之後,客戶又要舊版的功能,又得幫客戶到舊版程式中找出程式碼,將舊程式碼加入新版之中。
客戶的需求是無限大的,開發系統當然是可能完成的,只是必須合理、合乎預算、合乎時程,要以問題為導向,解決問題,而非完全以先收錢再說的想法,這到最後,反倒虧本的更多。這樣就不是一個好的業務了。
Lai Tai-Yu (賴岱佑)