C++程序设计实验 雇员工资管理系统 员工管理系统

  • 课程设计内容

  • 课题描述

本系统是为某个公司编写雇员工资支付程序。

所完成的功能包括:

经理(Manager)每月按固定工资支付;

销售人员(Salesman)在基本工资基础上每月还有销售提成;

一般工人(Worker)按每月工作的天数计算工资;

临时工(Floater)按小时支付。

 

经理工资计算:月工资;

销售人员工资计算:基本工资+每件产品提成额度*销售的产品数量;

一般工人工资计算:每天工资*工作天数;

临时工工资计算:每小时工资*总工作小时数。

 

在本系统中用抽象类(Employee)描述所有雇员的共同特性(如姓名,性别,出生日期,员工类别),含有计算工资的纯虚函数computeSalay(),而且在系统中对于所有员工用该方法计薪是以多态形式来实现的。

系统应包含新增员工信息、删除员工信息、员工信息搜索、员工信息统计、员工信息分类存储、员工信息导入、按工资排序等功能为。

 

  • 系统设计

本系统所完成的功能如下: 
1.新增员工信息;
2.删除员工信息;
3.员工信息搜索(按姓名) ;
5.员工信息统计(按姓名或工资或类别) ;
6.员工信息分类存储; .
7.员工信息导入;
8.按工资排序;
9.退出
 

 

 

原创手写

本实验本人花了很多天,许多小时,最终完成了两个版本,其中不同点在于二进制方式存取和ASCLL(文本)方式存取两种存取方式

 

文本存取方式版本

///文本读取方式  string改成字符数组版
#include <iostream>///包含cin和cout
#include <cstdio>///包含scanf, printf的函数
#include <cstdlib>///包含abort()和exit()
#include <string>///string类的相关函数
#include <cstring>///包含strcmp()
#include <fstream>///文件输入输出流
using namespace std;
///类:
class Employee
{///职业 抽象类
protected:
    char name[10], sex[3], birthday[10], category[10];///
    double wage;
public:
    Employee(){};
    char *get_name();///
    double get_wage();
    virtual void set_data();
    virtual void show_data();
    virtual void computeSalary() = 0;
    virtual ~Employee(){};///此处很重要,一定要加virtual,具体可查“基类的虚析构函数”
    virtual void load();
    virtual void unload();
};
void Employee::set_data()
{
    cout << "请按照提示依次输入信息" << endl;
    cout << "姓名: " << endl;
    cin >> name;
    cout << "性别: " << endl;
    cin >> sex;
    cout << "出生日期(例:19980515): " << endl;
    cin >> birthday;
    //cout << "职业类型(经理、销售人员、工人、临时工): " << endl;
    //cin >> category;
}
char *Employee::get_name()///
{
    return name;
}
double Employee::get_wage()
{
    return wage;
}
void Employee::show_data()
{
    cout << "姓名: " << name << endl;
    cout << "性别: " << sex << endl;
    cout << "出生日期: " << birthday << endl;
    cout << "职业类型: " << category << endl;
    cout << "总工资:" << wage << endl;
}
void Employee::load()
{///从文件中读入数据
    cin >> name >> sex >> birthday >> category >> wage;
}
void Employee::unload()
{///将数据写入文件
    cout << name << " " << sex << " " << birthday << " " << category << " " << wage;
}

Employee *M[100];///经理对象的指针数组
Employee *S[100];///销售人员对象的指针数组
Employee *W[100];///工人对象的指针数组
Employee *F[100];///临时工对象的指针数组
int n;///总人数
int m;///经理人数
int s;///销售人员人数
int w;///工人人数
int f;///临时工人数

