Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problemas con regreso al menu

Estas en el tema de Problemas con regreso al menu en el foro de C/C++ en Foros del Web. Buenas tardes.. tengo un problema con este programa que les colocare acontinuacion, ya que el menu me corre de lo mejor.. pero al terminar cada ...
  #1 (permalink)  
Antiguo 02/03/2010, 12:54
 
Fecha de Ingreso: marzo-2010
Mensajes: 1
Antigüedad: 14 años, 1 mes
Puntos: 0
Problemas con regreso al menu

Buenas tardes.. tengo un problema con este programa que les colocare acontinuacion, ya que el menu me corre de lo mejor.. pero al terminar cada funcion del case no se como hacer que pregunte si el usuario desea regresar al menu principal y si el desea regresar q pulse S y asi muestre el menu principal de nuevo..
Espero me puedan ayudar.. se los agradeceria demasiado..

void main()
{
int i, op, num,no_prod; // declarando variables a utilizar

{
clrscr();
// Formando el menu para la gestion de datos del inventario
cout<<"\t\t*****MENU DE CONTROL DE INVENTARIOS*****"<<endl<<endl;
cout<<"\t\t\t1.-Ingresar Datos "<<endl;
cout<<"\t\t\t2.-Realizar consultas "<<endl;
cout<<"\t\t\t3.-Desplegar Informacion "<<endl;
cout<<"\t\t\t4. Modificacion"<<endl;
cout<<"\t\t\t5.-Borrar"<<endl;
cout<<"\t\t\t6.-Salir"<<endl<<endl;
cout<<"\t\tINGRESE CUALQUIERA DE LAS OPCIONES: ";
cin>>op;
}

switch(op)
{
// Opcion 1 = Ingreso de registros
case 1:
clrscr(); // limpia la pantalla
cout << "\n\rINGRESO DE DATOS";
alias=fopen("PRODUCTO.SEC","rb+"); // abre el archivo para lectura
if(alias==NULL)// si alias es nulo
alias=fopen("PRODUCTO.SEC","wb"); // crea archivo para E/S
cout << "\n\n\n\rNumero de producto: "; cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias); // cantidad de registros que se desean grabar
while(!feof(alias))//comprueba el indicador de final de fichero
{
if(Registro.no_prod==no_prod) // si el no de producto ya existe despliega que el registro esta duplicado
{
cout << "\n\n\n\rRegistro duplicado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
fclose(alias); // cierre de archivo
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias); // cuenta elementos dentro del archivo
}
cout << "\n\rDescripcion: "; gets(Registro.descrip);
cout << "\n\rCantidad : "; cin >> Registro.cantidad;
cout << "\n\rPrecio : "; cin >> Registro.precio;
Registro.no_prod=no_prod; // compara no. producto sino son iguales escribe el nuevo producto
fwrite(&Registro,sizeof(Registro),1,alias); // escritura de archivo
fclose(alias); // cierre de archivo
cout << "\n\n\n\rProducto registrado !!!" <<endl; // muestra mensaje del registro exitoso
getch();
break;

// Opcion 2: Consulta de inventario
case 2:
clrscr();
cout << "\n\rCONSULTA DE LOS DATOS INGRESADOS";
alias=fopen("PRODUCTO.SEC","rb"); // abre el archivo para lectura
if(alias==NULL) // si alias es nulo, muestra mensaje de que el archivo no existe
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rNumero de producto: "; cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias); // cuenta elementos dentro del archivo
while(!feof(alias)) //comprueba el indicador de final de fichero
{
if(Registro.no_prod==no_prod) // si el no. producto existe, despliega los datos del producto
{
cout << "\n\rNo_Prod Descripcion Cantidad Precio ";
cout << "\n\r----------------------------------------------------------";
printf("\n\r%1d\t%10s\t%2d\t\t$%2.2f\t%c",Registro .no_prod,Registro.descrip,
Registro.cantidad,Registro.precio);
fclose(alias); // cierre de archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias); // cuenta elementos dentro del archivo
}
cout << "\n\rNo se encuentra ese registro !!!";
fclose(alias); // cierre de archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
break;

// Opcion 3: Lista los productos del inventario
case 3:
clrscr();
cout << "\n\rLISTADO DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb"); // abre el archivo para lectura
if(alias==NULL) // si alias es nulo, muestra mensaje de que el archivo no existe
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
// Lista todos los productos que se encuentren dentro del archivo
cout << "\n\rNo_Prod Descripcion Cantidad Precio ";
cout << "\n\r---------------------------------------------------------";
fread(&Registro,sizeof(Registro),1,alias); // cuenta elementos dentro del archivo
while(!feof(alias)) //comprueba el indicador de final de fichero
{
printf("\n\r%2d\t%10s\t%2d\t\t$%1.2f\t%c",Registro .no_prod,Registro.descrip,
Registro.cantidad,Registro.precio);
fread(&Registro,sizeof(Registro),1,alias); // cuenta elementos dentro del archivo
}
fclose(alias); // cierre de archivo
cout << "\n\r----------------------------------------------------------";
cout << "\n\rFin del listado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
break;

// Opcion 4: Modificacion de productos
case 4:
clrscr();
cout << "\n\rMODIFICACION DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb+"); // abre el archivo para lectura
if(alias==NULL) // si alias es nulo, muestra mensaje de que el archivo no existe
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rNumero de producto: ";
cin >> no_prod;
cout << "\n\rNo_Prod Descripcion Cantidad Precio ";
cout << "\n\r---------------------------------------------------------";
fread(&Registro,sizeof(Registro),1,alias); // cuenta elementos dentro del archivo
while(!feof(alias)) //comprueba el indicador de final de fichero
{
if(Registro.no_prod==no_prod)
{
printf("\n\r%3d\t%10s\t%3d\t\t$%2.2f\t%c",Registro .no_prod,Registro.descrip,Registro.cantidad,Regist ro.precio);
// se deben anotar los nuevo datos (descripcion, cantidad y precio) del producto
cout << "\n\n\n\rAnote los nuevos datos:";
cout << "\n\rDescripcion: "; gets(Registro.descrip);
cout << "\n\rCantidad : "; cin >> Registro.cantidad;
cout << "\n\rPrecio : "; cin >> Registro.precio;
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET);// situa el puntero en el dato a modificar
fwrite(&Registro,sizeof(Registro),1,alias); // escritura de archivo,graba el registro en la dirección física
fclose(alias); // cierre de archivo
cout << "\n\n\n\rRegistro modificado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias); // cuenta elementos dentro del archivo
cout << "\n\rNo se encuentra ese registro !!!";
fclose(alias); // Cierra el archivo
getch();
break;

// Opcion 5: borrado de productos
case 5:
clrscr();
cout << "\n\rBORRAR REGISTROS";
alias=fopen("PRODUCTO.SEC","rb+"); // abre el archivo para lectura
if(alias==NULL) // si alias es nulo, muestra mensaje de que el archivo no existe
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rNumero de producto: ";
cin >> no_prod;

fread(&Registro,sizeof(Registro),1,alias); // cuenta elementos dentro del archivo
while(!feof(alias)) //comprueba el indicador de final de fichero
{
if(Registro.no_prod==no_prod)
{
cout << "\n\rNo_Prod Descripcion Cantidad Precio ";
cout << "\n\r---------------------------------------------------------";
printf("\n\r%1d\t%10s\t%1d\t\t$%1.2f\t%c",Registro .no_prod,Registro.descrip,Registro.cantidad,Regist ro.precio);
Registro.no_prod=0;
strcpy(Registro.descrip,"");
Registro.cantidad=0;
Registro.precio=0.0;
do {
cout << "\n\n\rEsta seguro que desea borrarlo? [S/N] ---> ";
op=toupper(getche());
}while(op!='S' && op!='N'); // si el usuario desea borrarlo al pulsar s el registro es eliminado del archivo
if(op=='S')
{
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET); // situa el puntero en el dato a modificar
fwrite(&Registro,sizeof(Registro),1,alias); // escritura de archivo
cout << "\n\n\n\rRegistro eliminado !!!";
}
fclose(alias); // cierre de archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias); // cuenta elementos dentro del archivo
}
cout << "\n\rNo se encuentra ese registro !!!";
fclose(alias); // cierre de archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
break;
}

