En este módulo, vamos a aplicar todos los conceptos aprendidos a lo largo del curso para construir un proyecto completo en Ada. Este proyecto servirá como una culminación de tus conocimientos y habilidades en Ada, y te proporcionará una experiencia práctica en el desarrollo de software utilizando este lenguaje.

Objetivos del Proyecto

  1. Integrar conceptos básicos y avanzados de Ada.
  2. Desarrollar un sistema funcional y modular.
  3. Implementar buenas prácticas de programación.
  4. Utilizar técnicas de depuración y optimización.

Descripción del Proyecto

Vamos a desarrollar un sistema de gestión de biblioteca. Este sistema permitirá a los usuarios realizar las siguientes operaciones:

  1. Agregar nuevos libros.
  2. Buscar libros por título o autor.
  3. Listar todos los libros disponibles.
  4. Eliminar libros del sistema.

Estructura del Proyecto

El proyecto se dividirá en varios módulos para mantener el código organizado y modular. La estructura del proyecto será la siguiente:

LibraryManagement/
├── src/
│   ├── main.adb
│   ├── book.ads
│   ├── book.adb
│   ├── library.ads
│   └── library.adb
└── README.md

Paso 1: Definir el Tipo de Datos Book

Primero, definiremos un tipo de datos Book que representará un libro en nuestra biblioteca.

Archivo: book.ads

package Book is
    type Book_Type is record
        Title  : String (1 .. 100);
        Author : String (1 .. 100);
        ISBN   : String (1 .. 13);
    end record;

    procedure Print_Book (B : in Book_Type);
end Book;

Archivo: book.adb

package body Book is
    procedure Print_Book (B : in Book_Type) is
    begin
        Put_Line ("Title: " & B.Title);
        Put_Line ("Author: " & B.Author);
        Put_Line ("ISBN: " & B.ISBN);
    end Print_Book;
end Book;

Paso 2: Definir el Módulo de Biblioteca

A continuación, definiremos el módulo Library que gestionará una colección de libros.

Archivo: library.ads

with Book;

package Library is
    type Library_Type is limited private;

    procedure Initialize (L : out Library_Type);
    procedure Add_Book (L : in out Library_Type; B : in Book.Book_Type);
    procedure List_Books (L : in Library_Type);
    procedure Remove_Book (L : in out Library_Type; ISBN : in String);

private
    type Book_Array is array (Natural range <>) of Book.Book_Type;
    type Library_Type is record
        Books : Book_Array (1 .. 100);
        Count : Natural := 0;
    end record;
end Library;

Archivo: library.adb

with Ada.Text_IO; use Ada.Text_IO;
with Book;

package body Library is
    procedure Initialize (L : out Library_Type) is
    begin
        L.Count := 0;
    end Initialize;

    procedure Add_Book (L : in out Library_Type; B : in Book.Book_Type) is
    begin
        if L.Count < L.Books'Length then
            L.Count := L.Count + 1;
            L.Books(L.Count) := B;
        else
            Put_Line ("Library is full.");
        end if;
    end Add_Book;

    procedure List_Books (L : in Library_Type) is
    begin
        for I in 1 .. L.Count loop
            Book.Print_Book (L.Books(I));
            New_Line;
        end loop;
    end List_Books;

    procedure Remove_Book (L : in out Library_Type; ISBN : in String) is
    begin
        for I in 1 .. L.Count loop
            if L.Books(I).ISBN = ISBN then
                for J in I .. L.Count - 1 loop
                    L.Books(J) := L.Books(J + 1);
                end loop;
                L.Count := L.Count - 1;
                exit;
            end if;
        end loop;
    end Remove_Book;
end Library;

Paso 3: Implementar el Programa Principal

Finalmente, implementaremos el programa principal que interactuará con el usuario y utilizará los módulos Book y Library.

Archivo: main.adb

with Ada.Text_IO; use Ada.Text_IO;
with Book;
with Library;

procedure Main is
    L : Library.Library_Type;
    B : Book.Book_Type;
    Choice : Character;
begin
    Library.Initialize (L);

    loop
        Put_Line ("Library Management System");
        Put_Line ("1. Add Book");
        Put_Line ("2. List Books");
        Put_Line ("3. Remove Book");
        Put_Line ("4. Exit");
        Put ("Enter your choice: ");
        Get (Choice);
        case Choice is
            when '1' =>
                Put ("Enter Title: ");
                Get_Line (B.Title);
                Put ("Enter Author: ");
                Get_Line (B.Author);
                Put ("Enter ISBN: ");
                Get_Line (B.ISBN);
                Library.Add_Book (L, B);
            when '2' =>
                Library.List_Books (L);
            when '3' =>
                Put ("Enter ISBN to remove: ");
                Get_Line (B.ISBN);
                Library.Remove_Book (L, B.ISBN);
            when '4' =>
                exit;
            when others =>
                Put_Line ("Invalid choice. Please try again.");
        end case;
    end loop;
end Main;

Ejercicios Prácticos

  1. Agregar Validaciones:

    • Modifica el procedimiento Add_Book para verificar que el ISBN no esté duplicado antes de agregar un nuevo libro.
  2. Buscar Libros:

    • Implementa un procedimiento Search_Book en el módulo Library que permita buscar libros por título o autor.
  3. Persistencia de Datos:

    • Implementa la funcionalidad para guardar y cargar la lista de libros desde un archivo.

Conclusión

En este módulo, hemos construido un proyecto completo en Ada, aplicando conceptos básicos y avanzados del lenguaje. Este proyecto te ha proporcionado una experiencia práctica en el desarrollo de software modular y bien estructurado. Asegúrate de revisar y practicar los ejercicios adicionales para reforzar tus conocimientos y habilidades en Ada. ¡Felicidades por completar el curso!

© Copyright 2024. Todos los derechos reservados