《員工基本工資組成模塊》由會員分享,可在線閱讀,更多相關(guān)《員工基本工資組成模塊(24頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第12章 員工基本工資組成模塊,大連理工大學(xué)電子音像出版社出版,學(xué)習(xí)目標(biāo),理解三層架構(gòu)得基本思想; 根據(jù)業(yè)務(wù)邏輯分析需求; 把需求進(jìn)行細(xì)化、分解, 搭建標(biāo)準(zhǔn)三層架構(gòu)的基本框架; 理解三層架構(gòu)中各層的相互引用的知識; 理解工廠層和接口層在整個架構(gòu)體系中的作用; 能分步驟實現(xiàn)三層架構(gòu)的代碼。,業(yè)務(wù)邏輯分析,在學(xué)校中有三種工資的計算方法。首先,所有職務(wù)都有基本工資。包括學(xué)院的領(lǐng)導(dǎo)、教師、行政人員、保衛(wèi)人員。除了基本工資,有兩種職務(wù)工資還有其它組成部分:教師,要領(lǐng)取課時費;保衛(wèi),要領(lǐng)取值班津貼,而且保衛(wèi)的值班津貼要分白班和夜班,因為白班和夜班的津貼額是不一樣的。所有工資發(fā)放都按月計算。,設(shè)計測試用例,
2、測試用例要求。 輸入:員工流水號(員工號)、發(fā)放工資的年、發(fā)放工資的月。 輸出:員工的具體職務(wù)、員工在此年此月的基本工資(三個組成部分的明細(xì))、課時費、值班津貼。,設(shè)計測試用例,,需求的細(xì)化與設(shè)計 分析職務(wù)工資和學(xué)歷工資,員工的職務(wù)工資由員工的具體職務(wù)確定。所以我們要得到職務(wù)工資數(shù),首先要得到員工的職務(wù)是什么。這些信息都儲存在數(shù)據(jù)庫的職務(wù)工資表(Duty)中。,需求的細(xì)化與設(shè)計分析學(xué)歷工資,員工的學(xué)歷工資由員工的學(xué)歷高低確定。所以我們要得到學(xué)歷工資數(shù),首先要得到員工的學(xué)歷是什么。這些信息都儲存在數(shù)據(jù)庫的學(xué)歷表(Title)中 但是在我們的用例設(shè)計中,我們輸入的是員工號碼,而不是輸入的學(xué)歷編號和
3、職務(wù)編號,所以,還必須通過員工號碼得到職務(wù)編號和學(xué)歷編號。這個邏輯是操作的員工表(Employee),需求的細(xì)化與設(shè)計分析學(xué)歷工資,,需求的細(xì)化與設(shè)計分析獎懲金額,獎懲就是在基本工資之外,該月對員工的獎勵或者因為員工違反了學(xué)校的紀(jì)律,對員工的扣除金額。和前面講的職務(wù)、學(xué)歷工資不同,獎懲每月是不固定的,也許沒有,也許有,而且還有多條獎懲記錄。關(guān)于員工的獎懲信息,儲存在獎懲記錄表(IncentivePenalty)中。,需求的細(xì)化與設(shè)計分析課時費和值班津貼,如果職務(wù)是教師等教學(xué)人員,則要計算教師的課時費。就是教師每上一節(jié)課都有一定的費用;課時費信息,儲存在課時計算表(SchoolTime) 。 通
4、過EmpID(員工流水號)和SchoolYear(年)、SchoolMonth(月)得到該年月這個員工的SchoolTimes(上課節(jié)數(shù))。 該月課時費每節(jié)課金額該月上課節(jié)數(shù)。,需求的細(xì)化與設(shè)計分析值班津貼,如果是保安等保衛(wèi)人員,他們是24小時輪換值班,每值一次班,都有一定的津貼,而且白班和夜班津貼不相同。值班津貼信息儲存在津貼計算表(SubSidy) 。 通過EmpID(員工流水號)和SubSidyYear(年)、SubSidyMonth(月)得到該年月這個員工的SubSidyNight(夜班次數(shù))和SubSidyDay(白班次數(shù))。 該月值班津貼白班金額該月白班數(shù)夜班金額該月夜班數(shù)。,標(biāo)準(zhǔn)
5、三層架構(gòu)的基本框架,PAMS:表現(xiàn)層所有的窗體界面。 BLL:邏輯層由表現(xiàn)層直接調(diào)用,通過邏輯層去調(diào)用接口層中的方法DALFactory:工廠層在工廠層中定義配置信息,利用反射的技術(shù),決定在IDAL(接口層)中所定義的方法是由哪一個DAL(數(shù)據(jù)層)來實現(xiàn)。如果使用的是SQL Server數(shù)據(jù)庫,IDAL(接口層)中的方法,就由SQLServerDAL來實現(xiàn);如果要使用Access數(shù)據(jù)庫,就由AccessDAL來實現(xiàn)接口層中的方法。 IDAL:接口層定義完成任務(wù)所需要的方法。 SQLServerDAL:數(shù)據(jù)層實現(xiàn)IDAL層中定義的方法。所有的數(shù)據(jù)庫操作語句都寫在次層中??梢远ǘ鄠€DAL(數(shù)據(jù)層)
6、。如果是使用SQL Server數(shù)據(jù)庫,可以命名為SQLServerDAL,如果是Access數(shù)據(jù)庫,就可以命名為AccessDAL。 Model:實體層作為數(shù)據(jù)的載體傳遞信息,類似結(jié)構(gòu)變量。,添加每層之間的引用關(guān)系,PAMS:BLL、Model、SQLServerDAL BLL:DALFactory、IDAL、ModelDAL Factory:IDAL、Model IDAL:Model SQLServerDAL:IDAL、Model Model:無,實現(xiàn)工資計算程序 界面設(shè)計,實現(xiàn)工資計算的業(yè)務(wù)邏輯,分析職務(wù)工資的過程我們知道,職務(wù)工資的計算要涉及到兩張表,職務(wù)工資表(Duty)和員工表(E
7、mployee)。在界面輸入員工流水號以后,首先要通過員工表(Employee)得到DutyID(職務(wù)編號),然后再把DutyID(職務(wù)編號)作為輸入值,通過職務(wù)工資表(Duty)得到BasicWage(職務(wù)工資)。,計算職務(wù)工資Model層,因為涉及到員工表和職務(wù)表,我們需要分別針對這兩個表建兩個實體類:Duty.cs和Employee.cs,在實體類中都是成員變量和與成員變量對應(yīng)的屬性。大家可以注意到,成員變量和屬性都是和相關(guān)的數(shù)據(jù)庫表的字段對應(yīng)的。這方面的內(nèi)容,在前幾章我們已經(jīng)詳細(xì)講解過。,計算職務(wù)工資IDAL層,在員工的接口類中,我們添加了一個方法“PAMS.Model.Employe
8、e GetModel(int EmpID)”,它作用是:輸入員工號碼,返回的一個員工的實體對象。為什么這里我們沒有把這個方法寫成是:輸入員工號碼,返回員工的職務(wù)ID,來直接滿足我們的操作要求呢? 我們的目的是為了提高程序代碼的適用性。在這個功能中,我們需要得到員工的職務(wù)號碼,在下一個功能中,我們又要得到員工的學(xué)歷號碼。也許以后還需要得到員工的職稱號碼。所以,當(dāng)遇到由一個表的主鍵得到其它字段值的操作的時候,就直接返回一個實體。而不需要為每一個字段的返回又去單獨寫一個方法。,計算職務(wù)工資DAL層,員工數(shù)據(jù)庫操作實現(xiàn)類的代碼:SQLServerDAL層的EmployeeAccess.cs 職務(wù)數(shù)據(jù)庫
9、操作實現(xiàn)類的代碼:SQLServerDAL層的DutyAccess.cs 我們在數(shù)據(jù)層中,是為了實現(xiàn)在接口層的類中所定義的方法。在接口層中我們定義的得到實體對象的方法,就需要在這里具體實現(xiàn)。,計算職務(wù)工資DALFactory層和BLL層,這里我們把工廠層(DALFactory)和邏輯層(BLL)放在一起講。邏輯層的作用是:實例化接口層(IDAL),從而調(diào)用接口類中的操作方法。工廠層的作用是:在邏輯層實例化接口層的時候,由工廠層來決定接口層中定義的接口,由哪一個DAL來實現(xiàn)。如果是使用SQL Server數(shù)據(jù)庫,自然使用我們定義的SQLServerDAL,如果我們的數(shù)據(jù)庫平臺要換成Oracle,
10、那只要在程序上加寫一個OracleDAL,然后在工廠層中修改一下配置參數(shù)就可以使用了。 通過這樣的方法,實現(xiàn)了程序操作和數(shù)據(jù)庫平臺的無關(guān)性,把數(shù)據(jù)層的操作從程序中分離出來。而其中起控制作用的就是工廠層。,計算職務(wù)工資表現(xiàn)層,我們通過表現(xiàn)層來輸入數(shù)據(jù),輸出結(jié)果。計算職務(wù)工資,需要的輸入值就是員工號。通過前面的分析,我們知道應(yīng)該分成兩個步驟,首先通過員工號得到職務(wù)號碼,然后再通過職務(wù)號碼得到職務(wù)工資。其中第一個過程操作的是員工表,第二個過程操作的是職務(wù)表。,計算職務(wù)工資表現(xiàn)層,,實現(xiàn)工資計算的表現(xiàn)層的程序完善 表現(xiàn)層中的自定義方法和方法類,GetConfigValue(int ConID)得到配置
11、信息:課時費、值班津貼GetDutyNameByEmpID得到職務(wù)名稱GetDutyWageByEmpID得到職務(wù)工資GetSubSidyByEmpID得到值班次數(shù)GetSumIncPenDisByEmpID得到獎懲金額合計GetSumSchoolTimesByEmpID得到上課次數(shù)GetTitleWageByEmpID得到學(xué)歷工資SalaryComputeMethod(int id, string year, string month)構(gòu)造函數(shù),傳入員工號、年、月,表現(xiàn)層中方法調(diào)用,我們通過最后對表現(xiàn)層的方法類中方法的調(diào)用實現(xiàn)最后的操作目的:指定員工的某年某月的工資計算。 1通過對方法類Sa
12、laryComputeMethod的實例化,通過構(gòu)造函數(shù)傳入外部參數(shù): SalaryComputeMethod scm = new SalaryComputeMethod(empID, year, month); //實例化工資計算方法類,傳入了這個類中構(gòu)造函數(shù)需要的三個參數(shù):員工號、年、月 2調(diào)用對象的方法,計算基本工資 3判斷職務(wù),精細(xì)課時費和值班津貼的計算,標(biāo)準(zhǔn)三層架構(gòu)的總結(jié),標(biāo)準(zhǔn)三層架構(gòu)各層間的訪問過程 1傳入值,將值進(jìn)行類型轉(zhuǎn)換 2創(chuàng)建BLL層的對象,通過對象訪問BLL層的方法調(diào)用BLL層 3BLL層方法中取得數(shù)據(jù)訪問層的實例,實例化IDAL層的接口對象,然后返回IDAL層傳入值所查找的內(nèi)容的方法 4通過工廠層的選擇,訪問指定DAL層,返回一個完整的調(diào)用DAL層的結(jié)果給 BLL層 5到此要調(diào)用DAL層,DAL層完成賦值Model層的對象值為空,給定一個參數(shù),調(diào)用sql層的sqlhelper的方法,讀出每個字段的數(shù)據(jù)賦值給以定義為空的Model層的對象 6sqlhelper執(zhí)行sql命令,返回一個指定連接的數(shù)據(jù)庫記錄集,在這里需要應(yīng)用參數(shù)類型,提供位打開連接命令執(zhí)行做好準(zhǔn)備 7返回Model層把查詢得到的一行記錄值賦值給sql層的引入的Model層的對象,然后把這個對象返回給BLL 8回到界面層的BLL層的方法調(diào)用,把得到的對象值返回,在前臺顯示給界面,