AnteriorPosterior

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í:

program Agenda;
 
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;
 
{Cuerpo del programa principal}
begin
    terminado := false;
    cantidad := 0;
    repeat
 
        MostrarMenu;
        case LeerOpcion of
            1: NuevoDato;
            2: MostrarDatos;
            3: BuscarDatos;
            0: { Salir de la aplicación }
                begin
                WriteLn;
                WriteLn('Saliendo...');
                WriteLn;
                end;
             else
                begin
                WriteLn;
                WriteLn('Opción incorrecta!');
                WriteLn;
                end;
        end;  { Fin de "case" }
 
    until terminado;
end.
 

Actualizado el: 28-12-2011 21:57

AnteriorPosterior