• Domingo 22 de Diciembre de 2024, 16:18

Autor Tema:  Realizar un Menu  (Leído 2943 veces)

Sh!ky Drákula

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Realizar un Menu
« en: Miércoles 17 de Marzo de 2004, 03:03 »
0
Esta es la estructura que tengo en un programa básico, pero mi problema radica en que no puedo hacer que regrese al inicio después de haber visitado cualquier apartado de mi menú...transcribo la idea:

program examen;
uses crt;
var
   pac:char;
   po,I:integer;
BEGIN
CLRSCR; (*INICIA MARCO*)
    I:=0;
    while I<78 do
    begin
    I:=I+1;
    gotoxy(I,1);writeln(chr(1));
    gotoxy(I,20);writeln(chr(1));
    end;
    I:=0;
    while I<20 do
    begin
    I:=I+1;
    gotoxy(1,I);writeln(chr(1));
    gotoxy(78,I);writeln(chr(1));
    end;   (*FIN DE MARCO*)

     gotoxy(25,2);writeln('  B I E N V E N I  D O  ¯');
     gotoxy(5,4);writeln('¿Qué‚ paquete desea ver?');
     gotoxy(5,6);writeln('PAQUETE 1');
     gotoxy(5,8);writeln('PAQUETE 2');
     gotoxy(5,10);writeln('PAQUETE 3');
     gotoxy(5,12);writeln('PAQUETE 4');
     gotoxy(5,17);writeln('INTRODUZCA EL PAQUETE...');
     gotoxy(5,18);readln(pac);
     delay(1000);
     clrscr;

      CLRSCR; (*INICIA MARCO2*)
     I:=0;
     while I<78 do
     begin
     I:=I+1;
     gotoxy(I,1);writeln(chr(1));
     gotoxy(I,20);writeln(chr(1));
     end;
     I:=0;
     while I<20 do
     begin
     I:=I+1;
     gotoxy(1,I);writeln(chr(1));
     gotoxy(78,I);writeln(chr(1));
     end;   (*FIN DE MARCO2*)

     case (pac) of
     '1':
     begin
     gotoxy(15,4);writeln('PAQUETE 1');
     gotoxy(15,6);writeln('Hamburguesa Chica con queso');
     gotoxy(15,8);writeln('Refresco Chico');
     gotoxy(15,10);writeln('Papas chicas c/s queso');
     gotoxy(25,13);writeln('COSTO TOTAL $35');
     gotoxy(5,15);writeln('1. Ver otro paquete');
     gotoxy(5,16);writeln('2. Ordenar ahora');
     gotoxy(5,17);readln(po);

Aquí es el problema, pues como estoy trabajando de esta manera, no tengo idea de cómo hacerle para que en dado caso la respuesta del incisio 1, si es positiva, me mande de nuevo al inicio...y ahora, respecto a la opción 2, me limpie la pantalla y hayan campos de texto en los cuales podamos avanzar y/o retroceder para insertar o eliminar datos...por ejemplo...en ordenar ahora, (opción 2), en dado caso de que se pidan 2 paquetes del número 4, y 5 del número 1, ¿cómo hacerle para que me haga las respectivas operaciones si son datos diferentes?
     
     end;


-----PROGRAM TRUNQUED-----

Adjunto otra versión del mismo programa, pero con el mismo problema

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: Realizar un Menu
« Respuesta #1 en: Miércoles 17 de Marzo de 2004, 19:43 »
0
No se si te comprendí bién cuál es tu problema así que te diré lo que interpreté que quieres hacer.
Quieres que si estas dentro de una de las opciones del menú principal, al salir de esta te regrese de nuevo al principal. Pero debo decirte que para hacer eso es mejor comenzar a usar procedimientos porque Pascal no tiene GOTO (salto incondicional), la idea sería:

procedure MenuPrincipal;
begin
...
end;

procedure Menu1;
begin
...
end;

procedure Menu2;
begin
...
end;

procedure Menu3;
begin
...
end;

begin
repeat
MenuPrincipal;
case Opcion of
1:Menu1;
2:Menu2;
3:Menu3;
end;
until salir=true;
end.

BlackTigerX

  • Miembro activo
  • **
  • Mensajes: 92
    • Ver Perfil
Re: Realizar un Menu
« Respuesta #2 en: Jueves 18 de Marzo de 2004, 15:57 »
0
asi es... bien estructurado y "educado"

