項(xiàng)目實(shí)踐-工資管理系統(tǒng)_第1頁
項(xiàng)目實(shí)踐-工資管理系統(tǒng)_第2頁
項(xiàng)目實(shí)踐-工資管理系統(tǒng)_第3頁
項(xiàng)目實(shí)踐-工資管理系統(tǒng)_第4頁
項(xiàng)目實(shí)踐-工資管理系統(tǒng)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第13章項(xiàng)目實(shí)踐—工資管理系統(tǒng)

本章要點(diǎn)

?系統(tǒng)需求分析

?系統(tǒng)功能設(shè)計(jì)過程

13.1系統(tǒng)需求分析

工資管理是一個(gè)企業(yè)不可缺少的一部分,它利用計(jì)算機(jī)對員工工資進(jìn)行統(tǒng)一管理,實(shí)

現(xiàn)工資管理工作的系統(tǒng)化、規(guī)范化和自動(dòng)化,為企業(yè)提高工作效率。所以在信息化的今天,

工資管理系統(tǒng)在企業(yè)或單位中起著舉足輕重的作用。木工資管理系統(tǒng)需要完成以下任務(wù):

(1)能夠持久化存儲員工信息。員工信息由兩部分組成:員工的基本信息和員工工資

信息。員工基本信息包括員工工號、員工姓名,員工工資信息包括基本工資、獎(jiǎng)金、扣款、

應(yīng)發(fā)工資、稅款、實(shí)發(fā)工資。獎(jiǎng)金和扣款由財(cái)務(wù)人員直接指定,應(yīng)發(fā)工資=基本工資+獎(jiǎng)金-

扣款,稅款為應(yīng)發(fā)工資的12%,實(shí)發(fā)工資=應(yīng)發(fā)工資-稅款。

(2)能夠增加、刪除、修改員工信息。

(3)能夠按照員工工號或姓名查找對應(yīng)的員工的信息,并將查找到的員工信息以指定

的報(bào)表形式輸出。

(3)能夠?qū)T工按照工資進(jìn)行指定方式的排序,并將排序結(jié)果以報(bào)表形式輸出。

(4)能夠按照工資級別進(jìn)行員工信息統(tǒng)計(jì),將不同檔次工資的人數(shù)進(jìn)行報(bào)表輸出。

13.2系統(tǒng)設(shè)計(jì)

13.2.1功能模塊設(shè)計(jì)

根據(jù)需求描述,工資管理系統(tǒng)由:數(shù)據(jù)維護(hù)模塊、查詢模塊、編輯模塊、統(tǒng)計(jì)模塊、

排序模塊、打印模塊6大功能模塊組成,如圖13T所示。

(1)數(shù)據(jù)維護(hù)模塊:數(shù)據(jù)維護(hù)模塊包括數(shù)據(jù)加載和數(shù)據(jù)保存兩個(gè)功能。數(shù)據(jù)加我完成

從外部文件加載員工信息(以下簡稱記錄)到內(nèi)存,數(shù)據(jù)保存完成將內(nèi)存中的員工信息保

存到外部文件的工作。數(shù)據(jù)維護(hù)模塊完成了系統(tǒng)數(shù)據(jù)的持久化保存。在此工資管理系統(tǒng)中,

記錄以二進(jìn)制形式存儲在數(shù)據(jù)文件中。系統(tǒng)的數(shù)據(jù)也可以通過編輯模塊中的新增功能來添

加。

(2)查詢模塊:查詢模塊主要完成在信息中查找滿足相關(guān)條件的記錄。在此工資管理

468C++語言程序設(shè)計(jì)與應(yīng)用開發(fā)

系統(tǒng)中,用戶可以按照員工工號或姓名進(jìn)行查找。若找到該記錄,則以表格形式打印出此

記錄的信息。

(3)編輯模塊:編輯模塊主要完成對記錄的維護(hù)。包括修改、刪除、新增功能。編輯

操作時(shí),只是修改內(nèi)存中的數(shù)據(jù)記錄,一般而言,系統(tǒng)進(jìn)行了這些操作之后,需要將數(shù)據(jù)

存入源數(shù)據(jù)文件中。

(4)統(tǒng)計(jì)模塊:統(tǒng)計(jì)模塊主要完成將實(shí)發(fā)工資按照等級進(jìn)行人數(shù)統(tǒng)計(jì),并將統(tǒng)計(jì)結(jié)果

以報(bào)表形式輸出。統(tǒng)計(jì)標(biāo)準(zhǔn)存放在外部的配置文件中,系統(tǒng)可以對配置文件進(jìn)行編輯,設(shè)

置統(tǒng)計(jì)標(biāo)準(zhǔn)。

(5)排序模塊:排序模塊完成員工記錄按照指定方式進(jìn)行排序,并將排序功能進(jìn)行報(bào)

