公司人事管理系统

1.问题描述

一个小公司包含四类人员:经理,技术人员,销售人员和销售经理,各类人员的工资计算方法如下:经理:固定月薪(8000);技术人员:月薪按技术等级(1~8)(1600+等级*300); 销售人员:按提成(4%*销售额);销售经理:底薪+提成(1500+0.2%*总销售额);设计一个管理程序,实现对各类人员的信息输入,修改和显示。

2.需求分析  

共有6个类,SalesManager,Manager,Technician,Sales这四个类继承于Person类PersonManager类调用这些类内函数。

在菜单界面可以输入1,2,3,4,0来控制该程序,如果输入其他数字会显示输入错误请重新输入。

输入1:打开员工信息添加功能,此时需要输入员工姓名,员工身份证号码(便于查找员工),用数字1,2,3,4分别表示员工等级经理,技术人员,销售经理和销售人员,如果输入其他数字会显示输入错误请重新输入。最后如果是经理输入任意值;如果是技术人员输入技术等级(1~8);如果是销售经理输入销售额;如果是销售人员输入总销售额。功能完成。

输入2:打开人员修改功能,输入需要修改的员工身份证号方便查找,如果找到则重复1的功能对员工进行修改。如果未找到则显示未能找到该员工。

输入3:打开显示员工功能。

输入4:打开保存信息功能。

输入0:退出程序。

输入其他值:显示输入错误请重新输入。


3.详细设计

主函数:

#include"PersonManager.h"
int main() {
    PersonManager manager;
    manager.run();
    return 0;
}

员工类:

在员工类中,有员工的姓名,身份证号,职位属性,可以计算工资。

父类:
#pragma once
#include 
#include 
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
#include"Person.h"
#include 
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
#include"Person.h"
#include 
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
#include"Person.h"
#include 
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
#include"Person.h"
#include 
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 
#include 
#include"Person.h"
using namespace std;
class PersonManager {
private:
    vector persons; // 人员数组
public:
    // 析构函数
    ~PersonManager();
    // 添加人员信息
void addPerson();
    // 修改人员信息
void modifyPerson();
    // 显示所有人员信息
void showAllPersons();
    // 保存人员信息到文件
void saveToFile(string filename);
    // 从文件中加载人员信息
void loadFromFile(string filename);
    // 显示菜单
void showMenu();
    // 运行人员管理系统
void run();
};


具体实现:
#include 
#include 
#include 
#include 
#include"Person.h"
#include"Manager.h"
#include"Technician.h"
#include"SalesManager.h"
#include "PersonManager.h"
#include"Sales.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 << "如果是经理 请输入:任意值   "<> 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 << "如果是经理 请输入:任意值 "<> 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.运行结果:

公司人事管理系统_第1张图片

公司人事管理系统_第2张图片

你可能感兴趣的:(c++,公司人事管理系统,开发语言)