注册 登录
编程论坛 C++教室

小弟自己改的c++程序,没有错误,但是有个参数显示不对

tytge8 发布于 2011-12-15 20:21, 643 次点击
公司人员信息管理系统,相信很多大学的同学都应该做过。。
但是这次老师要求的是越简单越好。。说100多行就够了。。
小弟在网上找了个基本能用的框架,删减了2个成员函数,就剩下了一个计算工资的函数。。但是人员编号的显示却不行了,显示的是很大的数。以下是小弟的程序
#include<iostream.h>
#include<string.h>
class employee
{
protected:
 char *name;                                    
 int individualempNo;                           
 float accumpay;                                 
 static int employeeNo;                             
public:  
 employee();                              
 ~employee();                                       
 virtual void pay()=0;                                 
};
class technician:public employee
{
private:
 float hourlyrate;                           
 int workhours;                           
public:
 technician();                              
 void pay();                              
};

class manager:virtual public employee
{
protected:
 float monthlypay;                              
public:
 manager();                                       
 void pay();                                       
};

class salesman:virtual public employee
{
protected:
 float commrate;                           
 float sales;                              
public:           
 salesman();                                 
 void pay();                             
 };
class salesmanager:public manager,public salesman
{
public:
 salesmanager();
void pay();
};
int employee::employeeNo=1000;
employee::employee()
{
 char namestr[50];
 cout<<"请输入一个雇员的姓名:";
    cin>>namestr;
 name=new char[strlen(namestr)+1];
 strcpy(name,namestr);
 individualempNo++;
 accumpay=0.0;
}
employee::~employee()
{
 delete[]name;
}
technician::technician()
{
 hourlyrate=100;
}
void technician::pay()
{cout<<"请输入"<<name<<"本月的工作时数:";
 cin>>workhours;
 accumpay=hourlyrate*workhours;
 cout<<"技术人员"<<name<<"的编号是"<<individualempNo<<"本月工资"<<accumpay<<endl;
}
salesman::salesman()
{
 commrate=0.04;
}
void salesman::pay()
{
 cout<<"请输入"<<name<<"本月的销售额:";
 cin>>sales;
 accumpay=sales*commrate;
 cout<<"销售人员"<<name<<"的编号是"<<individualempNo<<"本月工资"<<accumpay<<endl;
}
manager::manager()
{
 monthlypay=8000;
}
void manager::pay()
{
 accumpay=monthlypay;
 cout<<"经理"<<name<<"的编号是"<<individualempNo<<"本月工资"<<accumpay<<endl;
}
salesmanager::salesmanager()
{
 monthlypay=5000;
 commrate=0.005;
}
void salesmanager::pay()
{
 cout<<"请输入"<<employee::name<<"所管辖部门本月的销售总额";
 cin>>sales;
 accumpay=monthlypay+commrate*sales;
 cout<<"销售经理"<<name<<"的编号是"<<individualempNo<<"本月工资"<<accumpay<<endl;
}
int main()
{cout<<"                       公  司  人  事  管  理  系  统                    "<<endl;         
biaohao: cout<<"*************************************************************************"<<endl;     
 cout<<"*  0.exit  1.经理       2.技术人员         3.销售经理        4.销售人员 *"<<endl;
  cout<<"请选择功能:"<<endl;
 int a;
 cin>> a;
 switch(a)
 {case 0:break;
 case 1:{ manager m1;
 employee* a;
 a=&m1;
 a->pay();
}goto biaohao;   
        break;
 case 2:{technician t1;
employee* b;
b=&t1;
b->pay();
}goto biaohao;break;
 case 3:{salesmanager sm1;
employee* c;
c=&sm1;
c->pay();
}goto biaohao;break;
 case 4:{salesman s1;
employee* d;
d=&s1;
d->pay();
}goto biaohao;break;
 default:cout<<"你输入有误,请重试!"<<endl;goto biaohao;break;
 }
 return 0;
}
编译,组建都没有问题。。但是输入人员名字后,编号不对,请大神们帮我看看啊。。悲剧得想发百度知道。。超过长度限制

