vc6我没测试环境,不保证完全兼容哦。可运行的程序在隔壁我发的测试帖中。
[ 本帖最后由 TonyDeng 于 2015-5-4 16:37 编辑 ]
[ 本帖最后由 TonyDeng 于 2015-5-4 16:37 编辑 ]
授人以渔,不授人以鱼。
/* 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(); }
#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); };
#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; };