C++期末考试考完了 试题很简单 做的很不理想 哎~ 最后一个题大家分享一上
C++期末考试考完了 试题很简单 做的很不理想 哎~~ 最后一个题大家分享一下
//某工厂有员工:研发人员和销售人员
//每个员工都有姓名和工号,其中工号有静态变量从1累计增加
//每个研发人员的工资计算方法是固定工资加上奖金
//每个销售人员的的工资计算方法是固定工资加上销售额的%10
//编写程序实现这些功能 编写mian函数输入1000人的信息 输出奖金超过10万元的 员工的 工号和姓名
这个题对于大家来说 必须是小菜一贴 很多人可能都懒得看 但是 大家就当玩玩
我总觉得 我写的这个代码 怪怪的 大家觉得呢?
#include<iostream>
using namespace std;
class Worker
{
public:
virtual void Computepayment()=0;//计算工资的函数
virtual char* getname()=0;
virtual int getID()=0;
virtual int getpayment()=0;
static int NUM;//静态变量来
protected:
char name[20];
int ID;
int payment;
};
class Researcher:public Worker
{
public:
Researcher(){ID=NUM;NUM++;}
void setname(){cin>>name;}
virtual char* getname(){return name;}
virtual int getID(){return ID;}
virtual int getpayment(){return payment;}
virtual void Computepayment();
};
class SellWorker:public Worker
{
public:
SellWorker(){ID=NUM;NUM++;}
void setname(){cin>>name;}
virtual char* getname(){return name;}
virtual int getID(){return ID;}
virtual int getpayment(){return payment;}
virtual void Computepayment();
};
void Researcher::Computepayment()
{
cout<<"请输入工资:";
int n;
cin>>n;
cout<<"请输入奖学金:";
int m;
cin>>m;
payment=n+m;//研发人员的工作算法是工资+奖金
}
void SellWorker::Computepayment()
{
cout<<"请输入工资:";
int n;
cin>>n;
int m;
cout<<"请输入销售额:";
cin>>m;
payment=(n+m*0.1);//小说人员的工资算法是工资+销售额的10%
}
int Worker::NUM=0;
int main()
{
Worker *p[1000];
for(int i=0;i<1000;i++)
{
cout<<"请输入员工的信息:"<<endl;
cout<<"1 for Researcher,2 for Seller :";
int choice;
cin>>choice;
if(choice==1)
{
Researcher h;
cout<<"请输入研发人的名字:";
h.setname();
h.Computepayment();
p[i]=&h;
}
else if(choice==2)
{
SellWorker s;
cout<<"请输入销售人的名字:";
s.setname();
s.Computepayment();
p[i]=&s;
}
}
//输出工资超过10万元的 员工工号和姓名
cout<<"年薪超过10万的员工有:"<<endl<<endl<<endl;
for(i=0;i<1000;i++)
{
if(p[i]->getpayment()>10)
{
cout<<"名字:"<<p[i]->getname()<<" 工号"<<p[i]->getID()<<endl;
}
}
return 0;
}
------解决方案--------------------
对于初学者,还可以
代码风格方面确实有点问题
一、因为你要输出char name[20];因为cout << name;是遇'\0'当输出结束的,如果没有'\0',会越界查找,所以就会出现乱码,建议用memset(name, 0, 20);还有输入时候别超过20个哦
二、void setname(){cin>>name;}//这个代码设计有点糟糕,建议
void setname(char *str){memcpy(name, str, strlen(str));}
其他的没细看,楼主加油
------解决方案--------------------
我重写了一下 , 代码简洁得多
//某工厂有员工:研发人员和销售人员
//每个员工都有姓名和工号,其中工号有静态变量从1累计增加
//每个研发人员的工资计算方法是固定工资加上奖金
//每个销售人员的的工资计算方法是固定工资加上销售额的%10
//编写程序实现这些功能 编写mian函数输入1000人的信息 输出奖金超过10万元的 员工的 工号和姓名
这个题对于大家来说 必须是小菜一贴 很多人可能都懒得看 但是 大家就当玩玩
我总觉得 我写的这个代码 怪怪的 大家觉得呢?
#include<iostream>
using namespace std;
class Worker
{
public:
virtual void Computepayment()=0;//计算工资的函数
virtual char* getname()=0;
virtual int getID()=0;
virtual int getpayment()=0;
static int NUM;//静态变量来
protected:
char name[20];
int ID;
int payment;
};
class Researcher:public Worker
{
public:
Researcher(){ID=NUM;NUM++;}
void setname(){cin>>name;}
virtual char* getname(){return name;}
virtual int getID(){return ID;}
virtual int getpayment(){return payment;}
virtual void Computepayment();
};
class SellWorker:public Worker
{
public:
SellWorker(){ID=NUM;NUM++;}
void setname(){cin>>name;}
virtual char* getname(){return name;}
virtual int getID(){return ID;}
virtual int getpayment(){return payment;}
virtual void Computepayment();
};
void Researcher::Computepayment()
{
cout<<"请输入工资:";
int n;
cin>>n;
cout<<"请输入奖学金:";
int m;
cin>>m;
payment=n+m;//研发人员的工作算法是工资+奖金
}
void SellWorker::Computepayment()
{
cout<<"请输入工资:";
int n;
cin>>n;
int m;
cout<<"请输入销售额:";
cin>>m;
payment=(n+m*0.1);//小说人员的工资算法是工资+销售额的10%
}
int Worker::NUM=0;
int main()
{
Worker *p[1000];
for(int i=0;i<1000;i++)
{
cout<<"请输入员工的信息:"<<endl;
cout<<"1 for Researcher,2 for Seller :";
int choice;
cin>>choice;
if(choice==1)
{
Researcher h;
cout<<"请输入研发人的名字:";
h.setname();
h.Computepayment();
p[i]=&h;
}
else if(choice==2)
{
SellWorker s;
cout<<"请输入销售人的名字:";
s.setname();
s.Computepayment();
p[i]=&s;
}
}
//输出工资超过10万元的 员工工号和姓名
cout<<"年薪超过10万的员工有:"<<endl<<endl<<endl;
for(i=0;i<1000;i++)
{
if(p[i]->getpayment()>10)
{
cout<<"名字:"<<p[i]->getname()<<" 工号"<<p[i]->getID()<<endl;
}
}
return 0;
}
------解决方案--------------------
对于初学者,还可以
代码风格方面确实有点问题
一、因为你要输出char name[20];因为cout << name;是遇'\0'当输出结束的,如果没有'\0',会越界查找,所以就会出现乱码,建议用memset(name, 0, 20);还有输入时候别超过20个哦
二、void setname(){cin>>name;}//这个代码设计有点糟糕,建议
void setname(char *str){memcpy(name, str, strlen(str));}
其他的没细看,楼主加油
------解决方案--------------------
我重写了一下 , 代码简洁得多
#include <iostream>
using std::string;
using std::cout;
using std::cin;
struct staff
{
string name;
//int num; //this is optional
float wage;
float bonus;