lo unico que me inquieto fue eso de que "Pascal no tiene GOTO (salto incondicional)"... no se que version usas, pero Pascal siempre ha tenido GOTO... claro que no se recomienda su uso (excepto en casos muy especiales)
BlackTigerX

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: Realizar un Menu
« Respuesta #3 en: Domingo 21 de Marzo de 2004, 17:20 »
0
BlackTigerX:
  Pascal no tiene GOTO en el sentido tradicional, la sentencia Goto de Pascal está condicionada a su vez para salto dentro de un mismo bloque begin... end, además depende de la clausula Label que sirve solo para declarar las etiquetas de salto incondicional. En definitiva, en Pascal no puedes saltar "a donde se te de la gana" para decirlo sin vueltas.

bet@

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Realizar un Menu
« Respuesta #4 en: Miércoles 31 de Marzo de 2004, 20:37 »
0
yo te aconsejo ke uses una programacion mas estructurada y no utilices el goto, porke eso te acabara liando y no es nada claro. :kicking:
bye
Todo sobre el emule (preguntas, descargas, ...)
Tb informacion de peliculas ke se estrenan, juegos y enlaces.
Informate en:
Emulea_Foro
y Emulea_Web

Attakinsky

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Realizar un Menu
« Respuesta #5 en: Lunes 3 de Mayo de 2004, 17:20 »
0
Alli te va un ejemplo de menús que regresan a otros menús. El nomgre de usuario es administrador y a contrraseña es 123

Si el fdelay del uses te da problema quitáselo. Aquí en internet aparecen unos signos raros pero en modo DOS deben aparecer los ASCII adecuados para marcos.

Tambien va como archivo adjunto.

program ProyectoFinal;
uses dos,fdelay,crt;
var
  menup:char;
  exit:boolean;

{----------------------------------------------------------------------------}
{ dibuja el marco del men£ de opciones del programa }
procedure MenuOpciones;
var x,y:byte;
opcion:char;
begin
clrscr;
{ bordes horizontales y verticales }
textcolor(13);
 for y:= 11 to 17 do
  begin
  gotoxy(24,y); write('º');
 end;
 for y:= 11 to 17 do
  begin
  gotoxy(55,y); write('º');
 end;
 for x:= 25 to 55 do
  begin
  gotoxy(x,10); write('Í');
 end;
 for x:= 25 to 55 do
  begin
  gotoxy(x,18); write('Í');
 end;
 for x:= 25 to 55 do
  begin
  gotoxy(x,12); write('Í');
 end;
 for x:= 25 to 55 do
  begin
  gotoxy(x,16); write('Í');
 end;
{ conectores de esquina e intersecci¢n }
gotoxy(24,12); write('Ì'); gotoxy(55,12); write('¹');
gotoxy(55,10); write('»'); gotoxy(24,18); write('È');
gotoxy(24,10); write('É'); gotoxy(55,18); write('¼');
gotoxy(24,16); write('Ì'); gotoxy(55,16); write('¹');
{ textos de t¡tulo y opci¢n m£ltiple }
textcolor(03); GOTOXY(26,9);
write('PROGRAMA ®CONTROL DE BODEGA¯');
textcolor(08);
gotoxy(26,11); write('M E N U  D E  O P C I O N E S');
gotoxy(26,13); write('1 - Ingresar al programa');
gotoxy(26,15); write('2 - salir');
gotoxy(26,17); write('Seleccione una opci¢n: '); opcion:=readkey;
 case opcion of
  '1': write('dlgIngresa');
  '2': exit:=true;
 end;
end;


{----------------------------------------------------------------------------}
{ dibuja el cuadro de contrase¤a }
procedure dlgIngresar;
var
  x,y,i:integer;
  clave,usuario,letra:string;
  tecla:string[1];
  listo:boolean;
begin
clrscr;
{ bordes horizontales y verticales }
textcolor(07);
 for y:= 11 to 15 do
  begin
  gotoxy(20,y); write('º');
 end;
 for y:= 11 to 15 do
  begin
  gotoxy(58,y); write('º');
 end;
 for x:= 21 to 58 do
  begin
  gotoxy(x,10); write('Í');
 end;
 for x:= 21 to 58 do
  begin
  gotoxy(x,12); write('Í');
 end;
 for x:= 21 to 58 do
  begin
  gotoxy(x,16); write('Í');
 end;
{ conectores de esquina e intersecci¢n }
gotoxy(20,12); write('Ì'); gotoxy(58,12); write('¹');
gotoxy(58,10); write('»'); gotoxy(20,16); write('È');
gotoxy(20,10); write('É'); gotoxy(58,16); write('¼');
{ textos de t¡tulo e INGRESOS }
textcolor(12);
gotoxy(22,11); write('I N G R E S O   D E   U S U A R I O');
gotoxy(22,13); write('Usuario:');
gotoxy(22,15); write('  Clave:');
textcolor(15);
gotoxy(31,13); read(usuario);
gotoxy(31,15);
{   En la l¡nea anterior deb¡a leerse la contrase¤a, pero
  debido a un error (inexplicable) de Pascal, fue necesario
  colocar la petici¢n dentro de un ciclo y letra por letra.
    Error que fue aprovechado para darle algunos retoques
  al procedimiento:
        1.  Aparecen asteriscos por cada tecla pulsada
        2.  Se valida la contrase¤a al pulsar <ENTER> o bien,
        3.  Al haber pulsado 15 teclas
    El nombre de usuario y la contrase¤a est n predefinidos,
  pero podr¡an leerse de un archivo de texto cifrado (mediante
  el cl sico proceso de multiplicar por una matriz num‚rica),
  pero eso no es parte del proyecto: "ley del m¡nimo esfuerzo" }
