ErrorDeSintaxis

Pequeños fragmentos de código fuente en distintos lenguajes de programación, agrupados por categorías.

Puedes buscar entre los fuentes existentes, o aportar los tuyos.

Pascal: Agenda básica en Pascal (3: ficheros)

Agenda básica, para guardar datos de hasta 1000 personas. Permite añadir y buscar. Versión con funciones y procedimientos, que guarda en fichero.

Lenguaje: Pascal (compilador: Free Pascal 2.4)

Categoría: Ficheros

(* Fuente procedente de ErrorDeSintaxis.es *)
(* Agenda básica, para guardar datos de hasta *)
(*  1000 personas. Permite añadir y buscar. *)
(*  Versión con funciones y procedimientos, *)
(*  que guarda en fichero. *)
(* Lenguaje: Pascal *)
(* Compilador: Free Pascal 2.4 *)
(* Nivel: Básico *)
(* Disponible desde 27/12/2011 *)
(* Aportado por Nacho *)
(* Autor original: Nacho Cabanes *)
(* Web original: http://www.aprendeaprogramar.com *)

{--------------------------}
{  Ejemplo en Pascal:      }
{                          }
{    Ejemplo de "Agenda":  }
{    Permite añadir datos, }
{    mostrar, buscar.      }
{    Usa funciones.        }
{    AGENDA3.PAS           }
{                          }
{  Este fuente procede de  }
{  CUPAS, curso de Pascal  }
{  por Nacho Cabanes       }
{                          }
{  Comprobado con:         }
{    - Free Pascal 2.4.0   }
{--------------------------}
 
program Agenda3;
 
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 CargarDatos;
var
    fichero: file of tipoPersona;
    i: integer;
begin
    assign(fichero, 'agenda.dat');
    {$I-} 
    reset(fichero);
    {$I+}
    if ioResult <> 0 then  
        WriteLn('No había fichero de datos. Se creará.')
    else
    begin
        cantidad := filesize(fichero);
        for i := 1 to cantidad do
            Read(fichero, gente[i]);
        close(fichero);
    end;
end;
 
procedure GrabarDatos;
var
    fichero: file of tipoPersona;
    i: integer;
begin
    assign(fichero, 'agenda.dat');
    {$I-} 
    rewrite(fichero);
    {$I+}
    if ioResult <> 0 then  
        WriteLn('No se ha podido grabar!')
    else
    begin
        for i := 1 to cantidad do
            Write(fichero, gente[i]);
        close(fichero);
    end;
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;
         GrabarDatos;
     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;
    CargarDatos;
    repeat
 
        MostrarMenu;
        case LeerOpcion of
            1: NuevoDato;
            2: MostrarDatos;
            3: BuscarDatos;
            0: AvisarFin;                
            else AvisarError;
        end;  { Fin de "case" }
 
    until terminado;
end.
 

 
Resultado:

No había fichero de datos. Se creará.
Agenda

1- Añadir una nueva persona
2- Ver nombres de todos
3- Buscar una persona
0- Salir
Escoja una opción: 1

Introduciendo la persona 1
Introduzca el nombre: Juan
Introduzca el correo electrónico: 1@1.1
Introduzca el año de nacimiento: 1

Agenda

1- Añadir una nueva persona
2- Ver nombres de todos
3- Buscar una persona
0- Salir
Escoja una opción: 2

1 Juan

Agenda

1- Añadir una nueva persona
2- Ver nombres de todos
3- Buscar una persona
0- Salir
Escoja una opción: 0


Saliendo...

------------------------------

Agenda

1- Añadir una nueva persona
2- Ver nombres de todos
3- Buscar una persona
0- Salir
Escoja una opción: 2

1 Juan

Agenda

1- Añadir una nueva persona
2- Ver nombres de todos
3- Buscar una persona
0- Salir
Escoja una opción: 0


Saliendo...