6-5 專題製作 :建立人事管理系統
6-5-1 程式功能:Ex6_3.java、Personal.java 『展鵬網路行銷公司』希望建立一個電子化管理系統,其中包含若干個子系統,各子系統所使用的員工資料都能夠統一處理,才不至於發生各系統之間不一致的問題。請您幫該公司規劃員工資料的屬性,並建立『人事資料管理系統』(Ex6_3.java)可讓管理人員『新增』、『修改』與『刪除』員工資料,爾後其他子系統也可引用該資料(Human.data)。目前預估員工資料包含有:員工代號、姓名、服務部門、性別、出生、底薪、職務加級等屬性,並由獨立檔案製作而成(Persional.java),經過編譯後產生 Persional.class。 至於員工資料請以 Human.data 檔案名稱儲存。第一次執行沒有 Human.data 檔案,則利用編輯工具(如:notepad++) 開啟一個新檔,直接另存新檔並將檔名取 “Human.data”(雙引號包起來,不要輸入任何內容),再儲存於本程式的同一目錄下即可。 期望操作介面與執行結果如下: (1) 執行該檔案之前,需先建立 Human.dat,如果該檔案不在,則會要求先建立後再執行,如下:(系統啟動時,會將 Human.dat 檔案內容讀入)
(2) 系統包含 6 個工作選項,無論增加、修改或刪除員工資料之後,都必儲存資料才有效,亦是,離開系統(選項 6) 之前必須儲存資料(選項 5),選單如下:
(3) 選擇 (1) 表顯示系統內所有員工資料,如下:
(4) 工作選項(2)是增加員工資料,操作介面如下:
(5) 工作選項(3)是修改員工資料,操作介面如下:
(6) 工作選項(4)是刪除員工資料,操作介面如下:
(7) 工作選項(5)是將目前員工資料儲存到檔案內,操作介面如下:
6-5-2 製作技巧研討 吾人將製作本系統的重點歸類成下列重點: (如圖 6-7 所示)
圖 6-11 人事資料管理系統架構 (1) 建立一個專屬員工資料類別的原始檔案(Personal.java),類該類別內的變數成員較能符合其他管理系統運用。 (2) 需要針對 Human.data 檔案宣告產生輸入與輸出物件。 (3) 可依照本系統所提供的功能,劃分多個子系統再分別實現。為了讓子系統能直接處理員工資料,而將其物件陣列(Personal[] emp;)與登記所儲存資料筆數的變數(int k;),設定成類別靜態變數(static)。 (4) 主方法(main()):宣告檔案(Human.data)輸入與輸出物件、儲存資料的物件陣列(emp[])。讀取 Human.data 檔案內容,並分別將各個欄位內容填入相對應的物件陣列的變數成員內。再利用 while/switch/case 迴圈讀取操作者的工作選項。 (5) 主選單程式(main_menu()):顯示本系統所提供的工作項目。 (6) 顯示資料子程式(disp_data()):將目前物件陣列(emp[],靜態變數)登錄的員工資料,輸出顯示到螢幕上。 (7) 增加資料子程式(add_data()):可輸入增加一位員工資料到物件陣列(emp[])上。 (8) 修改資料子程式(modify_data):修改物件陣列(emp[])內某位員工的資料。 (9) 刪除資料子程式(delete_data):刪除物件陣列(emp[])內某位員工的資料。 (10) 儲存資料子程式(save_data):依序將物件陣列(emp[])各筆員工資料輸出到檔案(Human.data)上。 6-5-3 程式範例:(執行前,須建立 Human.data 檔案)
圖 6_12 Ex6_3 程式架構 (A) Personal 類別的原始檔案
(B) 主類別的原始檔案
6-5-4 程式重點分析 (1) 第 6~8 行:『static …』。 將物件陣列 emp[]、紀錄筆數變數 k 與鍵盤輸入物鍵 keyin 宣告成靜態變數,該類別內所有方法(或稱函數)都可以直接存取。 (2) 第 13~41 行:系統被啟動後,立即將 Human.data 檔案所儲存的員工資料讀入emp[] 陣列內,以後才可以針對 emp[] 陣列作資料處理。如果 Human.data 檔案不存在的話,系統會直接離開不處理,因此第一次執行之前,必須先建立一個名稱為 Human.data 空白檔案(可利用記事本產生)。 (3) 第 31 行:『k = k+1;』。累計目前已讀取第幾筆資料;由此可見,變數 k 非常重要,是物件陣列 emp[] 的指標器。 (4) 第 94~112 行:『public static void add_data() throws IOException {..}』。增加員工資料函數,執行該函數時須由鍵盤輸入資料,而且鍵盤輸入是利用 BufferReader 物件,他必須指定發生異常狀態時,需將訊息擲向何處(IOException)。 (5) 第 155~158 行:『if (flag == 0) { .. return; }』。如果變數 flag 為 0 的話,則該函數直接返回,就不會再執行往下的敘述句。 (6) 第 159~160 行:『for(int i=m; i<k; i++) emp[i]=emp[i+1];』。欲刪除第 m 筆資料的動作,是將後面的資料往前移一個位置,該筆資料自然被覆蓋掉。 (7) 第 164~180 行:『public static void save_data() …』。將物件陣列 emp[] 內容寫入檔案,如果沒有執行寫入便離開系統,則所處理的動作將不會影響到檔案內容。
|
翻轉工作室:粘添壽
Java 程式設計(二) 含物件導向
翻轉電子書系列:
|