版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 插花技藝課程設(shè)計(jì)案例
- 電子設(shè)計(jì)課程設(shè)計(jì)拔河
- 2024年浙江省安全員《B證》考試題庫及答案
- 2025湖南省安全員-B證(項(xiàng)目經(jīng)理)考試題庫
- 2024年中國家用電器傳動(dòng)鏈輪市場調(diào)查研究報(bào)告
- 2025山西省安全員-B證考試題庫及答案
- 工程定額課程設(shè)計(jì)結(jié)語
- 招聘網(wǎng)頁課程設(shè)計(jì)代碼
- 2024年山東省安全員考試題庫附答案
- 用料小車課程設(shè)計(jì)總結(jié)
- 2024秋期國家開放大學(xué)本科《會(huì)計(jì)實(shí)務(wù)專題》一平臺在線形考(形考作業(yè)一至四)試題及答案
- 新高考數(shù)學(xué)概率統(tǒng)計(jì)分章節(jié)特訓(xùn)專題13超幾何分布(原卷版+解析)
- 河綜合治理工程竣工環(huán)保驗(yàn)收監(jiān)測調(diào)查報(bào)告
- 《小數(shù)除法:人民幣兌換》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年五年級上冊數(shù)學(xué)北師大版
- 2023-2024學(xué)年山東省泰安市高一下學(xué)期7月期末考試物理試題(解析版)
- 基于認(rèn)知行為療法的藥物干預(yù)研究
- 舞蹈鑒賞學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 市政工程單位、分部、分項(xiàng)工程劃分方案
- 期末檢測(試題)-2024-2025學(xué)年三年級上冊數(shù)學(xué)人教版
- 康復(fù)醫(yī)學(xué)治療技術(shù)士考試歷年真題
- 2024國家開放大學(xué)電大《藥理學(xué)》機(jī)考終結(jié)性5套真題題庫及答案2-百度文
評論
0/150
提交評論