Llenguatge de programació C (XIV). Aplicacions I

En aquest capítol pretenem posar en pràctica la majoria dels conceptes analitzats en capítols anteriors i per a això programarem una aplicació, la gestió d'una petita biblioteca.

La primera decisió que ens interessa és la del registre, és a dir, la informació que mantenim sobre cada llibre. Pensem que es guardarà la següent informació: codi de llibre, títol, escriptor, any i codi de la mena de llibre. Atès que aquest registre s'utilitzarà en la majoria de les funcions, en el fitxer libru.h es realitzarà la definició del registre (veure programa 1).

Programa 1. Definició del registre.
Programa 2. Funcions bàsiques.

Amb aquest registre es realitzaran dues operacions bàsiques: llegir la informació des del teclat i escriure-la en pantalla. Compilarem aquestes funcions a part. Per tant se situaran en un fitxer, lib_basi.c en el nostre cas, tal com es veu en el programa 2.

Es pot millorar el maneig de la pantalla. Per a això, en els nous sistemes s'utilitza un sistema de finestres (windows) que permet la introducció de dades tant a través del teclat com del ratolí (mouse). Desgraciadament les biblioteques per a programar aquests sistemes no són estàndard i per això no les hem explicat aquí.

Pensem ara en quina mena d'operacions es poden realitzar en la nostra base de dades de llibres. En principi haurien d'existir almenys les següents operacions: entrada de llibres, llistat de llibres i consulta de llibres. Quant a la consulta de llibres, caldria tenir en compte els següents criteris: codi (obtenint així la informació del llibre únic), escriptor, any (acceptant intervals entre dates) i tipus. Aquestes consultes es poden realitzar de manera ràpida, d'una banda, tenint en compte que la base de dades de llibres és petita i es portarà a la memòria al principi, per a agilitar les consultes, i d'altra banda, construir índexs a mesura que es vagi construint la base de dades en altres fitxers, i a l'hora de realitzar consultes, llegir la base de dades utilitzant aquests índexs.

Aquesta segona és més general i per això s'utilitza en sistemes de base de dades, però està fora dels objectius d'aquesta sèrie d'articles, ja que es tracta d'un conjunt de programes molt complex. Per tant, començarem pel primer. No obstant això, considerem que el codi del llibre és seqüencial. D'aquesta manera la consulta per codi serà immediata, ja que la lectura seqüencial, en memòria o en fitxer, no serà necessària. Per tant, el programa principal consistirà a obrir un fitxer amb base de dades, portar l'arxiu a la memòria, mostrar un menú en pantalla amb diferents opcions, llegir una opció i cridar a una funció especialitzada en funció de l'opció. En el programa 3 tenim un programa que el fa.

Programa 3. Programa principal.

Observi's que les entrades, llistar, kon_cod i altres funcions no estan definides en el programa principal, però les hem definit com a externes. La definició d'aquestes funcions es pot realitzar en 4 fitxers diferents, 4. Tal com s'explica en el programa 5 i 6, ja que no explicarem la funció llistar. També s'ha configurat la funció garbi_pantalla com extern, ja que la lib.base està en el fitxer. Per tant no s'ha de definir. Tampoc cal incloure-ho d'aquest fitxer, ja que el lligant (linker) farà l'enllaç.

Programa 4. Introducció als llibres.
Programa 5. Per codi de consulta.
Programa 6. Rutina general de consulta.

El maneig d'errors es podia fer molt més complex, però l'hem fet el més breu possible per a donar importància a les accions principals.

Tenim per tant 6 mòduls: libru.h, lib.oinarri i.c, nagus.c, introducció.c, kon_kod.c i kon_beste.c. El mòdul listatu.c no apareix ja que la funció d'escriptura és similar però es maneja la impressora i es controla per una estructura for.

La dependència jeràrquica d'aquests mòduls es mostra en la figura 1. En ell no apareix perquè el mòdul lliuro.h és un fitxer de títol i per tant s'insereix en altres mòduls mitjançant # include sasiord.

Figura . Interdependències funcionals.

Per a compilar primer es compilen un a un els quatre mòduls principals, obtenint els corresponents mòduls d'objecte .0. A continuació, es compilar i enllaça el programa principal, per a aquest últim s'esmenten els noms dels mòduls d'objectes obtinguts anteriorment. Com a resultat de l'enllaç es resolen les referències creuades entre mòduls i s'obté un únic programa executable.

Nota: Per a veure les fotos correctament, anar al pdf.

Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila