项目实践-工资管理系统_第1页
项目实践-工资管理系统_第2页
项目实践-工资管理系统_第3页
项目实践-工资管理系统_第4页
项目实践-工资管理系统_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第13章项目实践—工资管理系统

本章要点

•系统需求分析

•系统功能设计过程

13.1系统需求分析

工资管理是一个企业不可缺少的一部分,它利用计算机对员工工资进行统一管理,实

现工资管理工作的系统化、规范化和自动化,为企业提高工作效率。所以在信息化的今天,

工资管理系统在企业或单位中起着举足轻重的作用。木工资管理系统需要完成以下任务:

(1)能够持久化存储员工信息。员工信息由两部分组成:员工的基本信息和员工工资

信息。员工基本信息包括员工工号、员工姓名,员工工资信息包括基本工资、奖金、扣款、

应发工资、税款、实发工资。奖金和扣款由财务人员直接指定,应发工资=基本工资+奖金-

扣款,税款为应发工资的12%,实发工资=应发工资-税款。

(2)能够增加、删除、修改员工信息。

(3)能够按照员工工号或姓名查找对应的员工的信息,并将查找到的员工信息以指定

的报表形式输出。

(3)能够对员工按照工资进行指定方式的排序,并将排序结果以报表形式输出。

(4)能够按照工资级别进行员工信息统计,将不同档次工资的人数进行报表输出。

13.2系统设计

13.2.1功能模块设计

根据需求描述,工资管理系统由:数据维护模块、查询模块、编辑模块、统计模块、

排序模块、打印模块6大功能模块组成,如图13T所示。

(1)数据维护模块:数据维护模块包括数据加载和数据保存两个功能。数据加我完成

从外部文件加载员工信息(以下简称记录)到内存,数据保存完成将内存中的员工信息保

存到外部文件的工作。数据维护模块完成了系统数据的持久化保存。在此工资管理系统中,

记录以二进制形式存储在数据文件中。系统的数据也可以通过编辑模块中的新增功能来添

加。

(2)查询模块:查询模块主要完成在信息中查找满足相关条件的记录。在此工资管理

468C++语言程序设计与应用开发

系统中,用户可以按照员工工号或姓名进行查找。若找到该记录,则以表格形式打印出此

记录的信息。

(3)编辑模块:编辑模块主要完成对记录的维护。包括修改、删除、新增功能。编辑

操作时,只是修改内存中的数据记录,一般而言,系统进行了这些操作之后,需要将数据

存入源数据文件中。

(4)统计模块:统计模块主要完成将实发工资按照等级进行人数统计,并将统计结果

以报表形式输出。统计标准存放在外部的配置文件中,系统可以对配置文件进行编辑,设

置统计标准。

(5)排序模块:排序模块完成员工记录按照指定方式进行排序,并将排序功能进行报

表输出,本系统实现采用实发工资的升序作为排序标准。

(6)打印模块:打印模块负责系统数据报表输出,它实现将记录信息以表格形式在屏

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

工资管理系统

数据维护模块查询模块编辑模块统计模块排序模块打印模块

保加工

存载序

图13-1系统功能模块图

13.2.2系统总体框架

工资管理系统的数据保存在外部文件中,名称为zggz.dat,采用二进制方式输入和输

出;统计报表和员工工资报表输出到文件时,报表文件名由用户确定;统计标准保存在外

部的配置文件standard.txt中。系统的总体框架如图13-2所示。

工资管理系统

图13-2系统总体框架

第13章项目实践一工资管理系统469

13.2.3类设计

本系统采用面向对象思想进行设计,系统功能通过类来描述。系统定义了类CEmployee

描述员工工资的属性利操作。为了使系统功能易于扩展,对系统功能采用类似Windows的

菜单的管理方式,系统功能大都作为菜单项实现。定义了接口IMenuAction描述菜单项的

功能。每个实现具体系统功能(如,修改、查询等)的类都直接从IMenuAction派生。另

定义一个从IMenuAciton派生的类CMenuBar描述可以包含子菜单的菜单类。一个CMenuBar

对象可以管理多个IMenuAction的派生类。类CGZReport实现员工工资报表的输出功能。

CApplication

图13-3系统类层次关系

13.2.4类功能

员工工资管理系统中所有的功能通过类来描述和实现。下面详细介绍系统中类的主要

的属性和功能。

1.CEmpIoyee

描述员工信息。类结构如图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是一个结构类型,ni_data存放员工的信息。之所以采用一个单独的结构类

470C++语言程序设计与应用开发

型来描述员工信息,是因为,一个类对象的存储单元中除了对象成员外,还可能包含其他

隐含的内存单元,如虚表指针的存储单元等。这样在以二进制进行对象内容的输入时,会

造成对象存储单元被破坏。例如,若is为输入流对象,。为某对象,则采用二进制从is

中输入数据到。时,采用“is.read据。,sizeof(。));”,则。中除了数据成员外的其他存

储单元也被覆盖,造成。被破坏。结构类型的变量不会存在上述的问题。SEmployee的定

义如图13-5所示。

«结构>>

SEmployee

-charm_id[MAX」D_LEN]〃工号

+charm_name[MAX_NAME_LEN]〃姓名

ifloatm_jbgz〃基本工资

+floatm」j〃奖金

+floatm_kk〃扣款

+floatm_y鱼z〃应发工资

•floatm_sk〃税款

+floatms兔z〃实发工资

图13-5结构SEmployee

MAX_ID_LEN和MAX_NAME_LEN为系统定义的全局int型变量。

功能:

(l)boolreadFromFile(ifstream&ifs)

从输入流ifs中读入员工信息。

(2)boolwriteToFile(ofstream&ofs)

将员工信息输出到输出流ofs中。

2.IMenuAction

IMenuAction描述了所有菜单项的功能。类结构如图13-6所示。

IMenuAction

-stringkey〃菜单按键

-stringcaption〃菜单标题

+IMenuItem(instringkey,instringcaption)

+virtualvoidaction()

+virtualstringgetKey()

-♦-virtualstringgetCaption()

+virtual~IMenuItem()

图13~6类IMenuAction

每个菜单项有两个属性key和caption。caption是菜单项的标题,key是菜单项对应

的按键。只有当用户输入和key相同的字符串时,才可能执行该菜单的功能。

功能:

(1)virtualvoidaction()

实现菜单项的功能。外部调用action来执行该菜单的功能。每个派生类都要在action

第13章项目实践一工资管理系统471

中实现自己的功能。

3.CMenuLoadData

实现数据加载,将系统的数据从外部文件zggz.dat读入到内存中,内存中数据存放在

vector〈CEmployee*>类型的集合对象中。类结构如图13-7所示。

CMenuLoadData

+CMenuLoadData(instringkey,instringcaption)

-voidload()

图13-7类CMenuLoadData

功能:

(1)voidload()

实现了数据加载的操作,action函数会调用该load成员函数。

4.CMenuSaveData

实现数据保存,将内存中的数据保存到外部文件zggz.dat中。类结构如图13-8所示。

CMenuSaveData

+CMcnuSavcData(instringkey,instringcaption)

-intsave()

图13-8类CMenuSaveData

功能:

(1)voidsave()

实现了数据保存的操作,被action函数调用。

5.CMenuSearch

实现按照姓名和工号查询功能,并将查询的结果进行报表输出。内部使用CGZReport

类的功能。类结构如图13-9所示。

CMenuSearch

+CMenuSearch(instringkey,instringcaption)

-voidsearch()

图13-9类CMenuSearch

功能:

(1)voidsearch()

实现查询功能,被action函数调用。

6.CMenuAddNew

实现添加新员工的功能。新添加的员工信息存放在内存的中,用户应该调用数据保存

472C++语言程序设计与应用开发

的功能(山CMenuSaveData类实现)将添加的数据保存到外部文件。类结构如图13T0所

ZjSO

CMenuAddNew

+CMenuAddNew(instringkey,instringcaption)

-intadd()

图13-10类CMenuAddNew

功能:

(1)voidadd()

实现添加新员工的功能,被action函数调用。

7.CMenuDelete

实现了删除员工信息的功能。该类实现删除指定工号或者姓名的员工的信息,只是删

除了内存中的员工信息,必须要调用数据保存的功能(由CMenuSaveData类实现)才能够

实际反映到持久化存储设备中。类结构如图13T1所示。

CMenuDelete

+CMcnuDclctc(instringkey,instringcaption)

-void加1()

图1371类CMenuDelete

功能:

(1)voiddel()

实现了删除员工的功能,被action函数调用。

8.CMenuEdit

实现了编辑员工信息的功能。该类可以编辑指定工号或者姓名的员工的信息,只是编

辑内存中的员工信息,必须要调用数据保存的功能(由CMenuSaveData类实现)才能够实

际反映到持久化存储设备中。类结构如图13-12所示。

CMcnuEdit

+CMcnuEdit(instringkey,instringcaption)

-voidedit()

图13-12类CMenuEdit

功能:

(1)voidedit()

实现编辑员工的功能,被action函数调用。

第13章项目实践一工资管理系统473

9.CSort_ASC_SFGZ

