ASESOR ADOLFO ESCALONA BUENBIA. HECTOR LOZANO MORENO

UNIERSIDAD AUTONOMA METROPOLITANA UNIDAD IZTAPALAPA DIVISION DE CIENCIAS BASICAS E INGENIERIA DEPARTAMENTO DE ELECTRUNICA REPORTE DE PROYECTO DE INV
Author:  Luz Aguilar Crespo

0 downloads 126 Views 2MB Size

Recommend Stories


Noemi Escalona Acevedo
BRANDADA DE BACALAO, Noemi Escalona Acevedo por Esta variante de la receta tradicional de la Brandada, sustituye las patatas cocidas por patatas asa

Resumen. Summary. Hector A. Figini
I N T RSenilidad O D y Udemencia C C I O N Senilidad y demencia Hector A. Figini Resumen Al terminar este siglo se evidencia un aumento en la propor

Story Transcript

UNIERSIDAD AUTONOMA METROPOLITANA UNIDAD IZTAPALAPA

DIVISION DE CIENCIAS BASICAS E INGENIERIA

DEPARTAMENTO DE ELECTRUNICA REPORTE DE PROYECTO DE INVESTKSACION

NOMBRfhWANEJADOR DE BASES DE DATOS, IMPLEMENTADO EN B T R I E V E ~

ASESOR ADOLFO ESCALONA BUENBIA. HECTOR LOZANO MORENO.

ALUMNO :

Realizada durante et trimestre 91-0 y 92 4 (del 17 de Septiembre al 27 de Matzo de 7 992)

iNTRODUCCION A lo largo de nuestra estancia, en esta universidad, nos hemos dado cuenta que en las asignaturas de Introducciónal Diseño de Bases de Datosy ad como Analisis y Diseno be Sistemas de Computacibn. La herramienta que se ofrece (QpenAcces, DBase), no es lo suficientemente adecuada, para una mejor aplicación de los cursos antes mencionados.

Teniendo en contraparte sistemas en el mercado como; Informix-SQL, Oracle, FoBase,. ..etc., que son una herramienta idonea para aplicaciones de gran magnitud y no poder ser utilizada esta herramienta, por la restricción de equipo de computo que brinda la Universidad. Deacuerdo a las razones expustas anteriormente, nos dimos a la tarea de realizar como Proyecto Terminal, un sistema adecuado y de facil mampulacion, para las necesidades que requieren los cursos ya mencionados, es decir, el poder ser utilizado bajo las caracteristicas del equipo que brinda la Universidad. Otro factor que influyo para tomar esta decisibn, fue el hecho de que no se contaba con software de apoyo a la docencia, para los cursos que se nombraron.

En si, estasbieron algunas de nuestras inquietudes, por las cuaies nos abocamos a la realización de este proyecto, como aportación a la lmtitución a la que pertenecemos. Como inquietud personal fue el ver, que en el Campo de Trabajo, una gran parte es el manejo de Bases de Datos, y as¡, con el desarrollo del proyecto, ampliamos en gran parte nuestros conocimientos en esta Area de la Computación.

OBJETIVOS

Brindarle al usuario un sistema de apoyo, para los cursos de Inboducción al Diseño de Bases de Datos y Analisis y Diseño de Sistemas de Computación, mediante:

- La creación de tablas, para su Base de Datos. - Manipulación(altas, - Lo anterior en

bajas, cambios y consultas) de estas tablas.

un ambiente sencillo y amigable para su manejo.

- Generar codigo en lenguaje C, para obtener asi

un sistema abierto, es decir, el usuario pude hacer uso de ese codigo generado para apiicacioies particulares.

DESARROLLO TEORICO QUE ES UN SISTEMA DE MANEJO DE BASES DE DATOS. Un sistema de manejo de bases de datos (en ingles, DBMS, database management system), consiste en un conjunto de datos relacionados entre si y un grupo de programas para tener acceso a esos datos. El conjunto de datos se conoce comunmente como base de datos. Este contiene información acerca de una empresa determinada. El objetivo primordial de un DBMS es crear un ambiente en que sea posible guardar y recuperar información de la base de datos en forma conveniente y eficiente. Los sistemas de bases de datos se diseflan para manejar grandes cantidades de información. El manejo de los datos incluye tanto la definición de las estructuras para el almacenamiento de la informacióncomo los mecanismos para el manejo de la informacibn. Ademas, el sistema de base de datos, tanto controla las caidas del sistema como controla los intentos de acceso no autorizado. Si los datos van a ser compartidos por varios usuarios, el sistema debe evitar la posibilidad de obtener resultados anónimos.

Debido a la importancia que tiene la información en casi todas las organizaciones, la base de datos es un recurso valioso. Esto condujo al desarrollo de un gran número de conceptos y técnicas para manejar los datos en forma eficiente. En particular, nuestro proyecto esta basado en el modelo EntidadRelacion, que la manipulacionque hace de los datos es en forma de tablas.

BTRIEVE Búieve es una herramienta, bastante eficiente para hacer un buen manejo de bases de datos, el cual utiliza una fucion con determinado nomero de parametros, los cuales van hacer una determinada operacion sobre alguno de los registros de nuestra base de datos, lo anterior se hace de acuerdo a un codigo de operación, que va indicado en alguno de los parametros, como se muestra a continuación: BTRV(Codig0 de 0peracion,param2,param3,param4,param5,param6) Una gran ventaja de este DBMS, es que tiene la cualidad de tener un interface con alpnos lenguajes de programación como son; Cobol, Basic, Pascal y C, en particular nuestro proyecto se implemento utilizando el DBMSBtrieve con su Interface con elLenguajeC. Por otra parte, las llamadas a Meve, como se mostro con anterioridad, nos pueden hacer: creacion de archivos, apertura de archivos, cerrado de archivos, borrado de registros, incerción de registros, etc.,todo lo anterior especificando adecuadamente los parametros de la funcíbn BTRV.

METODOLOGIA SEGUIDA

El desarrollo del sistema se planteo en dos partes, usando técnicas modulares, para lograr la obtención de un sistema abierto, es decir, independencia de modulos.

Primer Modulo

Como primer modulo se realizo, un creador de tablas, en el cual se crean archwos Btneve con todas sus especificaciones, además se deja en codigo de lenguaje C, las estructuras para manejar los datos, así como funciones, para verificar la integridad de los atributos de cada entidad.

DESARROLLO.

La infomadon necesaria para la consúuccion de los archivos en codigo de Lenguaje C y el archivo Btrieve se le captuara en una estructura de la siguiente forma: Un nodo principal con el nombre de la entidad y un apuntador a una cola doblemente ligada, que contiene el nombre de los campos, tipo, longitud en bytes, su caracteristica de llave y su integridad de duplicidad y nulidad.

Enüdsd

En la captura de esta informacidnque brinda amigabilidad con el usuario, además de su flexibilidad, se maneja un sistema de menu de barras. Cuando un tipo de uno de los atributos de la entidad es una cadena de caracteres, se espera del usuario un número que indique la longitud de esta, para los otros tipos de datos, se indican las longitudes manejadas por Btrieve como tipos extendidos. Al definirse una llave primaria se colocan sus caracteristicas de integridadtanto de no nulidad como de no duplicidad.

Con la infomacion dispuesta de la siguiente manera

Nornbrede la Entidad : ....................... Llave Integridad Nombre atributo Tipo Longitud Primaria Foranea Nula ......... .. ......... .........

No Nula No