[ 本帖最后由 tytge8 于 2011-12-15 20:28 编辑 ]
3 回复
#2
tytge82011-12-15 20:32
小弟自己想了一下,是不是因为individualempNo没有赋值,而是直接读取的内存上原来的值。。
如果把那句individualempNo++改为individualempNo=employeeNo++就差不多了
#3
zaq20082011-12-15 20:35
程序代码:
#include<iostream>
#include<string.h>
using namespace std;
class employee
{
protected:
char *name;                                   
int individualempNo;                           
float accumpay;                                 
static int employeeNo;                           
public:
employee();                             
~employee();                                       
virtual void pay()=0;                                
};
class technician:public employee
{
private:
float hourlyrate;                           
int workhours;                           
public:
technician();                             
void pay();                             
};

class manager:virtual public employee
{
protected:
float monthlypay;                              
public:
manager();                                      
void pay();                                       
};

class salesman:virtual public employee
{
protected:
float commrate;                          
float sales;                              
public:         
salesman();                                
void pay();                           
};

class salesmanager:public manager,public salesman
{
public:
salesmanager();
void pay();
};

int employee::employeeNo=1000;

employee::employee()
{
char namestr[50];
cout<<"请输入一个雇员的姓名:";
    cin>>namestr;
name=new char[strlen(namestr)+1];
strcpy(name,namestr);
individualempNo++;              //没初始化过  按照你的想法 应该是 individualempNo=employeeNo++;
accumpay=0.0;
}

employee::~employee()
{
delete[]name;
}
technician::technician()
{
hourlyrate=100;
}
void technician::pay()
{cout<<"请输入"<<name<<"本月的工作时数:";
cin>>workhours;
accumpay=hourlyrate*workhours;
cout<<"技术人员"<<name<<"的编号是"<<individualempNo<<"本月工资"<<accumpay<<endl;
}
salesman::salesman()
{
commrate=0.04;
}
void salesman::pay()
{
cout<<"请输入"<<name<<"本月的销售额:";
cin>>sales;
accumpay=sales*commrate;
cout<<"销售人员"<<name<<"的编号是"<<individualempNo<<"本月工资"<<accumpay<<endl;
}
manager::manager()
{
monthlypay=8000;
}
void manager::pay()
{
accumpay=monthlypay;
cout<<"经理"<<name<<"的编号是"<<individualempNo<<"本月工资"<<accumpay<<endl;
}
salesmanager::salesmanager()
{
monthlypay=5000;
commrate=0.005;
}
void salesmanager::pay()
{
cout<<"请输入"<<employee::name<<"所管辖部门本月的销售总额";
cin>>sales;
accumpay=monthlypay+commrate*sales;
cout<<"销售经理"<<name<<"的编号是"<<individualempNo<<"本月工资"<<accumpay<<endl;
}
int main()
{cout<<"                       公  司  人  事  管  理  系  统                    "<<endl;         
biaohao: cout<<"*************************************************************************"<<endl;   
cout<<"*  0.exit  1.经理       2.技术人员         3.销售经理        4.销售人员 *"<<endl;
  cout<<"请选择功能:"<<endl;
int a;
cin>> a;
switch(a)
{case 0:break;
case 1:{ manager m1;
employee* a;
a=&m1;
a->pay();
}goto biaohao;  
        break;
case 2:{technician t1;
employee* b;
b=&t1;
b->pay();
}goto biaohao;break;
case 3:{salesmanager sm1;
employee* c;
c=&sm1;
c->pay();
}goto biaohao;break;
case 4:{salesman s1;
employee* d;
d=&s1;
d->pay();
}goto biaohao;break;
default:cout<<"你输入有误,请重试!"<<endl;goto biaohao;break;
}
return 0;
}
#4
tytge82011-12-15 20:40
谢谢楼上。。我想也是这样。。
1