C++实现公司人事管理系统

这篇文章主要为大家详细介绍了C++实现公司人事管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

C++实现公司人事管理系统

本文实例为大家分享了C++实现公司人事管理系统的具体代码,供大家参考,具体内容如下

一.问题描述

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

二 .基本要求

(1)使用面向对象编程思想编写开发过程中需要用到的类,比如:设计Person类:编号,姓名,岗位,工资,成员函数可设一个计算月薪的纯虚函数;另外再设计四个针对四类人员的类均继承 Person;添加相应的派生类数据成员和函数,经理和销售经理可以没有新的数据成员,计算月薪即可; 技术人员添加技术等级数据成员,销售人员添加数据成员:销售额。还需设计一个Manage 类来完成各种操作。人员数组 vector,数据类型为基类指针。

(2)需要使用菜单功能显示添加人员(输入),修改信息,浏览信息,按姓名查找,月薪排序。

(3)为了设计简洁,假定经理和销售经理都只能有一个;用文本编辑器编辑一个文本文件(总数 20 人以上)包含各类人员的信息;并且在程序中能修改保存。

基本流程图

C++实现公司人事管理系统

#include<iostream>

#include<vector>

#include<string>

#include<cstdlib>

#include<windows.h>

#include<iomanip>

#include<fstream>

#include <algorithm>

#define filename "student.txt"

using namespace std; 

class Person

{

public:

    Person(string, string, int = 0);

    double virtual pay_salary() = 0;

    void  virtual show();         

    bool operator<(const Person*&) const;    

    static int num;

    int Number;  

    double Salary;

    string Name;

    string Department;

    int c;

};

bool Person::operator<(const Person*& obj) const

{

    return this->Salary > obj->Salary;

}

Person::Person(string name1, string work1, int c1)

{

    c = c1;

    Number = num++;

    Name = name1;

    Department = work1;

}

int Person::num = 1;

void  Person::show() {

    cout<<"-----------------------------------"<<endl;

    cout <<right<<setw(3)<<Number<<setw(10)<<Name<<setw(11)<<Department<<setw(8)<<Salary;

    

}

class Manager :public Person

{

public:

    Manager(string, string, int);

    double pay_salary();

    void show();

};

Manager::Manager(string name1, string post1, int c1) :Person(name1, post1, c1)

{

    pay_salary();

}

double Manager::pay_salary()

 {

    Salary = 8000;

    return Salary;

}

void Manager::show()

{

    cout<<"-----------------------------------"<<endl;

    cout <<right<<setw(3)<<Number<<setw(10)<<Name<<setw(9)<<Department<<setw(10)<<Salary; 

}

class SaleManager :public Person

 {

public:

    SaleManager(string, string, int);

    double pay_salary();

    void show();

};

SaleManager::SaleManager(string name1, string post1, int c1) :Person(name1, post1, c1)

 {

    pay_salary();

}

double SaleManager::pay_salary()

{

    Salary = 1500;

    return Salary;

}

void SaleManager::show()

{

    cout<<"-----------------------------------"<<endl;

    cout <<right<<setw(3)<<Number<<setw(10)<<Name<<setw(11)<<Department<<setw(8)<<Salary; 

}

class Salesman :public Person

 {

public:

    Salesman(string, string, int);

    int salevolume;

    double pay_salary();

    void show();

};

Salesman::Salesman(string name1, string post1, int sv) :Person(name1, post1, sv)

{

    salevolume = sv;

    pay_salary();

}

double Salesman::pay_salary()

 {

    Salary = 0.04 * salevolume;

    return Salary;

}

void Salesman::show()

{

    cout<<"-----------------------------------"<<endl;

    cout <<right<<setw(3)<<Number<<setw(10)<<Name<<setw(11)<<Department<<setw(8)<<Salary; 

}

class Technician :public Person

{

public:

    Technician(string, string, int);

    double pay_salary();

    void show();

};

Technician::Technician(string name1, string post1, int rank1) :Person(name1, post1, rank1) 

{

    pay_salary();

}

double Technician::pay_salary()

