Ayuda con modificación
Publicado por juan (83 intervenciones) el 28/08/2007 01:24:07
Que tal Diego "Jesús" Romero, como va, bueno, la duda que tengo es esta. El ejercicio consiste
en abrir un archivo "Socios" que esta ordenado ascendentemente por numero de socio, y hay que actualizar el numero de telefono, proveyendo al programa únicamente con el número de socio y el nuevo número de teléfono a actualizar. Con este código no solo que no actualizó el número de teléfono del número de socio, sino que ademas me borró todos los datos del registro que sigue(ej actualizo el socio 01, y el número no se modifica, y además, se borra toda la información del socio 02), esto me da a pensar que estoy acutalizando el registro N+1 en vez del
N. Cuando quiero actualizar un campo, solo tengo que hacer una asignación al campo que quiero o tengo que reingresar todos los datos en su campo correspondiente para no perderlos??, si ves el error te agradecería que me digas, te agradezco de nuevo, un saludo.
Program ej7S3;
Type
Str12=string[12];
Str30=string[30];
Fech=record
dd,mm:byte;
aaaa:word;
end;
Rsocio=Record
Nombre:str30;
Nsoc:Integer;
Cat:char;
Fecha:Fech;
NTel:str12;
end;
ArchivoSocios=file of Rsocio;
Procedure Abrir(var Archsoc:ArchivoSocios);
Begin
assign(ArchSoc,'Socios.Dat');
reset(ArchSoc)
end;
Function Menu:byte;
var eleccion:byte;
begin
writeln('Ingrese 0 para salir o 1 para ingresar un n£mero de socio');
readln(eleccion);
Menu:=Eleccion
end;
Procedure ActualizarNum(var ArchSoc:ArchivoSocios;Nsoc:integer;NumNuev:str12);
var Rsoc:Rsocio;
Encontrado:boolean;
Begin
seek(archsoc,0);
Encontrado:=False;
while (not Encontrado) and (not eof(Archsoc)) do
begin
read(ArchSoc,Rsoc);
if Rsoc.Nsoc=Nsoc
then
begin
Encontrado:=True;
Rsoc.Ntel:=NumNuev;
write(ArchSoc,Rsoc)
end;
end;
if not Encontrado then
writeln('No se ha encontrado informaci¢n bajo ese n£mero de socio.');
end;
var Asoc:ArchivoSocios;
NumeroSocio:integer;
Opc:byte;
NuevoNum:Str12;
Begin
Abrir(Asoc);
opc:=menu;
while opc=1 do
begin
writeln('Ingrese n£mero de socio');
readln(NumeroSocio);
writeln('Ingrese el nuevo n£mero de tel‚fono del socio');
readln(NuevoNum);
ActualizarNum(Asoc,NumeroSocio,NuevoNum);
Opc:=Menu
end;
close(ASoc);
readln
end.
en abrir un archivo "Socios" que esta ordenado ascendentemente por numero de socio, y hay que actualizar el numero de telefono, proveyendo al programa únicamente con el número de socio y el nuevo número de teléfono a actualizar. Con este código no solo que no actualizó el número de teléfono del número de socio, sino que ademas me borró todos los datos del registro que sigue(ej actualizo el socio 01, y el número no se modifica, y además, se borra toda la información del socio 02), esto me da a pensar que estoy acutalizando el registro N+1 en vez del
N. Cuando quiero actualizar un campo, solo tengo que hacer una asignación al campo que quiero o tengo que reingresar todos los datos en su campo correspondiente para no perderlos??, si ves el error te agradecería que me digas, te agradezco de nuevo, un saludo.
Program ej7S3;
Type
Str12=string[12];
Str30=string[30];
Fech=record
dd,mm:byte;
aaaa:word;
end;
Rsocio=Record
Nombre:str30;
Nsoc:Integer;
Cat:char;
Fecha:Fech;
NTel:str12;
end;
ArchivoSocios=file of Rsocio;
Procedure Abrir(var Archsoc:ArchivoSocios);
Begin
assign(ArchSoc,'Socios.Dat');
reset(ArchSoc)
end;
Function Menu:byte;
var eleccion:byte;
begin
writeln('Ingrese 0 para salir o 1 para ingresar un n£mero de socio');
readln(eleccion);
Menu:=Eleccion
end;
Procedure ActualizarNum(var ArchSoc:ArchivoSocios;Nsoc:integer;NumNuev:str12);
var Rsoc:Rsocio;
Encontrado:boolean;
Begin
seek(archsoc,0);
Encontrado:=False;
while (not Encontrado) and (not eof(Archsoc)) do
begin
read(ArchSoc,Rsoc);
if Rsoc.Nsoc=Nsoc
then
begin
Encontrado:=True;
Rsoc.Ntel:=NumNuev;
write(ArchSoc,Rsoc)
end;
end;
if not Encontrado then
writeln('No se ha encontrado informaci¢n bajo ese n£mero de socio.');
end;
var Asoc:ArchivoSocios;
NumeroSocio:integer;
Opc:byte;
NuevoNum:Str12;
Begin
Abrir(Asoc);
opc:=menu;
while opc=1 do
begin
writeln('Ingrese n£mero de socio');
readln(NumeroSocio);
writeln('Ingrese el nuevo n£mero de tel‚fono del socio');
readln(NuevoNum);
ActualizarNum(Asoc,NumeroSocio,NuevoNum);
Opc:=Menu
end;
close(ASoc);
readln
end.
Valora esta pregunta


0