class Manager: public Employee
{///经理
private:
    double monthly_wages;
public:
    Manager(){};
    void set_data();
    void show_data();
    void computeSalary();
    void load();
    void unload();
};
void Manager::set_data()
{
    Employee::set_data();
    strcpy(category, "经理"); ///category = "经理";
    cout << "请输入该经理的月工资" << endl;
    cin >> monthly_wages;
    cout << "输入结束" << endl;
}
void Manager::show_data()
{
    Employee::show_data();
    cout << "月工资: " << monthly_wages << endl;
}
void Manager::computeSalary()
{
    wage = monthly_wages;
}
void Manager::load()
{
    Employee::load();
    cin >> monthly_wages;
}
void Manager::unload()
{
    Employee::unload();
    cout << " " << monthly_wages << endl;
}
class Salesman: public Employee
{///销售人员
private:
    double basic_wage, push_money;
    int sold_num;
public:
    Salesman(){};
    void set_data();
    void show_data();
    void computeSalary();
    void load();
    void unload();
};
void Salesman::set_data()
{
    Employee::set_data();
    strcpy(category, "销售人员");///category = "销售人员";
    cout << "基础工资: " << endl;
    cin >> basic_wage;
    cout << "每售出一件产品的提成额度: " << endl;
    cin >> push_money;
    cout << "售出的产品数量: " << endl;
    cin >> sold_num;
    cout << "输入结束" << endl;
}
void Salesman::show_data()
{
    Employee::show_data();
    cout << "基础工资: " << basic_wage << endl;
    cout << "每售出一件产品的提成额度: " << push_money << endl;
    cout << "售出的产品数量: " << sold_num << endl;
}
void Salesman::computeSalary()
{
    wage = basic_wage + push_money * sold_num;
}
void Salesman::load()
{
    Employee::load();
    cin >> basic_wage >> push_money >> sold_num;
}
void Salesman::unload()
{
    Employee::unload();
    cout << " " << basic_wage << " " << push_money << " " << sold_num << endl;
}
class Worker: public Employee
{///工人
private:
    double day_wage;
    int work_day;
public:
    Worker(){};
    void set_data();
    void show_data();
    void computeSalary();
    void load();
    void unload();
};
void Worker::set_data()
{
    Employee::set_data();
    strcpy(category, "工人");///category = "工人";
    cout << "每日工资: " << endl;
    cin >> day_wage;
    cout << "工作天数: " << endl;
    cin >> work_day;
    cout << "输入结束" << endl;
}
void Worker::show_data()
{
    Employee::show_data();
    cout << "每日工资: " << day_wage << endl;
    cout << "工作天数: " << work_day << endl;
}
void Worker::computeSalary()
{
    wage = day_wage * work_day;
}
void Worker::load()
{
    Employee::load();
    cin >> day_wage >> work_day;
}
void Worker::unload()
{
    Employee::unload();
    cout << " " << day_wage << " " << work_day << endl;
}
class Floater: public Employee
{///临时工
private:
    double hour_wage;
    int work_hour;
public:
    Floater(){};
    void set_data();
    void show_data();
    void computeSalary();
    void load();
    void unload();
};
void Floater::set_data()
{
    Employee::set_data();
    strcpy(category, "临时工");///category = "临时工";
    cout << "每小时工资: " << endl;
    cin >> hour_wage;
    cout << "工作小时数: " << endl;
    cin >> work_hour;
    cout << "输入结束" << endl;
}
void Floater::show_data()
{
    Employee::show_data();
    cout << "每小时工资: " << hour_wage << endl;
    cout << "工作小时数: " << work_hour << endl;
}
void Floater::computeSalary()
{
    wage = hour_wage * work_hour;
}
void Floater::load()
{
    Employee::load();
    cin >> hour_wage >> work_hour;
}
void Floater::unload()
{
    Employee::unload();
    cout << " " << hour_wage << " " << work_hour << endl;
}

///功能函数:

///添加员工信息:
void Add_Manager()
{///添加新经理
    M[m]= new Manager();
    M[m]->set_data();
    M[m]->computeSalary();
    m++;
    n++;
}
void Add_Salesman()
{///添加新销售人员
    S[s]= new Salesman();
    S[s]->set_data();
    S[s]->computeSalary();
    s++;
    n++;
}
void Add_Worker()
{///添加新工人
    W[w]= new Worker();
    W[w]->set_data();
    W[w]->computeSalary();
    w++;
    n++;
}
void Add_Floater()
{///添加新临时工
    F[f]= new Floater();
    F[f]->set_data();
    F[f]->computeSalary();
    f++;
    n++;
}
void Add_person()
{///新增员工
    int x;
    printf("您要新增的员工类型:\n");
    printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
    scanf("%d", &x);
    if(x < 1 || x > 4)
    {
        printf("输入错误!\n");
        return;
    }
    switch(x)
    {
        case 1:Add_Manager();break;
        case 2:Add_Salesman();break;
        case 3:Add_Worker();break;
        case 4:Add_Floater();break;
    }
}