表輸出,本系統(tǒng)實(shí)現(xiàn)采用實(shí)發(fā)工資的升序作為排序標(biāo)準(zhǔn)。

(6)打印模塊:打印模塊負(fù)責(zé)系統(tǒng)數(shù)據(jù)報(bào)表輸出,它實(shí)現(xiàn)將記錄信息以表格形式在屏

幕上或者文件中打印出來。

工資管理系統(tǒng)

數(shù)據(jù)維護(hù)模塊查詢模塊編輯模塊統(tǒng)計(jì)模塊排序模塊打印模塊

實(shí)

發(fā)

保加工

存載序

圖13-1系統(tǒng)功能模塊圖

13.2.2系統(tǒng)總體框架

工資管理系統(tǒng)的數(shù)據(jù)保存在外部文件中,名稱為zggz.dat,采用二進(jìn)制方式輸入和輸

出;統(tǒng)計(jì)報(bào)表和員工工資報(bào)表輸出到文件時(shí),報(bào)表文件名由用戶確定;統(tǒng)計(jì)標(biāo)準(zhǔn)保存在外

部的配置文件standard.txt中。系統(tǒng)的總體框架如圖13-2所示。

工資管理系統(tǒng)

圖13-2系統(tǒng)總體框架

第13章項(xiàng)目實(shí)踐一工資管理系統(tǒng)469

13.2.3類設(shè)計(jì)

本系統(tǒng)采用面向?qū)ο笏枷脒M(jìn)行設(shè)計(jì),系統(tǒng)功能通過類來描述。系統(tǒng)定義了類CEmployee

描述員工工資的屬性利操作。為了使系統(tǒng)功能易于擴(kuò)展,對系統(tǒng)功能采用類似Windows的

菜單的管理方式,系統(tǒng)功能大都作為菜單項(xiàng)實(shí)現(xiàn)。定義了接口IMenuAction描述菜單項(xiàng)的

功能。每個(gè)實(shí)現(xiàn)具體系統(tǒng)功能(如,修改、查詢等)的類都直接從IMenuAction派生。另

定義一個(gè)從IMenuAciton派生的類CMenuBar描述可以包含子菜單的菜單類。一個(gè)CMenuBar

對象可以管理多個(gè)IMenuAction的派生類。類CGZReport實(shí)現(xiàn)員工工資報(bào)表的輸出功能。

CApplication

圖13-3系統(tǒng)類層次關(guān)系

13.2.4類功能

員工工資管理系統(tǒng)中所有的功能通過類來描述和實(shí)現(xiàn)。下面詳細(xì)介紹系統(tǒng)中類的主要

的屬性和功能。

1.CEmpIoyee

描述員工信息。類結(jié)構(gòu)如圖13-4所示。

CEmpIoyee

-enum{MAX_ID_LEN=10.MAX_NAME_LEN=15}

-SEmployecm_data〃員工信息

+CEmployee()

+virtual?CEmpIoyee。

tboolreadFromFile(inifstream&ifs)

+boolwriteToFile(inofstream&ofs)

圖13-4類CEmpIoyee

SEmployee是一個(gè)結(jié)構(gòu)類型,ni_data存放員工的信息。之所以采用一個(gè)單獨(dú)的結(jié)構(gòu)類

470C++語言程序設(shè)計(jì)與應(yīng)用開發(fā)

型來描述員工信息,是因?yàn)?,一個(gè)類對象的存儲單元中除了對象成員外,還可能包含其他

隱含的內(nèi)存單元,如虛表指針的存儲單元等。這樣在以二進(jìn)制進(jìn)行對象內(nèi)容的輸入時(shí),會(huì)

造成對象存儲單元被破壞。例如,若is為輸入流對象,。為某對象,則采用二進(jìn)制從is

中輸入數(shù)據(jù)到。時(shí),采用“is.read據(jù)。,sizeof(。));”,則。中除了數(shù)據(jù)成員外的其他存

儲單元也被覆蓋,造成。被破壞。結(jié)構(gòu)類型的變量不會(huì)存在上述的問題。SEmployee的定

義如圖13-5所示。

?結(jié)構(gòu)>>

SEmployee

-charm_id[MAX」D_LEN]〃工號

+charm_name[MAX_NAME_LEN]〃姓名

ifloatm_jbgz〃基本工資

+floatm」j〃獎(jiǎng)金

+floatm_kk〃扣款

+floatm_y魚z〃應(yīng)發(fā)工資

?floatm_sk〃稅款

+floatms兔z〃實(shí)發(fā)工資

圖13-5結(jié)構(gòu)SEmployee

MAX_ID_LEN和MAX_NAME_LEN為系統(tǒng)定義的全局int型變量。

功能:

(l)boolreadFromFile(ifstream&ifs)

從輸入流ifs中讀入員工信息。

(2)boolwriteToFile(ofstream&ofs)

