[ Foro de Pascal ]

Incluir varios registros

03-Jul-2014 06:17
Saulo David Jorgez
3 Respuestas

Estoy haciendo un programa para un proyecto, tengo una opción para incluir datos. Cómo hago para incluir varios datos y que no me salga al incluir solo uno, no se si me expliqué. Gracias


05-Jul-2014 10:45
Nacho Cabanes (+30)

La verdad es que no lo entiendo. Supongo que te refieres a poder introducir varios datos de forma repetitiva. En ese caso, bastaría con emplear un "array", y guardar los datos con una orden "for" (si sabes la cantidad) o un "while" o "repeat" (si va a ser hasta que se cumpla cierta condición).

Mira este apartado del curso:

http://www.nachocabanes.com/pascal/cupas5/cupas04.php


18-Jul-2014 05:07
Saulo David Jorgez

Si exactamnete eso era lo que preguntaba, pero al escribir los datos pareciera que no los mantiene, en la consulta no los muestra. como lo haría?
Esto es lo que he hecho, introduzco los datos, y cuando lo consulto que lo hago en la opción 5 reporte no los muestra o no los retiene.
La profesora hizo una rutina que no la entiendo, si  se la coloco en incluir si me muestra los datos,pero veo que no es procedente o correcto o estético, no se.

begin

WRITELN(datos[j].cedula,'  ');

WRITELN;

readkey();end;
me muestra los números de cédula y luego en el reporte me muestra los datos, si no lo coloco como lo he echo en el programa que estoy haciendo, no muestra los datos. No quiero que me muestre las cédulas solo quiero saber como mostrar los datos al parecer si se encuentra ahí pero no los muestra.

program clinica;
Uses
crt;
type
   paciente = record
cedula: string[10];
   nombre: string[20];
   apells: string[20];
   edad: integer;
   sexo: char;
   hospital: integer;
   patolg: char;
     end;
Var
   datos: array[1..10] of paciente;
Opcion: char;
i,j: integer;
continuar:char;

procedure titulo;
Begin
CLRSCR;
gotoxy(25,2); Writeln('C L I N I C A "L A  M E J O R"');
end;
Procedure incluir;
Begin
titulo;
continuar:='S';i:=1;
Repeat
gotoxy(27,5); Writeln('REGISTRAR NUEVOS INGRESOS');
gotoxy(10,8); write('CEDULA DE IDENTIDAD: ');
readln(datos[i].cedula);
gotoxy(10,10); write('NOMBRE: ');
readln(datos[i].nombre);
gotoxy(10,12); write('APELLIDO: ');
readln(datos[i].apells);
gotoxy(10,14); write('EDAD: ');
readln(datos[i].edad);
gotoxy(10,16); write('SEXO [F/M]: ');
readln(datos[i].sexo);
gotoxy(10,18); write('PATOLOGIA [A/B/C]: ');
readln(datos[i].patolg);
gotoxy(10,20); write('DIAS DE HOSPITALIZACION: ');
readln(datos[i].hospital);
i:=i+1;
gotoxy(10,22); WRITE(' DESEA CONTINUAR S/N ');
READLN(CONTINUAR);
CLRSCR;
UNTIL (CONTINUAR ='N') OR (CONTINUAR ='n') ;
for j:=1 to i do
end;


Procedure consultar;
Begin
titulo;
   For i:=1 to 10 do
gotoxy(27,5); Writeln('CONSULTANDO PACIENTE');
readkey();
gotoxy(10,8); write('CEDULA DE IDENTIDAD: ');
Writeln(datos[i].cedula);
gotoxy(10,10); write('NOMBRE: ');
Writeln(datos[i].nombre);
gotoxy(10,12); write('APELLIDO: ');
Writeln(datos[i].apells);
gotoxy(10,14); write('EDAD: ');
Writeln(datos[i].edad);
gotoxy(10,16); write('SEXO [F/M]: ');
Writeln(datos[i].sexo);
gotoxy(10,18); write('PATOLOGIA [A/B/C]: ');
Writeln(datos[i].patolg);
gotoxy(10,20); write('DIAS DE HOSPITALIZACION: ');
writeln(datos[i].hospital);
readkey();
CLRSCR;
end;

Procedure modificar;
Begin
titulo;
    For i:=1 to 10 do
gotoxy(27,5); Writeln('MODIFICANDO INFORMACION DEL PACIENTE');
readkey();
gotoxy(10,8); write('CEDULA DE IDENTIDAD: ');
Writeln(datos[i].cedula);
gotoxy(10,10); write('NOMBRE: ');
Writeln(datos[i].nombre);
gotoxy(10,12); write('APELLIDO: ');
Writeln(datos[i].apells);
gotoxy(10,14); write('EDAD: ');
Writeln(datos[i].edad);
gotoxy(10,16); write('SEXO [F/M]: ');
Writeln(datos[i].sexo);
gotoxy(10,18); write('PATOLOGIA [A/B/C]: ');
Writeln(datos[i].patolg);
gotoxy(10,20); write('DIAS DE HOSPITALIZACION: ');
writeln(datos[i].hospital);
readkey();
CLRSCR;
end;

Procedure eliminar;
Begin
titulo;
    For i:=1 to 10 do
