Pascal/Turbo Pascal - Agenda con archivos secuenciales en pascal

 
Vista:

Agenda con archivos secuenciales en pascal

Publicado por Colillo (2 intervenciones) el 01/05/2012 19:24:20
hola!
necesito ayuda con un programa en pascal

este es el ejercicio:

Crear un programa en Pascal que utilice archivos secuenciales para el mantenimiento de una agenda electrónica que guarde los siguientes datos de personas:

- Cedula (String [10]), llave.

- Nombre (String [40])

- Direccion (String [60])

- Telefono (Longint)

- Fax (Longint)

- Estado civil (String[10])

- Provincia (String [10])

Ningún número de cédula puede repetirse dentro del archivo.

Deben crear un menú de acceso con procedimientos de insertar, modificar, eliminar y consultar personas; y salir del programa.

no se como empezar ni siquiera necesito ayuda T.T
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

Agenda con archivos secuenciales en pascal

Publicado por colillo (2 intervenciones) el 01/05/2012 23:07:41
bueno, he logrado sacar casi todo el programa aqui esta para que lo vean y me digan que opinan, ademas de pedir ayuda en 2 procedimientos que no se como hacerlos bien, el de eliminar contactos en el archivo y modificar contactos, solo esos 2 necesito para terminar el proyecto, ayuda pls!!
Program Agenda;
uses
crt;
const
ubicacion='d:\bp\bin\datos.txt';
type
datos_personales = record
nombre:string;
apellido: string;
edad:integer;
numero_telefonico: string[8];
numero_celular: string[8];
direccion: string;
fecha_cumpleanos:string;
email:string;
end;
var
opcion:char;
info: datos_personales;
arch: text;
nombreABuscar: string;
subNombre: string;
entro: boolean;

Procedure Imprimir;
begin
reset (arch);
clrscr;
while not eof (arch) do
begin
with info do
begin
readln(arch,nombre);
readln(arch,apellido);
readln(arch,edad);
readln(arch,numero_telefonico);
readln(arch,numero_celular);
readln(arch,direccion);
readln(arch,fecha_cumpleanos);
readln(arch,email);
writeln; writeln;
writeln(nombre,' ',apellido);
writeln('Tiene ',edad,'a¤os');
writeln('Tel‚fono: ',numero_telefonico);
writeln('Celular: ',numero_celular);
writeln('Direcci¢n: ',direccion);
writeln('Fecha de Cumplea¤os: ',fecha_cumpleanos);
writeln('E-mail: ',email);
writeln;
end;
end;
readkey;
close (arch);
end;

Procedure Ingresar;
begin
append (arch);
with info do
begin
writeln; writeln;
write('Digite el nombre: '); readln(nombre);
write('Digite el apellido: '); readln(apellido);
write('Digite la edad: '); readln(edad);
write('Digite el n£mero telef¢nico: '); readln(numero_telefonico);
write('Digite el n£mero celular: '); readln(numero_celular);
write('Digite la direcci¢n: '); readln(direccion);
write('Digite la fecha de cumplea¤os: '); readln(fecha_cumpleanos);
write('Digite el e-mail: '); readln(email);
writeln(arch,nombre);
writeln(arch,apellido);
writeln(arch,edad);
writeln(arch,numero_telefonico);
writeln(arch,numero_celular);
writeln(arch,direccion);
writeln(arch,fecha_cumpleanos);
writeln(arch,email);
end;
close(arch);
end;

Procedure Buscar;
begin
reset (arch);
entro:=false;
writeln; writeln;
write('Digite una letra: ');
nombreABuscar:=readkey;
clrscr;
while not eof (arch) do
begin
with info do
begin
readln(arch,nombre);
readln(arch,apellido);
readln(arch,edad);
readln(arch,numero_telefonico);
readln(arch,numero_celular);
readln(arch,direccion);
readln(arch,fecha_cumpleanos);
readln(arch,email);
subNombre:=Copy(nombre,1,length(nombreABuscar));
if(subNombre=nombreABuscar) then
begin
entro:=true;
writeln; writeln;
writeln(nombre,' ',apellido);
writeln('Tiene ',edad,'a¤os');
writeln('Tel‚fono: ',numero_telefonico);
writeln('Celular: ',numero_celular);
writeln('Direcci¢n: ',direccion);
writeln('Fecha de Cumplea¤os: ',fecha_cumpleanos);
writeln('E-mail: ',email);
writeln;
end;
end;
end;
if(not entro) then
writeln('No se encontraron resultados para esta busqueda');
readkey;
close (arch);
end;