將員工信息輸出到輸出流ofs中。

2.IMenuAction

IMenuAction描述了所有菜單項(xiàng)的功能。類結(jié)構(gòu)如圖13-6所示。

IMenuAction

-stringkey〃菜單按鍵

-stringcaption〃菜單標(biāo)題

+IMenuItem(instringkey,instringcaption)

+virtualvoidaction()

+virtualstringgetKey()

-?-virtualstringgetCaption()

+virtual~IMenuItem()

圖13~6類IMenuAction

每個(gè)菜單項(xiàng)有兩個(gè)屬性key和caption。caption是菜單項(xiàng)的標(biāo)題,key是菜單項(xiàng)對應(yīng)

的按鍵。只有當(dāng)用戶輸入和key相同的字符串時(shí),才可能執(zhí)行該菜單的功能。

功能:

(1)virtualvoidaction()

實(shí)現(xiàn)菜單項(xiàng)的功能。外部調(diào)用action來執(zhí)行該菜單的功能。每個(gè)派生類都要在action

第13章項(xiàng)目實(shí)踐一工資管理系統(tǒng)471

中實(shí)現(xiàn)自己的功能。

3.CMenuLoadData

實(shí)現(xiàn)數(shù)據(jù)加載,將系統(tǒng)的數(shù)據(jù)從外部文件zggz.dat讀入到內(nèi)存中,內(nèi)存中數(shù)據(jù)存放在

vector〈CEmployee*>類型的集合對象中。類結(jié)構(gòu)如圖13-7所示。

CMenuLoadData

+CMenuLoadData(instringkey,instringcaption)

-voidload()

圖13-7類CMenuLoadData

功能:

(1)voidload()

實(shí)現(xiàn)了數(shù)據(jù)加載的操作,action函數(shù)會(huì)調(diào)用該load成員函數(shù)。

4.CMenuSaveData

實(shí)現(xiàn)數(shù)據(jù)保存,將內(nèi)存中的數(shù)據(jù)保存到外部文件zggz.dat中。類結(jié)構(gòu)如圖13-8所示。

CMenuSaveData

+CMcnuSavcData(instringkey,instringcaption)

-intsave()

圖13-8類CMenuSaveData

功能:

(1)voidsave()

實(shí)現(xiàn)了數(shù)據(jù)保存的操作,被action函數(shù)調(diào)用。

5.CMenuSearch

實(shí)現(xiàn)按照姓名和工號查詢功能,并將查詢的結(jié)果進(jìn)行報(bào)表輸出。內(nèi)部使用CGZReport

類的功能。類結(jié)構(gòu)如圖13-9所示。

CMenuSearch

+CMenuSearch(instringkey,instringcaption)

-voidsearch()

圖13-9類CMenuSearch

功能:

(1)voidsearch()

實(shí)現(xiàn)查詢功能,被action函數(shù)調(diào)用。

6.CMenuAddNew

實(shí)現(xiàn)添加新員工的功能。新添加的員工信息存放在內(nèi)存的中,用戶應(yīng)該調(diào)用數(shù)據(jù)保存

472C++語言程序設(shè)計(jì)與應(yīng)用開發(fā)

的功能(山CMenuSaveData類實(shí)現(xiàn))將添加的數(shù)據(jù)保存到外部文件。類結(jié)構(gòu)如圖13T0所

ZjSO

CMenuAddNew

+CMenuAddNew(instringkey,instringcaption)

-intadd()

圖13-10類CMenuAddNew

功能:

(1)voidadd()

實(shí)現(xiàn)添加新員工的功能,被action函數(shù)調(diào)用。

7.CMenuDelete

實(shí)現(xiàn)了刪除員工信息的功能。該類實(shí)現(xiàn)刪除指定工號或者姓名的員工的信息,只是刪

除了內(nèi)存中的員工信息,必須要調(diào)用數(shù)據(jù)保存的功能(由CMenuSaveData類實(shí)現(xiàn))才能夠

實(shí)際反映到持久化存儲設(shè)備中。類結(jié)構(gòu)如圖13T1所示。

CMenuDelete

+CMcnuDclctc(instringkey,instringcaption)

-void加1()

圖1371類CMenuDelete

功能:

(1)voiddel()

實(shí)現(xiàn)了刪除員工的功能,被action函數(shù)調(diào)用。

8.CMenuEdit

實(shí)現(xiàn)了編輯員工信息的功能。該類可以編輯指定工號或者姓名的員工的信息,只是編

輯內(nèi)存中的員工信息,必須要調(diào)用數(shù)據(jù)保存的功能(由CMenuSaveData類實(shí)現(xiàn))才能夠?qū)?/p>

際反映到持久化存儲設(shè)備中。類結(jié)構(gòu)如圖13-12所示。

CMcnuEdit

+CMcnuEdit(instringkey,instringcaption)

