網頁設計期末作業成品程式碼_Projects@高階程式設計課程期末作業
(提醒:本人並非計算機專業學生,程式設計能力也不算強,此程式僅供參考學習,有缺點或問題可提出。)
大一下學期高階程式設計期末作業:使用C++設計一個高校職工工資管理系統。
問題背景:
大學主要有4類人員:教師、行政人員、後勤人員、學院院長。現需使用C++設計一個高校職工工資管理系統,以管理各職工的工資分配。
題目要求:
整個系統在設計過程中要充分體現出面向物件的三個基本特徵(封裝,繼承,多型)。
要求職工類基本資訊有職工號、姓名、月基本工資、年齡、性別、類別等(根據需要新增或刪除)。
教師:職稱,課酬標準(每課時),本月上課數(課時)
行政人員:職級,月獎金
後勤人員:崗位,月補貼
院長:學院名稱,課酬和月獎金(繼承父類),額外獎勵
月工資的計算方法:
A、教師:基本月薪講師為5000元,副教授乘以1.5係數,正教授乘以2係數;加上課酬(課酬標準*月上課數)
B、行政人員:基本月薪普通科員4000,處級幹部7000;加上月度獎金
C、後勤人員:基本月薪3000;加上月度補貼
D、院長:基本月薪+課酬+月底獎金+月底額外獎勵
選單模組設定:
① 職工資料錄入建檔:
教師:職工號,姓名,職稱
行政人員:職工號,姓名,職級(科員,處長)
後勤人員:職工號,姓名,崗位
院長:職工號,姓名,學院名稱
② 月度工資發放
教師:輸入本月上課課時
行政人員:輸入本月月度獎金
後勤人員:輸入本月月度補貼
院長:輸入本月課時數,月度獎金,月度額外獎勵
③ 查詢職工基本情況和月工資:輸入職工號查詢
(增加職工,刪除職工)
④ 資料統計:輸出月度高校員工工資表
⑤ 退出本系統;
(其他功能根據自己能力可以新增)
C++程式碼:
/*高階程式設計期末專案設計
程式功能:
基本功能有輸入職工的課時、獎金、補貼等資料,可按照職工號查詢其基本資料,按照職工號增加或刪除職工資料,最終輸出月度工資表。
執行結果示例:
程式特點:
程式很好地體現了封裝、繼承和多型的面向物件的三個基本特徵。
封裝性體現在對各物件中的資料成員使用了protected宣告,避免類外訪問或修改資料成員;此外,執行過程中所需的函式(方法)如Counting、Reading等封裝在外,確保封裝性的同時提高易讀性。
繼承性首先體現在Teacher、Official、Logistical和Principal類繼承Person類中,Person類有職工的基本資訊,而各派生類中有此型別職工的獨有資料;其次,由於院長同時作為教師和行政人員,因此Teacher類和Official類均是Principal類的虛基類,避免了多重繼承時對記憶體空間的盲目分配。
多型性則體現在Teacher、Official、Logistical和Principal類中有一對同名但形參表不同的函式實現了函式過載(enteringt函式、enteringo函式、enteringl函式、enteringp函式),他們能被分別正確呼叫,是因為面向物件的多型性這個特徵允許以不同的形參表來呼叫函式名相同的函式,體現了靜態多型性。
除了能完成要求的基本功能外,根據我個人的程式設計能力和執行程式時的實際情況,我額外為之添加了儲存職工資料的功能:將資料儲存在同目錄下的一個txt檔案中。首先我思考了儲存職工資料的必要性:可以避免每次執行程式時都要重新輸入每個職工的資料,大大提升實際的工作效率和可持續性。而選擇txt檔案的原因有二:一是資料存放在txt檔案中可在程式外檢視資料,並可清晰明瞭地顯示出來,不必執行程式才可以看到資料,方便平時的調查;二是可在程式外手動增刪資料,不必留在程式中操作,提高了程式執行時的效率。
遇到的困難及解決方法:
首先是讀取txt檔案資料和寫入資料到txt檔案中。我先是學習了檔案讀寫的方法,然後將職工中通用的資料設為6個,在txt檔案中體現為每個一行。讀取時按行讀取,寫入時按行寫入即可。
然後就是增刪職工資料的問題。我先是想用delete刪除指標對應陣列元素的方法,但是動態記憶體分配中不清楚指標的操作,並且delete和new必須一一對應,若要刪除只能刪除整個物件陣列。經歷幾次失敗後,我決定使用平移陣列的方法。這樣不僅不會影響到陣列後面的元素,程式編寫和閱讀起來也很直觀。
其他的各種小問題也很多,篇幅有限,解決過程也不再提及。
Thanks for your reading.