.. ..

Se crea el archivo con el codigo C de nombre la entidad con la extension ".H", conteniendo la estructura de la entidad, con los atributos como campos; para garantizar la unicidad de los campos se agrega un guidn bajo y las dos primeras letras del nombre de la entidad como sufijo. Con los atributos definidos como llave primaria y llave foranea se crean las estructuras respectivas, la primera tiene que existir para la consúuccidn del archivo. Btrieve requiere un segmento para la indexacidn; de definicion de la estructura de llave primaria, lleve como sufijo un guión bajo y PK; los nombres de los campos se mantienen iguales a los de la estructura principal. En caso de estar definida la llave foranea se define una estructura con este fin, manteniendo la nomenclatura seguida; como wñjo de la esúuctura se coloca un guídn bajo y las letras FK, identificadoras de este tipo de llave. La existencia de una llave foranea no es indispensable. Se proporciona una función, que realiza la comparacidn de los campos definidos como no nulos, de acuerdo a su valor respectivo. En caso de cumplirse la condicidn de no nulidad se regresa el valor correspondiente. Esta es una forma de verificar la integridad de los atributos, aunque solo se trate del caso de la nulidad; la verificacion de la duplicidad, es mas conveniente realizarla al tiempo de codificar la aplicacidn. Toda la codiñcacion en lenguaje C es utilizable para la programación más transparente de las aplicaciones, pudiendo el usuario accesar a estos archivos para modificarlos de acuerdo a sus necesidades particulares.

I

Se puede realizar la creacidn de un archivo M e v e de dos formas, la primera es creando un archivo de especificaciones del registro y de los segmentos para que pueda indexar Búieve. Este archwo se proporcíona a la librena Btrieve de utilidades ( Butil ), que crea el archivo para el almacenamiento de los datos. Una segunda forma es mediante una llamada Btrieve de acuerdo a la informacidn capturada, ubicada en el arreglo de registros que reconoce Btrieve, la identificación de las diversas especificaciones se la hace con codigos binarios, manejo habitual en este manejador de archivos. Lainformación sucesiva que se va capturando se la va almacenando al mismo tiempo, en forma de un diccionario (en archivos Btrieve), por un lado las entidades y por otro los nombres de los campos con sus tipos. Permitinendo de esta forma realizar una corrección de los archivos, con auxilio del modulo en cuesüon; tener conocimiento de la realcion entre las relaciones y atributos definidos anteriormente con esta herramienta.

Atnbutos :

Entidades : i

h

Ctv

t

Chr

Nombre

Nombre Tipo

Lóngitud

&Entidad

I

Como datos generales en los archivos de Btrieve se, toman como constante el tamano de la pagina 512 Bytes, valor por omision; registro no variable, no rnodiflcable; indexar por una llave de tipo estendido, segun un orden ascendente de acuerdo al codigo ASCII.

Segundo Modulo

El segundo modulo, es la creacion de un catalogo, que hace el manejo de las tablas, en sus modalidades de Mas, Bajas, Cambios y Consultas, haciendo uso de las tablas ya creadas por el primer modulo.

Asi este modulo se subdividio a su vez en cuatro submodulos.

Con este módulo se pueden hacer las cuatro operaciones a las tablas creadas con el primer módulo. En una Alta con la ayuda de un arreglo de apuntadores a cadenas, se capturan todos los datos correspondientesa un registro de la tabla, estos datos son convertidos a cadenas de bits que estén en formato de btrieve, luego estos datos se compactan en una s61a cadena, la cual ñnalmente es insertada en la tabla. Para las otras operaciones se tiene que hacer un acceso a la tabla de btrieve trayendo el registro con la llave deseada, el registro se lo desgioza en el arreglo de apuntadores, estas cadenas desglozadas estan en formato imprimible que es desplegado en pantalla.

En caso de realizar una Bala y el usuario estar de acuerdo se elimina el registro de la tabla. Si se esta realizando una Consulta, la operación no presenta mayor

problema, pues simplemente se trata de mostrar ai usuario el contenido del registro requerido. La operación que presenta mayor dificultad es un Cambio, una vez que se tienen las cadenas de bits se las tiene que mostrar al usuario, permitiendo a éste modificar el contenido.

Cornpieta la rnodiñcacibn, se tiene convertir todos los datos necesarios a formato de btneve, luego las cadenas de bits compactaclas en una sola y esta cadena cambiada entragarla a btneve para que ejecute la modicación en la tabla correspondiente.

t

CONCLUSIONES

Se puede ver con toda claridad el enorme auxilio que proporciona el uso de un manejador de archivos como Btrieve para el desarrollo sistemas, tanto por la velocidad, como por el numero de operaciones. Realizar la labor de manipulacion de los datos sin una de estas herramientas, tan solo con el lenguaje anfitrion, como por ejemplo, en nuestro caso el Lenguaje C, resulta por demásdiñcuitoso. No hay que olvidar que uno de los costos mas importantes se centra en el mantenimiento de los sistemas, por lo que un adecuado diseno es fundamental. Una de las cuestiones a las que se dio su debida importancia, luego del diseno del sistema, fue la depuracion del mismo hasta lograr un refinamiento adecuado, despues de la implementacion, se procedo a probario, verificando que los codigos obtenidos sean utilizables y trabajen adecuadamente apegandos a las definiciones. Conmotivodedar la mayor claridad posible al usuario, se restringen algunas posibilidades que brinda Btneve para sus archivos, pero esto es mas adecuada de acuerdo a nuestros fines, pues no se exige un conocimiento profunto en cuanto al manejador de archivos por parte del usuario. Segun se menciono en la introduccion, para los sistemas relacionados con bases de datos, se pueden hacer uso manejadores de venta comun en el mercado, pero por falta de recursos dentro de la universidad, no se puede realizar un sistema con uno de ellos que cumpla con el objetivo del proyecto de proporcionar ai usurio interesado, una harramienta de orientacion en la programación de una base de datos.

La falta de recursos un poco mas adecuados, impide en muchos casos, dejar los sistemas con mayor presentacion, por ejemplo, bajo un ambiente Windows, con todas sus utilerias de apoyo. Trabajar fuera de los avances en el area, es quedarse rezagado y aislado, no estando nuestra formación acorde con las necesidades del mercado en el que nos desarrollaremos posteriormente,

t

i

BIBLIOGRAFIA:

Autor : Henry F. Korai, Abraham Silberschatz. Título : Fundamentos de Bases de Datos. Editorial: Mc Graw Hill. Edición : Primera. Capitulos: Del 1 ai capítulo 6. Autor : Miguel Angel Guzman L.,Walterio Lopez O., Jorge Lozano TCtulo : Notas de lntroduccion a las Bases de Datos. Editorial: UniversidadAutonoma Metropolitana. Edición : 2 de febrero de 1989. Capitulos: 1 y 2 . Autor : C.J. DATE. Titulo : Introducción a los SISTEMAS DE BASES DE DATOS. Editorial: Addison-Wesley Iberoamericana. Edición : Traducción de la Tercera edición. Capítulos: Del 1 al capítulo7.

i

i

i

I

MODULO DE CREACION DE LAS TABLAS

