2017年网站设计趋势,科凡建站,网站不备案能用吗,网址缩短生成器1.问题描述
一个小公司包含四类人员#xff1a;经理#xff0c;技术人员#xff0c;销售人员和销售经理#xff0c;各类人员的工资计算方法如下#xff1a;经理#xff1a;固定月薪#xff08;8000#xff09;#xff1b;技术人员#xff1a;月薪按技术等级#xf…1.问题描述
一个小公司包含四类人员经理技术人员销售人员和销售经理各类人员的工资计算方法如下经理固定月薪8000技术人员月薪按技术等级1~81600等级*300 销售人员按提成4%*销售额销售经理底薪提成15000.2%*总销售额设计一个管理程序实现对各类人员的信息输入修改和显示。
2.需求分析
共有6个类SalesManagerManagerTechnicianSales这四个类继承于Person类PersonManager类调用这些类内函数。
在菜单界面可以输入12340来控制该程序如果输入其他数字会显示输入错误请重新输入。
输入1打开员工信息添加功能此时需要输入员工姓名员工身份证号码便于查找员工用数字1234分别表示员工等级经理技术人员销售经理和销售人员如果输入其他数字会显示输入错误请重新输入。最后如果是经理输入任意值如果是技术人员输入技术等级1~8如果是销售经理输入销售额如果是销售人员输入总销售额。功能完成。
输入2打开人员修改功能输入需要修改的员工身份证号方便查找如果找到则重复1的功能对员工进行修改。如果未找到则显示未能找到该员工。
输入3打开显示员工功能。
输入4打开保存信息功能。
输入0退出程序。
输入其他值显示输入错误请重新输入。 3.详细设计
主函数
#includePersonManager.h
int main() {PersonManager manager;manager.run();return 0;
}
员工类
在员工类中有员工的姓名身份证号职位属性可以计算工资。
父类
#pragma once
#include iostream
#include string
using namespace std;
class Person {
public:// 构造函数Person(string n, int a, string i,int y) {name n;num a;id i;nu y;getsalary(y);}// 打印人员信息virtual void print() {cout 姓名 name endl;cout 身份证号码 id endl;cout 工资 salary endl;}// 获取人员类型virtual string getType() {return ;}// 获取人员信息字符串virtual string getInfoString() {return ;}void getsalary(int ch){switch (ch){case 1:salary 8000;break;case 2:salary 1600 this-num * 300;break;case 3:salary this-num * 0.04;break;case 4:salary 2000 1500 0.002 * this-num;break;default:cout 无效选项 endl;}}string name; // 姓名int num;string id;double salary 0; // 工资int nu;};销售经理类
#pragma once
#includePerson.h
#include iostream
using namespace std;
class SalesManager : public Person {
public:// 构造函数SalesManager(string n, int a, string i,int y) : Person(n, a, i,y) {}// 打印人员信息void print() {cout 职位销售经理 endl;Person::print();}// 获取人员类型string getType() {return SalesManager;}// 获取人员信息字符串string getInfoString() {return getType() , name , id , to_string(salary);}
private:string name; // 姓名int num;string id;double salary 0; // 工资int nu;
};经理类
#pragma once
#includePerson.h
#include iostream
using namespace std;
class Manager : public Person {
public:// 构造函数Manager(string n, int a, string i,int y) : Person(n, a, i,y) {}// 打印人员信息void print() {cout 职位经理 endl;Person::print();}// 获取人员类型string getType() {return Manager;}// 获取人员信息字符串string getInfoString() {return getType() , name , id , to_string(salary);}
private:string name; // 姓名int num;string id;double salary 0; // 工资int nu;
};
技术人员类
#pragma once
#includePerson.h
#include iostream
using namespace std;
// 定义技术人员类
class Technician : public Person {
public:// 构造函数Technician(string n, int a, string i,int y) : Person(n, a, i,y) {}// 打印人员信息void print() {cout 职位技术人员 endl;Person::print();}// 获取人员类型string getType() {return Technician;}// 获取人员信息字符串string getInfoString() {return getType() , name , id , to_string(salary);}
private:string name; // 姓名int num;string id;double salary 0; // 工资int nu;
};销售人员类
#pragma once
#includePerson.h
#include iostream
using namespace std;
class Sales : public Person {
public:// 构造函数Sales(string n, int a, string i,int y) : Person(n, a, i ,y) { }// 打印人员信息void print() {cout 职位销售人员 endl;Person::print();}// 获取人员类型string getType() {return Sales;}// 获取人员信息字符串string getInfoString() {return getType() , name , id , to_string(salary);}
private:string name; // 姓名int num;string id;double salary 0; // 工资int nu;
};
员工管理类
在员工管理类中可以添加、删除、修改员工信息查询特定员工的信息。
#pragma once
#include string
#include vector
#includePerson.h
using namespace std;
class PersonManager {
private:vectorPerson* persons; // 人员数组
public:// 析构函数~PersonManager();// 添加人员信息
void addPerson();// 修改人员信息
void modifyPerson();// 显示所有人员信息
void showAllPersons();// 保存人员信息到文件
void saveToFile(string filename);// 从文件中加载人员信息
void loadFromFile(string filename);// 显示菜单
void showMenu();// 运行人员管理系统
void run();
};
具体实现
#include iostream
#include string
#include vector
#include fstream
#includePerson.h
#includeManager.h
#includeTechnician.h
#includeSalesManager.h
#include PersonManager.h
#includeSales.h
using namespace std;PersonManager::~PersonManager() {for (int i 0; i persons.size(); i) {delete persons[i];}}// 添加人员信息void PersonManager::addPerson() {string name, id;int age, choice;//double salary;cout 请输入姓名;cin name; cout 请输入身份证号码;cin id;cout 请选择职位1. 经理 2. 技术人员 3. 销售经理 4.销售人员;cin choice;cout 如果是经理 请输入任意值 endl 如果是技术人员 请输入技术等级 endl 如果是销售经理 请输入销售额 endl 如果是销售人员请输入总销售额endl;cin age;switch (choice) {case 1: persons.push_back(new Manager(name, age,id, choice));break;case 2:persons.push_back(new Technician(name, age, id, choice));break;case 3:persons.push_back(new SalesManager(name, age, id, choice));break;case 4:persons.push_back(new SalesManager(name, age, id, choice));break;default:cout 无效选项请重新输入 endl;}cout 添加成功 endl;system(pause);system(cls);}// 修改人员信息void PersonManager::modifyPerson() {string id;cout 请输入要修改的身份证号码;cin id;for (int i 0; i persons.size(); i) {if (persons[i]-id id) {string name;int num, choice;//double salary;cout 请输入新的姓名;cin name;cout 请选择新的职位1. 经理 2. 技术人员 3. 销售经理 4.销售人员;cin choice;cout 如果是经理 请输入任意值 endl 如果是技术人员 请输入技术等级 endl 如果是销售经理 请输入销售额 endl如果是销售人员请输入总销售额;cin num;switch (choice) {case 1:delete persons[i];persons[i] new Manager(name, num, id, choice);break;case 2:delete persons[i];persons[i] new Technician(name, num, id, choice);break;case 3:delete persons[i];persons[i] new SalesManager(name, num, id, choice);break;case 4:delete persons[i];persons[i] new Sales(name, num, id, choice);break;default:cout 无效选项请重新输入 endl;}cout 修改成功 endl;return;system(pause);system(cls);}}cout 未找到该人员信息 endl;system(pause);system(cls);}// 显示所有人员信息void PersonManager::showAllPersons() {for (int i 0; i persons.size(); i) {persons[i]-print();cout endl;}system(pause);system(cls);}// 保存人员信息到文件void PersonManager::saveToFile(string filename) {ofstream ofs(filename);if (!ofs) {cout 打开文件失败 endl;return;}for (int i 0; i persons.size(); i) {ofs persons[i]-getInfoString() endl;}ofs.close();cout 保存成功 endl;system(pause);system(cls);}// 从文件中加载人员信息void PersonManager::loadFromFile(string filename) {ifstream ifs(filename);if (!ifs) {cout 打开文件失败 endl;return;system(pause);system(cls);}string line;while (getline(ifs, line)) {int pos1 line.find(,);string type line.substr(0, pos1);int pos2 line.find(,, pos1 1);string name line.substr(pos1 1, pos2 - pos1 - 1);int pos3 line.find(,, pos2 1);int age stoi(line.substr(pos2 1, pos3 - pos2 - 1));int pos4 line.find(,, pos3 1);string id line.substr(pos3 1, pos4 - pos3 - 1);int nu stod(line.substr(pos4 1));if (type Manager) {persons.push_back(new Manager(name, age, id,nu));}else if (type Technician) {persons.push_back(new Technician(name, age, id,nu));}else if (type SalesManager) {persons.push_back(new SalesManager(name, age, id,nu));}}ifs.close();cout 加载成功 endl;system(pause);system(cls);}// 显示菜单void PersonManager::showMenu() {cout 1. 添加人员信息 endl;cout 2. 修改人员信息 endl;cout 3. 显示所有人员信息 endl;cout 4. 保存人员信息到文件 endl;cout 0. 退出 endl;}// 运行人员管理系统void PersonManager::run() {int choice;while (true) {showMenu();cout 请输入选项;cin choice;switch (choice) {case 1:addPerson();break;case 2:modifyPerson();break;case 3:showAllPersons();break;case 4:saveToFile(persons.txt);break;case 0:cout 谢谢使用 endl;return;default:cout 无效选项请重新输入 endl;}}};
4.运行结果