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

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

一.问题描述

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

二 .基本要求

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

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

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

基本流程图

#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;//编号从1开始 
void  Person::show() {
    cout<<"-----------------------------------"<<endl;
    cout <<right<<setw(3)<<Number<<setw(10)<<Name<<setw(11)<<Department<<setw(8)<<Salary; //setw()控制输出宽度 
    
}
class Manager :public Person //经理类,继承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//销售经理类,继承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() //计算经理的工资,基本工资 1500元 
{
    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//销售人员类,继承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()//计算销售人员工资,4%×销售额 
 {
    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 //技术人员类,继承Person类 
{
public:
    Technician(string, string, int);//技术等级为继承来的参数c 
    double pay_salary();//计算技术人员的工资 
    void show();//显示技术人员的所有信息 
};
Technician::Technician(string name1, string post1, int rank1) :Person(name1, post1, rank1) 
{
    pay_salary();
}
double Technician::pay_salary() //计算技术人员的工资,技术等级×300+1600 
{
    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;//vector数组,存放Person类的对象指针 
    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()//对vector数组进行读取 
{
    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;
}

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

(0)

相关推荐

  • C++实现企业职工工资管理系统

    课程设计目的和要求 工资管理要和人事管理相联系,生成企业每个职工的实际发放工资. 企业职工人事基本信息包括:职工编号.姓名.性别.出生日期.职称(助工.工程师.高级工程师)和任职年限. 企业职工工资信息包括:职工编号.姓名.职务工资.职务补贴.住房补贴.应发工资.个人所得税.养老保险.住房公积金和实发工资. 系统主要功能包括: (1)创建职工人事基本信息文件,根据提示输入职工的各项信息,按职工编号对职工信息进行排序,并将排序后的职工信息存储到一个文件中. (2)创建职工的工资信息文件(每个月创建

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

    本文实例为大家分享了C++实现公司人事管理系统的具体代码,供大家参考,具体内容如下 一.问题描述 一个小公司包含四类人员:经理,技术人员,销售人员和销售经理,各类人员的工资计算方法如下:经理:固定月薪(8000):技术人员:月薪按技术等级(1~8)(1600+等级*300):销售人员:按提成(4%*销售额):销售经理:底薪+提成(1500+0.2%*总销售额):设计一个管理程序,实现对各类人员的信息输入,修改和显示. 二 .基本要求 (1)使用面向对象编程思想编写开发过程中需要用到的类,比如:设

  • JSP实现简单人事管理系统

    本文实例为大家分享了JSP实现简单人事管理系统的具体代码,供大家参考,具体内容如下 此系统使用jsp实现,其中包含了jsp九大内置对象和四大作用域的相关知识,采用map集合模拟数据库的方式,实现用户登录.员工信息展示.员工信息修改功能. JSP的九大内置对象:Application,Config,Exception,Out,PageContent,Page,Request,Respsonse,Sesstion JSP的四大作用域:Application Sesstion Page request

  • 基于Springboot实现送水公司信息管理系统

    项目编号:BS-XX-014 项目描述 springboot实现的送水后台管理系统 运行环境 jdk8+tomcat7+mysql+IntelliJ IDEA+maven 项目技术(必填) SpringBoot+mybatis 数据库文件(可选) 压缩包自带 依赖包文件(可选) maven项目 项目运行截图: 系统主界面 客户管理 送水工管理 送水历史订单 工资计算 统计送水数量 package com.minzu.service.impl; import cn.hutool.crypto.di

  • Java实战之酒店人事管理系统的实现

    目录 一.项目运行 二.效果图 三.核心代码 用户管理注册登录控制层 房间管理控制层 订单管理控制层 角色管理控制层 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax 等等 二.效果图 三.核心代码 用户管理

  • Springboot与vue实例讲解实现前后端分离的人事管理系统

    目录 一,项目简介 二,环境介绍 三,系统展示 四,核心代码展示 五,项目总结 一,项目简介 系统是前后端分离的项目,直接启动Springboot应用程序类后,再启动前端工程访问即可.主要实现了企业的人事管理功能,主要包含员工管理.薪资管理.职位管理.权限管理.网盘文件分享管理等模块. 系统亮点:使用REDIS进行数据缓存,优化查询性能:使用分布式文件系统进行文件存储服务:基于Springboot+vue实现前后端分离开发 二,环境介绍 语言环境:Java: jdk1.8 数据库:Mysql:

  • C++实现教职工信息管理系统

    本文实例为大家分享了C++实现教职工信息管理系统的具体代码,供大家参考,具体内容如下 一.问题描述 一个小公司包含四类人员:经理,技术人员,销售人员和销售经理,各类人员的工资计算方法如下:经理:固定月薪(8000):技术人员:月薪按技术等级(1~8)(1600+等级*300):销售人员:按提成(4%*销售额):销售经理:底薪+提成(1500+0.2%*总销售额):设计一个管理程序,实现对各类人员的信息输入,修改和显示. 二 .基本要求 (1)使用面向对象编程思想编写开发过程中需要用到的类,比如:

  • 基于jquery实现智能提示控件intellSeach.js

    一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管理系统,想搜索李XX,只要输入"李",系统自然会提示一些姓李的员工,这样方便用户使用.说白了,就是用户边输入,系统会提示相关的结果:或者,当用户点击搜索框时,就推荐一些内容,如360.百度都会提示今天的主要新闻或搜索量大的内容. jquery 已经有一个这样的插件了,叫 autocomplete, 但我觉得不好用.关于autocomplete的介绍也很多,有兴趣的朋友

  • Oracle数据库中建立索引的基本方法讲解

    怎样建立最佳索引? 1.明确地创建索引 create index index_name on table_name(field_name) tablespace tablespace_name pctfree 5 initrans 2 maxtrans 255 storage ( minextents 1 maxextents 16382 pctincrease 0 ); 2.创建基于函数的索引 常用与UPPER.LOWER.TO_CHAR(date)等函数分类上,例: create index

  • Oracle数据安全面面观

    正在看的ORACLE教程是:Oracle数据安全面面观. Oracle数据安全面面观 作者:づ★sl战神    随着计算机的普及以及网络的发展,数据库已经不再仅仅是那些程序员所专有的话题.而Oracle数据库更是凭借其性能卓越,操作方便灵活的特点,在数据库的市场中已经占据了一席之地.但是同样随着网络技术的不断进步,数据信息的不断增加,数据安全已经不再是以前的"老生长谈",也更不是以前书本上那些"可望不可及"的条条框框.    或许很久以前,大家都觉得Oracle数据

  • 数据库设计规范化的五个要求 推荐收藏

    若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的.当然这是两个泛泛而谈的指标.为了达到数据库设计规范化的要求,一般来说,需要符合以下五个要求. 要求一:表中应该避免可为空的列. 虽然表中允许空列,但是,空字段是一种比较特殊的数据类型.数据库在处理的时候,需要进行特殊的处理.如此的话,就会增加数据库处理记录的复杂性.当表中有比较多的空字段时,在同等条件下,数据库处理的性能会降低许多. 所以,虽然在数据库表设计的时候,允许表中具有空字段,但是,我们应该尽量避免.若确实需要的话,我们可以

随机推荐