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

相关推荐

  • pdf怎么编辑修改内容 怎么修改pdf里面的内容?

    pdf怎么编辑修改内容 修改PDF文件这么简单?Word打开编辑真的很方便怎么修改pdf里面的内容? 1.PDF转Word在电脑上找到这个PDF选择文件,鼠标点击右键,选择【打开方式】,因为我的电

    投稿 2022年7月19日
  • 微信服务号开发 微信如何开发公众号?

    微信服务号开发 申请微信服务号认证后有哪些功能?微信如何开发公众号? 服务号微信认证后的特权: 所有高级开发界面 可以申请开通微信支付功能 可以申请开通微信店 可以申请广告主功能 可以申请卡券功能

    投稿 2022年7月7日
  • 笔记本键盘内部清理 笔记本电脑键盘脏了怎么洗?

    笔记本键盘内部清理 笔记本键盘怎么清洗?笔记本电脑键盘脏了怎么洗? 笔记本电脑键盘清洗方法:1.键盘表面:更容易清洁键盘表面。关机时,用干净的软布蘸点清水擦拭。如果想专业,可以去电脑城花几块钱买一

    投稿 2022年7月10日
  • 联想哪个系列最好 联想笔记本电脑哪款好?求推荐?

    联想哪个系列最好 联想y哪个系列最好?联想笔记本电脑哪款好?求推荐? 每一个小联想Y 都很经典。如果你想问那个,我觉得你应该给你一个你能接受的价格,那就给你推荐或者建议吧。最高配置,Y560DT-

    投稿 2022年7月19日
  • 电脑开机蓝屏重启循环 电脑重启后一直蓝屏?

    电脑开机蓝屏重启循环 1.硬盘故障导致电脑蓝屏:硬盘问题往往会导致电脑蓝屏,比如硬盘有坏轨,电脑数据读取错误导致蓝屏,因为硬盘和内存一样,承载着一些数据访问操作。如果访问/读取系统文件的区域有不良轨

    投稿 2022年7月18日
  • 无线鼠标电源开关在哪 新无线鼠标怎么用?

    无线鼠标电源开关在哪 如何打开笔记本连接无线鼠标?新无线鼠标怎么用? 无线鼠标一般有两个部件,一个是接收信号的收发器,一个是无线鼠标。收发器需要插入电脑USB接口(台式机/笔记本),无线鼠标需要安

    投稿 2022年7月7日
  • 台式电脑屏幕亮度 怎么降低电脑的亮度?

    台式电脑屏幕亮度 台式电脑对比度调整正常多少?怎么降低电脑的亮度? 显示器对比度一般可设置为80-100。亮度一般设置在600。-过亮容易引起眼睛疲劳,也会使荧光粉过早老化。 如果不使用,一定要

    投稿 2022年7月12日
  • 电脑花屏死机无法启动 电脑玩游戏时花屏然后死机是怎么回事?

    电脑花屏死机无法启动 如何解决电脑总是花屏死机?电脑玩游戏时花屏然后死机是怎么回事? 电脑花屏死机的主要原因如下:1.内存的原因。内存为什么会造成花屏?因为集成主板通常集成在芯片组的北桥芯片中,所

    投稿 2022年7月13日
  • 四川电信宽带套餐 成都电信宽带新装收费标准?

    四川电信宽带套餐 四川电信哪个家庭套餐性价比高?成都电信宽带新装收费标准? 129档享300M宽带,包含15G国内流量和500分钟国内通话;,199档享受千兆宽带,包括国内流量600分钟G与国内通

    投稿 2022年7月26日
  • coins是什么意思 快手300kscoin是什么?

    coins是什么意思 coins是什么意思?快手300kscoin是什么? coins abbr. coinsurance 联合保险、联合保险、共同保险 n. (统称) 硬币( )coin (一)

    投稿 2022年7月12日