// Opcion de salida del programa
case 6:
break;
}

}
  #2 (permalink)  
Antiguo 05/03/2010, 08:58
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años
Puntos: 20
Respuesta: Problemas con regreso al menu

Podes probar con un while que "encierre" todo tu programa, osea, lo abris arriba del menu y lo cerras cuando finaliza el switch... entonces, cuando sale del switch le preguntas al usuario si quiere volver al menu... algo asi...

Código C++:
Ver original
  1. void main()
  2. {
  3.              int i, op, num,no_prod; // declarando variables a utilizar
  4.              char menu='S'; // para que entre por lo menos una vez al while
  5.  
  6.              while(menu=='S') {
  7.  
  8.                      //aca pones tu menu
  9.  
  10.                      // y seguis con el switch
  11.  
  12.                      // cuando termina el switch pones:
  13.  
  14.                     cout<<"ingrese S para volver al menu";
  15.                     cin>>menu; // vuelve al while y si ingreso S entra, y sino termina el programa
  16.                     }                  
  17.  
  18. }

Espero te sirva, es solo una opcion mas... seguro hay otras mejores, como por ejemplo ordenar todo tu programa con funciones o mandarlo directamente al menu sin que el usuario pregunte y una vez en el menu el decide si quiere salir del programa o hacer algo.

Saludos

Etiquetas: regreso
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:02.