///删除员工信息:
void Delete_Manager()
{///删除经理
    int flag = 0;
    char name1[10];///
    cout << "请输入您要删除的员工姓名: " << endl;
    cin >> name1;
    for(int i = 0; i < m; i++)
    {
        if(strcmp(name1, M[i]->get_name()) == 0)///name1 == M[i]->get_name()
        {
            delete M[i];
            for(int j = i; j < m - 1; j++)
            {
                M[j] = M[j + 1];
            }
            M[m - 1] = NULL;
            m--;
            n--;
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        cout << "未找到您输入的员工姓名" << endl;
    }
    else
    {
        cout << "删除成功!" << endl;
    }
}
void Delete_Salesman()
{///删除销售人员
    int flag = 0;
    char name1[10];///
    cout << "请输入您要删除的员工姓名: " << endl;
    cin >> name1;
    for(int i = 0; i < s; i++)
    {
        if(strcmp(name1, S[i]->get_name()) == 0)///
        {
            delete S[i];
            for(int j = i; j < s - 1; j++)
            {
                S[j] = S[j + 1];
            }
            S[s - 1] = NULL;
            s--;
            n--;
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        cout << "未找到您输入的员工姓名" << endl;
    }
    else
    {
        cout << "删除成功!" << endl;
    }
}
void Delete_Worker()
{///删除工人
    int flag = 0;
    char name1[10];///
    cout << "请输入您要删除的员工姓名: " << endl;
    cin >> name1;
    for(int i = 0; strcmp(name1, W[i]->get_name()) == 0; i++)///
    {
        if(name1 == W[i]->get_name())
        {
            delete W[i];
            for(int j = i; j < w - 1; j++)
            {
                W[j] = W[j + 1];
            }
            W[w - 1] = NULL;
            w--;
            n--;
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        cout << "未找到您输入的员工姓名" << endl;
    }
    else
    {
        cout << "删除成功!" << endl;
    }
}
void Delete_Floater()
{///删除临时工
    int flag = 0;
    char name1[10];///
    cout << "请输入您要删除的员工姓名: " << endl;
    cin >> name1;
    for(int i = 0; i < f; i++)
    {
        if(strcmp(name1, F[i]->get_name()) == 0)///
        {
            delete F[i];
            for(int j = i; j < f - 1; j++)
            {
                F[j] = F[j + 1];
            }
            F[f - 1] = NULL;
            f--;
            n--;
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        cout << "未找到您输入的员工姓名" << endl;
    }
    else
    {
        cout << "删除成功!" << endl;
    }
}
void Delete_person()
{///删除员工
    int x;
    printf("您要删除的员工类型:\n");
    printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
    scanf("%d", &x);
    if(x < 1 || x > 4)
    {
        printf("输入错误!\n");
        return;
    }
    switch(x)
    {
        case 1:Delete_Manager();break;
        case 2:Delete_Salesman();break;
        case 3:Delete_Worker();break;
        case 4:Delete_Floater();break;
        default:printf("输入错误!\n");break;
    }
}

///员工信息搜索
void Search1_inf()
{
    int flag = 0;
    char name1[10];///
    cout << "请输入您要查找的员工姓名: " << endl;
    cin >> name1;
    for(int i = 0; i < m; i++)
    {///查询是否为经理
        if(strcmp(name1, M[i]->get_name()) == 0)///
        {
            M[i]->show_data();
            cout << "查询完毕!" << endl;
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {///查询是否为销售人员
        for(int i = 0; i < s; i++)
        {
            if(strcmp(name1, S[i]->get_name()) == 0)///
            {
                S[i]->show_data();
                cout << "查询完毕!" << endl;
                flag = 1;
                break;
            }
        }
    }
    if(flag == 0)
    {///查询是否为工人
        for(int i = 0; i < w; i++)
        {
            if(strcmp(name1, W[i]->get_name()) == 0)///
            {
                W[i]->show_data();
                cout << "查询完毕!" << endl;
                flag = 1;
                break;
            }
        }
    }
    if(flag == 0)
    {///查询是否为临时工
        for(int i = 0; i < f; i++)
        {
            if(strcmp(name1, F[i]->get_name()) == 0)
            {
                F[i]->show_data();
                cout << "查询完毕!" << endl;
                flag = 1;
                break;
            }
        }
    }
    if(flag == 0)
    {
        cout << "未找到您输入的员工姓名" << endl;
    }
}

///员工信息统计
void display_all()
{
    printf("\n");
    cout << "经理信息: " << endl;
    for(int i = 0; i < m; i++)
    {
        M[i]->show_data();
        printf("\n");
    }
    cout << "经理信息统计完毕,经理人数:" << m << endl;
    printf("\n");
    cout << "销售人员信息: " << endl;
    for(int i = 0; i < s; i++)
    {
        S[i]->show_data();
        printf("\n");
    }
    cout << "销售人员信息统计完毕,销售人员人数:" << s << endl;
    printf("\n");
    cout << "工人信息: " << endl;
    for(int i = 0; i < w; i++)
    {
        W[i]->show_data();
        printf("\n");
    }
    cout << "工人信息统计完毕,工人人数:" << w << endl;
    printf("\n");
    cout << "临时工信息: " << endl;
    for(int i = 0; i < f; i++)
    {
        F[i]->show_data();
        printf("\n");
    }
    cout << "临时工信息统计完毕,临时工人数:" << f << endl;
    printf("\n");
    cout << "员工总人数:" << n << endl;
}

///按工资从小到大排序
template<typename T> void quick_sort(T p[], int l, int r)
{
    T key = p[l];
    int i, j;
    i = l;
    j = r;
    if(i >= j)  return;
    while(i < j)
    {
        while(i < j && p[r]->get_wage() >= key->get_wage())
            j--;
        p[i] = p[j];
        while(i < j && p[i]->get_wage() <= key->get_wage())
            i++;
        p[j] = p[i];
    }
    p[i] = key;
    quick_sort(p, i, i - 1);
    quick_sort(p, i + 1, j);
}
void sort_in_wages()
{
    int x;
    printf("您要进行排序的员工类型:\n");
    printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
    scanf("%d", &x);
    if(x < 1 || x > 4)
    {
        printf("输入错误!\n");
        return;
    }
    switch(x)
    {
        case 1:quick_sort(M, 0, m - 1); break;///M和&M[0]相同,都表示首地址
        case 2:quick_sort(S, 0, s - 1);break;
        case 3:quick_sort(W, 0, w - 1);break;
        case 4:quick_sort(F, 0, f - 1);break;
        ///default:printf("输入错误!\n");break;
    }
    printf("排序完成!\n");
}

///将文件中员工信息导入程序

void get_from_file()
{
    freopen("text1.txt", "r", stdin);///输入重定向到文件
    cin >> n >> m >> s >> w >> f;
    for(int i = 0; i < m; i++)
    {
        M[i]= new Manager();
        M[i]->load();
    }
    for(int i = 0; i < s; i++)
    {
        S[i]= new Salesman();
        S[i]->load();
    }
    for(int i = 0; i < w; i++)
    {
        W[i]= new Worker();
        W[i]->load();
    }
    for(int i = 0; i < f; i++)
    {
        F[i]= new Floater();
        F[i]->load();
    }
    freopen("CON", "r", stdin);///输入重定向到控制台
    cout << "信息导入完毕!" << endl;
}

///将员工信息分类存储到文件
void save_to_file()
{
    freopen("text1.txt", "w", stdout);///输出重定向到文件
    cout << n << " " << m << " " << s << " " << w << " " << f << endl;
    for(int i = 0; i < m; i++)
    {
        M[i]->unload();
    }
    for(int i = 0; i < s; i++)
    {
        S[i]->unload();
    }
    for(int i = 0; i < w; i++)
    {
        W[i]->unload();
    }
    for(int i = 0; i < f; i++)
    {
        F[i]->unload();
    }
    freopen("CON", "w", stdout);///输出重定向到控制台
    cout << "信息存储完成!" << endl;
}

void menu()
{///菜单
    printf("\n");
    printf("****************************************\n");///40个
    printf("*  1.新增员工信息                      *\n");
    printf("*  2.删除员工信息                      *\n");
    printf("*  3.员工信息搜索                      *\n");
    printf("*  4.员工信息统计(按类别)            *\n");
    printf("*  5.按工资排序                        *\n");
    //printf("*  6.将文件中员工信息导入程序          *\n");
    //printf("*  7.将员工信息分类存储到文件          *\n");
    printf("*  -1.退出                             *\n");
    printf("****************************************\n");
    printf("\n");
}
int main()
{
    int x;
    get_from_file();///将文件中员工信息导入程序
    cout << n << " " << m << " " << s << " " << w << " " << f << endl;
    while(1)
    {
        menu();
        printf("请输入您要使用的功能编号: ");
        scanf("%d", &x);
        if(x == -1 || (x >= 1 && x <= 5))
        {
            switch(x)
            {
                case 1:Add_person(); break;///新增员工信息
                case 2:Delete_person(); break;///删除员工信息
                case 3:Search1_inf(); break;///员工信息搜索
                case 4:display_all(); break;///员工信息统计
                case 5:sort_in_wages(); break;///按工资排序
                ///case 6:get_from_file(); break;///将文件中员工信息导入程序
                ///case 7:save_to_file(); break;///将员工信息分类存储到文件
                case -1:save_to_file(); exit(1);///退出并将员工信息分类存储到文件
                ///default:printf("输入错误!请重新选择\n"); break;
            }
        }
        else
        {
            printf("输入错误!请重新选择\n");
        }
    }
    return 0;
}

 

二进制存取方式版本     

///二进制读取方式 string改成字符数组版
#include <iostream>///包含cin和cout
#include <cstdio>///包含scanf, printf的函数
#include <cstdlib>///包含abort()和exit()
#include <string>///string类的相关函数
#include <cstring>///包含strcmp()
#include <fstream>///文件输入输出流
using namespace std;
///类:
class Employee
{///职业 抽象类
protected:
    char name[10], sex[3], birthday[10], category[10];///
    double wage;
public:
    Employee(){};
    char *get_name();///
    double get_wage();
    virtual void set_data();
    virtual void show_data();
    virtual void computeSalary() = 0;
    virtual ~Employee(){};///此处很重要,一定要加virtual,具体可查“基类的虚析构函数”
};
void Employee::set_data()
{
    cout << "请按照提示依次输入信息" << endl;
    cout << "姓名: " << endl;
    cin >> name;
    cout << "性别: " << endl;
    cin >> sex;
    cout << "出生日期(例:19980515): " << endl;
    cin >> birthday;
    //cout << "职业类型(经理、销售人员、工人、临时工): " << endl;
    //cin >> category;
}
char *Employee::get_name()///
{
    return name;
}
double Employee::get_wage()
{
    return wage;
}
void Employee::show_data()
{
    cout << "姓名: " << name << endl;
    cout << "性别: " << sex << endl;
    cout << "出生日期: " << birthday << endl;
    cout << "职业类型: " << category << endl;
    cout << "总工资:" << wage << endl;
}

Employee *M[100];///经理对象的指针数组
Employee *S[100];///销售人员对象的指针数组
Employee *W[100];///工人对象的指针数组
Employee *F[100];///临时工对象的指针数组
int n;///总人数
int m;///经理人数
int s;///销售人员人数
int w;///工人人数
int f;///临时工人数

class Manager: public Employee
{///经理
private:
    double monthly_wages;
public:
    Manager(){};
    void set_data();
    void show_data();
    void computeSalary();
};
void Manager::set_data()
{
    Employee::set_data();
    strcpy(category, "经理"); ///category = "经理";
    cout << "请输入该经理的月工资" << endl;
    cin >> monthly_wages;
    cout << "输入结束" << endl;
}
void Manager::show_data()
{
    Employee::show_data();
    cout << "月工资: " << monthly_wages << endl;
}
void Manager::computeSalary()
{
    wage = monthly_wages;
}
class Salesman: public Employee
{///销售人员
private:
    double basic_wage, push_money;
    int sold_num;
public:
    Salesman(){};
    void set_data();
    void show_data();
    void computeSalary();
};
void Salesman::set_data()
{
    Employee::set_data();
    strcpy(category, "销售人员");///category = "销售人员";
    cout << "基础工资: " << endl;
    cin >> basic_wage;
    cout << "每售出一件产品的提成额度: " << endl;
    cin >> push_money;
    cout << "售出的产品数量: " << endl;
    cin >> sold_num;
    cout << "输入结束" << endl;
}
void Salesman::show_data()
{
    Employee::show_data();
    cout << "基础工资: " << basic_wage << endl;
    cout << "每售出一件产品的提成额度: " << push_money << endl;
    cout << "售出的产品数量: " << sold_num << endl;
}
void Salesman::computeSalary()
{
    wage = basic_wage + push_money * sold_num;
}
class Worker: public Employee
{///工人
private:
    double day_wage;
    int work_day;
public:
    Worker(){};
    void set_data();
    void show_data();
    void computeSalary();
};
void Worker::set_data()
{
    Employee::set_data();
    strcpy(category, "工人");///category = "工人";
    cout << "每日工资: " << endl;
    cin >> day_wage;
    cout << "工作天数: " << endl;
    cin >> work_day;
    cout << "输入结束" << endl;
}
void Worker::show_data()
{
    Employee::show_data();
    cout << "每日工资: " << day_wage << endl;
    cout << "工作天数: " << work_day << endl;
}
void Worker::computeSalary()
{
    wage = day_wage * work_day;
}
class Floater: public Employee
{///临时工
private:
    double hour_wage;
    int work_hour;
public:
    Floater(){};
    void set_data();
    void show_data();
    void computeSalary();
};
void Floater::set_data()
{
    Employee::set_data();
    strcpy(category, "临时工");///category = "临时工";
    cout << "每小时工资: " << endl;
    cin >> hour_wage;
    cout << "工作小时数: " << endl;
    cin >> work_hour;
    cout << "输入结束" << endl;
}
void Floater::show_data()
{
    Employee::show_data();
    cout << "每小时工资: " << hour_wage << endl;
    cout << "工作小时数: " << work_hour << endl;
}
void Floater::computeSalary()
{
    wage = hour_wage * work_hour;
}

///功能函数:

///添加员工信息:
void Add_Manager()
{///添加新经理
    M[m]= new Manager();
    M[m]->set_data();
    M[m]->computeSalary();
    m++;
    n++;
}
void Add_Salesman()
{///添加新销售人员
    S[s]= new Salesman();
    S[s]->set_data();
    S[s]->computeSalary();
    s++;
    n++;
}
void Add_Worker()
{///添加新工人
    W[w]= new Worker();
    W[w]->set_data();
    W[w]->computeSalary();
    w++;
    n++;
}
void Add_Floater()
{///添加新临时工
    F[f]= new Floater();
    F[f]->set_data();
    F[f]->computeSalary();
    f++;
    n++;
}
void Add_person()
{///新增员工
    int x;
    printf("您要新增的员工类型:\n");
    printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
    scanf("%d", &x);
    if(x < 1 || x > 4)
    {
        printf("输入错误!\n");
        return;
    }
    switch(x)
    {
        case 1:Add_Manager();break;
        case 2:Add_Salesman();break;
        case 3:Add_Worker();break;
        case 4:Add_Floater();break;
    }
}

///删除员工信息:
void Delete_Manager()
{///删除经理
    int flag = 0;
    char name1[10];///
    cout << "请输入您要删除的员工姓名: " << endl;
    cin >> name1;
    for(int i = 0; i < m; i++)
    {
        if(strcmp(name1, M[i]->get_name()) == 0)///name1 == M[i]->get_name()
        {
            delete M[i];
            for(int j = i; j < m - 1; j++)
            {
                M[j] = M[j + 1];
            }
            M[m - 1] = NULL;
            m--;
            n--;
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        cout << "未找到您输入的员工姓名" << endl;
    }
    else
    {
        cout << "删除成功!" << endl;
    }
}
void Delete_Salesman()
{///删除销售人员
    int flag = 0;
    char name1[10];///
    cout << "请输入您要删除的员工姓名: " << endl;
    cin >> name1;
    for(int i = 0; i < s; i++)
    {
        if(strcmp(name1, S[i]->get_name()) == 0)///
        {
            delete S[i];
            for(int j = i; j < s - 1; j++)
            {
                S[j] = S[j + 1];
            }
            S[s - 1] = NULL;
            s--;
            n--;
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        cout << "未找到您输入的员工姓名" << endl;
    }
    else
    {
        cout << "删除成功!" << endl;
    }
}
void Delete_Worker()
{///删除工人
    int flag = 0;
    char name1[10];///
    cout << "请输入您要删除的员工姓名: " << endl;
    cin >> name1;
    for(int i = 0; strcmp(name1, W[i]->get_name()) == 0; i++)///
    {
        if(name1 == W[i]->get_name())
        {
            delete W[i];
            for(int j = i; j < w - 1; j++)
            {
                W[j] = W[j + 1];
            }
            W[w - 1] = NULL;
            w--;
            n--;
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        cout << "未找到您输入的员工姓名" << endl;
    }
    else
    {
        cout << "删除成功!" << endl;
    }
}
void Delete_Floater()
{///删除临时工
    int flag = 0;
    char name1[10];///
    cout << "请输入您要删除的员工姓名: " << endl;
    cin >> name1;
    for(int i = 0; i < f; i++)
    {
        if(strcmp(name1, F[i]->get_name()) == 0)///
        {
            delete F[i];
            for(int j = i; j < f - 1; j++)
            {
                F[j] = F[j + 1];
            }
            F[f - 1] = NULL;
            f--;
            n--;
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        cout << "未找到您输入的员工姓名" << endl;
    }
    else
    {
        cout << "删除成功!" << endl;
    }
}
void Delete_person()
{///删除员工
    int x;
    printf("您要删除的员工类型:\n");
    printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
    scanf("%d", &x);
    if(x < 1 || x > 4)
    {
        printf("输入错误!\n");
        return;
    }
    switch(x)
    {
        case 1:Delete_Manager();break;
        case 2:Delete_Salesman();break;
        case 3:Delete_Worker();break;
        case 4:Delete_Floater();break;
        default:printf("输入错误!\n");break;
    }
}

///员工信息搜索
void Search1_inf()
{
    int flag = 0;
    char name1[10];///
    cout << "请输入您要查找的员工姓名: " << endl;
    cin >> name1;
    for(int i = 0; i < m; i++)
    {///查询是否为经理
        if(strcmp(name1, M[i]->get_name()) == 0)///
        {
            M[i]->show_data();
            cout << "查询完毕!" << endl;
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {///查询是否为销售人员
        for(int i = 0; i < s; i++)
        {
            if(strcmp(name1, S[i]->get_name()) == 0)///
            {
                S[i]->show_data();
                cout << "查询完毕!" << endl;
                flag = 1;
                break;
            }
        }
    }
    if(flag == 0)
    {///查询是否为工人
        for(int i = 0; i < w; i++)
        {
            if(strcmp(name1, W[i]->get_name()) == 0)///
            {
                W[i]->show_data();
                cout << "查询完毕!" << endl;
                flag = 1;
                break;
            }
        }
    }
    if(flag == 0)
    {///查询是否为临时工
        for(int i = 0; i < f; i++)
        {
            if(strcmp(name1, F[i]->get_name()) == 0)
            {
                F[i]->show_data();
                cout << "查询完毕!" << endl;
                flag = 1;
                break;
            }
        }
    }
    if(flag == 0)
    {
        cout << "未找到您输入的员工姓名" << endl;
    }
}

///员工信息统计
void display_all()
{
    printf("\n");
    cout << "经理信息: " << endl;
    for(int i = 0; i < m; i++)
    {
        M[i]->show_data();
        printf("\n");
    }
    cout << "经理信息统计完毕,经理人数:" << m << endl;
    printf("\n");
    cout << "销售人员信息: " << endl;
    for(int i = 0; i < s; i++)
    {
        S[i]->show_data();
        printf("\n");
    }
    cout << "销售人员信息统计完毕,销售人员人数:" << s << endl;
    printf("\n");
    cout << "工人信息: " << endl;
    for(int i = 0; i < w; i++)
    {
        W[i]->show_data();
        printf("\n");
    }
    cout << "工人信息统计完毕,工人人数:" << w << endl;
    printf("\n");
    cout << "临时工信息: " << endl;
    for(int i = 0; i < f; i++)
    {
        F[i]->show_data();
        printf("\n");
    }
    cout << "临时工信息统计完毕,临时工人数:" << f << endl;
    printf("\n");
    cout << "员工总人数:" << n << endl;
}

///按工资排序
template<typename T> void quick_sort(T p[], int l, int r)
{
    T key = p[l];
    int i, j;
    i = l;
    j = r;
    if(i >= j)  return;
    while(i < j)
    {
        while(i < j && p[r]->get_wage() >= key->get_wage())
            j--;
        p[i] = p[j];
        while(i < j && p[i]->get_wage() <= key->get_wage())
            i++;
        p[j] = p[i];
    }
    p[i] = key;
    quick_sort(p, i, i - 1);
    quick_sort(p, i + 1, j);
}
void sort_in_wages()
{
    int x;
    printf("您要进行排序的员工类型:\n");
    printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
    scanf("%d", &x);
    if(x < 1 || x > 4)
    {
        printf("输入错误!\n");
        return;
    }
    switch(x)
    {
        case 1:quick_sort(M, 0, m - 1); break;///M和&M[0]相同,都表示首地址
        case 2:quick_sort(S, 0, s - 1);break;
        case 3:quick_sort(W, 0, w - 1);break;
        case 4:quick_sort(F, 0, f - 1);break;
        ///default:printf("输入错误!\n");break;
    }
    printf("排序完成!\n");
}

///将文件中员工信息导入程序
void get_from_file()
{
    ifstream infile("file1.dat", ios::in | ios::binary);///|ios::binary
    if(!infile)
    {
        cerr << "open file1.dat error!" << endl;
        cerr << "请将数据文件\"file1.dat\"放入该程序所在文件夹,或在该程序所在文件夹中建立该文件!" << endl;
        abort();
    }
    infile.read((char *)&n, sizeof(n));
    infile.read((char *)&m, sizeof(m));
    infile.read((char *)&s, sizeof(s));
    infile.read((char *)&w, sizeof(w));
    infile.read((char *)&f, sizeof(f));
    for(int i = 0; i < m; i++)
    {
        M[i]= new Manager();
        infile.read((char *)M[i], sizeof(Manager));
    }
    for(int i = 0; i < s; i++)
    {
        S[i]= new Salesman();
        infile.read((char *)S[i], sizeof(Salesman));
    }
    for(int i = 0; i < w; i++)
    {
        W[i]= new Worker();
        infile.read((char *)W[i], sizeof(Worker));
    }
    for(int i = 0; i < f; i++)
    {
        F[i]= new Floater();
        infile.read((char *)F[i], sizeof(Floater));
    }
    infile.close();
    cout << "信息导入完毕!" << endl;
}

///将员工信息分类存储到文件
void save_to_file()
{
    ofstream outfile("file1.dat", ios::out | ios::binary);
    if(!outfile)
    {
        cerr << "open file1.dat error!" << endl;
        abort();
    }
    outfile.write((char *)&n, sizeof(n));
    outfile.write((char *)&m, sizeof(m));
    outfile.write((char *)&s, sizeof(s));
    outfile.write((char *)&w, sizeof(w));
    outfile.write((char *)&f, sizeof(f));
    for(int i = 0; i < m; i++)
    {
        outfile.write((char *)M[i], sizeof(Manager));
    }
    for(int i = 0; i < s; i++)
    {
        outfile.write((char *)S[i], sizeof(Salesman));
    }
    for(int i = 0; i < w; i++)
    {
        outfile.write((char *)W[i], sizeof(Worker));
    }
    for(int i = 0; i < f; i++)
    {
        outfile.write((char *)F[i], sizeof(Floater));
    }
    outfile.close();
    cout << "信息存储完成!" << endl;
}

void menu()
{///菜单
    printf("\n");
    printf("****************************************\n");///40个
    printf("*  1.新增员工信息                      *\n");
    printf("*  2.删除员工信息                      *\n");
    printf("*  3.员工信息搜索                      *\n");
    printf("*  4.员工信息统计(按类别)            *\n");
    printf("*  5.按工资排序                        *\n");
    //printf("*  6.将文件中员工信息导入程序          *\n");
    //printf("*  7.将员工信息分类存储到文件          *\n");
    printf("*  -1.退出                             *\n");
    printf("****************************************\n");
    printf("\n");
}
int main()
{
    int x;
    get_from_file();///将文件中员工信息导入程序
    cout << n << " " << m << " " << s << " " << w << " " << f << endl;
    while(1)
    {
        menu();
        printf("请输入您要使用的功能编号: ");
        scanf("%d", &x);
        if(x == -1 || (x >= 1 && x <= 5))
        {
            switch(x)
            {
                case 1:Add_person(); break;///新增员工信息
                case 2:Delete_person(); break;///删除员工信息
                case 3:Search1_inf(); break;///员工信息搜索
                case 4:display_all(); break;///员工信息统计
                case 5:sort_in_wages(); break;///按工资排序
                ///case 6:get_from_file(); break;///将文件中员工信息导入程序
                ///case 7:save_to_file(); break;///将员工信息分类存储到文件
                case -1:save_to_file(); exit(1);///退出并将员工信息分类存储到文件
                ///default:printf("输入错误!请重新选择\n"); break;
            }
        }
        else
        {
            printf("输入错误!请重新选择\n");
        }
    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章