Fueler class

Question:

Write a class called fueler that can keep track of the fuel and mileage of a vehicle. Include private member variables to track the amount of fuel that the vehicle has consumed and the distance that the vehicle has traveled. You may choose whatever units you like (for example, fuel could be measured in U.S. gallons or Imperial gallons or liters), but be sure to document your choices at the points where you declare the variables.
The class should have a constructor that initialize these variables to zero. Include a member function that can later reset both variables to zero. There are two different modification member functions to add a given amount to the total distance driven (one has a miles parameter, and the other has a kilometers parameter); similarly, there are three member functions to a given amount to the total fuel consumed (with different units for the amount of fuel).
The class has two const member functions to retrieve the total distance driven (in miles or km), three functions for the fuel consumed (in U.S. gallons, Imperial gallons, or liters) and four for the fuel mileage (in U.S. mpg, Imperial mpg, km per liters, or liters per 100 km).

My answer:

fueler.h

#pragma once

class fueler{
public:
    fueler(){
        fuel = distance = 0;
    };
    void reset_fueler();
    void add_miles(double miles);
    void add_kilometers(double kilometers);
    void add_us_gallons(double usgallons);
    void add_im_gallons(double imgallons);
    void add_liters(double liters);
    void fueler_info();
private:
    double get_miles() const;
    double get_km() const;
    double get_usgallons() const;
    double get_imgallons() const;
    double get_liters() const;
    double get_usmpg() const;
    double get_immpg() const;
    double get_km_per_liters() const;
    double get_liters_per_100km() const;
    // 1 U.S. gallon = 3.785 liters
    // 1 Imperial gallon = 4.546 liters
    double fuel;// liters
    // 1 mile = 1.609 km
    double distance;// kilometers
};

fueler.cpp

#include "fueler.h"
#include <iostream>
#include <cassert>

using namespace std;

void fueler::reset_fueler(){
    fuel = distance = 0;
}

void fueler::add_miles(double miles){
    assert(miles >= 0);
    distance += miles * 1.609;
}

void fueler::add_kilometers(double kilometers){
    assert(kilometers >= 0);
    distance += kilometers;
}

void fueler::add_us_gallons(double usgallons){
    assert(usgallons >= 0);
    fuel += usgallons * 3.785;
}

void fueler::add_im_gallons(double imgallons){
    assert(imgallons >= 0);
    fuel += imgallons * 4.546;
}

void fueler::add_liters(double liters){
    assert(liters >= 0);
    fuel += liters;
}

void fueler::fueler_info(){
    cout << "Fueler Status: " << endl;
    cout << "distance = " << get_km() << " kilometers = " << get_miles() 
         << " miles." << endl;
    cout << "fuel = " << get_liters() << " liters = " << get_usgallons() 
         << " U.S. gallons = " << get_imgallons() << " Imperial gallons." << endl;
    cout << "fuel mileage = " << get_usmpg() << " U.S. mpg = " << get_immpg() 
         << " U.S. mpg = " << get_km_per_liters() << " km per liters." << endl;
    cout << "fuel mileage = " << get_liters_per_100km() << " liters per 100 km." << endl;
}

double fueler::get_miles() const{
    return distance / 1.609;
}

double fueler::get_km() const{
    return distance;
}

double fueler::get_usgallons() const{
    return fuel / 3.785;
}

double fueler::get_imgallons() const{
    return fuel / 4.546;
}

double fueler::get_liters() const{
    return fuel;
}

double fueler::get_usmpg() const{
    return (distance / 1.609) / (fuel / 3.785);
}

double fueler::get_immpg() const{
    return (distance / 1.609) / (fuel / 4.546);
}

double fueler::get_km_per_liters() const{
    return distance / fuel;
}

double fueler::get_liters_per_100km() const{
    if(get_km_per_liters() == 0) return 0;
    return 100 / get_km_per_liters();
}

main.cpp

#include "fueler.h"
#include <iostream>

using namespace std;

int main(){
    fueler a;
    a.add_im_gallons(100);
    a.add_kilometers(3214);
    a.add_liters(49);
    a.add_miles(3269);
    a.add_us_gallons(120);
    a.fueler_info();
    cout << "****** Now reset ******" << endl;
    a.add_im_gallons(60);
    a.add_kilometers(1200);
    a.add_liters(100);
    a.add_miles(4210);
    a.add_us_gallons(33);
    a.fueler_info();   
}

结果:

Fueler Status:
distance = 8473.82 kilometers = 5266.51 miles.
fuel = 957.8 liters = 253.052 U.S. gallons = 210.691 Imperial gallons.
fuel mileage = 20.812 U.S. mpg = 24.9964 U.S. mpg = 8.84717 km per liters.
fuel mileage = 11.303 liters per 100 km.
****** Now reset ******
Fueler Status:
distance = 16447.7 kilometers = 10222.3 miles.
fuel = 1455.46 liters = 384.535 U.S. gallons = 320.164 Imperial gallons.
fuel mileage = 26.5836 U.S. mpg = 31.9284 U.S. mpg = 11.3007 km per liters.
fuel mileage = 8.84904 liters per 100 km.

Reference:

整理自 Data Structures and Other Objects Using C++ ( Fourth Edition ) Michael Main, Walter Savitch. p125

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Memories off

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值