vc6我没测试环境,不保证完全兼容哦。可运行的程序在隔壁我发的测试帖中。
[ 本帖最后由 TonyDeng 于 2015-5-4 16:37 编辑 ]
[ 本帖最后由 TonyDeng 于 2015-5-4 16:37 编辑 ]

授人以渔,不授人以鱼。
2015-05-04 11:11
2015-05-04 16:36

2015-05-04 17:17

2015-05-04 18:26
程序代码:
/*
http://bbs.bccn.net/thread-444643-1-1.html
定义一个能够记录公司员工工资的类, 比如包括:员工号,姓名,基本工资,补贴金额,奖励金额,扣税,实发工资等),
其中实发工资=基本工资+补贴金额+奖励金额-扣税。
要求:
1)新增功能,能输入10个员工信息并计算出实发工资,并且员工编号在生成员工信息时同时生成;(提示:使用构造函数生成员工编号)
2)要求对所有员工都能按照名称或编号进行显示、查找、增加和修改的功能;
3)统计出员工的平均工资。
以运行结果文本菜单的形式输出
开发环境:Visual Studio 2013
语言:Visual C++ V12.0
标准:C++ 11
*/
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <vector>
#include "Tools.h"
#include "Menu.h"
#include "Employee.h"
// 全局数据
std::vector<Employee> Employees; // 员工数据库
// 函数原型
void InitData(void);
void Append(void);
void Find(void);
void Edit(void);
void Delete(void);
void Statistics(void);
void List(void);
// 程序主入口
int main(void)
{
const std::vector<Menu::Item> menuList = {
{ '1', "1 - 新增员工", Append },
{ '2', "2 - 查找员工", Find },
{ '3', "3 - 修改资料", Edit },
{ '4', "4 - 删除员工", Delete },
{ '5', "5 - 工资统计", Statistics },
{ '6', "6 - 员工明细", List },
{ '0', "0 - 结束程序", nullptr }
};
Menu menu(menuList);
InitData();
while (true)
{
ClearScreen();
menu.Show();
Menu::Item& choiceItem = menu.Choice();
if (choiceItem.func == nullptr)
{
break;
}
(*choiceItem.func)();
}
return EXIT_SUCCESS;
}
void InitData(void)
{
Employees.push_back(Employee(5, "周伯通", 3000, 1000, 2000, 300));
Employees.push_back(Employee(0, "黄药师", 3200, 1500, 1100, 200));
Employees.push_back(Employee(1, "欧阳锋", 2500, 1000, 5000, 100));
Employees.push_back(Employee(0, "洪七公", 2800, 2000, 1500, 230));
Employees.push_back(Employee(0, "一灯大师", 1000, 4000, 1000, 0));
}
void Append(void)
{
Employees.push_back(Employee(0, "", 0, 0, 0, 0));
Employees.back().Edit();
}
void Find(void)
{
ClearScreen();
printf_s("[查找员工]\n\n");
printf_s("员工编号: ");
int id;
std::cin >> id;
printf_s("\n");
Employee* employeePtr = Employee::Find(id, Employees);
if (employeePtr != nullptr)
{
employeePtr->Show();
}
else
{
std::cout << "没有指定编号的员工" << std::endl;
}
Pause();
}
void Edit(void)
{
int id;
ClearScreen();
std::cout << "[编辑员工资料]" << std::endl << std::endl;
std::cout << "员工编号: ";
std::cin >> id;
Employee* employeePtr = Employee::Find(id, Employees);
if (employeePtr != nullptr)
{
employeePtr->Edit();
}
}
void Delete(void)
{
int id;
ClearScreen();
printf_s("\n[删除员工]\n\n");
printf_s("员工编号: ");
std::cin >> id;
Employee* employeePtr = Employee::Find(id, Employees);
if (employeePtr != nullptr)
{
for (std::vector<Employee>::iterator it = Employees.begin(); it != Employees.end(); ++it)
{
if (it->ID() == employeePtr->ID())
{
Employees.erase(it);
break;
}
}
}
else
{
std::cout << "没有指定编号的员工" << std::endl;
}
}
void Statistics(void)
{
double totalWage = 0.0;
size_t number = 0;
for (Employee employee : Employees)
{
totalWage += employee.Wage();
++number;
}
printf_s("\n平均工资: %.2f\n", totalWage / number);
Pause();
}
void List()
{
ClearScreen();
Employee::Show(Employees);
Pause();
}

2015-05-04 21:46
程序代码:
#pragma once
#include <string>
#include <vector>
class Employee
{
private:
int _id;
std::string _name;
double _basicSalary;
double _subsidy;
double _award;
double _tax;
public:
int ID(void) { return _id; } // 编号
std::string Name(void) { return _name; } // 姓名
double BasicSalary(void) { return _basicSalary; } // 基本工资
double Subsidy(void) { return _subsidy; } // 补贴
double Award(void) { return _award; } // 奖励
double Tax(void) { return _tax; } // 税金
double Wage(void) { return _basicSalary + _subsidy + _award - _tax; } // 实发工资
// 构造函数
// 备注:当参数id为零时,编号自增编码,否则以传入值为编号。计数器取其大者。
Employee(int id, std::string name, double basicbasicSalary, double subsidy, double award, double tax);
void Show(void);
void Edit(void);
//--------------------------------
// 以下为类静态方法
//--------------------------------
static void Show(std::vector<Employee>& employees);
static Employee* Find(int id, std::vector<Employee>& employees);
};

2015-05-04 21:51
程序代码:
#pragma once
#include <string>
#include <vector>
class Menu
{
public:
// 菜单条结构
struct Item
{
char KeyChar; // 按键字符
std::string Text; // 菜单项文本
void (*func)(void); // 选择该菜单项时执行的函数
};
std::vector<Item> List; // 菜单列表
Menu(const std::vector<Item>& m) : List(m) {}
void Show(void);
Item& Choice(void);
private:
std::vector<Item>::size_type FindKey(char key) const;
};

2015-05-04 21:57
2015-05-04 22:01
2015-05-04 22:03

2015-05-04 22:36