实现员工工资按照实发工资进行升序排序。并能够将排序结果进行报表(调用

CGZReport类的功能)输出。类结构如图13T3所示。

CSort_ASC_SFGZ

+CSort_ASC_SFGZ(instringkey,instringname)

+voidsort(invector<CEmployee*>*mpve)

图13-13类CSort_ASC_SFGZ

功能:

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

实现员工工资排序,action函数会调用该函数。m_pve指向内存中的系统数据。排序

后,内存中员工记录的顺序将发生改变。

10.CMenuStatics

对员工工资信息进行统计。统计时按照存放在standard,txt文件中的工资分段值统计

出各段的员工人数。例如,若standard,txt文件中的内容如下:

800

2000

5000

则系统将统计出:小于8000、大于等于800并且小于2000、大于等于2000并且小于

5000、大于等于5000各段的员工人数。类结构如图13-14所示。

CMenuStatics

-vector<int>mstandard〃统计的分段值

+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文件中读入的用于统计的分段的工资值。

功能:

(1)voidstatics()

实现统计功能。action函数调用该函数。

(2)intlessThan(intv,VPEMPLOYEE*m_pve)

实现统计m_pve指向的员工数据集合中实发工资小于v的人数。返回符合条件的人数。

VPEMPLOYEE通过“typedefvector<CEmployee*>VPEMPLOYEE;定义。

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

实现统计m.pve指向的员工数据集合中实发工资小于r并且大于等于1的人数。返回

474C++语言程序设计与应用开发

符合条件的人数。

(4)intgreaterEqualThan(intr,VPEMPLOYEE*m_pve)

实现统计m_pve指向的员工数据集合中实发工资大于等于r的人数。返回符合条件的

人数。

(5)voidreadstandard()

从standard.txt文件中将统计等级的值读入保存到m_standard中。

11.CMenuEditStandard

编辑用于统计的工资分段值,用户可以修改用于统计的工资分段值。类结构如图13-15

所示。

CMenuEditStandard

+CMcnuEditStandard(instringkey,instringcaption)

•voidedit()

-stringreadStandard()

图13-15类CMenuEditStandard

功能:

(1)stringreadstandard()

从standard.txt中读入统计工资分段值,并作为字符串返回。

(2)voidedit()

实现分段值的编辑,被action函数调用。

12.CMenuBar

可以带有子菜单的菜单项。类结构如图13-16所示。

CMenuBar

-typedefvector<IMenuAction*>VMENUBAR

-VMENUBARm_vb〃子菜单项列表

+CMenuBar(instringkey,instringcaption)

上booladdMcnu(inIMcnuAction*pmcnu)

+voidloop()

卜voiddispatch(instringselect)

+voidmainMenu()

+voidexecuteMenu()

-voidshowMenu(inIMenuAction*p)

-boolexistMenu(instringk)

+voidaction()

图13-16类CMenuBar

只要是从IMenuAction派生的都可以作为子菜单。这样可以实现多级菜单。

功能:

(l)booladdMenu(IMenuAction*pmenu)

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

第13章项目实践一工资管理系统475

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

(2)boolexistMenu(stringkey)

查找子菜单列表中是否有key和k相同的子菜单项。

(3)voidmainMenuO

分行显示第一级子菜单的caption和key。

(4)voidshowMenu(IMenuAction*p)

显示p指向的菜单的caption和key。被mainMenu调用。

(5)dispatch(stringselect)

查找第一级子菜单,执行key和select相同的的菜单的功能,即调用该菜单的action

函数。

(6)voidloop()

显示第一•级子菜单,循环接收用户输入,并调用dispatch执行相应的菜单,action

调用该函数。

(7)executeMenu()

调用所有第一级子菜单的功能。

13.CGZReport

CGZReport实现员工信息按照某种报表格式输出。类结构如图13T7所示。

CGZReport

-ostream&m_os〃报表的输出流

+CGZReport(inostream&os)

+voidprintHeader()

+voidprintEmployee(inCEmployee*pe)

+voidrcport(inVPEMPLOYEE&pv)

+virtual〜CGZReport。

图1377类CGZReport

m_OS引用屏幕流对象(cin)则报表输出到屏幕,若引用某个文件输出流对象,则报

表输出到文件。

功能:

(1)CGZReport(ostreamftos)

构造函数,参数os引用报表的输出流。

(2)voidprintHeader()

打印报表的头部。

(3)voidprintEmployee(CEmployee*pe)

输出一个员工信息。

(4)voidreport(VPEMPLOYEE&pv)

输出pv引用的的员工信息集合。

14.CStaticsReport