-voidedit()

圖13-12類CMenuEdit

功能:

(1)voidedit()

實(shí)現(xiàn)編輯員工的功能,被action函數(shù)調(diào)用。

第13章項(xiàng)目實(shí)踐一工資管理系統(tǒng)473

9.CSort_ASC_SFGZ

實(shí)現(xiàn)員工工資按照實(shí)發(fā)工資進(jìn)行升序排序。并能夠?qū)⑴判蚪Y(jié)果進(jìn)行報(bào)表(調(diào)用

CGZReport類的功能)輸出。類結(jié)構(gòu)如圖13T3所示。

CSort_ASC_SFGZ

+CSort_ASC_SFGZ(instringkey,instringname)

+voidsort(invector<CEmployee*>*mpve)

圖13-13類CSort_ASC_SFGZ

功能:

(1)voidsort(vector<CEmployee*>*m_pve)

實(shí)現(xiàn)員工工資排序,action函數(shù)會(huì)調(diào)用該函數(shù)。m_pve指向內(nèi)存中的系統(tǒng)數(shù)據(jù)。排序

后,內(nèi)存中員工記錄的順序?qū)l(fā)生改變。

10.CMenuStatics

對員工工資信息進(jìn)行統(tǒng)計(jì)。統(tǒng)計(jì)時(shí)按照存放在standard,txt文件中的工資分段值統(tǒng)計(jì)

出各段的員工人數(shù)。例如,若standard,txt文件中的內(nèi)容如下:

800

2000

5000

則系統(tǒng)將統(tǒng)計(jì)出:小于8000、大于等于800并且小于2000、大于等于2000并且小于

5000、大于等于5000各段的員工人數(shù)。類結(jié)構(gòu)如圖13-14所示。

CMenuStatics

-vector<int>mstandard〃統(tǒng)計(jì)的分段值

+CMenuStatics(instringkey,instringcaption)

-voidstatics()

-intlcssThan(inintv,inVPEMPLOYEE*mpve)

-intbetween(inint1,inintr,inVPEMPLOYEE*m_pve)

-intgreaterEqualThan(inintr,inVPEMPLOYEE*m_pve)

-voidreadStandard()

圖13T4類CMenuStatics

mstandard保存從standard.txt文件中讀入的用于統(tǒng)計(jì)的分段的工資值。

功能:

(1)voidstatics()

實(shí)現(xiàn)統(tǒng)計(jì)功能。action函數(shù)調(diào)用該函數(shù)。

(2)intlessThan(intv,VPEMPLOYEE*m_pve)

實(shí)現(xiàn)統(tǒng)計(jì)m_pve指向的員工數(shù)據(jù)集合中實(shí)發(fā)工資小于v的人數(shù)。返回符合條件的人數(shù)。

VPEMPLOYEE通過“typedefvector<CEmployee*>VPEMPLOYEE;定義。

(3)intbetween(int1,intr,VPEMPLOYEE*m_pve)

實(shí)現(xiàn)統(tǒng)計(jì)m.pve指向的員工數(shù)據(jù)集合中實(shí)發(fā)工資小于r并且大于等于1的人數(shù)。返回

474C++語言程序設(shè)計(jì)與應(yīng)用開發(fā)

符合條件的人數(shù)。

(4)intgreaterEqualThan(intr,VPEMPLOYEE*m_pve)

實(shí)現(xiàn)統(tǒng)計(jì)m_pve指向的員工數(shù)據(jù)集合中實(shí)發(fā)工資大于等于r的人數(shù)。返回符合條件的

人數(shù)。

(5)voidreadstandard()

從standard.txt文件中將統(tǒng)計(jì)等級的值讀入保存到m_standard中。

11.CMenuEditStandard

編輯用于統(tǒng)計(jì)的工資分段值,用戶可以修改用于統(tǒng)計(jì)的工資分段值。類結(jié)構(gòu)如圖13-15

所示。

CMenuEditStandard

+CMcnuEditStandard(instringkey,instringcaption)

?voidedit()

-stringreadStandard()

圖13-15類CMenuEditStandard

功能:

(1)stringreadstandard()

從standard.txt中讀入統(tǒng)計(jì)工資分段值,并作為字符串返回。

(2)voidedit()

實(shí)現(xiàn)分段值的編輯,被action函數(shù)調(diào)用。

12.CMenuBar

可以帶有子菜單的菜單項(xiàng)。類結(jié)構(gòu)如圖13-16所示。

CMenuBar

-typedefvector<IMenuAction*>VMENUBAR

-VMENUBARm_vb〃子菜單項(xiàng)列表

+CMenuBar(instringkey,instringcaption)

上booladdMcnu(inIMcnuAction*pmcnu)

+voidloop()

卜voiddispatch(instringselect)

+voidmainMenu()

+voidexecuteMenu()

