//Registro persona que alamancera la informacion de cada persona
type
Persona=Record
nombre:String;
apellido:String;
cedula:String;
nacionalidad:char;
end;
TPersona=^Persona;
var
opcion:Byte;
listaPersonas:TList;
//--------------------------------------------------------------------------------------------------------------------
//mostramos
function mostarMenu:Byte;
begin
WriteLn('Menu de opciones');
WriteLn('Seleccione una opcion a elegir');
WriteLn('1: Incluir');
WriteLn('2: Modificar');
WriteLn('3: Contador');
WriteLn('4: Eliminar');
WriteLn('5: Salida');
ReadLn(Result);
end;
//----------------------------------------------------------------------------------------------------------------------
//anade una nueva persona a nuestra lista
procedure incluirPersona;
var
punteroPersona:TPersona;
begin
new(punteroPersona);
WriteLn('Ingrese su nombre');
ReadLn(punteroPersona^.nombre);
WriteLn('Ingrese su apellido');
ReadLn(punteroPersona^.apellido);
WriteLn('Ingrese su cedula');
ReadLn(punteroPersona^.cedula);
WriteLn('Ingrese su nacionalidad V para venezolano o E para extranjero');
ReadLn(punteroPersona^.nacionalidad);
listaPersonas.Add(punteroPersona);
end;
//----------------------------------------------------------------------------------------------------------------------------
//modifica algun atributo del registro seleccionado esta funcion utiliza funciones anidadas
procedure modificarPersona;
procedure mofificar(nPersona:Integer);
var
opcion:Byte;
_persona:TPersona;
begin
if (nPersona>listaPersonas.Count) or (nPersona<=0) then
begin
WriteLn('No se encuentra la persona ');
ReadLn;
Exit;
end;
repeat
WriteLn('Seleccion el atributo a modificar ');
WriteLn('1:Nombre');
WriteLn('2:Apellido');
WriteLn('3:Cedula');
WriteLn('4:Nacionalidad');
writeln('5:Salir');
ReadLn(opcion);
until (opcion<=5) and (opcion>=1);
_persona:=TPersona(listaPersonas[nPersona-1]);
case opcion of
1:begin
writeln('Ingrese el nuevo nombre');
ReadLn(_persona^.nombre);
end;
2:begin
writeln('Ingrese el nuevo apellido');
ReadLn(_persona^.apellido);
end;
3:begin
writeln('Ingrese la nueva cedula');
ReadLn(_persona^.cedula);
end;
4:begin
writeln('Ingrese el nuevo Nacionalidad');
ReadLn(_persona^.nacionalidad);
end;
end;
end;
procedure personasEnLaLista;
var
i:integer;
begin
if listaPersonas.Count=0 then
begin
WriteLn('No hay personas en la lista');
readln;
Exit;
end;
for i:=0 to listaPersonas.Count-1 do
begin
WriteLn(i+1,' es ',TPersona(listaPersonas[i])^.nombre);
end;
ReadLn;
end;
var
opcion:Byte;
nPersona:Integer;
begin
WriteLn('Modificar registros de personas');
WriteLn('Escoga una opcion');
WriteLn('1:Ingresar el numero de persona a modificar');
WriteLn('2:Revisar el numero de todas las personas en la lista');
ReadLn(opcion);
case opcion of
1:begin
WriteLn('Ingrese el numero de la persona a modfiicar');
ReadLn(nPersona);
mofificar(nPersona);
end;
2:begin
WriteLn('Lista de personas ');
personasEnLaLista;
end;
end;
end;
//-------------------------------------------------------------------------------------------------------------
//liberamos todos los punteros a registros que hay dentro de la lista
procedure limpiarLista;
var
i:integer;
begin
for i:=listaPersonas.Count-1 downto 0 do
begin
Dispose(TPersona(listaPersonas[i]));
end;
end;
//----------------------------------------------------------------------------------------------------------------
//mostramos la cantidad de extranjeros y venezolanos que hay
procedure contador;
var
i:integer;
venezolanos,extranjeros:integer;
begin
venezolanos:=0;
extranjeros:=0;
for i:=0 to listaPersonas.Count-1 do
begin
if (Tpersona(listaPersonas[i])^.nacionalidad='v') or (Tpersona(listaPersonas[i])^.nacionalidad='V') then
begin
inc(venezolanos);
end
else
begin
inc(extranjeros);
end;
end;
WriteLn('Cantidad de venezolanos ',venezolanos);
WriteLn('Cantidad de extranjeros ',extranjeros);
ReadLn;
end;
begin
//creamos la lista dinamica
listaPersonas:=TList.Create;
repeat
//Dibujamos el menu en la pantalla
opcion:=mostarMenu;
case opcion of
1:incluirPersona;
2:modificarPersona;
3:contador;
end;
//limpiamos la pantalla
ClrScr;
until opcion=5 ;
limpiarLista;
listaPersonas.Clear;
listaPersonas.Free;
end.