这不是mooc奥!!!一些没有算法却可以达到100行的屑程序(。助兄一臂之力。
1. (11分) 5-5-4简易工资管理
题目描述
某公司财务部需要开发一个计算机雇员工资的程序,该公司有3类员工:
工人的工资为每小时工资额(通过成员函数设定)乘以当月工作时数(通过成员函数设定)再加上工龄工资;
销售员工资为每小时工资额(通过成员函数设定)乘以当月工作时数(通过成员函数设定)加上销售额提成再加上工龄工资,
其中销售额提成等于该销售员当月售出商品金额(通过成员函数设定)的1%;
管理人员工资为基本工资1000元再加上工龄工资。
工龄工资就是雇员在该公司工作的工龄每增加一年,月工资就增加35元。
请用面向对象方法分析、设计这个程序,并用C++语言写出完整程序。
设计基类Employee,定义如下:
class Employee
{
protected:
string name; //姓名
int working_years; //工龄
public:
Employee(string nm="unnamed",int wy=0);
string Getname();
double ComputePay(); //求工龄工资,就是:工龄*35
void SetWorkyears(int wy);
};
由Employee公有派生3个类:Worker、SalesPerson 和 Manager。
在Worker类中添加数据成员:
double pay_per_hour; //每小时工资额 int work_time; //当月工作时数
成员函数:
本类的构造函数 double count_pay(); //计算工资,按上面说明的计算规则 void SetWorktime(int wt); //设置当月工作时数 void Setpay_per_hour(int x); //设置每小时工资额
在SalesPerson类中添加数据成员:
double pay_per_hour; //每小时工资额 double saleroom; //当月售出商品金额 int work_time; //当月工作时数
成员函数:
本类的构造函数 double count_pay(); //计算工资,按上面说明的计算规则 void SetWorktime(int wt); //设置当月工作时数 void Setpay_per_hour(int x); //设置每小时工资额 void Setsalesroom(double sr); //设置当月售出商品金额
在Manager类中添加成员函数:
本类的构造函数 double count_pay(); //计算工资,按上面说明的计算规则
请直接复制使用如下的main()函数:
int main()
{
Worker work("zhangqiang",3,200);
work.Setpay_per_hour(50);
cout<<"工资="<
SalesPerson sales("wangjun",5,300000,25);
sales.SetWorktime(40);
sales.Setpay_per_hour(80);
sales.Setsalesroom(450000);
cout<
Manager mana("sunchao",20);
cout< return 0;
}
输入描述
无输入
输出描述
工资=10105
zhangqiang 5750
wangjun 7875
sunchao 1700
样例输入1:
无
样例输出1:
工资=10105
zhangqiang 5750
wangjun 7875
sunchao 1700
#include
using namespace std;
class Employee
{
protected:
string name; //姓名
int working_years; //工龄
public:
Employee(string nm="unnamed",int wy=0){
name=nm;working_years = wy;
}
string Getname(){
return name;
}
double ComputePay(){
return 35*working_years;
} //求工龄工资,就是:工龄*35
void SetWorkyears(int wy){
working_years=wy;
}
};
class Worker:public Employee{
private:
double pay_per_hour; //每小时工资额
int work_time; //当月工作时数
public:
Worker(string n,int t,int m){
name=n;work_time=m;working_years=t;
}
double count_pay(){
return pay_per_hour*work_time+ComputePay();
} //计算工资,按上面说明的计算规则
void SetWorktime(int wt){
work_time=wt;
} //设置当月工作时数
void Setpay_per_hour(int x){
pay_per_hour=x;
} //设置每小时工资额
};
class SalesPerson:public Employee{
private:
double pay_per_hour; //每小时工资额
double saleroom; //当月售出商品金额
int work_time; //当月工作时数
public:
SalesPerson(string n,int y,int s,int wt){
name=n;working_years=y;saleroom=s;work_time=wt;
}
double count_pay(){
return pay_per_hour * work_time + saleroom * 0.01 + ComputePay();
} //计算工资,按上面说明的计算规则
void SetWorktime(int wt){
work_time=wt;
} //设置当月工作时数
void Setpay_per_hour(int x){
pay_per_hour=x;
} //设置每小时工资额
void Setsalesroom(double sr){
saleroom=sr;
} //设置当月售出商品金额
};
class Manager:public Employee{
public:
Manager(string nm,int wy){
name=nm;working_years = wy;
}
double count_pay(){
return 1000+working_years*35;
} //计算工资,按上面说明的计算规则
};
int main()
{
Worker work("zhangqiang",3,200);
work.Setpay_per_hour(50);
cout<<"工资="<
2. (12分) 5.3+ 出租车收费程序
题目描述
输入起始站、终止站和里程,计费方式是起步价8元,其中含3公里费用,以后每半公里收费0.7元,不足半公里按半公里计。
可以定义一个Station类,一个Mile类,利用Station类和Mile类为基类公有派生Price类。
编写程序实现在Price类中的构造函数Price()和void disp()函数功能
并在主函数中定义一个Price类的对象,显示完整的信息。
编程提示:
Station类,其中包括如下内容:
保护数据成员:string from //表示起始地名
string to //表示目标地名
公有成员函数:构造函数 //提供起始和目标地名
函数 void disp() //显示起止地名
Mile类,其中包括如下内容:
保护数据成员:double mile //表示两地之间的距离,用公里数表示
公有成员函数:构造函数 //提供两地之间的距离
函数 void disp() //显示里程数
Price类,从Station类和Mile类公有继承,再增加如下内容:
私有数据成员:double price //两地之间打车的总费用
公有成员函数:构造函数 //调用基类构造函数并计算费用
函数 void disp() //显示总费用
主函数中定义一个Price类的对象(起始站、终止站和里程信息从键盘输入),
并调用disp函数输出所有信息,包括起始站、终止站、里程、总费用。
输入描述
起始站 终止站 里程数
输出描述
起始站 终止站 里程数 总费用
样例输入1:
仙林 模范马路 23.8
样例输出1:
仙林 模范马路 23.8 37.4
样例输入2:
新街口 仙林中心 27.2
样例输出2:
新街口 仙林中心 27.2 42.3
#include
using namespace std;
class Station{
protected:
string from; //表示起始地名
string to; //表示目标地名
public:
Station(string f,string t){
from=f;to=t;
} //提供起始和目标地名
void disp(){
cout<>s>>e>>m;
Price p1(s,e,m);
p1.Station::disp();
p1.Mile::disp();;
p1.Price::disp();
return 0;
}
3. (11分) 补充编程题3-4-4 对象成员:产品类Product的设计
题目描述
设计一个产品类 Product ,允许通过如下方式来创建产品对象: 通过指定产品名创建; 通过指定产品名和产品价格创建; 通过指定产品名、产品价格、出厂日期(对象成员)创建; Product 还应该包含如下属性:生产厂家、易碎标记、有效日期(使用对象成员)、颜色、高度。成员函数包括访问和修改这些属性的操作。 在 main( ) 中定义对象,并输出相关信息。
相关类的定义提示:
class Product
{
string name;
double price;
Date deptime;
string factory;
bool easy_break;
Date valtime;
string color;
double high;
public:
........
void output ( );
};
输出函数提示 :
void Product::output ( )
{
cout<
main()函数如下,请复制使用
int main()
{
string s;
cin>>s;
Product p1("car");
Product p2("glass",3.00);
Product p3("pen",5.00,2009,3,14);
p1.SetProduct("car",100000.0,2009,3,14,"nanjing",0,2010,10,14,"red",1.5);
p1.output();
p2.output();
p3.output();
return 0;
}
输入描述
Start
输出描述
Constrcting One....
Constrcting Two....
Constrcting Three....
car 100000
2009-3-14
nanjing 0
2010-10-14
glass 3
2000-1-1
unnamed 0
2000-1-1
pen 5
2009-3-14
unnamed 0
2000-1-1
样例输入1:
Start
样例输出1:
Constrcting One....
Constrcting Two....
Constrcting Three....
car 100000
2009-3-14
nanjing 0
2010-10-14
glass 3
2000-1-1
unnamed 0
2000-1-1
pen 5
2009-3-14
unnamed 0
2000-1-1
#include
using namespace std;
class Date{
int year,month,day;
public:
Date(int y=2000,int m=1,int d=1){
year=y;month=m;day=d;
}
int Getyear(){
return year;
}
int Getmonth(){
return month;
}
int Getday(){
return day;
}
void re(int y,int m,int d){
year=y;month=m;day=d;
}
};
class Product
{
string name;
double price;
Date deptime;
string factory;
bool easy_break;
Date valtime;
string color;
double high;
public:
Product(string n);
Product(string n,double p);
Product(string n,double p,int y,int m,int d);
void SetProduct(string n,double p,int y,int m,int d,string f,bool e,int a,int b,int c,string c1,double h);
void output();
};
void Product::SetProduct(string n,double p,int y,int m,int d,string f,bool e,int a,int b,int c,string c1,double h){
name=n;price=p;deptime.re(y,m,d);factory=f;easy_break=e;valtime.re(a,b,c);color=c1;high=h;
}
Product::Product(string n){
cout<<"Constrcting One...."<>s;
Product p1("car");
Product p2("glass",3.00);
Product p3("pen",5.00,2009,3,14);
p1.SetProduct("car",100000.0,2009,3,14,"nanjing",0,2010,10,14,"red",1.5);
p1.output();
p2.output();
p3.output();
return 0;
}



