EJERCICIO 4 (Eudis Serrano)

 avatar
user_3711028
c_cpp
9 days ago
5.7 kB
2
Indexable
#include <iostream>
#include <iomanip>
#include <cmath>
#include <ctime>
using namespace std;
const double CantidadTanque = 500, PrecioOmision = 1.80;
class Bomba{
    private:
    double Tanque, Precio;
    public:
    Bomba (double = PrecioOmision, double = CantidadTanque);
    void ObtenerValores();
    double Solicitud (double);
    double PrecioxGalon (int);//Funcion nueva
};
class Persona{//Funcion modificada 
    public:
    Persona(){
        srand(time(NULL));
    }
    int llegada(){
        return (1+rand()%15);
    }
    int galones(){
        return (3+rand()%18);
    }
};
Bomba::Bomba(double PrecioHoy, double InicioTanque){
    Tanque = InicioTanque;
    Precio = PrecioHoy;
}
void Bomba::ObtenerValores(){//funcion modificada para recibir la entrada de datos usando un do while oara evitar errores
    do{
        cout<<endl<<"Indique la cantidad de galones de gasolina dentro del tanque: ";
        cin>>Tanque;
        cout<<"Indique el Precio en dolares: ";
        cin>>Precio;
        if(Tanque<0 || Precio<0){
            cout<<"Asegurese de ingresas un valor positivo..."<<endl;
        }
    } while (Tanque < 0 || Precio < 0);
    //mostrar mensaje con informacion sobre la simulacion
    cout<<endl<<endl<<"La simulacion finalizara al atender 5 clientes o al superar los 30 minutos de inactividad"<<endl;
    cout<<"El tanque de gasolina tiene "<<Tanque<<" galones de gasolina"
    <<endl<<"El precio por galon es "<<setiosflags(ios::showpoint)<<setprecision(2)<<fixed<<Precio<<" Dolares"<<endl;
}
double Bomba::Solicitud(double Surtir){//Modificacion del return, de los mensajes y las instrucciones dentro de la funcion
    double surtido;
    if (Tanque>= Surtir){//Cuando hay suficiente gasolina dentro del tanque para surtir el pedido
        surtido = Surtir;
        Tanque -= Surtir;
        cout<<"El tanque de gasolina aun tiene "<<Tanque<<" Galones";
    } else { //cuando el pedido es mayor a la cantidad de gasolina en el tanque 
        cout<<"No hay suficientes galones de gasolina para surtir esta solicitud"<<endl<<"-La bomba ha solicitado llenar el tanque con 200 galones de gasolina";
        Tanque += (200 - Surtir); //Se le añaden 200 galones mas al tanque y se le resta la cantidad de gasolina que solicito el cliente
        cout<<endl<<"-Se ha surtido la gasolina al cliente \nEl tanque aun tiene "<<Tanque<<" galones de gasolina";
    }
     return Tanque;//Este valor es usado para mostrar cuantos galones degasolina quedaron en el tanque al final de la simulacion
}
double Bomba::PrecioxGalon (int Gg){//Nueva funcion, creada para calcular y mostrar cuantos dolares pago el cliente
    int Galon;
    Galon = Gg;
    cout<<endl<<"El cliente ha realizado un pago de "<<Precio*Gg<<" Dolares";
    return (Precio*Gg);/*este valor es usado para acumular el dinero recibido e ir informando cuanto dinero ha sido recolectado*/
}
int main(){
    Bomba A;
    Persona C1;
    int TiempoTotal = 0, Solicitud = 1, TiempoInactivo, TiempoInactivoCuenta = 0, Simulacion = 30, Galones_Vendidos = 0;
    double DineroRecolectado = 0.0, TanqueGasolina = 0.0, CantidadSolicitar;
    A.ObtenerValores();//Se ingresan los valores del Tanque y el Precio
    cout<<endl;
    cout<<"____________________________________________-Inicio-____________________________________________";
    while(TiempoInactivoCuenta<= Simulacion && Solicitud <= 5){/*El while se detiene cuando el TiempoInactivoCueta llega a 30 o cuando la Solicitud llegaba 5*/
        cout<<endl<<endl<<"                                    -... esperando cliente ...-"<<endl;
        CantidadSolicitar = C1.galones();
        Galones_Vendidos += CantidadSolicitar;/*Se van almacenando cuantos galones han sido vendidos (para mostralo en el resumen)*/
        TiempoInactivo = C1.llegada();
        cout<<"Luego de "<<TiempoInactivo<<" minutos llega el cliente numero "<<Solicitud<<" y realiza una solicitud de "<<CantidadSolicitar<<" galones de gasolina"<<endl;
        TanqueGasolina= A.Solicitud(double(CantidadSolicitar));//Surtir la solicitud
        DineroRecolectado += A.PrecioxGalon(CantidadSolicitar);//Cuanto dinero se ha obtenido hasta el momento
        cout<<endl<<"Hastan el momento hemos recolectado "<<DineroRecolectado<<" Dolares";
        TiempoInactivoCuenta += TiempoInactivo;//Contador del while
        TiempoTotal = TiempoInactivoCuenta+(2*Solicitud);/*Tiempo total dentro de la simulacion, teniendo en cuenta la duracion del servicio*/
        cout<<endl<<"El tiempo inactivo es: "<<TiempoInactivoCuenta<<" minutos"<<endl<<"Llevamos "<<TiempoTotal<<" minutos dentro de la simulacion \n(teniendo en cuenta que cada servicio tiene una duracion de 2 minutos)"<<endl;
        Solicitud++;
        
    }
    if(TiempoInactivoCuenta >= Simulacion){
    cout<<endl<<endl<<"___________-El tiempo inactivo supero los 30 min, esta simulacion ha sido finalizada-___________";
    } else {
        cout<<endl<<  "_-El numero de solicitudes ha alcanzado el limite propuesto, esta simulacion ha sido finalizada-_";
    }
    cout<<endl<<endl<<"------------------- RESUMEN --------------------"<<endl<<"| "<<setw(5)<<Solicitud-1<<"  Clientes recibidos                    |"
    <<endl<<"| "<<setw(5)<<Galones_Vendidos<<"  Galones vendidos                      |"<<endl<<"| "<<setw(6)<<DineroRecolectado<<" Dinero recolectado                    |"
    <<endl<<"| "<<setw(6)<<TanqueGasolina<<" Galones de gasolina dentro del tanque |"<<endl<<"| "<<setw(5)<<TiempoTotal<<"  Minutos dentro de la simulacion       |"
    <<endl<<"------------------------------------------------"<<endl;
    cout<<"_FUAKATA!_"<<endl;//FUAKATA
    return 0;
}
Leave a Comment