C++ 使用C+更新总值+;面向对象设计
我的任务是计算直升机所需的燃油量。直升机可以执行四种操作:C++ 使用C+更新总值+;面向对象设计,c++,oop,C++,Oop,我的任务是计算直升机所需的燃油量。直升机可以执行四种操作: 持有 提高 降落 直的 用户通过输入参数选择直升机的动作。用户可以根据需要选择任意多个操作。最后,根据用户的参数和操作选择计算总燃油量。我需要用面向对象的方法创建这个系统 以下是我迄今为止所做的工作: #include <iostream> #include <stdio.h> using namespace std; class FlyingMode { protected: float t
- 持有
- 提高
- 降落
- 直的
#include <iostream>
#include <stdio.h>
using namespace std;
class FlyingMode {
protected:
float time, fuel_rate, start, end, pace, distance;
float total;
public:
FlyingMode(float a=0, float b=0, float c=0,
float d=0, float e=0, float f=0){
time = a;
fuel_rate = b;
start = c;
end = d;
pace = e;
distance = f;
total = 0;
}
virtual int calcFuel(){
return 0;
}
};
class Holding: public FlyingMode{
public:
Holding(float a=0, float b=0, float c=0,
float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
int calcFuel(){
total = (time * fuel_rate * 60);
return total;
}
};
class Raising: public FlyingMode{
public:
Raising(float a=0, float b=0, float c=0,
float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
int calcFuel (){
if(start < end && pace != 0 ){
total = (end - start)/pace * fuel_rate;
return (end - start)/pace * fuel_rate;
}else{
return 0;
}
}
};
class Landing: public FlyingMode{
public:
Landing(float a=0, float b=0, float c=0,
float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
int calcFuel (){
if(start > end && pace != 0 ){
total = (start - end)/pace * fuel_rate;
return (start - end)/pace * fuel_rate;
}else{
return 0;
}
}
};
class Straight: public FlyingMode{
public:
Straight(float a=0, float b=0, float c=0,
float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
int calcFuel (){
if(distance != 0 || pace != 0 ){
total = distance/pace * fuel_rate;
return distance/pace * fuel_rate;
}else{
return 0;
}
}
};
// Main function for the program
int main( ){
float a=0, b=0;
float c=0, d=0, e=0, f=0;
float total = 0;
char op;
Holding hold;
Raising raise;
Landing land;
Straight straight;
while(op != 'x') {
cout << "Enter the move : " << endl;
cout << "1 ---> Holding Flight" << endl;
cout << "2 ---> Raising" << endl;
cout << "3 ---> Landing " << endl;
cout << "4 ---> Straight Flight " << endl;
cout << "5 ---> Calculate fuel" << endl;
cout << "x ---> Exit " << endl;
op = std::getchar();
if(op == '1') {
cout << "Enter time : ";
cin >> a;
cout << "Enter fuel rate: ";
cin >> b;
}
if(op == '2') {
cout << "Enter starting altitude: ";
cin >> c;
cout << "Enter ending altitude: ";
cin >> d;
cout << "Enter raising pace: ";
cin >> e;
cout << "Enter fuel rate: ";
cin >> f;
}
if(op == '3') {
cout << "Enter starting altitude: ";
cin >> c;
cout << "Enter ending altitude: ";
cin >> d;
cout << "Enter landing pace: ";
cin >> e;
cout << "Enter fuel rate: ";
cin >> b;
}
if(op == '4') {
cout << "Enter ending altitude: ";
cin >> d;
cout << "Enter starting altitude: ";
cin >> c;
cout << "Enter fuel rate: ";
cin >> b;
}
if(op == '5') {
FlyingMode *mode;
hold = Holding(a, b, 0, 0, 0, 0);
raise = Raising(0, f, c, d, e, 0);
land = Landing(0, b, d, c, e, 0);
straight = Straight(0, b, c, d, 0, 0);
//store holding address
//call holding fuel
mode = &hold;
float hold_result = mode -> calcFuel();
//call raising fuel
mode = &raise;
float raise_result = mode -> calcFuel();
//call landing fuel
mode = &land;
float land_result = mode -> calcFuel();
//call straight fuel
mode = &straight;
float str_result = mode -> calcFuel();
//calculate total
/*cout << "hold_result" << hold_result;
cout << "raise_result" << raise_result;
cout << "land_result" << land_result;
cout << "str_result" << str_result;*/
total = hold_result + raise_result + land_result + str_result;
cout <<"Total required fuel : "<< total << " kg/second "<< endl;
}
if(op == 'x') {
cout << "System will exit..." << endl;
return 0;
}
else {
//if(op==(1|2|3|4|5)){}
//else cout << "Wrong selection." << endl;
}
}
return 0;
}
#包括
#包括
使用名称空间std;
类飞行模式{
受保护的:
浮动时间、燃油率、开始、结束、速度、距离;
浮动总额;
公众:
飞行模式(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0){
时间=a;
燃油率=b;
开始=c;
end=d;
配速=e;
距离=f;
总数=0;
}
虚拟整数calcFuel(){
返回0;
}
};
上课时间:公共飞行模式{
公众:
保持(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
总计=(时间*燃油率*60);
返回总数;
}
};
升班:公共飞行模式{
公众:
上升(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
如果(开始<结束和速度!=0){
总计=(结束-开始)/速度*燃油率;
返回(结束-开始)/速度*燃油率;
}否则{
返回0;
}
}
};
类着陆:公共飞行模式{
公众:
着陆(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
如果(开始>结束和速度!=0){
总计=(开始-结束)/速度*燃油率;
返回(开始-结束)/速度*燃油率;
}否则{
返回0;
}
}
};
普通舱:公共飞行模式{
公众:
直线(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
如果(距离!=0 | |速度!=0){
总计=距离/速度*燃油率;
返回距离/速度*燃油率;
}否则{
返回0;
}
}
};
//程序的主要功能
int main(){
浮点数a=0,b=0;
浮点数c=0,d=0,e=0,f=0;
浮动总数=0;
char op;
持有;
提高;
登陆地;
笔直;
而(op!=“x”){
cout d;
cout>e;
cout>b;
}
如果(op='4'){
cout>d;
cout>c;
cout>b;
}
如果(op='5'){
飞行模式*模式;
保持=保持(a,b,0,0,0,0);
上升=上升(0,f,c,d,e,0);
着陆=着陆(0,b,d,c,e,0);
直线=直线(0,b,c,d,0,0);
//商店持有地址
//呼叫保持燃料
模式=&hold;
浮动保持结果=模式->计算燃料();
//呼叫提升燃料
模式=&raise;
浮动上升_结果=模式->计算燃料();
//呼叫着陆燃料
模式=&land;
浮动着陆结果=模式->计算燃料();
//直接燃油
模式=&笔直;
float str_result=mode->calcFuel();
//计算总数
/*cout首先,尽可能使用switch,而不是which,这样会使代码更快,不要重复自己的操作。我看到重复的指令
这里的快速修复方法是,我建议您将所有变量移动到while循环中,这样它们就不会被覆盖;或者,如果这是您的意图,那么可以使用更多的额外变量,这样它们将被唯一地分配给每个cin语句。但是,您仍然应该改进代码设计。您只在op为5时计算燃料。所以仅计算最后一个操作。每次用户输入操作时,您必须计算总计。
我已经修改了代码。检查它是否有效,并将其标记为答案,以便可以关闭该问题
#include <iostream>
#include <stdio.h>
using namespace std;
class FlyingMode {
protected:
float time, fuel_rate, start, end, pace, distance;
float total;
public:
FlyingMode(float a=0, float b=0, float c=0,
float d=0, float e=0, float f=0){
time = a;
fuel_rate = b;
start = c;
end = d;
pace = e;
distance = f;
total = 0;
}
virtual int calcFuel(){
return 0;
}
};
class Holding: public FlyingMode{
public:
Holding(float a=0, float b=0, float c=0,
float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
int calcFuel(){
total = (time * fuel_rate * 60);
return total;
}
};
class Raising: public FlyingMode{
public:
Raising(float a=0, float b=0, float c=0,
float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
int calcFuel (){
if(start < end && pace != 0 ){
total = (end - start)/pace * fuel_rate;
return (end - start)/pace * fuel_rate;
}else{
return 0;
}
}
};
class Landing: public FlyingMode{
public:
Landing(float a=0, float b=0, float c=0,
float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
int calcFuel (){
if(start > end && pace != 0 ){
total = (start - end)/pace * fuel_rate;
return (start - end)/pace * fuel_rate;
}else{
return 0;
}
}
};
class Straight: public FlyingMode{
public:
Straight(float a=0, float b=0, float c=0,
float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
int calcFuel (){
if(distance != 0 || pace != 0 ){
total = distance/pace * fuel_rate;
return distance/pace * fuel_rate;
}else{
return 0;
}
}
};
// Main function for the program
int main( ){
float a=0, b=0;
float c=0, d=0, e=0, f=0;
float total = 0;
char op;
Holding hold;
Raising raise;
Landing land;
Straight straight;
while(op != 'x') {
cout << "Enter the move : " << endl;
cout << "1 ---> Holding Flight" << endl;
cout << "2 ---> Raising" << endl;
cout << "3 ---> Landing " << endl;
cout << "4 ---> Straight Flight " << endl;
cout << "5 ---> Calculate fuel" << endl;
cout << "x ---> Exit " << endl;
cin>>op;
cout<<"op="<<op<<endl;
if(op == '1') {
cout << "Enter time : ";
cin >> a;
cout << "Enter fuel rate: ";
cin >> b;
}
else if(op == '2') {
cout << "Enter starting altitude: ";
cin >> c;
cout << "Enter ending altitude: ";
cin >> d;
cout << "Enter raising pace: ";
cin >> e;
cout << "Enter fuel rate: ";
cin >> f;
}
else if(op == '3') {
cout << "Enter starting altitude: ";
cin >> c;
cout << "Enter ending altitude: ";
cin >> d;
cout << "Enter landing pace: ";
cin >> e;
cout << "Enter fuel rate: ";
cin >> b;
}
else if(op == '4') {
cout << "Enter ending altitude: ";
cin >> d;
cout << "Enter starting altitude: ";
cin >> c;
cout << "Enter fuel rate: ";
cin >> b;
}
else if(op == '5') {
cout <<"Total required fuel : "<< total << " kg/second "<< endl;
}
else if(op == 'x') {
cout << "System will exit..." << endl;
return 0;
}
else {
//if(op==(1|2|3|4|5)){}
//else cout << "Wrong selection." << endl;
continue;
}
FlyingMode *mode;
hold = Holding(a, b, 0, 0, 0, 0);
raise = Raising(0, f, c, d, e, 0);
land = Landing(0, b, d, c, e, 0);
straight = Straight(0, b, c, d, 0, 0);
//store holding address
//call holding fuel
mode = &hold;
float hold_result = mode -> calcFuel();
//call raising fuel
mode = &raise;
float raise_result = mode -> calcFuel();
//call landing fuel
mode = &land;
float land_result = mode -> calcFuel();
//call straight fuel
mode = &straight;
float str_result = mode -> calcFuel();
//calculate total
/*cout << "hold_result" << hold_result;
cout << "raise_result" << raise_result;
cout << "land_result" << land_result;
cout << "str_result" << str_result;*/
total = total+hold_result + raise_result + land_result + str_result;
cout <<"Total required fuel : "<< total << " kg/second "<< endl;
}
return 0;
}
#包括
#包括
使用名称空间std;
类飞行模式{
受保护的:
浮动时间、燃油率、开始、结束、速度、距离;
浮动总额;
公众:
飞行模式(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0){
时间=a;
燃油率=b;
开始=c;
end=d;
配速=e;
距离=f;
总数=0;
}
虚拟整数calcFuel(){
返回0;
}
};
上课时间:公共飞行模式{
公众:
保持(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
总计=(时间*燃油率*60);
返回总数;
}
};
升班:公共飞行模式{
公众:
上升(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
如果(开始<结束和速度!=0){
总计=(结束-开始)/速度*燃油率;
返回(结束-开始)/速度*燃油率;
}否则{
返回0;
}
}
};
类着陆:公共飞行模式{
公众:
着陆(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
如果(开始>结束和速度!=0){
总计=(开始-结束)/速度*燃油率;
返回(开始-结束)/速度*燃油率;
}否则{
返回0;
}
}
};
全班:酒吧