走进C++程序世界---------雇员工资管理系统

前面对C++ 面向对象的基本了解和认识,下面来运用前面的基础知识,来实现一个简单的雇员工资管理系统,雇员分为2中,普通员工和管理者,两者工资和工作年限挂钩。具体参见下图:

具体实现参见下面的代码:

/*File : salarySystem.h
 *Auth : sjin
 *Date : 2014-04-27
 *Mail : [email protected]
 */

#ifndef __SALARYSYSTEM_H
#define __SALARYSYSTEM_H

#include <string>
#include <iostream>

#define MAX_COUNT 1000

using namespace std;

//员工类
class Emplyee{
public:
	//构造函数
	//根据员工的名字和入职时间构造员工对象
	Emplyee(string strName , int nYears) : m_strName(strName),m_nYears(nYears){};

	//获得得员工的工资。
	virtual int GetSalary() const {return 0;};
	//提供一个公共接口,使外界得到员工的名字
	string GetName() const { return m_strName;};

protected:
	int m_nYears; //入职时间
	string m_strName; //姓名
};

/*经理类
 *因为经理是员工中的一种,从员工类派生
 */
class Manager : public Emplyee {
public:
	/*使用基类的高走函数,完成对属性的初始化工作*/
	Manager(string strName,int nYears):Emplyee(strName,nYears) {};

	/* 对基类提供的纯虚函数进行自定义*/
	virtual int GetSalary() const { return 5000*m_nYears + 10000;};
};

class Worker: public Emplyee {
public:
	/*使用基类的构造函数,完成对属性的初始化工作*/
	Worker(string strName,int nYears):Emplyee(strName,nYears) {};

	/* 对基类提供的纯虚函数进行自定义*/
	virtual int GetSalary() const { return 200*m_nYears + 2000;};
};

class SalaryStstem {
public:
	/*构造函数和析构函数*/
	SalaryStstem(void);
	~SalaryStstem(void);
public:
	/*输入员工信息*/
	void InputEmplyee(void);
	/*现实员工信息*/
	void DisplaySalary(void);
	/*计算平均工资*/
	double GetAverSalary(void);

private:
	/*当前员工总数*/
	int m_nCount;
	/*用于保存所有员工对象*/
	Emplyee *m_arrEmplyee[MAX_COUNT];
};
#endif
/*File : salarySystem.cpp
 *Auth : sjin
 *Date : 2014-04-27
 *Mail : [email protected]
 */

#include "salarySystem.h"

/*构造函数初始化*/
SalaryStstem::SalaryStstem(void)
{
	m_nCount = 0;// 初始化员工总数为0
}

/*析构函数 清理资源,释放内存*/
SalaryStstem::~SalaryStstem(void)
{
	int i = 0;

	for(i = 0; i < m_nCount; i++){
		Emplyee *pEmplyee = m_arrEmplyee[i];

		delete pEmplyee;
		m_arrEmplyee[i] = NULL;
	}
}

void help()
{
	//提示信息
	cout << "*************************************************" << endl;
	cout << "* 请输入员工信息                                *\n" <<
		    "* 格式: 员工姓名 入职时间 是否为经理级别       *\n" <<
		    "* 例如: sjin 4 0                               *\n" <<
		    "* 输入end 表示输入结束                          *\n" <<
		    "* 输入help 显示提示信息                         *" << endl;
	cout << "*************************************************" << endl;
}

/*获取用户输入*/

void SalaryStstem::InputEmplyee(void)
{

	string strName = "";
	int nYears = 0;
	bool bManager = false;
	int nIndex = 0;

	// 提示信息
	help();

	/*开始循环接收用户输入的用户数据*/
	while(nIndex < MAX_COUNT){
		//清空输入流
		cin.clear();

		//读取用户数据
		cin >> strName ;

		//cout << strName << nYears << bManager<<endl;

		if ("end" == strName){
			break;
		}

		if("help" == strName){
			help();
			continue;
		}
		cin >> nYears >> bManager;

		Emplyee *pEmplyee = NULL;

		if(bManager){
			pEmplyee = new Manager(strName,nYears);
		} else {
			pEmplyee = new Worker(strName,nYears);
		}
		m_arrEmplyee[nIndex] = pEmplyee;

		++nIndex;

	}

	//保存员工数量总数
	m_nCount = nIndex;

}

/*输出员工工资信息*/
void SalaryStstem::DisplaySalary(void)
{
	cout << "工资管理系统" << endl;
	cout << "当前员工总数:" << m_nCount <<
		"\n平均工资" << GetAverSalary() << endl;
	cout << "员工具体工资信息如下:" << endl;

	for ( int i = 0; i < m_nCount; i++){
		cout << "姓名:" << m_arrEmplyee[i]->GetName() << "\t 工资" <<
			m_arrEmplyee[i]->GetSalary() << endl;
	}
}