-voidshowMenu(inIMenuAction*p)

-boolexistMenu(instringk)

+voidaction()

圖13-16類CMenuBar

只要是從IMenuAction派生的都可以作為子菜單。這樣可以實(shí)現(xiàn)多級菜單。

功能:

(l)booladdMenu(IMenuAction*pmenu)

將pmenu指向的菜單添加到本菜單的子菜單列表中。pmenu指向的菜單的key不能和

第13章項(xiàng)目實(shí)踐一工資管理系統(tǒng)475

已有子菜單列表的key相同。

(2)boolexistMenu(stringkey)

查找子菜單列表中是否有key和k相同的子菜單項(xiàng)。

(3)voidmainMenuO

分行顯示第一級子菜單的caption和key。

(4)voidshowMenu(IMenuAction*p)

顯示p指向的菜單的caption和key。被mainMenu調(diào)用。

(5)dispatch(stringselect)

查找第一級子菜單,執(zhí)行key和select相同的的菜單的功能,即調(diào)用該菜單的action

函數(shù)。

(6)voidloop()

顯示第一?級子菜單,循環(huán)接收用戶輸入,并調(diào)用dispatch執(zhí)行相應(yīng)的菜單,action

調(diào)用該函數(shù)。

(7)executeMenu()

調(diào)用所有第一級子菜單的功能。

13.CGZReport

CGZReport實(shí)現(xiàn)員工信息按照某種報(bào)表格式輸出。類結(jié)構(gòu)如圖13T7所示。

CGZReport

-ostream&m_os〃報(bào)表的輸出流

+CGZReport(inostream&os)

+voidprintHeader()

+voidprintEmployee(inCEmployee*pe)

+voidrcport(inVPEMPLOYEE&pv)

+virtual?CGZReport。

圖1377類CGZReport

m_OS引用屏幕流對象(cin)則報(bào)表輸出到屏幕,若引用某個(gè)文件輸出流對象,則報(bào)

表輸出到文件。

功能:

(1)CGZReport(ostreamftos)

構(gòu)造函數(shù),參數(shù)os引用報(bào)表的輸出流。

(2)voidprintHeader()

打印報(bào)表的頭部。

(3)voidprintEmployee(CEmployee*pe)

輸出一個(gè)員工信息。

(4)voidreport(VPEMPLOYEE&pv)

輸出pv引用的的員工信息集合。

14.CStaticsReport

實(shí)現(xiàn)統(tǒng)計(jì)信息的報(bào)表輸出,其功能和CGZReport類似。類結(jié)構(gòu)如圖13T8所示。

476OH?語言程序設(shè)計(jì)與應(yīng)用開發(fā)

CStaticsReport

-ostream&m_os〃報(bào)表輸出流對象

+CStaticsReport(inostream&os)

4voidprintHeader()

+voidprintStaticsItem(instringdj,instringnumber)

+voidreport(invector<string>&pv)

+virtual~CStaticsReport()

圖13-18類CStaticsReport

mos引用屏幕流對象(cin)則報(bào)表輸出到屏幕,若引用某個(gè)文件輸出流對象,則報(bào)

表輸出到文件。

功能:

(l)CStaticsReport(ostreamfeos)

構(gòu)造函數(shù),參數(shù)。s引用報(bào)表的輸出流。

(2)voidprintHeader0

打印報(bào)表的頭部。

(3)voidprintStaticsItern(stringdj,stringnumber)

輸出-?個(gè)統(tǒng)計(jì)段的統(tǒng)計(jì)結(jié)果。Dj描述了統(tǒng)計(jì)的范圍,如,“大于800”、“大于等于

5000”等。number表示該范圍的人數(shù)。

(4)voidreport(vector<string>&pv)

輸出pv指向的統(tǒng)計(jì)結(jié)果。集合中的項(xiàng)是成對出現(xiàn)的,?個(gè)表示描述范圍,一個(gè)描述人

數(shù),其調(diào)用printStaticsItenio

15.CInteger

封裝int型數(shù)據(jù)的某些操作。類結(jié)構(gòu)如圖13-19所示。

CInteger

-intmi

+CInteger(ininti)

+stringtoString()

+voidsetValue(ininti)

+staticintparselnt(instringstr)

+virtual?CInteger。

S13-19類CInteger

功能:

(l)CInteger(inti)

構(gòu)造函數(shù),i傳入封裝的int型數(shù)。

(2)stringtoString()

將轉(zhuǎn)換成字符串。

(3)voidsetValue(inti)

設(shè)置m_i的值。

(4)staticintparselnt(stringstr)

第13章項(xiàng)目實(shí)踐一工資管理系統(tǒng)477

從str中解析出一個(gè)int型數(shù)。如,“123”解析出int型的123。

16.CFIoat

封裝float型數(shù)據(jù)的某些操作。類結(jié)構(gòu)如圖13-20所示。

