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;

}

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

阅读剩余 94%

原创文章,作者: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

相关推荐

  • 代码生成工具 动软代码生成器哪个版本好用?

    代码生成工具 如今,对机器学习潜力感兴趣的程序员正在讨论如何使用人工智能和基于人工智能的软件开发工具来构建应用程序。PyTorch和TensorFlow等等。动软代码生成器哪个版本好用?

    投稿 2022年7月17日
  • 项目风险管理五个内容 贯穿于项目风险管理全过程?

    项目风险管理五个内容项目管理的目标是什么?贯穿于项目风险管理全过程?在项目管理的基本要求下,对项目进行初步调查,收集项目的数据,初步调查项目的可行性,并合并项目,为决策层提供或超过项目建设的期望。协调

    投稿 2022年7月26日
  • php源码资源网 index.php怎么获取源代码?

    php源码资源网 PHP 是一种通用的开源脚本语言。语法吸收 C 语言、Java 和 Perl 的特点有利于学习,应用广泛,主要适用于 Web 开发领域是大多数后端开发者的首选。PHP 作为最受欢迎

    投稿 2022年7月20日
  • 苹果手机耳机推荐 iphone怎么找耳机?

    苹果手机耳机推荐 苹果杜比音效支持的耳机?iphone怎么找耳机? 首先魔声耳机性价比很低,不建议购买。其次,音质主要看硬件,音效只起辅助作用。然后就没有配耳机的声音了。耳机好了,任何音效都能听到

    投稿 2022年7月20日
  • 电子商务报告总结 电子商务实训报告怎么写?

    电子商务报告总结 如何写电商打单工作总结?电子商务实训报告怎么写? 一般来说,就三部分而言,:总结过去,规划未来,遇到问题。细分后,填充这三部分提到的内容有:KPI指标过去业绩的完成、增长率、未实

    投稿 2022年7月19日
  • 二合一笔记本哪个好 平板二合一电脑与笔记本的区别

    二合一笔记本哪个好这款旗舰二合一笔记本电脑售价高达11588元,带键盘 触控笔套13776元,只有富人才能买得起。今天我们的主角也是微软二合一笔记本,但是价格不到4000元,属于微软的超级便宜型号。那

    投稿 2022年7月12日
  • 笔记本质量十大排名 笔记本电脑前十品牌?

    笔记本质量十大排名 笔记本电脑十大品牌?笔记本电脑前十品牌? 中国十大笔记本电脑排名:1、苹果apple(美国成立于1976年,是一家高端电脑、音视频便携媒体制造商,十大笔记本电脑品牌,苹果有限公

    投稿 2022年7月17日
  • office有2012版本的吗 Office都有哪些版本?

    office有2012版本的吗 office2016与office2012年有什么区别?Office都有哪些版本? 首先,Office2012年没有版本,从Office97开始,经历了XP,200

    投稿 2022年7月21日
  • 电脑黑屏按哪三个键 电脑安全启动后黑屏怎么办?

    电脑黑屏按哪三个键 电脑启动后出现黑屏,但程序可以启动,请问该怎么办?电脑安全启动后黑屏怎么办? ①按Ctrl Alt Del组合键,可以调出Windows 任务管理器。②此时,点击启动任务管理器

    投稿 2022年7月23日
  • 正版cs怎么加电脑人 反恐精英如何添加机器人?

    正版cs怎么加电脑人 正版steam上cs如何让别人加进房间?还需要什么平台?反恐精英如何添加机器人? 平台也可以。平台会为你建立一个虚拟内网,更容易连接在一起玩。如果你想在网上打开服务器,你可以

    投稿 2022年7月7日