La Web del Programador: Comunidad de Programadores
 
    Pregunta:  65846 - VALIDACION EN PACAL
Autor:  jose cedeño
como puedo hacer los mecanismos de validacion de entradas de datos y validar que no existan dos estudiantes con la misma cedula o estudiantes en la base de datos. y tambien como validar de modo que cuando escriba la cedula si presiono una letra por error no se me salga el programa. gracias

  Respuesta:  ramon
{Este pequeño programa de entrada de datos de estudiantes en un
array te presenta la forma mas segura de entrada de datos a sin como
la comprobación de una entrada repetida de cédula.
Las entradas son asta 100 estudiantes nada mas tanto para las
entradas como la presentación pero si guardas en archivo serán las
que tu quieras.

program valida;

uses
crt;
type
datosestudiante = record
cedula : longint;
nombre : string[20];
pelli1 : string[20];
pelli2 : string[20];
end;
var
f : file of datosestudiante;
datos : array[1..100] of datosestudiante;
cont : integer;
tecla : char;
cedul : longint;
eldato : string[20];

procedure entradadatos(xe, ye : integer; que : char);
var
entrada : string;
error, long : integer;
lodat : longint;
begin
fillchar(entrada,256,' ');
entrada[0] := chr(255);
long := 1;
fillchar(eldato,21,' ');
eldato[0] := chr(20);
cedul := 0;
gotoxy(xe + long,ye);
repeat
tecla := readkey;
if (que = 'n') or (que = 'N') then
begin
if tecla in[#48..#57] then
begin
entrada[long] := tecla;
entrada[0] := chr(long);
gotoxy(xe + long, ye);write(entrada[long]);
long := long + 1;
if long > 12 then
long := 12;
end;
end;
if (que = 't') or (que = 'T') then
begin
if tecla in[#35..#125,#164,#165] then
begin
entrada[long] := tecla;
entrada[0] := chr(long);
gotoxy(xe + long, ye);write(entrada[long]);
long := long + 1;
if long > 20 then
long := 20;
end;
end;
if tecla = #8 then
begin
long := long - 1;
if (que = 'n') or (que = 'N') then
begin
if long > 12 then
long := 12;
end;
if (que = 't') or (que = 'T') then
begin
if long > 20 then
long := 20;
end;
entrada[long] := ' ';
entrada[0] := chr(long);
gotoxy(xe + long, ye);write(entrada[long]);
end;
until tecla = #13;
if (que = 'n') or (que = 'N') then
begin
val(entrada,lodat,error);
if error <> 0 then
begin
delete(entrada,error,1);
val(entrada,lodat,error);
end;
cedul := lodat;
end;
if (que = 't') or (que = 'T') then
begin
eldato := copy(entrada,1,length(entrada));
end;
end;

procedure estudiantedatos;
var
revi : integer;
datorepe : boolean;
tec : char;
begin
cont := 1;
datorepe := false;
repeat
gotoxy(12,2);write('Entrada Datos Estudiante');
gotoxy(12,4);write('N§ Cedula : ');
gotoxy(12,5);write('Nombre : ');
gotoxy(12,6);write('1§ Apellido : ');
gotoxy(12,7);write('2§ Apellido : ');
entradadatos(25,4,'n');
for revi := 1 to cont do
if datos[revi].cedula = cedul then
begin
datorepe := true;
end;
if datorepe = false then
begin
datos[cont].cedula := cedul;
entradadatos(25,5,'t');
datos[cont].nombre := eldato;
entradadatos(25,6,'t');
datos[cont].pelli1 := eldato;
entradadatos(25,7,'t');
datos[cont].pelli2 := eldato;
cont := cont + 1;
datorepe := false;
end
else
begin
gotoxy(10,12);write('La Cedula Esta Repetida Entre Otravez');
gotoxy(10,13);write('Pulse Enter');
repeat
tec := readkey;
until tec = #13;
end;
if datorepe = false then
begin
gotoxy(10,12);write('Desea Entrar Mas Datos [S/N]');
repeat
tec := readkey;
until tec in['s','S','n','N'];
end;
clrscr;
until tec in['n','N'];
clrscr;
writeln('Los Datos Entrados Son');
writeln;
for revi := 1 to cont - 1 do
writeln(datos[revi].cedula,' ',datos[revi].nombre,' ',
datos[revi].pelli1,' ',datos[revi].pelli2);
readln;
end;

begin
clrscr;
estudiantedatos;
end.