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

Flavia ·
更新时间:2024-09-20
· 1851 次阅读

本文实例为大家分享了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; }



c+ 系统 C++

需要 登录 后方可回复, 如果你还没有账号请 注册新账号