实现统计信息的报表输出,其功能和CGZReport类似。类结构如图13T8所示。

476OH•语言程序设计与应用开发

CStaticsReport

-ostream&m_os〃报表输出流对象

+CStaticsReport(inostream&os)

4voidprintHeader()

+voidprintStaticsItem(instringdj,instringnumber)

+voidreport(invector<string>&pv)

+virtual~CStaticsReport()

图13-18类CStaticsReport

mos引用屏幕流对象(cin)则报表输出到屏幕,若引用某个文件输出流对象,则报

表输出到文件。

功能:

(l)CStaticsReport(ostreamfeos)

构造函数,参数。s引用报表的输出流。

(2)voidprintHeader0

打印报表的头部。

(3)voidprintStaticsItern(stringdj,stringnumber)

输出-•个统计段的统计结果。Dj描述了统计的范围,如,“大于800”、“大于等于

5000”等。number表示该范围的人数。

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

输出pv指向的统计结果。集合中的项是成对出现的,•个表示描述范围,一个描述人

数,其调用printStaticsItenio

15.CInteger

封装int型数据的某些操作。类结构如图13-19所示。

CInteger

-intmi

+CInteger(ininti)

+stringtoString()

+voidsetValue(ininti)

+staticintparselnt(instringstr)

+virtual〜CInteger。

S13-19类CInteger

功能:

(l)CInteger(inti)

构造函数,i传入封装的int型数。

(2)stringtoString()

将转换成字符串。

(3)voidsetValue(inti)

设置m_i的值。

(4)staticintparselnt(stringstr)

第13章项目实践一工资管理系统477

从str中解析出一个int型数。如,“123”解析出int型的123。

16.CFIoat

封装float型数据的某些操作。类结构如图13-20所示。

CFIoat

-floatm_f

+CFIoat(infloatf)

+stringtoString()

+voidsetVa!ue(infloatf)

^staticintparseFloat(instringstr)

+virtual〜CFIoat。

图13-20类CFIoat

功能:

(l)CFloat(floatf)

构造函数,f传入封装的float型数。

(2)stringtoString()

将m_f转换成字符串。

(3)voidsetValue(floatf)

设置m_f的值。

(4)staticfloatparseFloat(stringstr)

从str中解析出一个float型数。如,“12.3”解析出float型的12.3。

17.CStringEx

封装对string字符串的简单操作。类结构如图13-21所示。

CStringEx

-stringm_str

+CStringEx(instringstr)

+staticstringtoLowerCase(instrings)

+staticstringtoUpperCase(instrings)

+boolisEqualIgnorcCasc(instringstr)

图13-21类CStringEx

功能:

(1)stringtoLowerCae(strings)

将s转换成小写字符串。

(2)stringtoUpperCase(strings)

将s转换成大写字符串。

(3)boolisEquallgnoreCase(stringstr)

判断封装的字符串m_str和参数str是否相等。

478OH•语言程序设计与应用开发

18.CTooIs

实现系统常用的功能。类结构如图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指定的工号的员工,结果保存到s中。s中保存的只是对系统数据的

引用。

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

VPEMPLOYEE&s)

(6)在pve中查找name指定的姓名的员工,结果保存到s中。s中保存的只是对系统

数据的引用。

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

从pve中删除name指定的姓名的员工。

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

删除pve中id指定的工号的员工。

(9)staticstringgetFileName(stringtip)

获取一个文件名,tip为一个提示信息。

(10)staticvoidcharline(intn,charc,ostreamfeofs)

向一个输出流ofs中输出n个字符co

(11)staticstringreadLineO

第13章项目实践一工资管理系统479

从键盘读入一行。忽略前期输入的回车等特殊字符。

(12)staticstringreadLineNoIgnore()

从键盘读入一行。不忽略前期输入的回车等特殊字符。

19.CAppIication

系统的总体控制类,CApplication控制整个系统的流程、存储系统的数据、数据文件

路径、统计标准的文件路径等。类结构如图13-23所示。

CApplication

-staticVPEMPLOYEEm_v〃员工信息

-staticstringmdataFile〃数据文件路径

-staticstringm_standardFile〃统计标准文件路径

-staticboolmdatachangcd〃内存和文件中的员工信息是否致

-CMenuBar*m_mb〃系统菜单

-CMenuBar*m_initmb〃初始化菜堆

-IMenuAction*m_savemenu〃保存数据菜单

-stringmappname〃应用系统名

+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)

设置系统的主菜单。

(2)voidaddlnitMenu(CMenuBar*pmenu)

设置系统的初始化菜单,系统在启动时,会执行初始化菜单的所有子菜单的功能。

