Tema 8c. Ejemplo: mini-agenda, con funciones
Curso: Curso de Pascal, por Nacho Cabanes
Curso de Pascal. Tema 8.12. Ejemplo: mini-agenda, con funciones.
Vamos ampliar un poco la mini-agenda que hicimos como ejemplo en el tema 7. Esta nueva versión usará funciones, para que el programa sea más modular. Algunas variables tendrán que ser globales, o bien pasarse como parámetros. Si somos cuidadosos y lo único que se comparte es el array con los datos, no es un gran problema el que esa variable sea global (realmente, dos lo serán: el array y el contador de datos usados).
Podría quedar así:
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Ejemplo de "Agenda": }
{ Permite añadir datos, }
{ mostrar, buscar. }
{ Usa funciones. }
{ AGENDA2.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Free Pascal 2.4.0 }
{--------------------------}
program Agenda2;
type
tipoPersona = record
nombre: string;
email: string;
anyoNacimiento: integer;
end;
const
capacidad = 1000;
var
gente: array[1..capacidad] of tipoPersona; { Los datos }
cantidad: integer; { Cantidad de datos existentes }
terminado: boolean;
procedure MostrarMenu;
begin
WriteLn('Agenda');
WriteLn;
WriteLn('1- Añadir una nueva persona');
WriteLn('2- Ver nombres de todos');
WriteLn('3- Buscar una persona');
WriteLn('0- Salir');
end;
function LeerOpcion: integer;
var
opcion: integer;
begin
Write('Escoja una opción: ');
ReadLn(opcion);
WriteLn;
if (opcion = 0) then terminado := true;
LeerOpcion := opcion;
end;
procedure NuevoDato;
begin
if (cantidad < capacidad) then
begin
inc(cantidad);
WriteLn('Introduciendo la persona ', cantidad);
Write('Introduzca el nombre: ');
ReadLn(gente[cantidad].nombre);
Write('Introduzca el correo electrónico: ');
ReadLn(gente[cantidad].email);
Write('Introduzca el año de nacimiento: ');
ReadLn(gente[cantidad].anyoNacimiento);
WriteLn;
end
else
WriteLn('Base de datos llena');
end;
procedure MostrarDatos;
var
i: integer;
begin
if cantidad = 0 then
WriteLn('No hay datos')
else
for i := 1 to cantidad do
WriteLn(i, ' ', gente[i].nombre);
WriteLn;
end;
procedure BuscarDatos;
var
textoBuscar: string;
encontrado: boolean;
i: integer;
begin
Write('¿Qué texto busca? ');
ReadLn( textoBuscar );
encontrado := false;
for i := 1 to cantidad do
if pos (textoBuscar, gente[i].nombre) > 0 then
begin
encontrado := true;
WriteLn( i,' - Nombre: ', gente[i].nombre,
', Email: ', gente[i].email,
', Nacido en: ', gente[i].anyoNacimiento);
end;
if not encontrado then
WriteLn('No se ha encontrado.');
WriteLn;
end;
procedure AvisarFin;
begin
WriteLn;
WriteLn('Saliendo...');
WriteLn;
end;
procedure AvisarError;
begin
WriteLn;
WriteLn('Opción incorrecta!');
WriteLn;
end;
{Cuerpo del programa principal}
begin
terminado := false;
cantidad := 0;
repeat
MostrarMenu;
case LeerOpcion of
1: NuevoDato;
2: MostrarDatos;
3: BuscarDatos;
0: AvisarFin;
else AvisarError;
end; { Fin de "case" }
until terminado;
end.
Actualizado el: 28-12-2011 21:57