溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用C++實現教職工信息管理系統

發布時間:2022-03-18 11:24:15 來源:億速云 閱讀:244 作者:小新 欄目:開發技術

這篇文章主要介紹如何使用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;//編號從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;
}

以上是“如何使用C++實現教職工信息管理系統”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女