首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++期末考试考完了 试题很简单 做的很不理想 哎~ 最后一个题大家分享一上

2013-01-08 
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));}

其他的没细看,楼主加油
[解决办法]
我重写了一下 , 代码简洁得多


#include <iostream>

using std::string;
using std::cout;
using std::cin;

struct staff
{
string name;
//int num; //this is optional
float wage;
float bonus;


};

int main()
{
int role;
staff all[3];
for (int i = 0; i <= 999; ++i)
{
cout << "Please input:\nRole of the staff(1 for Salesman / 2 for Researcher): ";
cin >> role;
cout << "Name of the staff: ";
cin >> all[i].name;
//all[i].num = i + 1; //this is optional
cout << "Wage of the staff: ";
cin >> all[i].wage;
if (role == 1)
{
cout << "Sale of the salesman: ";
cin >> all[i].bonus;
all[i].bonus = all[i].bonus * 0.1;
}
else if (role == 999)//or else only
{
cout << "Bonus of the researcher: ";
cin >> all[i].bonus;
}
}
cout << "The infomation of the staffs that have bonus more than 100000: \n";
for (int i = 0; i <= 999; ++i)
{
/*if (all[i].bonus > 100000)//bonus more than 10000
cout << i + 1 << '\n'//or all[i].num
<< all[i].name << '\n';*/
if (all[i].wage + all[i].bonus > 100000)
//money the staff can get more than 10000
cout << "Staff number: " << i + 1 << '\n'    //or all[i].num
<< "Staff name: " << all[i].name << '\n';
cout << '\n';
}
}


[解决办法]
引用:
引用:
怎么没有对输入死循环进行处理、、、
int n;
cin>>n;
int m;
cout<<"请输入销售额:";
cin>>m;
等等、、如果输入的是字母 就悲剧老萨 进行处理下撒、、、

你是上高中的?   这个  是个问题,没有做容错处理

我懒得打太长 , 随便打两句而已...
还有 , 你高估了我的学历... 我初中二年级而已 全是我自学而已

热点排行