| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 640 人关注过本帖
标题:小弟自己改的c++程序,没有错误,但是有个参数显示不对
只看楼主 加入收藏
tytge8
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-12-15
收藏
 问题点数:0 回复次数:3 
小弟自己改的c++程序,没有错误,但是有个参数显示不对
公司人员信息管理系统,相信很多大学的同学都应该做过。。
但是这次老师要求的是越简单越好。。说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 编辑 ]
搜索更多相关主题的帖子: 函数 管理系统 employee include 
2011-12-15 20:21
tytge8
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-12-15
收藏
得分:0 
小弟自己想了一下,是不是因为individualempNo没有赋值,而是直接读取的内存上原来的值。。
如果把那句individualempNo++改为individualempNo=employeeNo++就差不多了
2011-12-15 20:32
zaq2008
Rank: 2
等 级:论坛游民
帖 子:23
专家分:13
注 册:2010-8-14
收藏
得分:0 
程序代码:
#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;
}
2011-12-15 20:35
tytge8
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-12-15
收藏
得分:0 
谢谢楼上。。我想也是这样。。
2011-12-15 20:40
快速回复:小弟自己改的c++程序,没有错误,但是有个参数显示不对
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017611 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved