您的位置:首页 > 其它

公司人员管理系统

2011-04-20 12:16 218 查看
 

公司人员管理系统

某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。 

要求: 

(1) 其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。 

(2) 程序对所有人员有提升级别的功能 

(3) 月薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成 ,销售经理既拿固定月薪也领取销售提成。 能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息
花了好几个小时才写了这么一个小程序,感觉还是得多编写些程序的,过程中由于马虎耽搁了好多时间、、哎。。什么时候能克服马虎呢、、
代码如下
#include<iostream>#include<string.h>using namespace std;/*定义一个职员的基类employee*/class employee{public:char name[20]; //姓名double num;  //编号char rank[20]; //级别double salary;  //薪水public:employee() {};~employee() {};virtual double Getsalary() {return 0;};virtual void set(char name[20],double num1,char rank[20],double salary) {};    virtual void set(char name[20],double num1,char rank[20],double hour,double timesalary) {};virtual void show()  {};  //显示薪水和全部信息};/*定义经理类,继承自employee*/class manager: public employee{private:double salary;public:manager()  {strcpy(name,""),num=-1,salary=0;};void set(char mname[20],double mnum,char mrank[20],double msalary);  //用来设置经理信息的函数~manager() {};double Getsalary();void show();          //显示经理的所有信息};void  manager::set(char mname[20],double mnum,char mrank[20],double msalary){    strcpy(name,mname);num=mnum;strcpy(rank,mrank);salary=msalary;}double manager::Getsalary()   //计算经理工资,固定工资{return salary;}void manager::show()  //显示经理的所有信息{cout<<"员工姓名:"<<name<<endl;cout<<"员工编号:"<<num<<endl;cout<<"员工级别:"<<rank<<endl;cout<<"员工薪水:"<<Getsalary()<<endl;}/*定义兼职人员的类*/class parttime :public employee{public:double timesalary;double hour;public:    parttime() {timesalary=0; hour=0; strcpy(name,"");num=-1;}    void set(char pname[20],double pnum,char prank[20],double phour,double ptimesalary); //用来设置兼职人员信息的函数~parttime() {}double Getsalary();void show();};void parttime::set(char pname[20],double pnum,char prank[20],double phour,double ptimesalary){      strcpy(name,pname);  num=pnum;  strcpy(rank,prank);  hour=phour;      timesalary=ptimesalary;}double parttime::Getsalary(){return hour*timesalary;  //兼职人员工资等于 小时数*时薪}void parttime::show(){    cout<<"员工姓名:"<<name<<endl;cout<<"员工编号:"<<num<<endl;cout<<"员工级别:"<<rank<<endl;cout<<"员工薪水:"<<Getsalary()<<endl;}/*定义一个链表用来存放员工信息,可以实现插入删除等操作*/struct node{employee* employees;node *next;};class linklist{private:node *first;public:linklist() {first=new node;first->next=NULL;}~linklist();void Delete(int i);void printlinklist();void get(int i);void insert(int i,employee* x);  };void linklist::printlinklist(){node *p;p=first->next;while(p!=NULL){p->employees->show();cout<<endl;p=p->next;}}void linklist::get(int i){node *p; p=new node ;p=first->next; int j=1;while(p&&j<i){p=p->next;j++;}if(!p)cout<<"位置"<<endl;else{p->employees->show();cout<<endl;}}void linklist::insert(int i,employee* x){node *p;int j=0;p=first;while(p&&j<i-1){        p=p->next;j++;}if(!p){cout<<"位置异常"<<endl;}else{  node *q;  q=new node;  q->next=p->next;  q->employees=x;  p->next=q;}}void linklist::Delete(int i){node *p; p=new node; p=first;int j=0;while(p&&j<i-1){p=p->next;j++;}if(!p||!p->next)cout<<"您删除的员工不存在"<<endl;else{node *q; q=new node ; q=p->next;p->next=q->next;delete q;}}linklist::~linklist(){node *p;p=new node;p=first;while(p)    {node *s; s=new node;s=p;p=p->next;delete s;}}employee* employees[100];manager*  managers[100];    int managernum=0;parttime* parttimes[100];   int parttimenum=0;/*定义一个用来管理员工信息的control类*/class control{public:static int bianhao;    //定义一个静态成员用来存储编号,每增加一个成员bianhao加1linklist  elinklist;public:control() {}    void show();                    //用来显示用户选择界面的void find(int x);            //根据职员的编号来查找职员void add();                     //用来增加职员信息的void remove();                //用来删除职员信息的};int control::bianhao=0;void control::show()                  //用来显示用户选择界面的{cout<<"1:查找员工"<<endl;cout<<"2:增加员工"<<endl;cout<<"3:删除员工"<<endl;cout<<"4:退出程序"<<endl;cout<<"请输入您的选择"<<endl;int xuanze;cin>>xuanze;switch(xuanze){case 1:cout<<"请输入您要查找的编号(员工编号0开始),目前编号最大为"<<bianhao-1<<endl;int y;cin>>y;        find(y);break;case 2:        add();break;case 3:        remove();break;case 4:exit(0);break;default:cout<<"您的输入有误,请重新选择"<<endl;break;}}void control::remove()                   //用来删除职员信息的{    cout<<"请输入您要删除的员工编号"<<endl;int yy;cin>>yy;    elinklist.Delete(yy+1);  //删除员工}void control::add()                  //用来增加职员信息的{   cout<<"请输入员工姓名"<<endl;   char name2[20],rank2[10];   int salary2;   cin>>name2;   cout<<"请输入员工的级别(manager,parttime)"<<endl;   cin>>rank2;//用来根据用户输入的级别来创建类   if(!strcmp(rank2,"manager"))      //用户输入经理,则动态创建经理类   { cout<<"请输入员工的工资"<<endl; cin>>salary2;     managers[managernum]=new manager();     managers[managernum]->set(name2,bianhao,rank2,salary2); employees[managernum+parttimenum]=managers[managernum];     elinklist.insert(bianhao+1,employees[managernum+parttimenum]); //插入新员工 managernum++; bianhao++;   }   else if(!strcmp(rank2,"parttime"))    //用户输入兼职人员,则动态创建兼职人员类   {   cout<<"请输入员工工作时间"<<endl;   int phour;   cin>>phour;   cout<<"请输入员工每小时工资"<<endl;   cin>>salary2;       parttimes[parttimenum]=new parttime();   parttimes[parttimenum]->set(name2,bianhao,rank2,phour,salary2);       employees[managernum+parttimenum]=parttimes[parttimenum];   elinklist.insert(bianhao+1,employees[managernum+parttimenum]); //插入新员工   parttimenum++;   bianhao++;   }   else                          //用户输入其他的,则显示输入错误   {   cout<<"本公司没有这个级别,请您重新选择"<<endl;   }}void control::find(int x)    //根据职员的编号来查找职员{   elinklist.get(x+1);}int main(){    control control1;while(1){  control1.show();}    return  0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息