Pascal/Turbo Pascal - ABM

 
Vista:

ABM

Publicado por guillermo alejandro (2 intervenciones) el 18/11/2010 20:04:20
Hola, estoy escribiendo un programa el cual opera con archivos pero tengo un error semántico en el codigo fuente (el programa compila pero no se hace lo que yo quiero).
La consigna es hacer un ABM, pero cuando agrego un registro al archivo no puedo corroborar que ese registro no se encuentre actualmente en el archivo, y si esta, escribe el registro igual.
Creo que el problema esta en la funcion 'estas' definida en el programa.
Si alguien me da una mano le estare agredecido
saludos.

El codigo es el siguiente.

program Tp10_1;

uses
crt;

const
ruta='c:\misarchivos\Tp10_1distinto.dat';
empleados=150;
sinonimos=190;

type
str40=string[40];
emp=record
dni:longword;
nombre:str40;
sw:boolean;
end;
arch=file of emp;

var
archempleados:arch;

procedure leer (var registro:emp);

begin
with registro do begin
Write('Ingrese el DNI: ');
readln(dni);
write('Ingrese el Nombre: ');
readln(nombre);
end;
end;

procedure cartel;

begin
gotoxy(10,10);
Writeln('Registro existente');
readkey;
end;

procedure genera (var f:arch);

var
reg:emp;
i:byte;

begin
rewrite(f);
for i:= 1 to sinonimos do begin
reg.dni:=0;
reg.nombre:=' ';
reg.sw:=false;
write(f,reg);
end;
close(f);
end;

function hash (dni:longword):byte;

var
i:byte;

begin
i :=dni mod empleados;
hash:=i;
end;

function estas (var f:arch;reg:emp;dir:byte):boolean;

var
esta:boolean;
encontrado:boolean;
regaux:emp;
pos:byte;
begin
esta:=false;
seek(f,dir);
read(f,regaux);
if (regaux.sw=true) then
esta:=true
else
begin
pos:=empleados;
seek(f,pos);
encontrado:=false;
while (pos <= sinonimos) and (encontrado=true) do begin
pos:=pos+1;
seek(f,pos);
read(f,regaux);
if (reg.dni = regaux.dni) then
if regaux.sw=true then
encontrado:=true;
end;
if encontrado=true then
esta:=true
else
esta:=false;
end;
estas:=esta;
end;

procedure altas (var f:arch);

var
c:char;
reg,regaux:emp;
pos:byte;
encontradoespacio:boolean;
SeEncuentra:boolean;

begin
SeEncuentra:=false;
encontradoespacio:=false;
reset(f);
repeat
clrscr;
leer(reg);
pos:= hash(reg.dni);
SeEncuentra:= estas(f,reg,pos);
if SeEncuentra = true then
cartel
else
begin
seek(f,pos);
read(f,regaux);
if regaux.sw = false then
begin
reg.sw:=true;
write(f,reg);
writeln('Hola');
end
else
begin
pos:=empleados;
while (pos <= sinonimos) and (encontradoespacio=true) do begin
pos:=pos+1;
seek(f,pos);
read(f,regaux);
if regaux.sw=false then
encontradoespacio:=true;
end;
if encontradoespacio=true then
begin
seek(f,filepos(f)-1);
reg.sw:=true;
write(f,reg);
end;
end;
end;
gotoxy(1,20);
writeln('Presione ''Q'' para salir');
until upcase(readkey)= 'Q';
close(f);
end;

procedure menu (var ar:arch);

var
c:char;

begin
repeat
clrscr;
Writeln('Empleados');writeln;
writeln('1- Genera');
writeln('2- Altas');
writeln('Q- Salir');
readln(c);
case c of
'1': genera(ar);
'2': Altas(ar);
end;
until upcase(c)= 'Q';
end;

begin
assign(archempleados,ruta);
menu(archempleados);
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ABM

Publicado por epayan (6 intervenciones) el 29/11/2010 06:18:25
mira akii hay un ejemplo e tratamiento ade archivos y registros

http://www.lawebdelprogramador.com/news/mostrar_new.php?id=69&texto=Pascal/Turbo+Pascal&n1=561767&n2=1&n3=1&n4=1&n5=1&n6=0&n7=0&n8=0&n9=0&n0=0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar