Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Tona Martínez en 23 Mayo 2019, 09:36 am



Título: Hola,¿alguien me podría decir si estoy enlazando bien las clases en el menú?
Publicado por: Tona Martínez en 23 Mayo 2019, 09:36 am
#include <iostream>
#include <cmath>
#include <iomanip>
#include <string>
#include <conio.h>
#include <stdlib.h>
#include "Carátula.cpp"

using namespace std;

class Tarjeta
{
   private:
      int NumTarjeta;
      float Fondos;
   public:
      Tajeta(int, float);
      void Consultar();
};

class TarjetaDebito: public Tarjeta
{
   private:
      string Propietario;
   public:
      TarjetaDebito(int, float, string);
      void Consultar();
};

class TarjetaCredito: public TarjetaDebito
{
   private:
      float Credito;
   public:
      TarjetaCredito(int, float, string, double);
      void Consultar();
};

class TarjetaMetro: public TarjetaDebito
{
   private:
      double MontoRecarga;
   public:
      TarjetaMetro(int, float, string);
      void Consultar();
      void Meter(float Monto);
      void printMontoFinal();
};

Tarjeta::Tarjeta(int NumTarjeta, float Fondos)
{
   this->NumTarjeta = NumTarjeta;
   this->Fondos = Fondos;
}

void Tarjeta::Consultar()
{
   cout<<"\nLos Fondos actuales de la Tarjeta son de: $"<<Fondos;
}

TarjetaDebito::TarjetaDebito(int NumTarjeta, float Fondos, string Propietario): Tarjeta(NumTarjeta, Fondos)
{
   this->Propietario = Propietario;
}

void TarjetaDebito::Consultar(float Monto)
{
   cout<<"\nLos Fondos actuales de la Tarjeta de Débito son de: $"<<Fondos;
}

TarjetaCredito::TarjetaCredito(int NumTarjeta, float Fondos, string Propietario, double Credito): TarjetaDebito(NumTarjeta, Fondos, Propietario)
{
   this->Credito = Credito;
}

void TarjetaCredito::Consultar(float Monto)
{
   cout<<"\nTu crédito actual en esta Tarjeta de Crédito es de: $"<<Credito;
}

TarjetaMetro::TarjetaMetro(int NumTarjeta, float Fondos, string Propietario): TarjetaDebito(NumTarjeta, Fondos, Propietario){}

void TarjetaMetro::Consultar()
{
   cout<<"\nLos Fondos actuales de la Tarjeta del Metro son de: $"<<Fondos;
}

void TarjetaMetro::Meter()
{
   cout<<"\nIngrese el monto que desea recargar: $";
   cin>>MontoRecarga;
}

void TarjetaMetro::printMontoFinal()
{
   cout<<"\nEl Monto Final de sus Tarjetas es: ";
}

void Menu()
{
   char op, op2, op3;
   cout<<"\n\tBienvenido al STC Metro";
   cout<<"\n¿Qué Operación deseas realizar?";
   cout<<"\n\n\ta)Recargar Saldo a Tarjeta";
   cout<<"\n\n\tb)Transferir saldo entre tarjetas";
   cout<<"\n\n\tc)Salir";
   cin>>op;
   if(op=='a')
   {
      cout<<"\n\tTeclee el número del tipo de tarjeta: ";
      cout<<"\n\n\t1.- Tarjeta de Crédito";
      cout<<"\n\n\t2.- Tarjeta de Débito";
      cin>>op2;
      if(op2=='1')
      {
         cout<<"\nDigite el número de su Tarjeta de Crédito: ";
         cin>>(*(TarjetaCredito.NumTarjeta));
         cout<<"\nSu Crédito disponible es de: $5000";
         cout<<"\nIngrese el número de su tarjeta del metro: ";
         cin>>(*(TarjetaMetro.NumTarjeta));
         cout<<"\nSu Saldo actual en la tarjeta del STC es de: $20";
         cout<<"\nIngrese el monto que desea recargar: $";
         cin>>(*(TarjetaMetro.Monto));
         cout<<"\nFinalmente usted termina con un saldo de: $"<<(*(TarjetaMetro.Monto)) + 20;
      }
      if(op2=='2')
      {
         cout<<"\nDigite el número de su Tarjeta de Débito: ";
         cin>>(*(TarjetaDebito.NumTarjeta));
         cout<<"\nIngrese el número de su tarjeta del metro: ";
         cin>>(*(TarjetaMetro.NumTarjeta));
         cout<<"\nSu saldo disponible en su tarjeta de débito es de: $500";
         cout<<"\nSu saldo en su tarjeta del STC es de: $20";
         cout<<"\nDigite el monto que desea recargar: $";
         cin>>(*(TarjetaMetro.Monto));
         cout<<"\nUsted finaliza con: $"<<(*(TarjetaMetro.Monto)) + 20<<" en su tarjeta del metro";
         cout<<"\nY su saldo de tarjeta de débito es de: $"500 -= (*(TarjetaMetro.Monto));
      }
   }
   if(op=='b')
   {
      cout<<"\nDigite el Número de Tarjeta que va a transferir: ";
      cout<<"\nDigite el Número de Tarjeta a la que se transferirá el monto: ";
   }
}

int main()
{
   Caratula();
   TarjetaMetro TM1;
   Menu();
   TM1.printMontoFinal();
   return 0;
}


Título: Re: Hola,¿alguien me podría decir si estoy enlazando bien las clases en el menú?
Publicado por: Niber en 24 Mayo 2019, 16:16 pm
-Yo veo el codigo algo desordenado, tienes una clase base Tarjeta,  y derivada de esta clase esta TarjetaDebito de la que derivan TarjetaCredito y TarjetaMetro- Las variables son privadas, con lo cual son conocidas dentro de su clase.  O bien haces las funciones de acceso (set y get) o declaras las variables como protected.
-En la funcion menu() intentas hacer todo, pero no has declarado ningun objeto TarjetaCredito, TarjetaMetro....  Creo que seria mas legible si la funcion menu devolviese la opción elegida y luego dependiendo la opción, realizar las operaciones. Recuerda declarar los objetos.


Título: Re: Hola,¿alguien me podría decir si estoy enlazando bien las clases en el menú?
Publicado por: CalgaryCorpus en 24 Mayo 2019, 17:22 pm
Hay varias inconsistencias en los metodos Consultar. Los declaras sin parametros, pero luego en la implementation si reciben.
Ese parametros esta demas.