CFIoat

-floatm_f

+CFIoat(infloatf)

+stringtoString()

+voidsetVa!ue(infloatf)

^staticintparseFloat(instringstr)

+virtual?CFIoat。

圖13-20類CFIoat

功能:

(l)CFloat(floatf)

構(gòu)造函數(shù),f傳入封裝的float型數(shù)。

(2)stringtoString()

將m_f轉(zhuǎn)換成字符串。

(3)voidsetValue(floatf)

設(shè)置m_f的值。

(4)staticfloatparseFloat(stringstr)

從str中解析出一個(gè)float型數(shù)。如,“12.3”解析出float型的12.3。

17.CStringEx

封裝對string字符串的簡單操作。類結(jié)構(gòu)如圖13-21所示。

CStringEx

-stringm_str

+CStringEx(instringstr)

+staticstringtoLowerCase(instrings)

+staticstringtoUpperCase(instrings)

+boolisEqualIgnorcCasc(instringstr)

圖13-21類CStringEx

功能:

(1)stringtoLowerCae(strings)

將s轉(zhuǎn)換成小寫字符串。

(2)stringtoUpperCase(strings)

將s轉(zhuǎn)換成大寫字符串。

(3)boolisEquallgnoreCase(stringstr)

判斷封裝的字符串m_str和參數(shù)str是否相等。

478OH?語言程序設(shè)計(jì)與應(yīng)用開發(fā)

18.CTooIs

實(shí)現(xiàn)系統(tǒng)常用的功能。類結(jié)構(gòu)如圖13-22所示。

CTools

+staticvoidprintMiddle(inostream&os,inintw,instrings)

+staticvoidprintMiddle(inostream&os,inintw,inintnum)

+staticvoidprintMiddle(inostream&os,inintw,indoublef)

^staticintlocatcEmployeclD(inconstcharid[],inPVPEMPLOYEEpve,inVPEMPLOYEE&s)

+staticintlocatcEmployeeNamc(inconstcharnamc[],inPVPEMPLOYEEpvc,inVPEMPLOYEE&s)

-i-staticintdeleteEmployeeName(inconstcharname[],inVPEMPLOYEE&pve)

istaticintdeleteEmployeelD(inconstcharid[],inVPEMPLOYEE&s)

+staticstringgetDataFileName(instringtip)

+staticstringinputString(inintw,instringtip)

+staticvoidcharline(inintn,incharc,inostreamofs)

+staticstringreadLine()

+staticstringreadLineNo!gnore()

圖13-22類CTooIs

功能:

(1)staticvoidprintMiddle(ostream&os,intw,strings)

向輸出流os中按照w寬度居中輸出字符串So

(2)staticvoidprintMiddel(ostream&os,intw,intnum)

向輸出流os中按照w寬度居中輸出numo

(3)staticvoidprintMiddle(ostream&os,intw,floatf)

向輸出流os中按照w寬度居中輸出fo

(4)staticintCTools::locateEmployeelD(constcharid口,PVPEMPLOYEEpve,

VPEMPLOYEE&s)

在pve中查找id指定的工號的員工,結(jié)果保存到s中。s中保存的只是對系統(tǒng)數(shù)據(jù)的

引用。

(5)staticintCTools::locateEmployeeName(constcharname1],PVPEMPLOYEEpve,

VPEMPLOYEE&s)

(6)在pve中查找name指定的姓名的員工,結(jié)果保存到s中。s中保存的只是對系統(tǒng)

數(shù)據(jù)的引用。

(7)staticintdeleteEmployeeName(constcharname]],VPEMPLOYEE&pve)

從pve中刪除name指定的姓名的員工。

(8)staticintdeleteEmployeelD(constcharid[],VPEMPLOYEE&pve)

刪除pve中id指定的工號的員工。

(9)staticstringgetFileName(stringtip)

獲取一個(gè)文件名,tip為一個(gè)提示信息。

(10)staticvoidcharline(intn,charc,ostreamfeofs)

向一個(gè)輸出流ofs中輸出n個(gè)字符co

(11)staticstringreadLineO

第13章項(xiàng)目實(shí)踐一工資管理系統(tǒng)479

從鍵盤讀入一行。忽略前期輸入的回車等特殊字符。

(12)staticstringreadLineNoIgnore()

從鍵盤讀入一行。不忽略前期輸入的回車等特殊字符。

19.CAppIication

系統(tǒng)的總體控制類,CApplication控制整個(gè)系統(tǒng)的流程、存儲系統(tǒng)的數(shù)據(jù)、數(shù)據(jù)文件

路徑、統(tǒng)計(jì)標(biāo)準(zhǔn)的文件路徑等。類結(jié)構(gòu)如圖13-23所示。

CApplication

-staticVPEMPLOYEEm_v〃員工信息