/*输入员工平均工资*/
double SalaryStstem::GetAverSalary()
{
	int nTotal = 0;

	for ( int i = 0; i < m_nCount; i++){
		nTotal += m_arrEmplyee[i]->GetSalary();
	}

	return (double)nTotal/(m_nCount);
}
/*File : main.cpp
 *Auth : sjin
 *Date : 2014-04-27
 *Mail : [email protected]
 */

#include "salarySystem.h"

int main()
{
	//创建SalaryStstem 对象
	SalaryStstem nSalarySys;

	//获得用户输入
	nSalarySys.InputEmplyee();

	cout << "*********员工的工资信息表**********" << endl;
	//显示具体的工资信息
	nSalarySys.DisplaySalary();

	return 0;
}

通过这个简单的例子,可以将前面的知识进行有效的实践。

时间: 2024-08-28 18:43:06

走进C++程序世界---------雇员工资管理系统的相关文章

走进C++程序世界------异常处理

一. 概述 C++自身有着非常强的纠错能力,发展到如今,已经建立了比较完善的异常处理机制.C++的异常情况无非两种,一种是语法错误,即程序中出现了错误的语句,函数,结构和类,致使编译程序无法进行.另一种是运行时发生的错误,一般与算法有关. 关于语法错误,不必多说,写代码时心细一点就可以解决.C++编译器的报错机制可以让我们轻松地解决这些错误. 第二种是运行时的错误,常见的有文件打开失败.数组下标溢出.系统内存不足等等.而一旦出现这些问题,引发算法失效.程序运行时无故停止等故障也是常有的.这就要求

走进C++程序世界------IO标准库介绍

流概述 流是C++标准的组成部分,流的主要目标是,将从磁盘读取文件或将输入写入控制台屏幕的问题封装起来,创建流后程序员就可以使用它,流将负责处理所有的细节. IO类库 在C++输入?输出操作是通过C++系统提供的完成I/O操作的一组类实现的.主要包括: 标准流类:处理与标准输入设备(键盘)和输出设备(显示器)关联的数据流 文件流类:处理与磁盘文件关联的数据流 字符串流类:利用内存中的字符数组处理数据的输入输出 异常类等:处理异常错误. 标准IO对象: 包含iostream类的C++程序启动时,将

走进C++程序世界-----operator new delete 重载

在C++ 的世界里,new 和delete 是关键字,而在C的世界里相对应的malloc和free是函数,关键C++的new和delete分析,详见前面的章节,这里就不在过多的介绍了.链接. 下面来研究下关于new 和delete的重载. 1.对比使用重载和未使用重载 未使用" /*File : operator_new.cpp *Auth : sjin *Date : 2014-04-27 *Mail : [email protected] */ #include <iostream&g

简单的工资管理系统小程序,只是练手

需求如下: 工资管理系统aaa 100000bbb 80000ccc 50000ddd 30000-----以上是info.txt文件-----实现效果:从info.txt文件中读取员工及其工资信息,最后将修改或增加的员工工资信息也写入原info.txt文件.效果演示:1. 查询员工工资2. 修改员工工资3. 增加新员工记录4. 退出 1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 # @Time : 2017/9/21 15:19 4 # @

【SpringMVC学习02】走进SpringMVC的世界

上一篇博文主要介绍了springmvc的整个架构执行流程,对springmvc有了宏观上的把握,这一篇博文主要以案例作为驱动,带你走进springmvc的世界.案例中的需求很简单:对商品列表的查询.表的话还是使用我在学习mybatis时候用的表,具体可以参见这篇博文中的建表语句. 1. 环境的搭建 需要导入spring的jar包,单纯的入门springmvc的话不需要导入所有的spring jar包,但是核心包和spring-web/spring-webmvc是一定要导入的,考虑到后面还会和my

职工工资管理系统 --C语言

#include<stdio.h> #include<string.h> #include<stdlib.h> #define NUM 1000 void enter(); void search_num(); void dele_num(); void modi_num(); void browse(); void count(); void load(); void add(); void menu(); int n; //员工的总数 struct emploee

详解C++引用——带你走进引用的世界

 一.介绍引用 首先说引用是什么,大家可以记住,引用就是一个别名,比如小王有个外号叫小狗,他的妈妈喊小狗回家吃饭,那就是在喊小王回家吃饭. 接下来我们用两行代码来声明一个引用(就拿小王和小狗来说吧): int xiaoW; int &xiaoG=xiaoW; 上面就是一个引用,说明几点要注意的地方: 1.&不是取地址符,而是引用运算符: 2.xiaoG是xiaoW的别名,所以这两个变量的值和地址都是一样的: 3.引用只能初始化,而不能先声明再赋值,因为引用就相当于一个常量: 4.在声明

走进缓存的世界(三) - Memcache

系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它基于一个存储key/value对的hashmap,通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度. 它的工作机制是在内存中开辟一块空间,然后建立一个HashTable并自己管理,使用非阻塞的网络IO. 更多详细的信息参阅Memcache官方网

带你走进rsync的世界

导读 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录.rsync共有3种使用方法,在配置rsync也是有6个步骤的.下面我们就从rsync的介绍,rsync的使用和rsync的配置带你走进rsync的世界 一.rsync简介 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地