Hola,¿alguien me podría decir si estoy enlazando bien las clases en el menú?

Iniciado por Tona Martínez, 23 Mayo 2019, 09:36 AM

0 Miembros y 1 Visitante están viendo este tema.

Tona Martínez

#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;
}

Niber

-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.

CalgaryCorpus

Hay varias inconsistencias en los metodos Consultar. Los declaras sin parametros, pero luego en la implementation si reciben.
Ese parametros esta demas.
Aqui mi perfil en LinkedIn, invitame un cafe aqui