欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)教職工信息管理系統(tǒng)

 更新時間:2022年03月18日 10:26:29   作者:陸鳴笙  
這篇文章主要為大家詳細介紹了C++實現(xiàn)教職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++實現(xiàn)教職工信息管理系統(tǒng)的具體代碼,供大家參考,具體內容如下

一.問題描述

一個小公司包含四類人員:經理,技術人員,銷售人員和銷售經理,各類人員的工資計算方法如下:經理:固定月薪(8000);技術人員:月薪按技術等級(1~8)(1600+等級*300);銷售人員:按提成(4%*銷售額);銷售經理:底薪+提成(1500+0.2%*總銷售額);設計一個管理程序,實現(xiàn)對各類人員的信息輸入,修改和顯示。

二 .基本要求

(1)使用面向對象編程思想編寫開發(fā)過程中需要用到的類,比如:設計Person類:編號,姓名,崗位,工資,成員函數(shù)可設一個計算月薪的純虛函數(shù);另外再設計四個針對四類人員的類均繼承 Person;添加相應的派生類數(shù)據(jù)成員和函數(shù),經理和銷售經理可以沒有新的數(shù)據(jù)成員,計算月薪即可; 技術人員添加技術等級數(shù)據(jù)成員,銷售人員添加數(shù)據(jù)成員:銷售額。還需設計一個Manage 類來完成各種操作。人員數(shù)組 vector,數(shù)據(jù)類型為基類指針。

(2)需要使用菜單功能顯示添加人員(輸入),修改信息,瀏覽信息,按姓名查找,月薪排序。

(3)為了設計簡潔,假定經理和銷售經理都只能有一個;用文本編輯器編輯一個文本文件(總數(shù) 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);//構造函數(shù)?
?? ?double virtual pay_salary() = 0; //借用虛函數(shù)進行工資初始化?
?? ?void ?virtual show(); ?? ??? ?//顯示信息?
?? ?bool operator<(const Person*&) const;?? ?//重載<比較薪水大小用于排序?
?? ?static int num; //定義靜態(tài)變量,自動賦予員工編號?
?? ?int Number; ? //編號?
?? ?double Salary;//工資?
?? ?string Name;//姓名?
?? ?string Department;//部門?
?? ?int c;//技術級?
};
bool Person::operator<(const Person*& obj) const//函數(shù)重載<,用于比較薪水?
{
?? ?return this->Salary > obj->Salary;
}
Person::Person(string name1, string work1, int c1) //構造函數(shù)的實現(xiàn)?
{
?? ?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);//構造函數(shù)?
?? ?double pay_salary();//計算工資函數(shù)?
?? ?void show();//顯示經理的信息?
};
Manager::Manager(string name1, string post1, int c1) :Person(name1, post1, c1) //構造函數(shù) 的實現(xiàn)?
{
?? ?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);//構造函數(shù)?
?? ?double pay_salary();//計算銷售經理的工資?
?? ?void show();//顯示銷售經理的信息?
};
SaleManager::SaleManager(string name1, string post1, int c1) :Person(name1, post1, c1)//構造函數(shù) 的實現(xiàn)?
?{
?? ?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);//構造函數(shù)?
?? ?int salevolume;//銷售額
?? ?double pay_salary();//計算銷售人員的工資?
?? ?void show();//顯示銷售人員的信息?
};
Salesman::Salesman(string name1, string post1, int sv) :Person(name1, post1, sv)//構造函數(shù)的實現(xiàn)?
{
?? ?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);//技術等級為繼承來的參數(shù)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; }//菜單函數(shù)?
?? ?int salevolume;//總銷售額?
?? ?vector<Person*> Ma;//vector數(shù)組,存放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數(shù)組進行讀取?
{
?? ?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
?? ??? ??? ?<< " ? ?| ? ? ? 公司人事管理系統(tǒng) ? ? ? ?|" << 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語言重難點之內存對齊和位段

    C語言重難點之內存對齊和位段

    這篇文章主要介紹了C語言重難點之內存對齊和位段,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • C++實現(xiàn)將長整型數(shù)轉換為字符串的示例代碼

    C++實現(xiàn)將長整型數(shù)轉換為字符串的示例代碼

    這篇文章主要介紹了C++實現(xiàn)將長整型數(shù)轉換為字符串的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • C語言 條件判斷詳細介紹

    C語言 條件判斷詳細介紹

    本文主要講解C語言 條件判斷,這里整理了相關資料,詳細說明了判斷語句知識要點,希望能幫助學習C語言的同學
    2016-08-08
  • C語言指針應用簡單實例

    C語言指針應用簡單實例

    這篇文章主要介紹了C語言指針應用簡單實例的相關資料,需要的朋友可以參考下
    2017-05-05
  • Qt模仿實現(xiàn)文字浮動字母的效果

    Qt模仿實現(xiàn)文字浮動字母的效果

    這篇文章主要介紹了通過Qt實現(xiàn)的文字浮動的效果,效果很簡單就是文本向上移動,在移動過程中文字整體變大或縮小。感興趣的可以試一試
    2022-01-01
  • Linux頁面置換算法的C語言實現(xiàn)

    Linux頁面置換算法的C語言實現(xiàn)

    這篇文章主要為大家詳細介紹了Linux頁面置換算法的C語言實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 基于OpenGL實現(xiàn)多段Bezier曲線拼接

    基于OpenGL實現(xiàn)多段Bezier曲線拼接

    這篇文章主要為大家詳細介紹了基于OpenGL實現(xiàn)多段Bezier曲線拼接,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++中友元的詳解及其作用介紹

    C++中友元的詳解及其作用介紹

    這篇文章主要介紹了C++中友元的詳解及其作用介紹,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 使用C++和Crypto++庫實現(xiàn)AES加密與解密

    使用C++和Crypto++庫實現(xiàn)AES加密與解密

    在這篇博客中,我們將深入探討如何利用C++和Crypto++庫實現(xiàn)高效且安全的AES加密與解密機制,Crypto++是一款高度認可的免費C++類庫,文中通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-01-01
  • C語言文件操作實現(xiàn)數(shù)據(jù)持久化(幫你快速了解文件操作函數(shù))

    C語言文件操作實現(xiàn)數(shù)據(jù)持久化(幫你快速了解文件操作函數(shù))

    持久數(shù)據(jù)其實就是將數(shù)據(jù)保存到數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關于C語言文件操作實現(xiàn)數(shù)據(jù)持久化(幫你快速了解文件操作函數(shù))的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11

最新評論