Procedure Inicializar;cl
begin
rewrite (arch);
close(arch);
end;

Procedure Seleccion;
begin
case opcion of
'1': Ingresar;
'2': Buscar;
'3': Imprimir;
'4': Inicializar;
end;
end;

Procedure Menu;
begin
clrscr;
writeln;
writeln;
gotoxy(35,6);
writeln('MENU DE AGENDA');
writeln;
writeln;
gotoxy(25,7);
writeln('1. Agregar Contactos');
gotoxy(25,9);
writeln('2. Buscar Contactos');
gotoxy(25,11);
writeln('3. Observar Contactos');
gotoxy(25,13);
writeln('4. Inicializar Lista de Contactos');
gotoxy(25,15);
writeln('5. Salir');
writeln;
gotoxy(20,19);
write ('Escoja una opci¢n: ');
opcion:=readkey;
end;

Procedure Ciclo;
begin
Repeat
Menu;
Seleccion;
Until (opcion='5');
end;

Begin
clrscr;
assign (arch,ubicacion);
Ciclo;
End.
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

Agenda con archivos secuenciales en pascal

Publicado por ramon (2158 intervenciones) el 03/05/2012 16:18:48
{Te corrijo algunas cosas pero te explico por que primero el tratamiento de archivos de registros
no funciona como los archivos de texto por lo tanto no sirve el tratamiento que le as dado,
cuando tengas 100 datos por ejemplo entrados si esta como texto como localizas cada uno
imagina que por ejemplo que tienes 3 personas que se llaman pedro como presentas los
datos de pedro 2, presentando primero pedro 1 y luego pedro 2 y si es el 3 lo mismo no
tiene sentido para eso son los registros cada bloque sus datos al poner el nombre y apellido
te buscara el registro de esa persona no los demás, ala hora de modificar o borrar lo mismo,
por ese motivo los archivos de registro se manejan de la forma que te pongo pero tu puedes
continuar como quieras yo solo te informo y espero que quien te este dando clases haya echo
lo mismo sino mal.
En la búsqueda si solo controlas el primer carácter siempre te presentara el archivo que encuentre
en primer lugar no otro de los que tengas.

Program Agenda;
uses
crt;
const
ubicacion='d:\bp\bin\datos.txt';
type
datos_personales = record
nombre : string;
apellido : string;
edad : integer;
numero_telefonico : string[8];
numero_celular : string[8];
direccion : string;
fecha_cumpleanos : string;
email : string;
end;
var
opcion : char;
info : datos_personales;
arch : file of datos_personales;
nombreABuscar : string;
subNombre : string;
entro : boolean;

Procedure Imprimir;
var
i : integer;
begin
assign(arch,ubicacion);
reset(arch);
clrscr;
i := 0;
while i <> filesize(arch) - 1 do
begin
seek(arch,i);
{while not eof (arch) do
begin}
read(arch,info);
with info do
begin
{readln(arch,nombre);
readln(arch,apellido);
readln(arch,edad);
readln(arch,numero_telefonico);
readln(arch,numero_celular);
readln(arch,direccion);
readln(arch,fecha_cumpleanos);
readln(arch,email);}
writeln; writeln;
writeln(nombre,' ',apellido);
writeln('Tiene ',edad,'a¤os');
writeln('Tel‚fono: ',numero_telefonico);
writeln('Celular: ',numero_celular);
writeln('Direcci¢n: ',direccion);
writeln('Fecha de Cumplea¤os: ',fecha_cumpleanos);
writeln('E-mail: ',email);
writeln('Pulse Tecla [enter]');
readln;
i := i + 1;
end;
end;
close(arch);
end;

Procedure Ingresar;
begin
assign(arch,ubicacion);
{$I-} reset(arch); {$I+}
if ioresult <> 0 then
begin
exit;
end
else
begin
seek(arch,filesize(arch));
end;
with info do
begin
writeln; writeln;
write('Digite el nombre: '); readln(nombre);
write('Digite el apellido: '); readln(apellido);
write('Digite la edad: '); readln(edad);
write('Digite el n£mero telef¢nico: '); readln(numero_telefonico);
write('Digite el n£mero celular: '); readln(numero_celular);
write('Digite la direcci¢n: '); readln(direccion);
write('Digite la fecha de cumplea¤os: '); readln(fecha_cumpleanos);
write('Digite el e-mail: '); readln(email);
{writeln(arch,nombre);
writeln(arch,apellido);
writeln(arch,edad);
writeln(arch,numero_telefonico);
writeln(arch,numero_celular);
writeln(arch,direccion);
writeln(arch,fecha_cumpleanos);
writeln(arch,email);}
write(arch,info);
end;
close(arch);
end;

Procedure Buscar;
var
t, i : longint;
begin
assign(arch,ubicacion);
{$I-} reset(arch); {$I+}
if ioresult <> 0 then
begin
exit;
end
else
begin
t := filesize(arch) - 1;
i := 0;
entro:=false;
writeln; writeln;
write('Digite una letra: ');
nombreABuscar:=readkey;
clrscr;
while entro <> true do
begin
seek(arch,i);
read(arch,info);
with info do
begin
{readln(arch,nombre);
readln(arch,apellido);
readln(arch,edad);
readln(arch,numero_telefonico);
readln(arch,numero_celular);
readln(arch,direccion);
readln(arch,fecha_cumpleanos);
readln(arch,email);}
subNombre:=Copy(nombre,1,length(nombreABuscar));
if(subNombre=nombreABuscar) then
begin
entro:=true;
writeln; writeln;
writeln(nombre,' ',apellido);
writeln('Tiene ',edad,'a¤os');
writeln('Tel‚fono: ',numero_telefonico);
writeln('Celular: ',numero_celular);
writeln('Direcci¢n: ',direccion);
writeln('Fecha de Cumplea¤os: ',fecha_cumpleanos);
writeln('E-mail: ',email);
writeln;
end;
end;
i := i + 1;
if i > t then
entro := true;
end;
if(not entro) then
writeln('No se encontraron resultados para esta busqueda');
readkey;
close(arch);
end;
end;

procedure eliminar;
var
tec : char;
nomb, ape : string;
i, borra, cont : longint;
encontrado : boolean;
ten : file of datos_personales;
p : integer;
begin
assign(arch,ubicacion);
{$I-} reset(arch); {$I+}
if ioresult <> 0 then
begin
exit;
end
else
begin
clrscr;
write('Entre Nonbre : ');
readln(nomb);
write('Entre Apellido : ');
readln(ape);
cont := 0;
encontrado := false;
repeat
seek(arch,cont);
read(arch,info);
for p := 1 to length(info.nombre) do
info.nombre[p] := upcase(info.nombre[p]);
for p := 1 to length(info.apellido) do
info.apellido[p] := upcase(info.apellido[p]);
for p := 1 to length(nomb) do
nomb[p] := upcase(nomb[p]);
for p := 1 to length(ape) do
ape[p] := upcase(ape[p]);
if (info.nombre = nomb) and (info.apellido = ape) then
begin
encontrado := true;
end
else
begin
cont := cont + 1;
end;
until (encontrado = true) or (cont > filesize(arch) - 1);
if encontrado = true then
begin
borra := cont;
clrscr;
with info do
begin
writeln(nombre,' ',apellido);
writeln('Tiene ',edad,'a¤os');
writeln('Tel‚fono: ',numero_telefonico);
writeln('Celular: ',numero_celular);
writeln('Direcci¢n: ',direccion);
writeln('Fecha de Cumplea¤os: ',fecha_cumpleanos);
writeln('E-mail: ',email);
end;
writeln;
writeln('Desea Eliminar Estos Datos [S/N]');
repeat
tec := readkey;
until tec in['s','S','n','N'];
if tec in['s','S'] then
begin
assign(ten,'d:\bp\bin\Temporal.tem');
rewrite(ten);
cont := 0;
i := 0;
repeat
seek(arch,i);
read(arch,info);
if i <> borra then
begin
seek(ten,cont);
write(ten,info);
cont := cont + 1;
end;
i := i + 1;
until i > filesize(arch) - 1;
close(arch);
erase(arch);
close(ten);
rename(ten,ubicacion);
end;
end;
end;
end;

procedure modificar;
var
deci, toma : char;
nomb, ape : string;
modifi, cont : longint;
salir, sal : boolean;
p : integer;
begin
assign(arch,ubicacion);
{$I-} reset(arch); {$I+}
if ioresult <> 0 then
begin
exit;
end
else
begin
clrscr;
write('Entre Nombre : ');
readln(nomb);
write('Entre Apellido : ');
readln(ape);
cont := 0;
sal := false;
repeat
seek(arch,cont);
read(arch,info);
for p := 1 to length(info.nombre) do
info.nombre[p] := upcase(info.nombre[p]);
for p := 1 to length(info.apellido) do
info.apellido[p] := upcase(info.apellido[p]);
for p := 1 to length(nomb) do
nomb[p] := upcase(nomb[p]);
for p := 1 to length(ape) do
ape[p] := upcase(ape[p]);
if (info.nombre = nomb) and (info.apellido = ape) then
begin
sal := true;
end
else
begin
cont := cont + 1;
end;
until (sal = true) or (cont > filesize(arch) - 1);
if sal = true then
begin
clrscr;
modifi := cont;
repeat
with info do
begin
writeln(nombre,' ',apellido);
writeln('Tiene ',edad,'a¤os');
writeln('Tel‚fono: ',numero_telefonico);
writeln('Celular: ',numero_celular);
writeln('Direcci¢n: ',direccion);
writeln('Fecha de Cumplea¤os: ',fecha_cumpleanos);
writeln('E-mail: ',email);
end;
writeln;
writeln('MODIFICACION DE DATOS CUAL ');
writeln(' 1 = Nombre');
writeln(' 2 = apellido');
writeln(' 3 = edad');
writeln(' 4 = Tel‚fono');
writeln(' 5 = Celular');
writeln(' 6 = Direcci¢n');
writeln(' 7 = Cumplea¤os');
writeln(' 8 = E-mail');
writeln(' 9 = Nada');
writeln;
writeln('Elije Opcion');
toma := readkey;
case toma of
'1': begin write('Nombre : ');readln(info.nombre); end;
'2': begin write('Apellido : ');readln(info.apellido); end;
'3': begin write('Edad : ');readln(info.edad); end;
'4': begin write('Telefono : ');readln(info.numero_telefonico); end;
'5': begin write('Celular : ');readln(info.numero_celular); end;
'6': begin write('Direccion : ');readln(info.Direccion); end;
'7': begin write('Cumplea¤os : ');readln(info.fecha_cumpleanos); end;
'8': begin write('E-Mail : ');readln(info.email); end;
'9': begin salir := true; end;
end;
if salir = false then
begin
clrscr;
writeln('Desea Realizar Mas Cambios [S/N]');
salir := false;
seek(arch,modifi);
write(arch,info);
repeat
deci := readkey;
until deci in['s','S','n','N'];
if deci in['n','N'] then
salir := true;
end;
until salir = true;
close(arch);
end;
end;
end;


Procedure Inicializar;
begin
assign(arch,ubicacion);
{$I-} reset(arch); {$I+}
if ioresult <> 0 then
begin
rewrite (arch);
close(arch);
end
else
begin
close(arch);
end;
end;

Procedure Seleccion;
begin
case opcion of
'1': Ingresar;
'2': Buscar;
'3': Imprimir;
'4': Inicializar;
'5': eliminar;
'6': modificar;
end;
end;

Procedure Menu;
begin
clrscr;
writeln;
writeln;
gotoxy(35,6);write('MENU DE AGENDA');
gotoxy(25,7);write('1. Agregar Contactos');
gotoxy(25,9);write('2. Buscar Contactos');
gotoxy(25,11);write('3. Observar Contactos');
gotoxy(25,13);write('4. Inicializar Lista de Contactos');
gotoxy(25,15);write('5. Eliminar Registro');
gotoxy(25,17);write('6. Modificar');
gotoxy(25,19);write('7. Salir');
gotoxy(20,21);write('Escoja una opci¢n: ');
opcion:=readkey;
end;

Procedure Ciclo;
begin
Repeat
Menu;
Seleccion;
Until (opcion='7');
end;

Begin
clrscr;
Ciclo;
End.
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