[C con Clase] Programa parqueadero

Cesar Cortes Baron cesco17 en hotmail.com
Mie Nov 11 19:17:43 CET 2009


Hola Tengo este codigo con el siguiente problema, en el menu de opciones de 1 a 5, pongo en el switch por defecto un mensaje, todo funciona bien siempre  y cuando la opcion digitada sea un numero, si es otro caracter el programa se bloquea. ahora cambie la variable opcion del switch por  una variable de tipo char pero igual el programa no funciona bien, por favor ayuda. 


este es el codigo: 

#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
void ingresaAuto(int disp);
int saleAuto();
void cuadro(void);
void contadores(int autos); /* Función de la opción 4, imprime cuántas personas entraron y cuántos coches salieron */
int calcDisp(); /* Función que debuelve el numero de indice para la variable placas[11] */
void menu();

char *placas[11] = {"xxxxxx", "xxxxxx", "xxxxxx", "xxxxxx", "xxxxxx", "xxxxxx", "xxxxxx", "xxxxxx", "xxxxxx", "xxxxxx", }; /* Cambiado el arreglo placas por un array de cadenas */

int main()
{
    int cupo=10, contSal=0, i, disp; /* contBol y contSal son los contadores para la opción 4 */
    char opcion=0;

    while (opcion!='5') {
    menu();
    cout<<"\nIngrese el numero de la opcion: ";
     cin>>opcion;

    switch (opcion)
           {
         case 1:
        if (cupo > 0) {
            ingresaAuto(calcDisp());
            cupo--; /* se resta 1 al cupo total, siempre y cuando cupo sea mayor que 0 */
        } else {
            printf("No hay suficiente cupo.\n");
            getch();
        }
        break;

        case 2:  if (cupo<10)
        {
        if (saleAuto()==0) { /* igual que con regBoleto pero esta vez también suma 1 a cupo */
            cupo++;
            contSal++;
              cout<<"Ha salido un auto del parqueadero. \n";
              getch();
        }
        }
          else
        cout<<"No han ingresado autos al parqueadero. "<<endl;
        getch();

        break;
        case 3:
        contadores(contSal);
        break;
         case 4:
        for (i=0; i < 10; i++)
            cout<<"\n Lugar "<< i+1<<" "<< placas[i]<<endl;
           cout<<"\n\n  Lugar mas cercano disponible: "<< calcDisp()+1; /* calcDisp calcula el siguiente lugar donde se guardara el carro, siendo éste el mas bajo disponible */
        getch();
        break;
        case 5:
        break;

        default:
        cout<<"Opcion incorrecta.\n";
        getch();
        break;
         }
    }


}
/* Funciones */

void ingresaAuto(int disp)
{
    char placasTmp[6];
    cout<<"\nIngrese los digitos de la placa del auto: ";
    cin>>placasTmp;
    placas[disp] = (char *) malloc(sizeof placasTmp); /*asigna un bloque de memoria de bytes consecutivos en memoria para almacenar objetos devuelve un puntero generico*/
    strcpy(placas[disp], placasTmp); /* copia la cadena2 en la cadena1 y devuelve un puntero a cadena1*/
}

int saleAuto()
{
    char placas2[20];
    int i;

    cout<<"\nIngrese las placas del auto: ";
    cin>>placas2;

    for (i=0; i<10; i++) {
    if (strcmp(placas2, placas[i]) == 0) {
        strcpy(placas[i], "xxxxxx|");
        return 0;
    }
    }
    cout<<"El numero es incorrecto o no fue registrado";
    getch();
    return 1;
}



void contadores(int autos)
{

    if (autos <= 0) {
    cout<<"No han salido autos.";
    getch();
    } else {
    cout<<"Han salido "<<autos<<" autos del parqueadero."<<endl;
    getch();
    }
}

int calcDisp()
{
    int i;
    for (i=0; i<10; i++) {
    if (strcmp(placas[i], "xxxxxx") == 0)
        return i;
    }
    return -1;
}

void menu()
{
    clrscr();
    cout<<" |========================================================================| \n";
    cout<<" |                     ******    BIENVENIDO    ******                     | \n";
    cout<<" |========================================================================| \n";
    cout<<" |                                                                        | \n";
    cout<<" |                                                                        | \n";
    cout<<" |                1) Registrar los autos en el parqueadero                | \n";
    cout<<" |                2) Sacar autos del parqueadero                          | \n";
    cout<<" |                3) autos que salieron                                   | \n";
    cout<<" |                4) Ver placas ingresadas y espacios diponibles          | \n";
    cout<<" |                5) Salir                                                | \n";
    cout<<" |                                                                        | \n";
    cout<<" |                                                                        | \n";

    cout<<" |========================================================================| \n";
}

 		 	   		  
_________________________________________________________________
News, entertainment and everything you care about at Live.com. Get it now!
http://www.live.com/getstarted.aspx
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091111/fc6dee7e/attachment.html>


Más información sobre la lista de distribución Cconclase