(3)voidaddSaveMenu(IMenuAction*pmenu)

设置保存数据菜单。系统在结束前,会判断内存数据和文件数据是否一致,若不一致,

则调用保存数据菜单的功能。

(4)voidinitializeO

完成初始化,调用初始化菜单mjnitmb的第一级子菜单的功能。

(5)voidmainLoop0

显示系统的主菜单,接收用户的输入,并调用相应的功能。系统的所有功能在此完成。

(6)voidsaveDataO

在系统退出前判断内存和文件中的数据是否一致,若不一致,则提示用户保存数据,

调用msavemenu的功能实现保存。

480OH•语言程序设计与应用开发

(7)voidstart()

启动系统。Start依次调用initialize、mainLoop、saveDatao

(8)staticVPEMPLOYEE*getDataO

获取指向系统数据的指针。某功能若要访问系统数据则可调用该方法获取。

(9)staticstringgetDataFile()

获取系统数据文件路径。

(10)staticstringgetStandardFileO

获取统计标准的文件路径。

(11)staticvoidsetChanged(boolb)

设置描述内存和文件中数据是否一致的标志。

13.2.5main函数流程

main函数的执行流程如下:

(1)创建CApplication类的对象appo

(2)创建完成初始化功能的菜单,通过addlnitMenu设置到app中。

(3)创建系统的主菜单,通过addMenu设置到app中。

(4)创建完成数据保存的菜单功能,通过addSaveMenu设置到app中。

(5)调用app的start启动系统。

13.3系统实现

程序代码

//GZGL.cpp:系统主程序.

//

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章项目实践一工资管理系统481

CApplicationapp("工资管理系统”);

//数据维护模块

CMenuBarpl”数据维护”);

CMenuLoadData1oad(”L",“加1载数据”);

CMenuSaveDatasave(nSn,“保存数据”);

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);

〃统计模块

CMenuBarp4(“T“,“统计”);

CMenuStaticsstatics("T","统计”);

CMenuEditStandardstandard(”E",“修改统计标准”);

p4.addMenu(&statics);

p4.addMenu"standard);

//排序模块

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

nH

CSort_ASC_SFGZsort(SFAz”实发工资(升序)”);

p5.addMenu(&sort);

//系统初始化

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

init.addMenu(Goad);

//系统主菜单

CMenuBarmainbar(""z"工资管理系统

mainbar.addMenu(&pl);

mainbar.addMenu(&p2);

mainbar.addMenu(&p3);

mainbar.addMenu(&p4);

mainbar.addMenu(&p5);

app.addMenu(Smainbar);//设置系统主菜单

app.addlnitMenu(Sinit);〃设置系统初始化菜单

app.addSaveMenu(Ssave)”/设置保存数据的菜单功能

app.start();〃启动应用系统

return0;

//Application.h:系统控制CApplication类定义

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

#if!definedINCCApplication

482C++语言程序设计与应用开发

#define_INC_CApplication

#include<string>

#includeHMenuBar.hn

#includeuEmployee.hn

#include"typedefset.hn

usingnamespacestd;

classCApplication{

public:

CApplication(stringname);

virtual-CApplication();

booladdMenu(CMenuBar*pmenu);//添加系统主菜单

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

booladdSaveMenu(IMenuAction*pmenu);//添力口数据保存菜单

voidstart();

staticVPEMPLOYEE*getData(){

return&m_v;

}

staticstringgetDataFile(){

returnm_dataFile;

)

staticstringgetStandardFile(){

returnm_standardFile;

}

staticvoidsetChanged(boolb){

m_datachanged=b;

)

private:

//执行初始化

voidinitialize(){

if(m_initmb)m_initmb->executeMenu();

)

//执行主菜单

voidmainLoop(){

if(m_mb)m_mb->loop();

)

voidsaveData(){

//提示用户保存修改的数据

if(m_datachanged){

cout«”数据已经修改,是否要保存?(y/n),

stringinput;

cin»input;

CStringExse(input);

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

if(m_savemenu)m_savemenu->action();

)

第13章项目实践一工资管理系统483

)

)

staticVPEMPLOYEEm_v;//保存系统数据

staticstringm_dataFile;//数据文件路径

staticstringm_standardFile;〃统计标准文件路径

staticboolm_datachanged;//标志数据是否被修改过

CMenuBar//系统主菜单

CMenuBar*m_initmb;//初始化动作子菜单

IMenuAction*m_savemenu;//保存数据的菜单项

stringm_appname;//应用系统名

};

#endif

//Application.cpp:系统控制类.

//类CApplication实现

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

#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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论