• Sábado 14 de Diciembre de 2024, 09:43

Autor Tema:  problema con registro y datos enumerados  (Leído 1027 veces)

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
problema con registro y datos enumerados
« en: Miércoles 16 de Diciembre de 2009, 14:06 »
0
Hola, tengo un problema en el acceso a un dato enumerado...pongo un ejemplo vale?

Tengo clientes en mi hotel, y para cada cliente, nombre, dni y tipo de habitacion.

enum TTipo{Simple,Doble,Suite};

typedef struct
    char nombre[45];
    char dni[10];
    TTIpo habit;

}TCliente;

Esa sería mi estructura, pero el problema es cuando yo quiero meter datos a mi cliente y verlos por pantalla...pongo un ejemplo...
si yo quiero meter un nombre a un cliente haria

TCliente c1;
cout<<"introduce nombre ";
cin.getline(nombre,45-1);
pero como haria para meterle el tipo de habitacion?

y si yo quiero sacar la informacion de un cliente lo haria asi:
cout<<c1.nombre<<endl;

pero como sacaria el tipo de habitacion del cliente?

Espero me ayuden porque no se como asignar ni como mostrar...

Espero ayuda, gracias

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: problema con registro y datos enumerados
« Respuesta #1 en: Miércoles 16 de Diciembre de 2009, 19:33 »
0
El tipo enum no es mas que una variacion especial del tipo entero, cuando defines un enum, estas definiendo constantes enteras automaticas, que por defecto comienzan en el numero 0.

En el ejemplo que mencionas, Simple = 0, Doble = 1, Suite = 2.

Tendrias varias opciones para guardar el valor en la variable habit de tu estructura.

1. Usar una variable adicional de tipo char[], y luego usar condiciones if para guardar el valor correcto:

Código: C++
  1.  
  2.     char tipo[20];
  3.     cout << "Introduce tipo de habitacion ";
  4.     cin.getline(tipo, 20-1);
  5.    
  6.     if (strcmp(tipo, "simple") == 0)
  7.     {
  8.         c1.habit = Simple;
  9.     }
  10.     else
  11.         if (strcmp(tipo, "doble") == 0)
  12.         {
  13.             c1.habit = Doble;
  14.         }
  15.         else
  16.         {
  17.             if (strcmp(tipo, "suite") == 0)
  18.             {
  19.                 c1.habit = Suite;
  20.             }
  21.         }
  22.  
  23.  

2. Usar una variable adicional de tipo int y luego usar un switch para guardar el valor correcto:

Código: C++
  1.  
  2.     int tipo;
  3.     cout << "Introduce tipo de habitacion (0 = simple, 1 = doble, 2 = suite :";
  4.     cin >> tipo;
  5.     switch (tipo)
  6.     {
  7.     case Simple :
  8.         c1.habit = Simple;
  9.         break;
  10.     case Doble :
  11.         c1.habit = Doble;
  12.         break;
  13.     case Suite :
  14.         c1.habit = Suite;
  15.         break;
  16.     }
  17.  
  18.  

3. Usar una variable adicional de tipo entero y luego usar un typecast para guardar el valor directamente en tu variable.

Código: C++
  1.  
  2.     int tipo;
  3.     cout << "Introduce tipo de habitacion (0 = simple, 1 = doble, 2 = suite :";
  4.     cin >> tipo;
  5.         // Typecast de la variable.
  6.         c1.habit = (TTipo) tipo2;
  7.  
  8.  


Para verlos seria algo parecido, puedes usar un switch, y dependiendo el valor de c1.habit, en pantalla muestas el tipo de habitacion escribiendolo manualmente, o sea, cuando c1.habit sea igual a Simple, imprimes con cout la Frase "Habitracion Simple" y asi por el estilo.

Tu decides cual es el metodo que mas te gusta o el que mas te convenga.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================