clave:=''; tecla:='';
i:=0;
listo:=false;
repeat
  begin
   tecla:=readkey;
   letra:=tecla;
   if letra<>chr(13) then
    begin
      write('*');
      clave:=clave+tecla;
    end
   else
    listo:=true;
   i:=i+1;
   if i=15 then listo:=true;
  end;
until listo=true;
readln;

 if usuario = 'administrador' then
   begin
   gotoxy(31,17); write('Usuario correcto');
   delay(2000);
   end
 else
   begin
   textcolor(20);
   gotoxy(31,17); write('Usuario incorrecto');
   delay(2000);
   exit:=false;
 end;
 if clave = '123' then
   MenuOpciones
 else
   begin
   textcolor(20);
   gotoxy(31,18); writeln('Clave incorrecta');
   delay(5000);
   exit:=false;
 end;
end;


{----------------------------------------------------------------------------}
{ dibuja el marco del men£ principal }
procedure dlgMainmenu;
var x,y:integer;
begin
{ bordes horizontales y verticales }
textcolor(14);
 for y:= 11 to 17 do
  begin
  gotoxy(24,y); write('º');
 end;
 for y:= 11 to 17 do
  begin
  gotoxy(55,y); write('º');
 end;
 for x:= 25 to 54 do
  begin
  gotoxy(x,10); write('Í');
 end;
 for x:= 25 to 54 do
  begin
  gotoxy(x,18); write('Í');
 end;
 for x:= 25 to 54 do
  begin
  gotoxy(x,12); write('Í');
 end;
 for x:= 25 to 54 do
  begin
  gotoxy(x,16); write('Í');
 end;
{ conectores de esquina e intersecci¢n }
gotoxy(24,12); write('Ì'); gotoxy(55,12); write('¹');
gotoxy(55,10); write('»'); gotoxy(24,18); write('È');
gotoxy(24,10); write('É'); gotoxy(55,18); write('¼');
gotoxy(24,16); write('Ì'); gotoxy(55,16); write('¹');
{ textos de t¡tulo y opci¢n m£ltiple }
textcolor(04); GOTOXY(26,9);
write('PROGRAMA ®CONTROL DE BODEGA¯');
textcolor(09);
gotoxy(26,11); write('M E N U    P R I N C I P A L');
gotoxy(26,13); write('1 - Ingresar al programa');
gotoxy(26,15); write('2 - salir');
gotoxy(26,17); write('Seleccione una opci¢n: '); menup:=readkey;
 case menup of
  '1': dlgIngresar;
  '2': exit:=true;
 end;
end;


{----------------------------------------------------------------------------}
{ SplashScreen con ProgressBar... ­ viva Visual Basic 6.0 ! }
procedure SplashScreen;
var x,y:byte;
percent:real;
begin
textcolor(10);
for y:= 08 to 18 do
 begin
  for x:=11 to 70 do
   begin
   gotoxy(x,y);
   write('±');
   end;
 end;
for x:= 21 to 60 do
 begin
  gotoxy(x,16); write(' ');
 end;
textcolor(14);
gotoxy(16,09); write('           UNIVERSIDAD MARIANO GALVEZ             ');
gotoxy(16,10); write('Facultad de Ingenier¡a en Sistemas de Informaci¢n ');
gotoxy(16,11); write('     Algoritmos I   ---   Ing. David Gonz lez     ');
gotoxy(16,13); write('   PROYECTO FINAL 2004  ---   CONTROL DE BODEGA   ');
gotoxy(16,14); write('Augusto Jos‚ Blanco G lvez  0900-04-317  Secci¢n C');
for x:= 21 to 60 do
 begin
  gotoxy(x,16); write('²'); delay(900);
  percent:=(x-20)*100/40; gotoxy(33,17); write('Loading... ',percent:0:0,' %');
 end;
end;


{----------------------------------------------------------------------------}
{ cuerpo del programa }
begin
{ llama al SplashScreen}
clrscr;
 SplashScreen;
{ llama al men£ principal }
clrscr;
  repeat
    clrscr;
    dlgMainmenu;
  until exit=true;
clrscr;
end.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.