-staticstringmdataFile〃數(shù)據(jù)文件路徑

-staticstringm_standardFile〃統(tǒng)計(jì)標(biāo)準(zhǔn)文件路徑

-staticboolmdatachangcd〃內(nèi)存和文件中的員工信息是否致

-CMenuBar*m_mb〃系統(tǒng)菜單

-CMenuBar*m_initmb〃初始化菜堆

-IMenuAction*m_savemenu〃保存數(shù)據(jù)菜單

-stringmappname〃應(yīng)用系統(tǒng)名

+CApplication(instringname)

+voidaddMcnu(inCMenuBar*pmcnu)

+voidaddlnitMcnu(inCMenuBar*pmenu)

+voidaddSaveMenu(inIMenuAction*pmenu)

+voidinitialize()

+voidmainLoopO

+voidsaveData()

+voidstart()

'staticVPEMPLOYEE*getData()

+staticstringgetDataFile()

+staticstringgetStandardFile()

+staticvoidsetChanged(inboolb)

圖13-23類CAppIication

功能:

(1)voidaddMenu(CMenuBar*pmenu)

設(shè)置系統(tǒng)的主菜單。

(2)voidaddlnitMenu(CMenuBar*pmenu)

設(shè)置系統(tǒng)的初始化菜單,系統(tǒng)在啟動(dòng)時(shí),會(huì)執(zhí)行初始化菜單的所有子菜單的功能。

(3)voidaddSaveMenu(IMenuAction*pmenu)

設(shè)置保存數(shù)據(jù)菜單。系統(tǒng)在結(jié)束前,會(huì)判斷內(nèi)存數(shù)據(jù)和文件數(shù)據(jù)是否一致,若不一致,

則調(diào)用保存數(shù)據(jù)菜單的功能。

(4)voidinitializeO

完成初始化,調(diào)用初始化菜單mjnitmb的第一級子菜單的功能。

(5)voidmainLoop0

顯示系統(tǒng)的主菜單,接收用戶的輸入,并調(diào)用相應(yīng)的功能。系統(tǒng)的所有功能在此完成。

(6)voidsaveDataO

在系統(tǒng)退出前判斷內(nèi)存和文件中的數(shù)據(jù)是否一致,若不一致,則提示用戶保存數(shù)據(jù),

調(diào)用msavemenu的功能實(shí)現(xiàn)保存。

480OH?語言程序設(shè)計(jì)與應(yīng)用開發(fā)

(7)voidstart()

啟動(dòng)系統(tǒng)。Start依次調(diào)用initialize、mainLoop、saveDatao

(8)staticVPEMPLOYEE*getDataO

獲取指向系統(tǒng)數(shù)據(jù)的指針。某功能若要訪問系統(tǒng)數(shù)據(jù)則可調(diào)用該方法獲取。

(9)staticstringgetDataFile()

獲取系統(tǒng)數(shù)據(jù)文件路徑。

(10)staticstringgetStandardFileO

獲取統(tǒng)計(jì)標(biāo)準(zhǔn)的文件路徑。

(11)staticvoidsetChanged(boolb)

設(shè)置描述內(nèi)存和文件中數(shù)據(jù)是否一致的標(biāo)志。

13.2.5main函數(shù)流程

main函數(shù)的執(zhí)行流程如下:

(1)創(chuàng)建CApplication類的對象appo

(2)創(chuàng)建完成初始化功能的菜單,通過addlnitMenu設(shè)置到app中。

(3)創(chuàng)建系統(tǒng)的主菜單,通過addMenu設(shè)置到app中。

(4)創(chuàng)建完成數(shù)據(jù)保存的菜單功能,通過addSaveMenu設(shè)置到app中。

(5)調(diào)用app的start啟動(dòng)系統(tǒng)。

13.3系統(tǒng)實(shí)現(xiàn)

程序代碼

//GZGL.cpp:系統(tǒng)主程序.

//

I///////////////////////////////////////////////////////////////////

#include"GZReport.h"

#include<iostream>

#include<string>

#include"application.hn

^includenMenuLoadData.h"

#include“MenuAddNew.h"

#include'?MenuSaveData.h"

#include"MenuSearch.h**

#include"MenuDelete.h"

#include"MenuEdit.h"

#includenSort_ASC_SFGZ.h"

#include??MenuStatics.h"

#includeHMenuEditStandard.hH

usingnamespacestd;

intmain(intargczchar*argv[])

第13章項(xiàng)目實(shí)踐一工資管理系統(tǒng)481

CApplicationapp("工資管理系統(tǒng)”);

//數(shù)據(jù)維護(hù)模塊

CMenuBarpl”數(shù)據(jù)維護(hù)”);

