如何使用C++实现教职工信息管理系统(C++,开发技术)

时间:2024-05-04 10:00:40 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

具体内容如下

一.问题描述

一个小公司包含四类人员:经理,技术人员,销售人员和销售经理,各类人员的工资计算方法如下:经理:固定月薪(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>#definefilename"student.txt"usingnamespacestd;classPerson{public:Person(string,string,int=0);//构造函数doublevirtualpay_salary()=0;//借用虚函数进行工资初始化voidvirtualshow();//显示信息booloperator<(constPerson*&)const;//重载<比较薪水大小用于排序staticintnum;//定义静态变量,自动赋予员工编号intNumber;//编号doubleSalary;//工资stringName;//姓名stringDepartment;//部门intc;//技术级};boolPerson::operator<(constPerson*&obj)const//函数重载<,用于比较薪水{returnthis->Salary>obj->Salary;}Person::Person(stringname1,stringwork1,intc1)//构造函数的实现{c=c1;Number=num++;Name=name1;Department=work1;}intPerson::num=1;//编号从1开始voidPerson::show(){cout<<"-----------------------------------"<<endl;cout<<right<<setw(3)<<Number<<setw(10)<<Name<<setw(11)<<Department<<setw(8)<<Salary;//setw()控制输出宽度}classManager:publicPerson//经理类,继承person类{public:Manager(string,string,int);//构造函数doublepay_salary();//计算工资函数voidshow();//显示经理的信息};Manager::Manager(stringname1,stringpost1,intc1):Person(name1,post1,c1)//构造函数的实现{pay_salary();}doubleManager::pay_salary()//计算经理的工资{Salary=8000;returnSalary;}voidManager::show()//显示经理的信息{cout<<"-----------------------------------"<<endl;cout<<right<<setw(3)<<Number<<setw(10)<<Name<<setw(9)<<Department<<setw(10)<<Salary;}classSaleManager:publicPerson//销售经理类,继承person类{public:SaleManager(string,string,int);//构造函数doublepay_salary();//计算销售经理的工资voidshow();//显示销售经理的信息};SaleManager::SaleManager(stringname1,stringpost1,intc1):Person(name1,post1,c1)//构造函数的实现{pay_salary();}doubleSaleManager::pay_salary()//计算经理的工资,基本工资1500元{Salary=1500;returnSalary;}voidSaleManager::show()//显示销售经理的信息{cout<<"-----------------------------------"<<endl;cout<<right<<setw(3)<<Number<<setw(10)<<Name<<setw(11)<<Department<<setw(8)<<Salary;}classSalesman:publicPerson//销售人员类,继承Person类{public:Salesman(string,string,int);//构造函数intsalevolume;//销售额doublepay_salary();//计算销售人员的工资voidshow();//显示销售人员的信息};Salesman::Salesman(stringname1,stringpost1,intsv):Person(name1,post1,sv)//构造函数的实现{salevolume=sv;pay_salary();}doubleSalesman::pay_salary()//计算销售人员工资,4%×销售额{Salary=0.04*salevolume;returnSalary;}voidSalesman::show()//显示销售人员的信息{cout<<"-----------------------------------"<<endl;cout<<right<<setw(3)<<Number<<setw(10)<<Name<<setw(11)<<Department<<setw(8)<<Salary;}classTechnician:publicPerson//技术人员类,继承Person类{public:Technician(string,string,int);//技术等级为继承来的参数cdoublepay_salary();//计算技术人员的工资voidshow();//显示技术人员的所有信息};Technician::Technician(stringname1,stringpost1,intrank1):Person(name1,post1,rank1){pay_salary();}doubleTechnician::pay_salary()//计算技术人员的工资,技术等级×300+1600{Salary=1600+300*c;returnSalary;}voidTechnician::show()//显示所有技术人员的信息{cout<<"-----------------------------------"<<endl;cout<<right<<setw(3)<<Number<<setw(10)<<Name<<setw(11)<<Department<<setw(8)<<Salary;}classManage//管理类{public:voidMenu(){salevolume=0;}//菜单函数intsalevolume;//总销售额vector<Person*>Ma;//vector数组,存放Person类的对象指针voidadd(Person*);//添加人员信息voidalter(string);//删除人员信息voidaddtofile();//写入文件voidshow();//显示所有信息voidshow1();//按月薪降序Person*find(string&);//查找人员信息};Person*Manage::find(string&name1){//查找for(vector<Person*>::iteratoriter=Ma.begin();iter!=Ma.end();iter++){if((*iter)->Name==name1){return*iter;}}returnNULL;}voidManage::alter(stringname1){//删除for(vector<Person*>::iteratoriter=Ma.begin();iter!=Ma.end();iter++){if((*iter)->Name==name1){Ma.erase(iter);return;}}cout<<"查无此人"<<endl;}voidManage::add(Person*people)//添加{if(people->Department=="销售人员"){salevolume+=((Salesman*)people)->salevolume;}Ma.push_back(people);}voidManage::addtofile()//写入文件{ofstreamoutfile(filename);//打开文件写入for(vector<Person*>::iteratoriter=Ma.begin();iter!=Ma.end();iter++){outfile<<(*iter)->Department<<""<<(*iter)->Name<<"";if((*iter)->c==0)outfile<<endl;elseoutfile<<(*iter)->c<<endl;}outfile.close();//关闭}boolcmp(Person*x,Person*y){//比较薪水returnx->Salary>y->Salary;}voidManage::show(){for(vector<Person*>::iteratoriter=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*>::iteratoriter=Ma.begin();iter!=Ma.end();iter++){(*iter)->show();cout<<endl;}}voidreadfile(Manage&obj)//读取文件{FILE*fp;fp=fopen(filename,"r");//打开文件,只读if(fp==NULL){cout<<"未找到人员名单"<<endl;return;}while(!feof(fp)){charpost[20];charName[20];intc;//销售额或技术等级fscanf(fp,"%s%s%d",post,Name,&c);if(!strcmp(post,"经理")){//文件中为经理的人的信息先填入Person*peo=newManager(Name,post,0);obj.add(peo);}elseif(!strcmp(post,"技术人员")){Person*peo=newTechnician(Name,post,c);obj.add(peo);}elseif(!strcmp(post,"销售人员")){Person*peo=newSalesman(Name,post,c);obj.add(peo);}elseif(!strcmp(post,"销售经理")){Person*peo=newSaleManager(Name,post,0);obj.add(peo);}}fclose(fp);//关闭文件}voidManage::show1()//对vector数组进行读取{for(vector<Person*>::iteratoriter=Ma.begin();iter!=Ma.end();iter++){(*iter)->show();cout<<endl;}}intmain(){intx;ManageT;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){case1:{while(1){intn;stringName;cout<<"请输入姓名:";cin>>Name;cout<<"请输入人员岗位(1.经理2.技术人员3.销售人员4.销售经理):";cin>>n;if(n==1){Person*peo=newManager(Name,"经理",0);T.add(peo);cout<<"添加成功"<<endl<<endl<<endl;break;}elseif(n==2){while(1){intrank=0;cout<<"请输入技术等级(1~8):";cin>>rank;if(rank>8||rank<1){cout<<"输入错误,请在1~8之间输入:";}else{Person*peo=newTechnician(Name,"技术人员",rank);T.add(peo);break;}}cout<<"添加成功"<<endl<<endl<<endl;break;}elseif(n==3){intsales=0;cout<<"请输入销售额:"<<endl;cin>>sales;Person*peo=newSalesman(Name,"销售人员",sales);T.add(peo);cout<<"添加成功"<<endl<<endl<<endl;break;}elseif(n==4){Person*peo=newSaleManager(Name,"销售经理",0);T.add(peo);cout<<"添加成功"<<endl<<endl<<endl;break;}else{cout<<"输入错误,请重新输入:"<<endl;}}system("pause");}break;case2:{stringName;intn=0;cout<<"请输入姓名:";cin>>Name;Person*peo=T.find(Name);if(peo==NULL){cout<<"查无此人"<<endl<<endl<<endl;break;}peo->show();if(peo->Department=="经理"){cout<<"经理无法修改"<<endl;}elseif(peo->Department=="技术人员"){intrank=0;while(1){cout<<endl<<"请输入技术等级(1~8):"<<endl;cin>>rank;if(rank>8||rank<1){cout<<"等级输入错误,请重新输入"<<endl;}elsebreak;}T.alter(Name);peo=newTechnician(Name,"技术人员",rank);T.add(peo);cout<<"修改成功!"<<endl;}elseif(peo->Department=="销售人员"){intsales=0;cout<<endl<<"请输入销售额:"<<endl;cin>>sales;T.alter(Name);peo=newSalesman(Name,"销售人员",sales);T.add(peo);cout<<"修改成功!"<<endl;}elseif(peo->Department=="销售经理"){cout<<"销售经理无法修改"<<endl;}else{cout<<"输入错误"<<endl;}}system("pause");break;case3:{stringName;intn=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;case4:{cout<<"-----------------------------------"<<endl;cout<<left<<setw(8)<<"序号"<<setw(9)<<"姓名"<<setw(10)<<"岗位"<<setw(10)<<"工资"<<endl;T.show1();cout<<"-----------------------------------"<<endl;system("pause");system("cls");}break;case5:{cout<<"-----------------------------------"<<endl;cout<<left<<setw(8)<<"序号"<<setw(9)<<"姓名"<<setw(10)<<"岗位"<<setw(10)<<"工资"<<endl;T.show();}system("pause");break;case0:T.addtofile();exit(0);default:cout<<"输入错误请重新输入"<<endl;break;}}return0;}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:如何使用C++实现教职工信息管理系统的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何实现redis数据一致性下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18