MANUAL TECNICO Una de las mejores formas para la creación de las tablas, teniendo en cuenta que se trata de un sistema abierto, es una estructura de datos específica para este módulo, en forma de registro : typedef stnict inf-tab { char *nom-var,

tipo; int long-b; char ND, NN, PK, FK; 1*apJnf-tab, infor-tab;

Por comodidad en los movimientos de captura, estos registros se los distribuye en una cola doblemente ligada; un apuntador a la siguiente y otro ai anterior registro. Además, esta cola doble es apuntada por un registro que contiene el nombre de la tabla : typedef struct cab-tab { char *no m-ta b; pt-nodo ¡-tab; 1 *ap-cabtab, cabeza-tab;

t

CAPTURA DE LOS DATOS.Inicialmente, se realiza toda la captura de la información, en la estructura antes mencionada. Se pide el nombre de entidad, con un precedimiento de captura validada, además de la condición de que si se presiona la tecla ESC (ASCII simple 27) o la tecla de SHIFT+TAB (ASCII doble 15) se sale del módulo. Capturado el nombre de la entidad, se procede a pedir el nombre del atributo, con la salida de ESC, SHIFT+TAB, TAB, ENTER. Si la salida es por ENTER, a continuación se pide el tipo del atributo, si el atributo tiene un tipo de cadena (string), se captura la longitud del segmento en caracteres o bytes, para los otros casos se coloca inmediatamente las longitudes, sin preguntar al usuario; (caracter (char) 1 byte; entero (integer) 2 bytes; fecha (date), hora (time), flotante (float) 4 bytes.), se captura qué tipo de llave es, si es primaria o es foranea esperando las elecciones si o no. Luego se pide la integridad de las llaves (con menus de barras encadenados), si es llave no duplicada, no nula, siempre esperandose las respuestas de si o no. Si un atributo se define como llave primaria automaticamente se difine la llave como no nula y no duplicada.

Al tener completa la informaciónde un registro, se inserta el nodo en una cola doble y se procede a capturar otro registro. Si al capturar un nombre se sale por TAB y se esta en una posicidn intermedia de la cola doble, se permite recapturar la información contenida en el nodo siguiente. Lo mismo ocurre si se presiona las teclas SHIFT+TAB, sólo que en este caso se pasa a tener en captura el registro anterior. En caso de apretar ENTER en un nombre de atributo vacio y si se esta capturando el último registro se tiene que proceder a analizar la información, pero si se trata de un registro intermedio este registro se tiene que borrar de la cola doble.

Para salir de la operacián actual y regresar a la anterior se espera que el usuario presiones la tecla ESC. Completa toda la información, se procede a analizarla, de acuerdo a las operaciones elegidas por el usuario; no se analiza al mismo tiempo de la captura, porque según la accidn del usuario se trabaja de diferente manera:

i

.- ..

- ... -

.. .

..

I

- .. ..

EL ARCHIVO DE DEFINICIONES.Una primera opción que se brinda al usuario; es crear un archivo con nombre de la entidad y se coloca la extensión ".H, luego se escribe la estructura con nombre de la entidad. A cada uno de los campos se agrega un sufijo; un guión bajo y las dos primeras letras de la eMdad, esto con el fin de garantizar la unicidad de los nombres y dar más claridad al usuario. Para la creación de la estructura para llave primaria, se coloca como nombre de, ésta el nombre de la enüdad y un sufijo de un guión bajo y las letras PK, se recorre la doble cola buscando atributos que están definidos como llaves primariasy se los escribe en el archivo, terminado el recomdo se cierra la estructura. Dado que no es indispensable la definición de llaves foraneas, se cuentan las que cumplen con la condición; en caso de existir alguna, se escribe la estructura en el archivo. Como nombre de la estructura, al igual que en el caso anterior, se coloca el nombre de la entidad con el sufijo del guión bajo y las letras FK, luego se cierra la estructura. La función que verifica la integridad; el caso de la no nulidad, tiene el nombre de valida-campos, con el sufijo del guión bajo y las dos primeras letras del nombre de la entidad, se buscan todos los nodos que cumplan con ia condición de no nulidad, al encontrar uno se revisa su tipo, de acuerdo a éste se hace la comparación con el caracter cero 6 el valor numérico cero. Se busca que la funcidn al hallar un valor nulo despliegue un mensaje indicando el error. Reconida toda la cola se procede a cerrar la funcidn.

La finalidad del archivo es proporcionar al usuario facilidad al hacer sus aplicaciones, por lo que modificar estos archivos no presenta ninguna dificultad; se tiene una claridad absoluta en cuanto al código. Con fundamento en esto, por ejemplo, en la función de la verificacidn de integridad, se puede cambiar la salida de mensajes, por retorno de codigos de eror adecuandos. El archivo contiene lo indispensable para poder hacer programas en Lenguaje C, lógicamente ligado con el manejador de archivos Btneve. Es un archivo esencial, por lo que se trata del resultado de una evaluación cuidadosa de las posibles necesidades en cuanto al lenguaje anfitrión C.

No se crea una función para verificar la no duplicidad, puesto que en caso de ser llave primaria, sería una llave de indexacidn y en caso de duplicidad btneve regresa un estado de error; por otra parte si no es llave primaria, habría que recorrer toda la base de datos; como ambas situaciones son difíciles de manejar en forma de función preestabiecida,y Bsto es más facil verificarlo al tiempo de realizar la aplicación; donde no presenta niguna dificultad, se deja al usuario para que la realice.

EL ARCHIVO DE DESCRIPCIONES

.I

Un archivo de descripciones que se proporciona a btneve contiene la información del registro en forma general, su tamaflo, si es variable, el número de segmentos y el tamaflo de la página de lectura de btrieve. Posteriormente, se definen los segmentos que son las llaves, los segmentos son bloques de bits por los cuales se indexa las tablas btrieve; es necesario especificar : la posicidn del inicio de cada uno de los segmetos, si es modificable, si se permite duplicidad, tipo, patr6n para indexar; para los fines fijados en el sistema se toma la forma por omisión, código ASCII; se debe identifacar también, si el segmento puede ser nulo, y si la llave va tener varios segmentos.

Para llenar esta informacidn, una vez creado un archivo con el nombre de la entidad y la extensión ".BTR"; se cuenta el número de llaves tanto primarias como foraneas, y además, se encuentra el tamaño del registro. Con estos datos, se coloca la especificacidn general del registro; tomando como fijas la no varlacibn del tamaflo del registro, la no variación de las llaves y el tamaño de la página de lectura de 512 bytes.

.

Seguidamente, se recorre la cola doble buscando las llaves primarias, al mismo tiempo que se tiene la contabilidad de la posición inicial de cada atributo. Por definición de llave primaria; se especifican los segmentos como no nulos y no duplicados. Según el número de llaves se especifica si existe o no segmentación y la posicidn inicial de cada uno de éstos, que va de acuerdo con ta longitud de los segmentos. A continuacibn, se tienen los detalles de los segmentos de las llaves foraneas en caso de que existan, para esto se usa el mismo principio que el de las llaves primarias, sólo que en este caso la nulidad y la duplicidad, se colocan de acuerdo a la información contenida en los registros de la cola doble.

Este archivo proporcionado a la utilería M e v e BUTIL en la forma : BUTlL CREATE archivo-destino archivo-creado

crea las tablas btrieve necesarias para la base de datos. La creación de tablas con esta uülerla, puede ser en ocaciones moroso y obscuro, pero permite ver al usuario en forma directa a nivel de bits, cómo se tienen dispuestas las llaves. Con ayuda de esta uülerla y pequefías modificaciones al archivo antes detallado, se puede tener tablas con nuevo formato que puedan almacenar los datos anteriores sin mayor dlñcultad.

LA CREACION DE LAS TABLAS

.-

Mediante una llamada a btneve, dando la especificaciones necesarias en el formato que es reconocido por éste, un arreglo de registros : struct KEY-SPEC { int KEY-POS ; int KEY-LEN ; int KEY-FLAG ; char NOT_USE[4] ; char KEY-TYPE ; char RESERVE1[5];

1; struct FIL-SPEC {

int REC-LEN ; int PAGE-SI2 ; int NDX-CNT ; char NOT_USE2[4] ; int FILE-FLAG ; char RESERVE2[2] ; int PRE-ALLOC ; struct KEY-SPEC KEY_BUF[8]; /" Para una Pag de 512. */

1; Como en los casos anteriores, toda la informaciónse la extrae de la cola doble. Se llena la informacibn general de la tabla, para lo cual se halla su longitud, número de llaves primarias como foraneas. Al igual que en el caso del archivo de especificaciones se consideran los registros, de longitud no variable, las llaves no modificables, y el tamafio de la página de lectura fija.

Inmediatamente, se procede a asignar la infomacidn que corresponde a cada uno de los segmentos de las llaves, comenzando por la llave primaria, se mencionan la posici6n inicial, tipo, longitud, duplicidad, nulidad, (las dos úiümas según las definiciones del usuario), la forma de segmentación, como patrón de indexacidnse toma el cddigo ASCII. El tipo de la informacidn con que trabaja es el denominado por btrieve tipo extendido.

La creación de las tablas de esta manera, es de gran utilidad al usuario, permite crearlas sin mayor dificuttad con sólo definir adecuadamente sus necesidades. Una transparencia como la brindada, concede a los usuarios no . tener un conocimiento prohindo en el manejo de la infomacidn, en cuanto a su ordenación, forma de disposicón de los bits dentro del registro.

I

I

ALTA DE LA ENTIDAD CON SUS ATRIBUTOS

.-

Se tiene una base de datos que contiene la información, con los archivos de nombres "ENTIDAD.BTR y "ATRIBUTO.BTR, para las entidades y los atributos respectivamente. Las llaves de la base de datos estan en orden secuencial. Para dar de alta antes que nada se tienen que abrir los archivos. Se intenta accesar al úiümo registro, si esta operacien da una respuesta de fin de archivo, significa que la base esta vacia y hay que inicializar las numeración de las llaves, en caso contrario se incrementa en uno la clave obtenida.

En ésta situación, como sólo se desea la Última clave, se hace una lectura rápida, incrementando en cincuenta el código de operaciones de btrieve. Encontradas la claves necesarias, se procede a dar de alta la entidad, en un registro auxiliar se coloca la llave y luego se copia el nombre de la entidad rellenando los espacios vacios con caracteres nulos. Lleno el registro auxiliar se procede a insetario en la tabla de entidades. En caso de no existir ningún error, se da de alta los atributos; en la tabla de atributos se tiene que colocar la llave foranea que viene siendo la llave principal de las entidades. Como hay que dar de alta vanos atributos, se recorre toda la cola doble, que son todos los atributos. Cada uno de los registros se copia a un auxiliar, campo por campo, y además se coloca la llave primaria que es indMdual a cada atributo, se calcula la llave incremantado en uno la anterior y como foranea se coloca la llave única, teniendo el registro completo se inserta en la tabla de atributos. En caso de existir algún error en el acceso a la base de datos se despliega un mensaje indicando el estatus de error regresado por Meve.

c

ARCHIVOS PARA INCLUIR EN EL MODULO

.-

# include # include # include

#include #include #include #include



Y

I

CONSTANTES UTILIZADAS EN EL MODULO NUMERICAS

.-

.-

# define t-reg 11 4

#definet-sf 2 # define t-csf 3 #deñnet-na 8 # define t-cna 13 # define t-cnom 15 # define t-nurn 2 # define t-cfun 17 #defineBEEP 7 # define BORDE 1

CADENAS f"

.-

lnicializacion de los arreglos a manejarse en los menus de barras */

Tipos de datos a permitidos en las estructuras que se estan creando. */ char *tipo0 = CSTRING", "CHAR", "INTEGER", "FLOAT", "DATE", "TIME);

/"

P Opciones que se pueden presentar dentro de la integridad. */ char *si-non = c' NO ", " SI '7;

Teclas opcionales para la salida del proceso de captura. */ int op-salidau = (0x00 1B,0x0009,0x0F00 ,Ox000D,OxOOOO};

/"

PROCEDIMIENTOSY FUNCIONES UTILIZADAS P */

*

.-

Funcion que abre un archivo para escritura, con un nombre determinado

FILE *abre-arch(nomarch) char "nom-arch;

r

Funcion que cierra un archivo, que tiene como apuntador el ap-arch. */

cierra-arch (ap-arch) FILE "ap-arch;

Procedimiento que escribe en el archivo, apuntado por ap-arch, la P information de cada variable segun su tipo, los datos estan direccionados por un apuntador a un registro ¡ni-tab. */ escnbe-ca mpo(ap-tab ,ap-arch) ap-inf-tab ap-tab; FILE *ap-arch;

Procedimento que coloca un caracter en la cadena destino y a r" conünuacion concatena caracteres de la cadena origen. */ coloca-sufijo (SI ,s2,c,pos,n) char "sl, "s2,c; int pos, n;

E

4

t" Procedimiento que escribe en un archivo la estructura con sus campos, los cuales se los lee de la cola doblemente ligada. "/ crea-estnictura(estruct, ap-arch) cabeza-tab estruct; FILE **ap-arch;

1

Funcíon que crea las estructuras con todos los campos que pertenecen a f' la LLAVE PRIMARIA de busqueda, en el archivo de texto apuntado por ap-arch. */ crea-llave_pnm(estruct, ap-arch) cabeza-tab estruct; FILE *ap-arch;

f' Funcion que crea las estructuras con todos los campos que pertenecen a la LLAVE FORANEA de busqueda, en el archivo de texto apuntado por ap-arch. */ crea-llave-foran(estnict, ap-arch) cabeza-tab esúuct; FILE *ap-arch;

f' Procedimiento que crea las funciones para validar la integridad de los campos del registro (estruct) de la tabla, para valores numericos se compara con el valor cero y las variables Ub tipos caracter, string, fecha, hora con la cadena nula. Se escribe en el archivo de tipo texto apuntado por ap-arch. "/

crea-func-integridad (estruct, ap-arch) cabeza-tab estruct; FILE *ap-arch;

<

....................................................................................... * Parte del codigo que genera el archivo de especificadionespara generar la tabla de BTRIEVE. ********f+******#**********************************************~******************** I

r' Procedimiento que cuenta el numero de LLAVES PRIMARIAS Y FORANEAS de los datos que se encuentran en la cola, la cola esta apuntada por estnict; ademas encuentra la longitud de la estructura en definicion. */

obtiene-datos (estnict, nPK, nFK, 1-reg) cabeza-tab estruct; int *nPK, *nFK, *'_reg;

/" Escritura en el archivo (ap-arch) de los datos de deñnicion de los campos correspondientesa llaves (apuntados por ap-tab), resguardando todas las caracterisücas de integridad, la posicion se cuenta en bytes dentro del registro (pos). */

escribe-def-campos(ap-tab ap-inf-tab ap-tab; int pos; FILE *ap-arch;

,pos,ap-arch)

/" Procedimiento que realiza la escritura en el archivo (ap-arch) de las definiciones de las llaves de indexado, a ser luego procesadas con BTRIEVE, los datos se localian en una cola doble apuntada por un campo de estruct. *I

crea-descnpciones(esáuct, ap-arch) cabeza-tab estruct; FILE **ap-arch;

I

152459 ................................................................................... &

* Procedimientos de captura de los datos, por medio de menus de barras (procedimientos en LIB_MEN.C) y lectura validada una logiftid determinada (CAPT.H), para la generacion de los archwo manejables con BTRIEVE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

I

Despliega los datos del campo del registro apuntado por ap-tab, su r' nombre y diversas caracteristicas de cada uno : tipo de dato, longitud, tipo de llave, duplicidad, nulidad */

despliega-batos-carnpo(ap-ta b,lin) ap-inf-tab ap-tab; int lin;

Despliega los datos contenidos en la cola de captura de datos del r' registro, nombre de los atributos y sus caracteddcas de cada uno :tipo de dato, longitud, tipo de llave, duplicidad, nulidad */ despliega-datos(estruct, lin) cabeza-tab estruct; int Iin;

I" Se pide la memoria necesaria para almacenar una estructura con la informacion de los campos, el espacio para el nombre se inicializa con un valor nulo. Y la longitud en bytes del campo correspondiente se inicializa en cero. "1

pide-mem (ap-tab) ap-inf-tab *ap-tab;

r" De acuerdo a una posicion en la cola de la estructura de captura, se regresa a la infomacion del campo obtenido antes del actual, y a su posicion anterior dentro de la pantalla. */

retrocede(estruct, ap-ta b , pos-ta b ,lin) cabeza-tab estruct; ap-inf-ta b *ap-ta b; pt-nodo *pos-tab; int *lin;

/" De acuerdo a una posicion en la cola de la estructura de captura, se avanza a la infomacion del campo obtenido despues del actual, y a su posicion siguiente dentro de la pantalla. */

avanza(estnict,ap-tab,posJa b,lin) cabeza-tab esáuct; ap-inf-tab *ap-tab; pt-nodo *pos-tab; int *lin;

P Mediante llrnados a m e w de selection de barras se obtienen las eleciones del usuario, para las dktintas caracteristicas de integridad, de cada uno de los campos de la estructura que se esta capturando : (tipo de llave primaria, foranea-; duplicidad; nulidad). */

-

selec-¡ntegr(apJab) ap-inf-tab *ap-tab;

I

r' Prodecimiento que con un menu de barras permite la seleccion de un tipo de variable permitido para el campo en captura, de acuerdo a la eleccion se asigna el sefíalizador correspondiente, y en el caso de ser un string se captura la longitud de este. */ proceso-barras(estruct,ap-tab,pos-tab, ap-cab-tab estruct; ap-inf-tab *ap-tab; pt-nodo "pos-tab; int "Iín;

lin)

Elimina un nodo de la cola que contiene la informacion de los distintos r" campos de la estructura que se esta creando, la cola esta apuntada por estruct, con pos-tab se apunta al nodo actual de la cola (infomacion general), y ap-tab es la informacion propiamente dicha. Si la estructura tiene un solo nodo se elimina este y se regresa un apuntador nulo. */ elimina-variable (estnict, ap-tab, pos-tab) ap-cab-tab estruct; ap-inf-tab "ap-tab; pt-nodo *pos-tab;

i" Proceso que recibiendo la estructura de la tabla llena de informacion crea el archBro en codígo Lenguaje C, con las esbucturas principal y de llaves; la funcion de verificadon la integridad de sus campos. */

crea-arch-deíin (tabla) cabeza-ta b tabla ;

Proceso que recibiendo la esúuctwa de la tabla llena de informacion crea el archivo de descnpcion para la creacion de los archivos BTRIEVE, para lo que se debe usar la utilena BUTIL. */ i"

crea-arch-descrip (tabla) cabeza-tab tabla;

Se permite la eleccion de los procesos que se van a ejecutar con la informacion de la tabla, que se encuentra en la estructura disenada como un nodo principal y una cola doble. */

I"

seleccionjrocesos (tabla) cabeza-tab tabla;

I"

Procedimiento que engloba todo lo referente a la peticion de datos segun sistemas de menus y en caso necesario con lecturas restringidas, ademas del armado dentro de la estructura de toda esta informacíon. Establece los movimientos permitidos dentro de los campos de captura. */ sistema-menu ( )

*

Funciones que operan con BTRIEVE para dar de alta entidades y atributos, los datos se los obtiene de la estructura de captura ( un nodo y el apuntador a la cola ) se incluyen los registros creados por este programa, tanto los principales como los de llaves. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

/

L

Procedimiento que da de alta los atributo de una entidad con la llaves de c" entidad y la del ultimo atributo que se üene hasta el momento archivado, los datos se archivan en el archivo apuntado por arch-&. */ aita-atri butos (estruct,arch-atr , llave-ent ,llave-atr) cabeza-tab esúuct; char "arch-atr; struct entidad-PK llave-ent; struct atributo-PK llave-atr;

/" Se da de atta la entidad con sus atributos que se encuentran en estructura, los datos de las llaves se asignan de forma correlativa, recuperando velozmente las llaves de los Mimos registros de ambos archivos. */

altas-ent-atr (estruct) cabeza-tab esúuct;

152459

r*****~**fc******~**M*************M**~*~***~ *

Funciones para la cracion de un archivo BTRIEVE, haciendo haciendo un llamado a este, luego de la asignacion de la informacion que se encuentra en la estructura de captura. /

* * * * f c * M * * * ~ M ~ ~ * M * * * * * * * ~ * * * * * * * * * ~ ~ M * * ~ * * * M * * ~ ~ * ~ ~ M * *

asigna-especif-ca rnpo (ap-h b,pos,llav-esp) ap-inf-tab ap-tab; int pos; struct KEY-SPEC *Ilav-esp;

P Procedimiento que realiza la asignacion de la informacion a la estructura requerida por BTRIEVE, para la creacion de un archivo BTRIEVE, la informacion se extrae de la estrucaira de captwa. */

asigna-especificaciones (estruct,buf-arch) cabeza-tab estnict; struct FIL-SPEC *buf-arch;

r" Procedimiento que exbae la informacion necesaria de la estructura de captura, y la deja en el formato que Utiliza btrieve para la creacion de los archivos; con este formato se crea las bases de datos. El archivo que crea este procedimiento tiene la extension "DBS". */

crea-arch-búv (estruct) cabeza-tab estmct;

p?**ñ1Mm*****w***w*#***~*mw***~~~*m*~w*ww******

*

Estructura y funciones del archivo que contiene las operaciones básicas de la cola doble.

m

~

*

*

*

*

~

*

*

*

~

~

m

*

#

~

*

~

~

~

~

*

w

*

*

*

*

*

*

# include ~stdlib.h>

typedef siruct nodo { char *infor; struct nodo *ant, *sig; 1"pt-nodo;

Funcion para insertar un nodo en la cola cicular, devuelve el apuntador nodo insertado, se espera un apuntador al inicio, y la posicion de insertion; cuando se comienza se espera que el apuntador inicial sea nulo. */

P

pt-nodo inserta (inic, pos) pt-nodo *ink, pos;

Funcion que elimina un nodo indicado de la cola circular, devuelve un apuntador al nodo inicial, existe proteccion para una cola vacia. Al eliminar el ultimo nodo regresa un apuntador Nulo. */

P

pt-nodo elimina (imc, nodo) pt-nodo *inic, *nodo;

P

Libera una cola cicular de la memoria, con el apuntador inicio y regresa un valor nulo. */ pt-nodo libera (inic) pt-nodo *ink;

/*

*

*

*

*

*

~

*

~

~

1

i

MANUAL DE USUARIO Antes de poner en funcionamiento se tiene que cargar el programa BTRIEVE residente, con longitud de página de lectura de 512 Bytes (tamaflo considerado por omisión). Btrive se carga, tecleando BTRIEVE cuando se encuentra en el prompt del sistema operativo. Una vez que se encuentra en el ambiente , el sistema se coloca en posición de recibir el nombre de la entidad, el cual puede tener como máximo quince caracteres, un vez tecleado el nombre se tiene que apretar ENTER o TAB, para continuar; si se desea salir se tiene que presionar ESC. Luego el usuario está en condícíones de ingresar los atributos, comenzando por los nombres, los cuales pueden ser de hasta quince caracteres, si la cadena es de menor longitud, se tiene que presionar ENTER. Con lo que se presenta un menu de barras con todos los tipos permitidos. En este menu se puede navegar con teclas : FLECHA ARRIBA, FLECHA ABAJO o LA BARRA ESTACIADORA, situado en el tipo deseado se tiene que presionar ENTER, otra forma de elecci6n es presionado la tecla resaltada del tipo. En caso de haberse elegido el tipo String, el usuario tiene que indicar la longitud del string, que es un numero de dos cifras. Para los otros tipos se indican directamente las longitudes que propone Meve.

Las otras características, se tienen que ingresar, por medio de menus de barras con las opciones de "SI" y "NO", la forma de eleccidn al igual que en el menu anterior, es mediante las teclas de flechas, la barra espaciadora y las letras calientes. Si un atributo se escoge "SI"Llave Primaria siguiendo la definición, se supone al atributo como "SI" No Nulo y "SI" No Duplicado.

La captura de atributos se puede continuar hasta que se de como respuesta al nombre, la cadena vacia, tecleando directamente ENTER, estando en el renglón en blanco del final. El sistema permite hacer modificaciones de los atributos, estando en la captura del nombre, oprimiendo SHIFT+TAB, pasa al anterior atributo pudiendo modificar éste. Si se encuentra en el nombre de un atributo intermedio, presionando TAB, se pueden modificar los que se encuentran en los renglones siguientes. De forma que puede modificarse la informacidn de los atributos en cualquier momento.

Llenos los datos de una entidad, se brindan las opciones de creación de los archivos de definiciones, y de especificaciones; la creacidn de las tablas Btrieve y dar de alta ¡a entidad con sus atributos. Puede escogerse una de las opciones al colocar en "SI" mediante las flechas o la barra espaciadora la operacidn correspondiente, y se presiona ENTER; en caso de rechazarse una opcidn se coloca en "NO"y se presiona ENTER. Con la tach ESC puede regresar el w a r i o a la operación anterior. El módulo del sistema, como se puede ver brinda una suficiente amigabilidad con el usuario. Luego de las operaciones con una entidad, con la letra 's'puede contimarse con la introducción de informaciónpra otra entidad. La salida completa del mddulo es presionando en este punto la letra In', indicando que no se desea continuar.

MODULO DE UTILERIAS PARA EL MANEJO DE LAS ENTDADES EN BTRIEVE MANUAL TECNICO Del diccionario que se tiene con las entidades y sus respernos atributos, se reagrrupa la informaciónpara el menú que contiene todas las entidades.

Se elige ¡a entidad deseada con ayuda del menú de barras, se redistribuyen los atributos de la entidad en un arreglo de registros, los cuales albergan el contenido siguiente : typedef struct inf-atr { int pos; char *nombre, tipo; int longb; char NN, PK; 1infor-atr;

AI mismo tiempo se cuenta la cantidad de atributos que posee cada una de las entidades.

Con el número de atributos se pide memoria suficiente para englobar todos los campos de la entidad, en una cadena de bik, la cual pueda operar BTRIEVE.

Para una ALTA se captura la llave primaria de la entidad, y esta llave que viene a ser la foránea de los atributos, se captura se captura la informacidn de todos estos. Esta información permite hacer la captura de los campos del registro, con sus debidas restncciones de tipo, longitud e integridad en el arreglo, de manera que sea más rápido, al tener la confirmación del usuario que se tiene completo y satisfactorio el registro, se compacta todo el contenido del arreglo en la cadena de bits, bits en formato de BTRIEVE , luego esta cadena se inserta en el archivo correspondiente a la entidad.

Para una BAJA, se abre el archivo de la entidad y se descompacta la información con la ayuda de la informacióndel diccionario de datos. Una vez que se tiene la información en el arreglo, es mucho más facil desplegaría junto con cada uno de los nombres de cada uno de los atributos, El usuario muestra su acuerdo con borrar este registro, se hace un llamado a BTRIEVE con el código de borrado Luego se permite al usuario que si desea, inmediatamente pueda borrar otro registro, si no es éste su deseo se cierra el archivo correspondiente a la entidad.

Para una CONSULTA, una vez abierto el archivo de la entidad, se descompacta información en formato BTRIEVE, descargando toda la información en el arreglo, de tal forma que el despiegado del contenido del registro se lo haga de la forma más fácil y rápida. Concluida la consulta, se cierra el archivo de la entidad.

Para una MODIFICACION, como en los casos anteriores, se realiza un desglozado de la información del registro eíejido, acomodandola en el arreglo para su fácil desplieguado, pero en este caso es la no dificil manipulación, COR las restricciones necesarias de cada uno de los atributos que se estan cambiando en ese momento. Con la distribución en arreglo se pasa de un atributo a otro y este traslado se refleja en la pantalla. Si el usuario completó las modificaciones que desea realizar, y obtenida la respuesta de la conformidad con el contenido, este registro hay que convertir al formato de STRIEVE, una sóla cadena de bits; compactado el contenido del arreglo en la cadena que se proporciona a btneve para que sustituya por la anterior. Esto se logra usando el código de modificación.

Completa cualquiera de las operaciones, mediante un ciclo se puede repetir cada una de estas en forma indefinida. Roto este ciclo se regresa al usuario a que pueda elegir otra entidad o en caso dado concluir con la cesión de trabajo, apretando ESC en el menú de barras.

ARCHIVOS PARA INCLUIR EN EL MODULO .# include # include # include # include # include

CONSTANTES UTILIZADAS EN EL MODULO .NUMERICAS

.-

r" Definicion de las constantes de errores */ ,

#defineEX #defineLD #defineNL #defineNT

CADENAS

O 1

2 3

.-

P Operaciones permitidas dentro del modulo, arreglo que se emplea en el menu de barras. *I

a

char *operaciones = { '' ALTA ", " BAJA ", " CONSULTA ", "MODIFICACION'~;

PROCEDIMIENTOS Y FUNCIONES UTILKADAS EN EL MODULO DE UTlLERIAS

.-

. . . . . . . . . . . . . . . . . . . . . . . . . . . * Funciones de captura de las claves de las entidades ****iHr********iS********r******************~******************~***~****

I

Funcion que regresa un arreglo con los nombres de las entidades almacenadas, la recopilacion de los nombres se realiza del archivo de entidades apuntado por pas-blk. Como funcion se regresa el numero de cadenas recopiladas, y en case de fracaso se regresa -1. */ /"

nombres-entidades (nombres-ent,pos-blk) char *nornbres-enQj, pos-blyl;

Funcion que regresa por medio de la eleccion de barras la clave de r' alguna de las entidades que se tienen almacenadas hasta el momento, se van mostrando menus de hasta 21 entidades, con opciones para entidades anteriores y posteriores si es el caso. Las entidades vienen ordenadas por las llaves esto quiere decir, que los nombres no estan ordenados alfabeticamente. */ captura-clv-entidad (pos-blk) char pos-blyl;

i

La informacion de los atributos de las entidades, que se encuentra en un archivo se la traspasa a un arregio, para facilitar su manejo y hacerlo más agil. /“

El funcion regresa además el número de atributos que tiene la entidad, ademas de regresar el codigo de error o exit0 de acuerdo al estatus regresado por btneve. */

recup-atributos (arr-atr,n-atr,ctv_ent, infor-atr arr-attQ; int *n-atr; struct entídad-PK clv-ent; char pos-blk[]; /



*

*

*

*

*

.

*

)

)

*

l

t

r

n

r

pos-blk)

S

*

*

*

~

~

*

~

~

~

*

~

~

~

~

~

~

*

*

*

~

Funciones y procedimientos de apoyo para la captura y despliegue de los atributos de las entidades. t

***m*******m**+*m+fC+*****m*+*+++*+w*+m*

/

r‘ Procedimiento que calcula el nombre de mayor longitud, la seleccion se realiza dentro del arreglo con la infonnacion de los atributos. */

calcula-max-longitud (arr-aú,n-atr,I-aú) infor-atr arr-aa; int n-atr, *I-&; /“

Calculo de numero de atributos llaves primarias de una entidad. *I

numero-claves (an-atr,n-atr,n-chr) infor-atr an-atrl]; int n-atr, *n-chr;

~

152459 r" Con un mensaje dentro de una ventana se pide la aceptacion de la captura de los datos, se espera que el usuario oprima las teda Is' o 'ni. El mensaje esta en video inverso. *I

Borra el arreglo con los datos capturados desde una posicion inicial y otra final, ademas de borrar la pantalla la misma cantidad de linea a partir del *I punto (x,y) y una longhd I-&. I"

.

borra-campos (x,y,registro, ini,fin,l-atr) int x,y; char *registroo; int ini,fin,l-aú; Despliegue de todos los titulos de los atributos que no son llaves r" primarias en forma de columna desde la fila 3 y la columna 10, dejando un espacio para las llaves primarias. */ títulos-normales (I-ab,n-atr,n_chr,arr-atr) int -a&, n-aú, n-chr; infor-atr a r r - w ;

Despliegue de todos los W o s de los atributos que son llaves primarias en forma de columna, desde la fila 3 y la columna 1O. */ í*

titulos-claves (l-atr,n-atr,arr-atr) int i-atr, n-atr; infor-atr arr-atrfl;

i

Procedimiento que permite capturar un dato de acuerdo al tipo de r' atributo en la posicion del arreglo de capturas y en el renglon indicado de la pantalla, a partir de la línea 3, la salida de captura se obtienepresionando una tecla que se encuentre dentro del arreglo teclas-sal. */ captura-ca mpos (registro,arr-atr ,teclas-sal ,pos,ren) char *registro 0; infor-atr an-am; int teclas-sal [I, pos, ren;

Procedimiento que permite desplegar un dato de acuerdo al tipo de atributo en la posicion del arreglo de capturas y en el rengion indicado de la *! pantalla, a partir de la linea 3. /"

despliega-campos (regisúo,an-atr,I-aú,pos,ren) char "registro infor-atr arr-atrfl; int 1-air, pos, ren;

a;

Procedimiento que despliega detro de una ventana todos los atributos que no son llaves primariasjunto con los titulos de cada uno de estos. */ /"

despliega-normales (resistro,arr_atr,l-~,n-~,n_chr) char *registro 1; infor-atr arr-aw; int 1-atr, n-atr, n-civ;

E

r" Procedimiento que regresa la posicion del primer dato en el arreglo de captura que cumpla con la condicion de llave primaria, desde una posicion inicial y otra final. */

atrjrimero (arr-atr,ini,pos,fin,PK) infor-atr arr-atr(l; int *pos,fin; char PK;

P Procedimiento que regresa la posicion del siguiente dato en elarreglo de captura que cumpla con la condicion de llave primaria, desde una posicion *I inicial y otra final, tambien se regresa el renglon siguiente.

ab-siguiente (an-atr,pos,fin,ren,PK) infor-atr arr-atr[ 1; int *pos,fin,*ren; char PK;

Procedimiento que regresa fa posicion del anteriior dato en el arreglo de I" captura que cumpla con la condícion de llave primaria, desde una posicion inicial y otra final, tambien se regresa el renglon anterior. */ atr-anterior (art--atr,ini,pos,ren,PK) infor-atr arr-aq; int ini,*pos,*ren; char PK;

Funcion que permite verificar si el dato de la posicion pos dentro del arreglo es nulo. Diferente de cero si es nulo el dato. */ int atr-no-nulo (registro,arr-atr,pos) char *registrofl; infor-atr arr-m; int pos; P

8

Captura de atributos llave primaria en una ventana, la captura se deja en r" un arrglo de apuntadores de caracteres, en caso de existir varios atributos se permite moverse de uno a otro. Al final de la captura se pregunta al usuario si *I esta conforme con la captura. captura-claves (I-~,n_c~,n-atr,arr-atr,registro) int l-atr,n-civ, n-atr; infor-atr am-aa; char *registro[];

Captura de aúibutos no llave primaria en una ventana, la captura se deja en un arrglo de apuntadores de caracteres, en caso de existir varios atributos se permite moverse de uno a otro. Al final de la captura se pregunta al usuario si esta conforme con la captura. */ /"

captura-normales (I-atr ,n-clv, n-atr ,arr-atr ,registro) int 1-atr, n-clv,n-atr; infor-atr arr-aa; char *registro[;

P Despliegue de mensajes de errore en video invertido en una ventana en la parte inferior de la pantalla. *I

despliega-errores (error) int error;

/ + * H * . H m * M I H * * ~ ~ ~ . H * * ~ ~ * * ~ * * * * * * ~ I H * ~ ~ ~ * ~

Funcion principal de prueba a eliminar ******M**************wmH******w**-*H***m********

I

main () {

int oper=O; i

pon-mem-video (); crea-ventana (1, "CAPTURA DE LLAVES PRIMARIAS", 1,í,23,78,1); crea-ventana (2, "CAPTURA DE ATRIBITOS", 1,I ,23,78, 1); crea-ventana (3, " ERROR ", 21,9,23,40, 1); crea-ventana (4, "", 21 ,1,23,29,2); crea-ventana (6, "DESPLEGADO DE ATRIBUTOS", 1,1,23,78,1); crea-ventana (7, "DESPLEGADO DE LLAVES PRIMARIAS", 1,1,23,78, crea-menu (8,operaciones," OPERACIONES ","abcmW14,4, 3,20,2); while (oper!=l) { CIS(0,0,24,79); switch (oper=menu_encadenado(8)) { break; case O : aka 0; break; case 1 : baja (); break; case 2 : consuita (); case 3 : rnodificacion (); desactiva (8);

1

P Abre la base de datos con el diccionario, se captura la clave de la entidad que se desea operar, con esta clave recuperamos la informacion de la entidad y se abre el archivo que contiene esta entidad. Finalmenete se cierra el diccionario de datos. */

abre-base (tabla,regrb,pos-bl k,n-aú,longreg) infor-atr tablau; char **regtrb, pos-blk[l; ínt *n-atr,*longreg;

P "I

Procedimiento que calcula la longrtud del registro que se esta operando.

lonaregistro ('tabla, n-atr) infor-atr tabla[]; int n-atr;

P Procedimiento para conpacta la informacion que se encontrada en la tabla, a una cadena de bits, siendo este el r e m o que se insertara a btneve, pues este maneja grupos de bits. */

compactar-registro (tabla,registro,n-atr ,l-reg ,regc) infor-atr tablag; char *registro[]; int n-atr,l-reg; char "reac;

/" Procedimiento que descompacta la informacion de btrieve, una cadena de bits. y la desglosa en un arreglo de cadenas con ayuda de la infonnacion

encontrada en la tabla para su posterior manejo con mayor facilidad. descompactar-registro (tabla,registro,n-atr ,reg-c) infor-atr tablan; char *registrou; int n-atr; char Veg-c;

*I

E*

Procedimiento de insertion de regktms. *I

aiia Q

char .Mas-Altas;

infor-atr tabia[2zj; char *regisin@2);

STATUS = BTRV (8-INS, pos-blk, reg?rb, -reg, Ibve-reg, KO); if ( STATUS != O ) escribe-cadena (1 ,I ,"Noes posible y\sertar registro", NORM-WD);

1 We-xy(23,l); pinti ( "Dar de Alta a otro REGISTRO (SIN}:" }; while ( !( (Mas-Aitas = toupper(gdChe0)) == 'N' 11 Mas_Altas == 'S') ) ; } Mile ( Mas_A#as == 'S' ); Cienrr_Archivo(pos-blk};

Dadebajaunregistro. */

/*

{

char p0s-M I1 28);

char *reg_trb; int longreg; char 'llave-reg; hi n-atr,l_atr, n-&, STATUS; char Wa-kja, Estas-Seguro;

do {

P Dar de baja Registme. */

STATUSaBTRV (B-GET-EQ, pos-blk, reg-trb, &knq_reg,lbve-reg, KO); if ( STATUS != O )

escribe_oadeM(24,1, "Esta segwo de elminar este regiStrr, (SIN): ",NORM-VID); Wile ( !( (Estas-Seguro = taipPer(getche0)) == 'N 11 Estas-Seguro -5- 'S)) ; desacüvd (6); if ( Estas-Seguro == 'S' ) { STATUS = BTRV (B-DEL, pos-bik, r e g . , &kng_reg, Ilave-reg, KO); if ( STATUS != O ) escribe_cadena (1 ,I ,*NOes posible eiiminar registro. NORM-VID);

1

1

velexy(23,1);

printf ("Eliminar abun otro registro (SIN): "); while ( !( (otra-Baja = toupper@etc(he0)) == ' N II otra-Baja == 'S? ) ; } while ( otra-Baja == 'S ); cierra_Archivo( poc_Mk); } 'I

Baja de un regktm '1

i

/'

Modifica d contenido de un regÍstro.

*/

modification ( ) { char pos-blk [128); char *regtrb; int -reg; char *Ilave_reg; int n-atr,l-atr, rv-ck, STATUS;

char Ms-Carnbios, Estas-Seguro;

infor-atr tabIaI22); char ' r e g m a ;

STATUSBTRV (B-GET-EQ, pos-bik, r x t r b , &knq_reg, Wwe-reg, KO); if ( STATUS != O ) despliega--

(2);

eke { I* E f e c t u a m o d ~ o n e s .*/

STATUS = BTRV (B-MODIF, p-blk, r-trb, &bng-reg, Iiave-reg, KO); if ( STATUS != O ) escribe-cadena (1,l ,"No es posible Modificar registro.",NORM_VID);

1

1

vete_xy (23,V;

printf ("Hacer alguna otra modifw#cion (WN): "); while ( !( (Mas_c#nbios = toupper(Iptcheo)) == ' N 11 Mas_cambios == 'S9 ) ; 1w h i i ( Mas-Cambios == IS'); Cii-Archhro (pos-blk);

ProceclimientQ de coIwu(ta del contenido de un registro. ' I

f'

-0 *rpos-W[128); char *reg_trb; int icmg-reg; char 'tiave-reg; int n-atr,I-atr, n-clv, STATUS;

{

infw-atr taMa(22);

char 'regi&@2);

do { I' R e a l i r cmsubs. ' I

STATUS=BTRV (B-GET-EQ, pos-bik, regJrb, &long_reg, k - r e g , KO); if ( STATUS != O ) desplm--(2); else { I' registrode la consulta. */

Ciena_Archivo (pos-bik); ) I' Consuitaresistn,*l

i

MODULO DE UTiiERiAS PARA EL MANEJO DE LAS ENTlDADES & BTRIEVE MANUAL DE USUARIO AI igual que en el primer mbdulo, se tiene que instalar BTRIEVE en forma residente con la longitud de págna de 512 bytes. Se hace correr el módulo, el cual despliega una lista de todas las entidades que se tiene almacenadas, este despliegue se encuentra en forma de un menú de barras, distribuido verticalmente. Elegimos una de las entidades con las FLECHAS ARRIBA Y ABAJO; o con la BARRA ESPACIADORA, y luego se ppresiona ENTER. Inmediatamentese muestra un menú de barras vertical con las cuatro opciones : ALTAS, BAJAS, CONSULTAS y MODIFICACIONES; como en todos los menus de barras, se hace la elecci6n de la operación a realizar con las teclas de flechas. Para todas las operaciones, en la ventana de captura, se proporciona la clave de la entidad a manejar, posteriormente, pregunta si conformamos la clave, a lo que se responde con una 'Y o una ''n'', por si o no respectivamente. En caso de estar haciendo una ALTA hay que completar los otros atributos de la entidad, pudiendo mediante al TABULADOR cambiar de un atributo a otro. Una vez completa la ventana de captura se confirma que todos los datos estan conformes. En caso de una BAJA, como respuesta de la llave del registro que se dese a eliminar, se presenta la ventana completa con toda la informaci6n que contiene el registro elegido, para poder confirmar si es evidentemente el registro que se desea eliminar, aceptado el registro se elimina éste.

En caw de una MODIFICACION, se tiene que introducir la llave del registro que se desea modificar, luego aparece la ventana completa con toda la información, pudiendose por medio de las FLECHAS ABAJO y ARRIBA desplazarse al atributo que se desea modificar. Modificados todos los atnbutos, al realizar la operacián se recibe como respusta, el cuestionamiento de la seguridad del contenido de la nueva información del registro. En caso de CONSULTA, como respuesta a la clave se obitiene información del registro correspondiente. Se puede realizar la operacidn la cantidad de veces que uno desee, con sólo responder que "Si" se desea repetir la operación. Al terminar con "NO" esta serie de operaciones, se regresa al menú con las operaciones permitido elegir alguna otra; en caso de no desear ninguna otra con la tecla ESC se regresa al menú con todas las entidades y con otra presión de ESC abandonamos por completo el módulo.

Si no se encontrara en cualquiera de los casos una entidad con la clave proporcionada, se despliega una ventana de error indicando que la clave dada no corresponde a ningún registro que se haya dado de alta. Lógicamente en caso de ALTA, tener un registro con una llave primaria no utilizada es un requisito. i

t

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.