{

    Salary = 1600 + 300 * c;

    return Salary;

}

void Technician::show()

 {

     cout<<"-----------------------------------"<<endl;

    cout <<right<<setw(3)<<Number<<setw(10)<<Name<<setw(11)<<Department<<setw(8)<<Salary; 

}

class Manage

{

public:

    void Menu() { salevolume = 0; }

    int salevolume;

    vector<Person*> Ma;

    void add(Person*);

    void alter(string);

    void addtofile();

    void show();

    void show1();

    Person* find(string&);

};

Person* Manage::find(string& name1) {

    for (vector<Person*>::iterator iter = Ma.begin(); iter != Ma.end(); iter++) {

        if ((*iter)->Name == name1) {

            return *iter;

        }

    }

    return NULL;

}

void Manage::alter(string name1) {

    for (vector<Person*>::iterator iter = Ma.begin(); iter != Ma.end(); iter++) {

        if ((*iter)->Name == name1) {

            Ma.erase(iter);

            return;

        }

    }

    cout << "查无此人" << endl;

}

void Manage::add(Person* people)

{

    if (people->Department == "销售人员") {

        salevolume += ((Salesman*)people)->salevolume;

    }

    Ma.push_back(people);

}

void Manage::addtofile()

 {

    ofstream outfile(filename);

    for (vector<Person*>::iterator iter = Ma.begin(); iter != Ma.end(); iter++) {

        outfile << (*iter)->Department << " " << (*iter)->Name << " ";

        if ((*iter)->c == 0) outfile << endl;

        else outfile << (*iter)->c << endl;

    }

    outfile.close();

}

bool cmp(Person* x, Person* y) {

    return x->Salary > y->Salary;

}

void Manage::show() {

    for (vector<Person*>::iterator iter = Ma.begin(); iter != Ma.end(); iter++) {

        if ((*iter)->Department == "销售经理") {

            (*iter)->Salary = salevolume * 0.002 +1500;

            break;

        }

    }

    sort(Ma.begin(), Ma.end(), cmp);

    for (vector<Person*>::iterator iter = Ma.begin(); iter != Ma.end(); iter++) {

        (*iter)->show();

        cout << endl;

    }

}

void readfile(Manage& obj)

 {

    FILE* fp;

    fp = fopen(filename, "r");

    if (fp == NULL) {

        cout << "未找到人员名单" << endl;

        return;

    }

    while (!feof(fp)) {

        char post[20];

        char Name[20];

        int c;  

        fscanf(fp, "%s%s%d", post, Name,&c);

        if (!strcmp(post, "经理")) {

            Person* peo = new Manager(Name, post, 0);

            obj.add(peo);

        }

        else if (!strcmp(post, "技术人员")) {

            Person* peo = new Technician(Name, post, c);

            obj.add(peo);

        }

        else if (!strcmp(post, "销售人员")) {

            Person* peo = new Salesman(Name, post, c);

            obj.add(peo);

        }

        else if (!strcmp(post, "销售经理")) {

            Person* peo = new SaleManager(Name, post, 0);

            obj.add(peo);

        }

    }

    fclose(fp);

}

void Manage::show1()

{

    for (vector<Person*>::iterator iter = Ma.begin(); iter != Ma.end(); iter++) {

        (*iter)->show();

        cout << endl;

    }

}