CMenuLoadData1oad(”L",“加1載數(shù)據(jù)”);

CMenuSaveDatasave(nSn,“保存數(shù)據(jù)”);

pl.addMenu(&load);

pl.addMenu(&save);

//查詢模塊

CMenuBarp2(“S“,“查詢”);

CMenuSearchsearch("S",”按名字/工號查詢”);

p2.addMenu(&search);

//編輯模塊

n

CMenuBarp3(E"z”編輯”);

CMenuAddNewadd(,,A,\嘴力「員工”);

CMenuDeletedel("D","刪除員工”);

Hn

CMenuEditedit(Ez”編輯員工”);

p3.addMenu(&add);

p3.addMenu(&del);

p3.addMenu(&edit);

〃統(tǒng)計(jì)模塊

CMenuBarp4(“T“,“統(tǒng)計(jì)”);

CMenuStaticsstatics("T","統(tǒng)計(jì)”);

CMenuEditStandardstandard(”E",“修改統(tǒng)計(jì)標(biāo)準(zhǔn)”);

p4.addMenu(&statics);

p4.addMenu"standard);

//排序模塊

CMenuBarp5(“P“,“排序”);

nH

CSort_ASC_SFGZsort(SFAz”實(shí)發(fā)工資(升序)”);

p5.addMenu(&sort);

//系統(tǒng)初始化

CMenuBarinit("”初始化菜單”);

init.addMenu(Goad);

//系統(tǒng)主菜單

CMenuBarmainbar(""z"工資管理系統(tǒng)

mainbar.addMenu(&pl);

mainbar.addMenu(&p2);

mainbar.addMenu(&p3);

mainbar.addMenu(&p4);

mainbar.addMenu(&p5);

app.addMenu(Smainbar);//設(shè)置系統(tǒng)主菜單

app.addlnitMenu(Sinit);〃設(shè)置系統(tǒng)初始化菜單

app.addSaveMenu(Ssave)”/設(shè)置保存數(shù)據(jù)的菜單功能

app.start();〃啟動(dòng)應(yīng)用系統(tǒng)

return0;

//Application.h:系統(tǒng)控制CApplication類定義

//////////////////////////////////////////////////////////////////////

#if!definedINCCApplication

482C++語言程序設(shè)計(jì)與應(yīng)用開發(fā)

#define_INC_CApplication

#include<string>

#includeHMenuBar.hn

#includeuEmployee.hn

#include"typedefset.hn

usingnamespacestd;

classCApplication{

public:

CApplication(stringname);

virtual-CApplication();

booladdMenu(CMenuBar*pmenu);//添加系統(tǒng)主菜單

booladdlnitMenu(CMenuBar*pmenu);//添力口初始化菜單

booladdSaveMenu(IMenuAction*pmenu);//添力口數(shù)據(jù)保存菜單

voidstart();

staticVPEMPLOYEE*getData(){

return&m_v;

}

staticstringgetDataFile(){

returnm_dataFile;

)

staticstringgetStandardFile(){

returnm_standardFile;

}

staticvoidsetChanged(boolb){

m_datachanged=b;

)

private:

//執(zhí)行初始化

voidinitialize(){

if(m_initmb)m_initmb->executeMenu();

)

//執(zhí)行主菜單

voidmainLoop(){

if(m_mb)m_mb->loop();

)

voidsaveData(){

//提示用戶保存修改的數(shù)據(jù)

if(m_datachanged){

cout?”數(shù)據(jù)已經(jīng)修改,是否要保存?(y/n),

stringinput;

cin?input;

CStringExse(input);

if(se.isEquallgnoreCase("Y")){

if(m_savemenu)m_savemenu->action();

)

第13章項(xiàng)目實(shí)踐一工資管理系統(tǒng)483

)

)

staticVPEMPLOYEEm_v;//保存系統(tǒng)數(shù)據(jù)

staticstringm_dataFile;//數(shù)據(jù)文件路徑

staticstringm_standardFile;〃統(tǒng)計(jì)標(biāo)準(zhǔn)文件路徑

staticboolm_datachanged;//標(biāo)志數(shù)據(jù)是否被修改過

CMenuBar//系統(tǒng)主菜單

CMenuBar*m_initmb;//初始化動(dòng)作子菜單

IMenuAction*m_savemenu;//保存數(shù)據(jù)的菜單項(xiàng)

stringm_appname;//應(yīng)用系統(tǒng)名

};

#endif

//Application.cpp:系統(tǒng)控制類.

//類CApplication實(shí)現(xiàn)

////////////////////////////////////////////////////////////////////

#include"application.hn

VPEMPLOYEECApplication::m_v;

stringCApplication::m_dataFile="c:Wzggz.dat";

stringCApplication::m_standardFile="c:Wstandard.txt";

boolCApplication::m_datachanged=false;

CApplication::CApplication(stringname){

m_appname=name;

m_mb=NULL;

m_initmb=NULL;

m_savemenu=NULL;

}

boolCApplication::addMenu(C

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論