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
c语言人事管理系统,c语言人事管理系统
下一篇 2022年11月7日 12:04

相关推荐

  • 宽带怎么设置互联网路由器(宽带怎么连接路由器)

    宽带怎么设置互联网路由器(宽带怎么连接路由器) 在使用宽带上网的过程中,很多人都会选择使用路由器来进行网络连接。那么,宽带怎么设置互联网路由器呢?下面是详细步骤: 步骤一:选购合适…

    网络 2024年8月30日
    137
  • 宽带换号路由器设置(换宽带之后路由器怎么设置)

    宽带换号路由器设置 在换了宽带号码之后,您需要重新设置路由器,以使其能够正常连接到互联网。下面是一些简单的步骤,可以帮助您完成此过程。 步骤一:重启路由器 首先,您需要重启路由器。…

    网络 2023年12月21日
    1.1K
  • TP-LINK路由器 无法登录tplogin.cn解决方法

    导读:TP-LINK路由器 无法登录tplogin.cn,怎么办?在浏览器地址栏里输入管理地址tplogin.cn,无法显示管理页面,或者输入管理密码后无法进入页面。 如下图:解决方法:一、检查终端与路"

    2021年2月18日
    12.7K
  • 无线路由器怎么连接(图文教程)

    原标题:"无线路由器怎么连接、安装设置【图文教程】"的相关路由设置资料分享。 - 来源:WiFi之家网 - 编辑:阿呆。

    还在为身边没有电脑高手而担心?还在不会设置路由器而着"

    2021年1月30日
    329.0K
  • 局域网路由器无法设置密码(19616801路由器设置密码)

    局域网路由器无法设置密码(19616801路由器设置密码) 在日常生活中,我们经常需要使用路由器来连接互联网。而在这个过程中,我们会涉及到一些网络安全问题,例如设置密码来保护我们的…

    网络 2023年11月30日
    419
  • 路由器如何自动复位设置(路由器复位后怎么重新设置)

    路由器如何自动复位设置(路由器复位后怎么重新设置) 路由器是我们家庭网络中必不可少的设备之一,但是有时候它会出现一些问题,比如无法连接网络或者速度变慢等等。这时候我们可以尝试进行路…

    网络 2025年3月29日
    1.4K
  • 多台路由器多台电脑正常上网设置教程

    原标题:"怎样设置多台路由器同时让多台电脑正常上网"关于路由器设置教程分享。 - 来源:WiFi之家网 - 编辑:小元。
    随着现在电脑的普遍更多人发愁的宽带怎么分配,在这我就教"

    2021年1月6日
    8.9K
  • 迅捷路由器设置好没网(迅捷路由器安装教程视频)

    迅捷路由器设置好没网(迅捷路由器安装教程视频) 迅捷路由器是一款性能强大的路由器,但是有时候安装好后会出现没有网络的情况。下面我们就来讲一下如何解决迅捷路由器设置好没网的问题。 步…

    网络 2023年12月8日
    691
  • 迷你路由器怎么设置管理192.168.1.1【图】

    原标题:"迷你路由器怎么设置【图】"的相关路由器192.168.1.1登陆页面设置教程资料分享。- 来源:WiFi之家网。

    本文介绍了迷你无线路由器的设置方法,友情说明:1、不同路由器"

    2021年1月7日
    12.9K
  • 华为hg520s打不开路由设置页面

    我家电脑是天线在左面的版本家里最近添了个笔记本想用无限路由通过笔记本上网但是根本打不开路由设置页面192.168.1.1192.168.0.1都不行打不开路由设置页面就木有办法破解升级啊求高人指点 华为hg520s路由设置使用百度Hi可以第一时间收到“提问有新回答”“回答被采纳”"

    2021年1月24日
    7.6K