gotoxy(27,5); Writeln('ELIMINADO REGISTRO DE PACIENTE');
readkey();
gotoxy(10,8); write('CEDULA DE IDENTIDAD: ');
Writeln(datos[i].cedula);
gotoxy(10,10); write('NOMBRE: ');
Writeln(datos[i].nombre);
gotoxy(10,12); write('APELLIDO: ');
Writeln(datos[i].apells);
gotoxy(10,14); write('EDAD: ');
Writeln(datos[i].edad);
gotoxy(10,16); write('SEXO [F/M]: ');
Writeln(datos[i].sexo);
gotoxy(10,18); write('PATOLOGIA [A/B/C]: ');
Writeln(datos[i].patolg);
gotoxy(10,20); write('DIAS DE HOSPITALIZACION: ');
writeln(datos[i].hospital);
readkey();
CLRSCR;
end;

Procedure reporte;
Begin
    titulo;
    For i:=1 to 10 do
    gotoxy(25,5); Writeln('GENERANDO REPORTE DE PACIENTE');
readkey();
gotoxy(10,8); write('CEDULA DE IDENTIDAD: ');
Writeln(datos[i].cedula);
gotoxy(10,10); write('NOMBRE: ');
Writeln(datos[i].nombre);
gotoxy(10,12); write('APELLIDO: ');
Writeln(datos[i].apells);
gotoxy(10,14); write('EDAD: ');
Writeln(datos[i].edad);
gotoxy(10,16); write('SEXO [F/M]: ');
Writeln(datos[i].sexo);
gotoxy(10,18); write('PATOLOGIA [A/B/C]: ');
Writeln(datos[i].patolg);
gotoxy(10,20); write('DIAS DE HOSPITALIZACION: ');
writeln(datos[i].hospital);
readkey();
clrscr;
end;

Procedure salida;
Begin
gotoxy(10,2); WRITELN('ESTE ES EL FIN, PULSA CUALQUIER TECLA PARA SALIR ');
readkey();
CLRSCR;
end;
 
{MENU PRINCIPAL}

Begin
OPCION:='0';
WHILE(OPCION = '0') DO
BEGIN
REPEAT
titulo;
gotoxy(24,5); writeln(' ============================');
gotoxy(25,6); writeln(' ===== MENU PRINCIPAL=====');
gotoxy(24,7); writeln(' ============================');
writeln;
gotoxy(26,9); writeln('<<seleccione una opcion>>');
gotoxy(25,12); writeln(' 1: INCLUIR ');
gotoxy(25,13); writeln(' 2: CONSULTAR ');
gotoxy(25,14); writeln(' 3: MODIFICAR ');
gotoxy(25,15); writeln(' 4: ELIMINAR ');
gotoxy(25,16); writeln(' 5: REPORTE ');
gotoxy(25,17); writeln(' 6: SALIDA ');
writeln;
gotoxy(25,20); WRITE (' [1, 2, 3, 4, 5, 6] ');
READLN (OPCION);
CLRSCR;
UNTIL (OPCION='1') OR (OPCION='2') OR (OPCION='3') OR (OPCION='4') OR (OPCION='5') OR (OPCION='6');

IF OPCION='1' THEN
BEGIN
Incluir;
OPCION:='0';
END;

IF OPCION='2' THEN
BEGIN
consultar;
OPCION:='0';
END;

IF OPCION='3' THEN
BEGIN
modificar;
OPCION:='0';
END;

IF OPCION='4' THEN
BEGIN
eliminar;
OPCION:='0';
END;

IF OPCION = '5' THEN
BEGIN
reporte;
OPCION:='0';
END;

IF OPCION ='6' THEN
BEGIN
salida;
END;
END;
end.


18-Jul-2014 05:49
Luis Torres (+12)

No revisé todo el programa, solo la parte de la consulta y me di cuenta de que en el ciclo for te faltó envolver las instrucciones de dicho ciclo entre un Begin y un End, además deberías utilizar un contador para llevar la cuenta de los pacientes ingresados y utilizar ese contador como el valor máximo del ciclo for. Con el ciclo for con el valor de 10, lo que haces es que si tienes dos pacientes, seguirá mostrando los campos vacíos hasta que se cumplan los 10, en cambio con un contador te mostrará los pacientes registrados y no más. El procedimiento debería quedar así (sin el contador):

 
Procedure consultar; 
Begin 
titulo; 
   For i:=1 to 10 do 
Begin   
gotoxy(27,5); Writeln('CONSULTANDO PACIENTE'); 
gotoxy(10,8); write('CEDULA DE IDENTIDAD: '); 
Writeln(datos[i].cedula); 
gotoxy(10,10); write('NOMBRE: '); 
Writeln(datos[i].nombre); 
gotoxy(10,12); write('APELLIDO: '); 
Writeln(datos[i].apells); 
gotoxy(10,14); write('EDAD: '); 
Writeln(datos[i].edad); 
gotoxy(10,16); write('SEXO [F/M]: '); 
Writeln(datos[i].sexo); 
gotoxy(10,18); write('PATOLOGIA [A/B/C]: '); 
Writeln(datos[i].patolg); 
gotoxy(10,20); write('DIAS DE HOSPITALIZACION: '); 
writeln(datos[i].hospital); 
readkey;
CLRSCR;
End;
end; 
 






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)