//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.