int main(){

    int x;

    Manage T;

    readfile(T);

    while(1){

        cout<< "    ———————————————————————————————" << endl

            << "    |       公司人事管理系统        |" << endl

            << "    ———————————————————————————————" << endl

            << "    |         1.添加员工           |" << endl

            << "    |         2.修改信息           |" << endl

            << "    |         3.按姓名查找         |" << endl

            << "    |         4.显示所有信息       |" << endl

            << "    |         5.按月薪降序排序     |" << endl

            << "    |         0.保存并退出程序     |" << endl

            << "    ———————————————————————————————" << endl;        

        cout<< "请选择->";

        cin >> x;

        switch (x) {

        case 1: {

            while (1) {

                int n;

                string Name;

                cout << "请输入姓名:" ;

                cin >> Name;

                cout << "请输入人员岗位(1.经理 2.技术人员 3. 销售人员 4.销售经理):" ; 

                cin >> n;

                if (n == 1) {

                    Person* peo = new Manager(Name, "经理", 0);

                    T.add(peo);

                    cout << "添加成功" << endl << endl << endl;

                    break;

                }

                else if (n == 2) {

                    while (1) {

                        int rank = 0;

                        cout << "请输入技术等级(1~8):" ;

                        cin >> rank;

                        if (rank > 8 || rank < 1) {

                            cout << "输入错误,请在1~8之间输入:" ;

                        }

                        else {

                            Person* peo = new Technician(Name, "技术人员", rank);

                            T.add(peo);

                            break;

                        }

                    }

                    cout << "添加成功" << endl << endl << endl;

                    break;

                }

                else if (n == 3) {

                    int sales = 0;

                    cout << "请输入销售额:" << endl;

                    cin >> sales;

                    Person* peo = new Salesman(Name, "销售人员", sales);

                    T.add(peo);

                    cout << "添加成功" << endl << endl << endl;

                    break;

                }

                else if (n == 4) {

                    Person* peo = new SaleManager(Name, "销售经理", 0);

                    T.add(peo);

                    cout << "添加成功" << endl << endl << endl;

                    break;

                }

                else {

                    cout << "输入错误,请重新输入:" << endl;

                }

            }

         system("pause");}

                break;

        case 2: {

            string Name;

            int n = 0;

            cout << "请输入姓名:" ;

            cin >> Name;

            Person* peo = T.find(Name);

            if (peo == NULL) {

                cout << "        查无此人" << endl << endl << endl;

                break;

            }

            peo->show();

            if (peo->Department == "经理") {

                cout << "    经理无法修改" << endl;

            }

            else if (peo->Department == "技术人员") {

                int rank = 0;

                while (1) {

                    cout <<endl<< "请输入技术等级(1~8):" << endl;

                    cin >> rank;

                    if (rank > 8 || rank < 1) {

                        cout << "等级输入错误,请重新输入" << endl;

                    }

                    else break;

                }

                T.alter(Name);

                peo = new Technician(Name, "技术人员", rank);

                T.add(peo);

                cout << "修改成功!" << endl;

                

            }

            else if (peo->Department == "销售人员") {

                int sales = 0;

                cout <<endl<< "请输入销售额:" << endl;

                cin >> sales;

                T.alter(Name);

                peo = new Salesman(Name, "销售人员", sales);

                T.add(peo);

                cout << "    修改成功!" << endl;

                

            }

            else if (peo->Department == "销售经理") {

                cout << "   销售经理无法修改" << endl;

            }

            else {

                cout << "输入错误" << endl;

            }

        }system("pause");

                break;

        case 3: {

            string Name;

            int n = 0;

            cout << "请输入所查找人的姓名:";

            cin >> Name;

            Person* peo = T.find(Name);

            if (peo == NULL) {

                cout << "查无此人" << endl;

                system("cls");

                break;

            }

            cout<<"-----------------------------------"<<endl;

            cout <<left<<setw(8)<<"序 号"<<setw(9)<<"姓 名"<<setw(10)<<"岗 位"<<setw(10)<<"工 资"<< endl; 

            peo->show();

            cout<<endl<<"-----------------------------------"<<endl;

            cout << endl;

            system("pause");

            

        }

                break;

        case 4: { 

            cout<<"-----------------------------------"<<endl;

            cout <<left<<setw(8)<<"序 号"<<setw(9)<<"姓 名"<<setw(10)<<"岗 位"<<setw(10)<<"工 资"<< endl; 




            T.show1();

            cout<<"-----------------------------------"<<endl;

            system("pause");

            system("cls");

        }

                break;

        case 5: { 

            cout<<"-----------------------------------"<<endl;

            cout <<left<<setw(8)<<"序 号"<<setw(9)<<"姓 名"<<setw(10)<<"岗 位"<<setw(10)<<"工 资"<< endl; 

                T.show();

        }

            system("pause");

                break;

        case 0:

            T.addtofile();

            exit(0);

        default:

            cout << "输入错误请重新输入" << endl;

            break;

        }

    }

    return 0;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

原创文章,作者:192.168.1.1,如若转载,请注明出处:https://www.224m.com/229981.html

(0)
192.168.1.1192.168.1.1
上一篇 2022年11月7日 10:19
下一篇 2022年11月7日 12:04

相关推荐

  • 新手组装电脑所有流程 普通家用台式电脑最佳配置?

    新手组装电脑所有流程 如何开始组装电脑,先装什么后装什么?有哪些注意事项?普通家用台式电脑最佳配置? 首先是电源、主板、显卡、CPU、内存条的顺序并不重要。当这些都安装好后,可以连接光驱和硬盘的电

    投稿 2022年7月26日
  • cpu频率一般是多少 如何看CPU的工作频率?

    cpu频率一般是多少 cpu频率高还是低?如何看CPU的工作频率? CPU频率是CPU内核的时钟频率。CPU性能的重要参数。在绝对环境中,同一系列CPU频率越高,处理速度越快。例如,2Ghz处理速

    投稿 2022年7月25日
  • 显卡开机温度50正常吗 显卡温度多少安全?

    显卡开机温度50正常吗 显卡启动温度50度正常吗?显卡温度多少安全? 可以关注性能,没有问题,一般来说, 硬件会设置功率墙和温度墙,以确保硬件不会损坏给你个截图 超频工具中的两个参数POWE

    投稿 2022年7月8日
  • 笔记本电脑键盘介绍图 笔记本键盘怎么打开?

    笔记本电脑键盘介绍图 笔记本电脑键盘各键的名称和位置(最好有图)在哪里?笔记本键盘怎么打开? 主要名称和位置如下。键盘分为四个区域:功能键区、主键盘区、状态指示区和控制键区。键盘中单字字母的按钮用

    投稿 2022年7月8日
  • 电脑截屏存在哪里了 电脑端截图识别文字快捷键?

    电脑截屏存在哪里了 电脑截图怎么样,电脑截图保存在哪里?电脑端截图识别文字快捷键? 1、第一种方法:按下键盘PrtSc截图键复制屏幕上看到的界面和图片,保存在默认剪贴板上,然后按左键拖动光标,选择

    投稿 2022年7月11日
  • 苹果台式电脑配置参数 苹果电脑有主机吗台式?

    苹果台式电脑配置参数 历代苹果参数配置对比?苹果电脑有主机吗台式? 每一代苹果手机的区别: 第一代:2007.6.29发售iPhone,416MHz处理器,128MB内存,200W像素摄像头,3

    投稿 2022年7月22日
  • 新手学编程如何开始 怎么学编程语言最好?

    新手学编程如何开始 新手如何学习编程语言?怎么学编程语言最好? IT这个行业的学习道路既充满了荆棘和挑战,也充满了未来的希望。计算机编程的学习更是如此,没有捷径可走。如果你想学习计算机编程语言,你

    投稿 2022年7月24日
  • seo是什么意思 爱站seo工具之长尾词查询工具?

    seo是什么意思 SEO是什么意思?爱站seo工具之长尾词查询工具? SEO,搜索引擎定位(Search Engine Positioning)搜索引擎排名(Search Engine Ranki

    投稿 2022年7月12日
  • 通力电梯代码 通力电梯怎么看历史故障?

    通力电梯代码 电梯0091是什么意思?通力电梯怎么看历史故障? 电梯0091是什么意思?经查询巨人电梯故障代码,得知0091属于BAR通道ABC或B30故障。该故障可采取以下措施自行处理:1。调整

    投稿 2022年7月27日
  • 电脑没声音一键恢复 电脑没有声音怎么恢复?

    电脑没声音一键恢复电脑无声恢复步骤一键恢复?电脑没有声音怎么恢复?1.首先右键鼠标点击桌面空白,选择显示设置;2.进入后选择声音按钮;3.然后点击先进的声音选项重新设置和调整。电脑没有声音也可能是电脑

    投稿 2022年7月17日