Lenguaje de programación C (XIV). Aplicaciones I

En este capítulo pretendemos poner en práctica la mayoría de los conceptos analizados en capítulos anteriores y para ello programaremos una aplicación, la gestión de una pequeña biblioteca.

La primera decisión que nos interesa es la del registro, es decir, la información que mantenemos sobre cada libro. Pensemos que se guardará la siguiente información: código de libro, título, escritor, año y código del tipo de libro. Dado que este registro se utilizará en la mayoría de las funciones, en el fichero libru.h se realizará la definición del registro (ver programa 1).

Programa 1. Definición del registro.
Programa 2. Funciones básicas.

Con este registro se realizarán dos operaciones básicas: leer la información desde el teclado y escribirla en pantalla. Compilaremos estas funciones aparte. Por lo tanto se ubicarán en un fichero, lib_basi.c en nuestro caso, tal y como se ve en el programa 2.

Se puede mejorar el manejo de la pantalla. Para ello, en los nuevos sistemas se utiliza un sistema de ventanas (windows) que permite la introducción de datos tanto a través del teclado como del ratón (mouse). Desgraciadamente las bibliotecas para programar estos sistemas no son estándares y por eso no las hemos explicado aquí.

Pensemos ahora en qué tipo de operaciones se pueden realizar en nuestra base de datos de libros. En principio deberían existir al menos las siguientes operaciones: entrada de libros, listado de libros y consulta de libros. En cuanto a la consulta de libros, habría que tener en cuenta los siguientes criterios: código (obteniendo así la información del libro único), escritor, año (aceptando intervalos entre fechas) y tipo. Estas consultas se pueden realizar de forma rápida, por un lado, teniendo en cuenta que la base de datos de libros es pequeña y se traerá a la memoria al principio, para agilizar las consultas, y por otro lado, construir índices a medida que se vaya construyendo la base de datos en otros ficheros, y a la hora de realizar consultas, leer la base de datos utilizando estos índices.

Esta segunda es más general y por eso se utiliza en sistemas de base de datos, pero está fuera de los objetivos de esta serie de artículos, ya que se trata de un conjunto de programas muy complejo. Por lo tanto, comenzaremos por el primero. No obstante, consideramos que el código del libro es secuencial. De esta manera la consulta por código será inmediata, ya que la lectura secuencial, en memoria o en fichero, no será necesaria. Por lo tanto, el programa principal consistirá en abrir un fichero con base de datos, traer el archivo a la memoria, mostrar un menú en pantalla con diferentes opciones, leer una opción y llamar a una función especializada en función de la opción. En el programa 3 tenemos un programa que lo hace.

Programa 3. Programa principal.

Obsérvese que las entradas, listar, kon_cod y otras funciones no están definidas en el programa principal, pero las hemos definido como externas. La definición de estas funciones se puede realizar en 4 ficheros diferentes, 4. Tal y como se explica en el programa 5 y 6, ya que no explicaremos la función listar. También se ha configurado la función garbi_pantalla como extern, ya que la lib.base está en el fichero. Por lo tanto no se debe definir. Tampoco hay que incluirlo de ese fichero, ya que el ligando (linker) hará el enlace.

Programa 4. Introducción a los libros.
Programa 5. Por código de consulta.
Programa 6. Rutina general de consulta.

El manejo de errores se podía hacer mucho más complejo, pero lo hemos hecho lo más breve posible para dar importancia a las acciones principales.

Tenemos por tanto 6 módulos: libru.h, lib.oinarri i.c, nagus.c, introducción.c, kon_kod.c y kon_beste.c. El módulo listatu.c no aparece ya que la función de escritura es similar pero se maneja la impresora y se controla por una estructura for.

La dependencia jerárquica de estos módulos se muestra en la figura 1. En él no aparece porque el módulo libro.h es un fichero de título y por lo tanto se inserta en otros módulos mediante # include sasiord.

Figura . Interdependencias funcionales.

Para compilar primero se compilan uno a uno los cuatro módulos principales, obteniendo los correspondientes módulos de objeto .0. A continuación, se compilar y enlaza el programa principal, para este último se mencionan los nombres de los módulos de objetos obtenidos anteriormente. Como resultado del enlace se resuelven las referencias cruzadas entre módulos y se obtiene un único programa ejecutable.

Nota: Para ver las fotos correctamente, ir al pdf.

Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila