1. INTRODUCCIN ....................................................................... Error! Bookmark not defined. 2. OBJETIVOS .............................................................................. Error! Bookmark not defined. 3. MARCO TERICO ............................................................................................................... 5 3.1 CONCEPTOS PREVIOS ................................................................................................. 5 3.1.1 FUNCIONAMIENTO DE UN ORDENADOR ............................................................. 5 3.1.2 ALGORITMO ....................................................................................................... 7 3.1.3. LENGUAJE DE PROGRAMACIN .......................................................................... 9 3.2. PROGRAMACIN ESTRUCTURADA............................................................................ 19 3.3. EL LENGUAJE C Y C++ ................................................................................................ 22 3.4. BASE DE DATOS ....................................................................................................... 24 3.4.1. MODELOS DE BASE DE DATOS ........................................................................... 25 3.5. VENTAJAS DEL USO DE BASE DE DATOS .................................................................... 29 3.5.1. ADMINISTRADOR DE UNA BASE DE DATOS ........................................................ 30 3.5.2. USUARIOS DE UNA BASE DE DATOS .................................................................. 31 4. PROYECTO DE FIN DE CURSO ........................................................................................... 33 4.1 DESCRIPCIN ............................................................................................................... 33 4.2 MODELO RELACIONAL DEL SISTEMA............................................................................. 35 4.3 PANTALLAS PRINCIPALES ............................................................................................. 36 4.4 CDIGO FUENTE .................................................................. Error! Bookmark not defined. 5. INFORMACIN BSICA DEL EQUIPO Y EL COMPILADOR .................................................... 56 7. CONCLUSIONES ............................................................................................................... 59 8. BIBLIOGRAFA ......................................................................... Error! Bookmark not defined.
Proyecto de Fin de Curso Pgina 3
INTRODUCCION
En muchas ocasiones, nos topamos con algunas tareas que requieren ser ejecutadas frecuentemente pero con diferentes datos que procesar. Particularmente en una universidad, donde el alumno necesita por ejemplo reservar, cancelar y consultar turnos para un curso en especial y a travs de estos datos realizar cuadros estadsticos que nos permita saber las horas llevadas por cada alumno, por cada curso as como tambin las horas, das y meses puntas, los cuales ayudarn a la universidad a mejorar sus procesos y brindar un mejor servicio al alumno. En este proyecto se desarrollar justamente un sistema informtico para el manejo de turnos haciendo uso del lenguaje de programacin C, que es objeto de estudio de nuestro curso.
Proyecto de Fin de Curso Pgina 4
OBJETIVOS
Implementar en el lenguaje C un sistema informtico para el manejo de turnos, que realice las siguientes operaciones: - Reservar un turno para un alumno. - Cancelar una reserva de un turno de un alumno: dado el carnet de alumno y la hora de turno, el sistema anula el mencionado turno. - Consultar turno a una hora determinada: dado el carnet del alumno y el turno, el sistema informa el aula, nmero de la Pc y el turno que el alumno tiene. - Persistencia. Estadsticas - Informar sobre las horas punta, das punta y mes punta(). - Horas de uso por cada alumno. - Horas de uso por curso. - Influye en el aprovechamiento el mayor uso del laboratorio.
Proyecto de Fin de Curso Pgina 5
MARCO TEORICO
3.1 Conceptos previos 3.1.1 Funcionamiento de un ordenador Durante los siglos XVI, XVII y XVIII hubo varios diseos (e implementaciones) de mecanismos que permitan realizar operaciones aritmticas; tales mecanismos constituyeron un primer paso hacia mquinas multipropsito, como los dispositivos de Babbage que an eran puramente mecnicos, no electrnicos. A fines del siglo XIX se desarrollaron mquinas parcialmente inspiradas por las ideas de Babbage pero que aadan elementos para introducir informacin (las famosas tarjetas perforadas) y durante el siglo XX se impuso la utilizacin de elementos electromecnicos (rels) y, finalmente, electrnicos (vlvulas, transistores y chips) en la construccin de tales mquinas. Durante la Segunda Guerra Mundial ambos bandos dedicaron importantes esfuerzos al desarrollo de mquinas electrnicas que permitieran llevar a cabo clculos ms veloces y decodificar mensajes cifrados; en 1944 John von Neumann, que participaba en el Proyecto Manhattan, percibiendo la importancia que tendran las computadoras en el desarrollo de armas nucleares escribi un artculo en el que describa una arquitectura, inspirada por las ideas de Babbage, que perdura an hoy.
Proyecto de Fin de Curso Pgina 6
Arquitectura Von Neumann La arquitectura Von Neumann divide el ordenador en cuatro partes principales: 1. Unidad Aritmtica (UA). 2. Unidad de Control (UC). 3. Memoria (M). 4. Dispositivos de entrada/salida (E/S).
Grafico 1. Componentes de un ordenador La Unidad Aritmtica es la encargada de realizar las operaciones aritmticas bsicas y, quiz, funciones ms compleja como races, logaritmos y funciones trigonomtricas. La Unidad de Control controla la ejecucin de las operaciones de forma apropiada y dirige el funcionamiento del resto de unidades de tal forma que el trabajo conjunto de todas conduzca a la consecucin de las tareas especficas programadas en el sistema. La Unidad de Control realiza las siguientes operaciones:
Proyecto de Fin de Curso Pgina 7
1. Recupera de memoria la siguiente instruccin a ejecutar. 2. Decodifica la instruccin y determina las acciones que debe llevar a cabo. 3. Enva rdenes a la memoria para recuperar o almacenar datos, a la UA para llevar a cabo operaciones y a los dispositivos de E/S para recibir o enviar datos al usuario. La Memoria almacena tanto datos numricos como instrucciones (tambin codificadas de forma numrica); la memoria est dividida en celdas, cada una con una direccin nica que permite el acceso a su contenido (datos o instrucciones). Por ltimo, los dispositivos de entrada/salida facilitan la interaccin de los usuarios con la mquina.
3.1.2 Algoritmo La palabra algoritmo proviene del nombre del matemtico llamado Abu Abdullah Muhammad bin Musa al-Khwarizmi que vivi entre los siglos VIII y IX. Podemos encontrar muchas definiciones completas o formales de algoritmo en los textos de algortmica y programacin, todas ellas muy similares: Secuencia finita de instrucciones, reglas o pasos que describen de forma precisa las operaciones que un ordenador debe realizar para llevar a cabo una tarea en un tiempo finito. [Donald E. Knuth, 1968] Descripcin de un esquema de comportamiento expresado mediante un reportorio finito de acciones y de informaciones Proyecto de Fin de Curso Pgina 8
elementales, identificadas, bien comprendidas y realizables a priori. Este repertorio se denomina lxico [Pierre Scholl, 1988] Un algoritmo es un conjunto finito de pasos definidos, estructurados en el tiempo y formulados con base a un conjunto finito de reglas no ambiguas, que proveen un procedimiento para dar la solucin o indicar la falta de esta a un problema en un tiempo determinado. [Rodolfo Quispe-Otazu, 2004] Caractersticas: Las caractersticas fundamentales que debe cumplir todo algoritmo son: Ser definido: Sin ambigedad, cada paso del algoritmo debe indicar la accin a realizar sin criterios de interpretacin. Ser finito: Un nmero especfico y numerable de pasos debe componer al algoritmo, el cual deber finalizar al completarlos. Tener cero o ms entradas: Datos son proporcionados a un algoritmo como insumo (o estos son generados de alguna forma) para llevar a cabo las operaciones que comprende. Tener una o ms salidas: Debe siempre devolver un resultado; de nada sirve un algoritmo que hace algo y nunca sabemos que fue. El devolver un resultado no debe ser considerado como nicamente verlos en forma impresa o en pantalla, como ocurre con las computadoras. Existen muchos otros mecanismos susceptibles de programacin que no cuentan con una salida de resultados de esta forma. Por salida de resultados debe entenderse todo medio o Proyecto de Fin de Curso Pgina 9
canal por el cual es posible apreciar los efectos de las acciones del algoritmo. Efectividad: El tiempo y esfuerzo por cada paso realizado debe ser preciso, no usando nada ms ni nada menos que aquello que se requiera para y en su ejecucin. 3.1.3. Lenguaje de programacin Las personas para comunicarse entre s necesitan un lenguaje que puede ser oral o escrito. En general para comunicar algo siempre se necesita un lenguaje, ya que estos son la manera de especificar las acciones que se desea sean realizadas por la computadora (ordenador). En otras palabras, son la interface ente el programador y la computadora. A travs de ellos podemos desarrollar programas o aplicaciones, que se componen por un conjunto de instrucciones que luego se ejecutaran en la computadora haciendo uso de sus recursos (memoria, PCU, discos, etc.). Los lenguajes de programacin estn destinados a distintos mbitos, dependiendo de sus caractersticas que simplifican algunas tareas. Pueden estar destinados a aplicaciones cientficas, de negocios, inteligencia artificial, programacin de sistemas e incluso lenguajes de programacin con propsitos especiales. Los lenguajes de programacin tiene una estructura compleja que se compone de varias partes: sintaxis, semntica, elementos del lenguaje, nivel de abstraccin, paradigma estructuras de control, para ordenar la Proyecto de Fin de Curso Pgina 10
ejecucin delos programas, tipos de datos (nmeros, letras, etc.), y funciones y procedimientos que contiene un conjunto de instrucciones, entre otras. 3.1.3.1. Historia de los lenguajes de programacin El hombre a travs de su historia siempre ha buscado inventar diversas herramientas que le permitan simplificar sus quehaceres y tener una mejor calidad de vida. La computadora es uno de estos inventos; aunque se puede decir puede decir que las tecnologas para su fabricacin y explotacin han tenido un desarrollo impresionante a partir de la segunda mitad del siglo XX, la computadora por si sola no es capaz de efectuar ninguna tarea, es tan solo un conjunto de cables y circuitos dentro de una caja que necesitan recibir instrucciones de los humanos para realizar alguna tarea. Entonces el problema aqu es lograr que un conjunto de cables y circuitos metidos en una caja realicen alguna tarea y nos den las soluciones que esperamos de estas; el problema aqu es, cmo hacer para que un conjunto de cables y circuitos metidos en una caja nos pueda entender cmo nos comunicamos con la computadora? El hombre ha desarrollado una forma de transmitir nuestros deseos a la computadora, los Lenguajes de Programacin. Por otro lado, como se sabe, un conjunto de circuitos no entendera ningn lenguaje que nosotros conozcamos, por ms sencillo que ste parezca. Los circuitos en todo caso, slo reconocen presencia o ausencia de energa, es decir que debemos hablarle a la mquina en su Proyecto de Fin de Curso Pgina 11
propio lenguaje (presencia y ausencia de energa, 0 y 1), o nuestro lenguaje deber de ser traducido a un lenguaje binario cuyo alfabeto es el 0 y el 1, mediante las herramientas desarrolladas para llevar a cabo esta tarea, las cuales reciben el nombre de traductores, y como veremos ms adelante, los hay de muchos tipos, dependiendo de caractersticas ms especficas del lenguaje a traducir y de la manera de llevar a cabo su traduccin. Como ya habris entendido, para crear un lenguaje de programacin, deberemos crear la herramienta que lo traduce, y es justamente de ellas, de las que hablaremos a continuacin, para describir como han ido evolucionando en los ltimos 50 aos. 1946: Konrad Zuse, un ingeniero Alemn mientras trabajaba en los Alpes de Bavaria, desarroll el lenguaje Plankalkul, el cual, fue aplicado entre otras cosas para jugar al ajedrez. 1949: Aparece Short Code, que viene a ser el primer lenguaje que fue usado en un dispositivo de cmputo electrnico, aunque se debe decir que se trata de un lenguaje traducido a mano. 1951: Grace Hopper, trabajando para Remington Rand, comenz el trabajo de diseo del primer compilador conocido ampliamente, el A- 0, el cual, al ser liberado por la compaa en 1957, lo hizo con el nombre de MATH-MATIC. Proyecto de Fin de Curso Pgina 12
1952: Alick E. Glennie, durante su tiempo libre en la Universidad de Manchester, concibe un sistema de programacin llamado AUTOCODE, que viene a ser un compilador muy rudimentario. 1957: aparece FORTRAN (FORmula TRANslating) sistema traductor de frmulas matemticas. Fue desarrollado por un equipo, al frente del cual se encontraba John Backus quien despus vendra a contribuir en el desarrollo del compilador para el lenguaje ALGOL y de la notacin usada para la especificacin sintctica de los lenguajes, conocida como BNF (Backus Naur Form). A partir de los aos sesenta, empiezan a surgir diferentes lenguajes de programacin, atendiendo a diversos enfoques, caractersticas y propsitos, que ms adelante describiremos. Por lo pronto, puede decirse, que actualmente existen alrededor de 2000 lenguajes de programacin y continuamente, estn apareciendo otros ms nuevos, que prometen hacer mejor uso de los recursos computacionales y facilitar el trabajo de los programadores. Proyecto de Fin de Curso Pgina 13
Grfico 2. Evolucin de los Lenguajes Imperativos y Orientados a Objetos
Proyecto de Fin de Curso Pgina 14
3.1.3.2. Clasificacin de los lenguajes de programacin Los lenguajes de programacin se clasifican de acuerdo a varios criterios: Segn su nivel. Hace referencia a lo prxima al hombre que est la forma de expresar las sentencias Lenguaje Mquina Estn escritos en lenguajes directamente legibles por la mquina (computadora), ya que sus instrucciones son cadenas binarias (0 y 1). Da la posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traduccin posterior lo que supone una velocidad de ejecucin superior, solo que con poca fiabilidad y dificultad de verificar y poner a punto los programas. Fue el primer lenguaje utilizado en la programacin de computadoras, pero dej de utilizarse por su dificultad y complicacin, siendo sustituido por otros lenguajes ms fciles de aprender y utilizar, que adems reducen la posibilidad de cometer errores. Lenguajes de bajo nivel Un lenguaje de programacin de bajo nivel es el que proporciona poca o ninguna abstraccin del microprocesador de un ordenador. Consecuentemente es fcilmente trasladado a lenguaje de mquina. En general se utiliza este tipo de lenguaje para programar controladores (drivers). La programacin en un lenguaje de bajo nivel como el lenguaje de la mquina o el lenguaje simblico tiene ciertas ventajas: Proyecto de Fin de Curso Pgina 15
Mayor adaptacin al equipo. Posibilidad de obtener la mxima velocidad con mnimo uso de memoria. Pero tambin tiene importantes inconvenientes: Imposibilidad de escribir cdigo independiente de la mquina. Mayor dificultad en la programacin y en la comprensin de los programas. Caractersticas Se trabaja a nivel de Microinstrucciones, es decir, su programacin es al ms fino detalle. Est orientado a la mquina.
Lenguajes de alto nivel (cercanos al hombre) Los lenguajes de alto nivel logran la independencia del tipo de mquina y se aproximan al lenguaje natural. Se puede decir que el principal problema que presentan los lenguajes de alto nivel es la gran cantidad de ellos que existen actualmente en uso. Los lenguajes de alto nivel, tambin denominados lenguajes evolucionados, surgen con posterioridad a los anteriores, con los siguientes objetivos, entre otros: Proyecto de Fin de Curso Pgina 16
Lograr independencia de la mquina, pudiendo utilizar un mismo programa en diferentes equipos con la nica condicin de disponer de un programa traductor o compilador, que lo suministra el fabricante, para obtener el programa ejecutable en lenguaje binario de la mquina que se trate. Adems, no se necesita conocer el hardware especfico de dicha mquina. Aproximarse al lenguaje natural, para que el programa se pueda escribir y leer de una forma ms sencilla, eliminando muchas de las posibilidades de cometer errores que se daban en el lenguaje mquina, ya que se utilizan palabras (en ingls) en lugar de cadenas de smbolos sin ningn significado aparente. Incluir rutinas de uso frecuente como son las de entrada/salida, funciones matemticas, manejo de tablas, etc, que figuran en una especie de librera del lenguaje, de tal manera que se pueden utilizar siempre que se quieran sin necesidad de programarlas cada vez. Se puede decir que el principal problema que presentan los lenguajes de alto nivel es la gran cantidad de ellos que existen actualmente en uso (FORTRAN, LISP, ALGOL, COBOL, APL, SNOBOL, PROLOG, MODULA2, ALGOL68, PASCAL, SIMULA67, ADA, C++, LIS, EUCLID, BASIC), adems de las diferentes versiones o dialectos que se han desarrollado de algunos de ellos.
Proyecto de Fin de Curso Pgina 17
Grfico 3. Evolucin de los Lenguajes de Programacin Segn la relacin traduccin-ejecucin. Compiladores. Intrpretes. Segn su campo de aplicacin: Aplicaciones Cientficas. Predominan los algoritmos de clculo numrico y matrices. Aplicaciones de Procesamiento de Datos. Sobresalen las tareas relativas a la creacin, mantenimiento, consulta y listado de datos. Estos datos se organizan en registros, ficheros y bases de datos. Aplicaciones de Tratamiento de Textos. Llevan a cabo la manipulacin de textos en lenguaje natural. Proyecto de Fin de Curso Pgina 18
Aplicaciones en Inteligencia Artificial. Estn constituidas por programas que emulan un comportamiento inteligente. Ej. Juegos inteligentes (ajedrez, tres en raya,...), robtica, sistemas Aplicaciones de Programacin de Sistemas. Como por ejemplo aqullos que se utilizan para desarrollar los mdulos de un Sistema Operativo, traductores de lenguajes,... Segn el estilo de programacin: Imperativos Son aquellos lenguajes, que basan su funcionamiento en un conjunto de instrucciones secuenciales, las cuales, al ejecutarse van alterando las regiones de la memoria donde residen todos los valores de las variables involucradas en el problema que se plantea resolver. Es decir, se camia progresivamente el estado del sistema, hasta alcanzar la solucin del problema. Declarativos En este paradigma, ms que el cmo? Desarrollar paso a paso un proceso, nos interesa el Qu? deseamos obtener a travs del programa. Quizs el lenguaje declarativo que nos sea mas familiar es el SQL, el cual es utilizado para interactuar con la informacin de bases de datos, concentrndose solo en los resultados que van a ser obtenidos, dejndole al traductor la tarea de cmo llegar a ellos y mostrrnoslo.
Proyecto de Fin de Curso Pgina 19
3.2. Programacin estructurada 3.2.1. Orgenes La programacin estructurada es una tcnica para escribir programas. Hoy en da los requerimientos y las aplicaciones informticas son mucho ms complejos que las necesidades de programacin que se tenan en los aos 1960, por lo que las tcnicas de programacin estructurada ya no son suficientes. Ello ha llevado al desarrollo de nuevas metodologas, tales como la programacin orientada a objetos y el desarrollo de entornos de programacin que facilitan la programacin de grandes aplicaciones y sistemas. La primera programadora de computadora reconocida fue Ada Lovelace (1815-1852), hija de Anabella Milbanke Byron y el poeta Lord Byron. A principios del siglo XIX conoci a Charles Babbage, un inventor ingls y profesor matemtico de la universidad de Cambridge, que dise pero nunca construy la mquina analtica para ejecutar programas de tabulacin, por lo que se lo considera como el padre de la computacin. Fue Ada Lovelace quien predijo muchas de las teoras actuales al traducir y ampliar una descripcin de la mquina analtica de Babbage, uno de los antecedentes ms directos de lo que conocemos como computadora. Como la mquina no lleg nunca a construirse, los programas de Ada lgicamente tampoco llegaron a ejecutarse, pero s suponen un punto de partida de la programacin. El trabajo que Ada realiz le hizo ganarse el ttulo de primera programadora de Proyecto de Fin de Curso Pgina 20
computadoras del mundo. El nombre del Lenguaje de programacin Ada, utilizado principalmente en aeronutica, fue escogido en su homenaje. Segn la programacin estructurada se deben utilizar nicamente tres estructuras: secuencial, seleccin e iteracin; considerando innecesario el uso de la instruccin de transferencia incondicional (bsicamente, el GOTO). 3.2.2. Estructuras secuenciales La estructura secuencial es aquella en la que una instruccin (accin) sigue a otra secuencia. Las tareas a realizar en cada instruccin se suceden de tal modo que la salida de una es la entrada de la siguiente y as sucesivamente hasta el final del proceso. 3.2.3. Estructuras selectivas Estructura selectiva simple La estructura repetitiva simple ejecuta una determinada accin o acciones cuando se cumple una determinada condicin, es decir, tenemos la opcin de realizar una actividad o varias si la condicin es verdadera o si es falsa no se realiza ninguna actividad. Estructura selectiva doble La estructura selectiva doble permite elegir entro dos opciones o alternativas, en funcin del cumplimiento de una determinada condicin, de tal forma que, si se cumple, se ejecutan las acciones del Proyecto de Fin de Curso Pgina 21
primer bloque; si no se cumple, se ejecutan las acciones del segundo bloque. Estructura selectiva mltiple Se utiliza porque con frecuencia en a practica se presentan mas de dos elecciones posibles de una cierta condicin. La estructura selectiva mltiple evaluar una expresin que podr tomar n valores distintos; segn se elija uno de estos valores en la condicin, se realizar una de las n acciones, o lo que es igual, el flujo del algoritmo seguir un determinado camino entre los n posibles. 3.2.4. Estructuras repetitivas Las computadoras estn diseadas para aquellas aplicaciones en las cuales una operacin o conjunto de ellas deben repetirse muchas veces. Un tipo muy importante de estructura es el algoritmo necesario para repetir una o varias acciones por un nmero determinado de veces, a est estructura se la llama Estructura Repetitiva. Las estructuras repetitivas se utilizan cuando se desea que una instruccin o bloque de instrucciones se repita un nmero determinado de veces o hasta que una condicin de terminacin se cumpla. Las estructuras que repiten una secuencia de instrucciones un nmero determinado de veces se denominan bucles, y se llama iteracin al hecho de repetir la ejecucin de una secuencia de acciones. Iterar es repetir una vez el bucle.
Proyecto de Fin de Curso Pgina 22
3.3. El lenguaje C y C++ La historia de C, y su versin ampliada, C++, la explicaremos ms detenidamente, justo porque son los lenguajes de programacin que nosotros utilizamos para el sistema de ventas, adems de su enorme importancia hoy en da en todos los mbitos de la computacin. C evolucion a partir de dos lenguajes previos, BCPL y B. BCPL fue desarrollado en 1967 por Martin Richards, como un lenguaje para escribir software y compiladores de sistemas operativos. En el lenguaje B, muchas caractersticas de BCPL fueron modeladas y se utiliz para crear versiones iniciales de lo que se lleg a denominar UNIX. Ambos lenguajes, BCPL y B eran lenguajes sin tipo. Cada elemento de datos ocupaba una palabra en memoria y quedaba a cargo del programador el tratar un elemento de datos como si se tratara de un nmero entero o de un nmero real. El lenguaje C fue derivado de B por Dennis Ritchie de los Laboratorios Bell, implantndose por primera vez en 1972. C al inicio se populariz como lenguaje de desarrollo del sistema operativo UNIX. Hoy da, virtualmente todos los sistemas estn escritos en C y/o C++. C, independiente del hardware, se ha hecho disponible para la mayor parte de las computadoras a lo largo de las ltimas dcadas. Es posible incluso escribir programas en C que sean porttiles hacia la mayor parte de las computadoras. Hacia finales de los 70, C haba evolucionado a lo que hoy se conoce como C tradicional. La expansin rpida de C sobre varios tipos de computadoras trajo consigo muchas variantes. Estas eran similares, pero no siempre Proyecto de Fin de Curso Pgina 23
compatibles. Esto provocaba un problema para los programadores, que necesitaban escribir cdigos que pudieran funcionar con distintas mquinas. As se vieron ante la necesidad de una versin estndar de C, que se aprob en 1989. El documento se conoce como ANSI / ISO 9899: 1990. Ms tarde, apareci C++, una mejora sobre muchas de las caractersticas de C, y que proporciona capacidades de programacin orientada a objetos que promete mucho para incrementar la productividad, calidad y reutilizacin del software. Los diseadores de C y los responsables de sus primeras puestas en prctica nunca anticiparon que este lenguaje resultara en un fenmeno como ste. Cuando un lenguaje de programacin se torna tan arraigado como C, nuevas necesidades demandan que el lenguaje evolucione, en lugar de que slo sea remplazado por un nuevo lenguaje, como ya haba ocurrido con muchos otros lenguajes, tal y como comentamos antes. C++ fue desarrollado por Bjarne Stroustrup en los Laboratorios Bell y originalmente fue llamado C con clases. El nombre C++ incluye el operador de incremento (++) de C, para indicar que C++ es una versin mejorada de C. C++ es un conjunto de C, por lo que, para compilar los programas existentes de C, los programadores pueden utilizar un compilador C++ y posteriormente modificar estos programas a C++. A mediados de los aos noventa, la mayor parte de los entornos de programacin C se convirtieron a C++.
Proyecto de Fin de Curso Pgina 24
3.4. Base de datos Una base de datos (cuya abreviatura es BD) es una entidad en la cual se pueden almacenar datos de manera estructurada, con la menor redundancia posible. Diferentes programas y diferentes usuarios deben poder utilizar estos datos. Por lo tanto, el concepto de base de datos generalmente est relacionado con el de red ya que se debe poder compartir esta informacin. De all el trmino base. "Sistema de informacin" es el trmino general utilizado para la estructura global que incluye todos los mecanismos para compartir datos que se han instalado. Los sistemas de base de datos se disean para manejar grandes cantidades de informacin, la manipulacin de los datos involucra tanto la definicin de las estructuras para el almacenamiento de la informacin como la provisin de mecanismos para la manipulacin de la informacin, adems un sistema de base de datos debe de tener implementados mecanismos de seguridad que garanticen la seguridad de la informacin, a pesar de las cadas de sistema o intentos de acceso no autorizado. Un objetivo principal de un sistema de base de datos es proporcionar a los usuarios finales una visin abstracta de los datos, esto se logra escondiendo ciertos detalles de como se almacena y mantienen los datos. Proyecto de Fin de Curso Pgina 25
Grfico 4. Base de Datos 3.4.1. Modelos de Base de Datos Bajo la estructura de la base de datos se encuentra el modelo de datos: una coleccin de herramientas conceptuales para describir los datos, las relaciones, la semntica y las restricciones de consistencia. Para ilustrar el concepto de un modelo de datos, describimos dos modelos de datos en este apartado: el modelo entidad-relacin y el modelo relacional. Los diferentes modelos de datos que se han propuesto se clasican en tres grupos diferentes: modelos lgicos basados en objetos, modelos lgicos basados en registros y modelos fsicos. 3.4.1.1. Modelo entidad-relacin El modelo de datos entidad-relacin (E-R) est basado en una percepcin del mundo real que consta de una coleccin de objetos bsicos, llamados entidades, y de relaciones entre estos objetos. Una entidad es una cosa u objeto en el mundo real que es distinguible Proyecto de Fin de Curso Pgina 26
de otros objetos. Por ejemplo, cada persona es una entidad, y las cuentas bancarias pueden ser consideradas entidades. Las entidades se describen en una base de datos mediante un conjunto de atributos. Por ejemplo, los atributos nmero-cuenta y saldo describen una cuenta particular de un banco y pueden ser atributos del conjunto de entidades cuenta. Anlogamente, los atributos nombre-cliente, calle- cliente y ciudad-cliente pueden describir una entidad cliente. Un atributo extra, id-cliente, se usa para identicar unvocamente a los clientes (dado que puede ser posible que haya dos clientes con el mismo nombre, direccin y ciudad. Se debe asignar un identificador nico de cliente a cada cliente. En los Estados Unidos, muchas empresas utilizan el nmero de la seguridad social de una persona (un nmero nico que el Gobierno de los Estados Unidos asigna a cada persona en los Estados Unidos) como identicador de cliente. Una relacin es una asociacin entre varias entidades. Por ejemplo, una relacin impositor asocia un cliente con cada cuenta que tiene. El conjunto de todas las entidades del mismo tipo, y el conjunto de todas las relaciones del mismo tipo, se denominan respectivamente conjunto de entidades y conjunto de relaciones. La estructura lgica general de una base de datos se puede expresar grcamente mediante un diagrama ER, que consta de los siguientes componentes: Rectngulos, que representan conjuntos de entidades. Elipses, que representan atributos. Proyecto de Fin de Curso Pgina 27
Rombos, que representan relaciones entre conjuntos de entidades. Lneas, que unen los atributos con los conjuntos de entidades y los conjuntos de entidades con las relaciones. Cada componente se etiqueta con la entidad o relacin que representa. Adems de entidades y relaciones, el modelo E-R representa ciertas restricciones que los contenidos de la base de datos deben cumplir. Una restriccin importante es la correspondencia de cardinalidades, que expresa el nmero de entidades con las que otra entidad se puede asociar a travs de un conjunto de relaciones. Por ejemplo, si cada cuenta puede pertenecer slo a un cliente, el modelo puede expresar esta restriccin. 3.4.1.2. Modelo Relacional En el modelo relacional se utiliza un grupo de tablas para representar los datos y las relaciones entre ellos. Cada tabla est compuesta por varias columnas, y cada columna tiene un nombre nico. El modelo relacional es un ejemplo de un modelo basado en registros. Los modelos basados en registros se denominan as porque la base de datos se estructura en registros de formato jo de varios tipos. Cada tabla contiene registros de un tipo particular. Cada tipo de registro dene un nmero jo de campos, o atributos. Las columnas de la tabla corresponden a los atributos del tipo de registro. Proyecto de Fin de Curso Pgina 28
No es difcil ver cmo se pueden almacenar las tablas en archivos. Por ejemplo, un carcter especial (como una coma) se puede usar para delimitar los diferentes atributos de un registro, y otro carcter especial (como un carcter de nueva lnea) se puede usar para delimitar registros. El modelo relacional oculta tales detalles de implementacin de bajo nivel a los desarrolladores de bases de datos y usuarios. El modelo de datos relacional es el modelo de datos ms ampliamente usado, y una amplia mayora de sistemas de bases de datos actuales se basan en el modelo relacional. El modelo relacional se encuentra a un nivel de abstraccin inferior al modelo de datos E-R. Los diseos de bases de datos a menudo se realizan en el modelo E-R, y despus se traducen al modelo relacional.
3.1.4.3. Otros modelos de Base de Datos El modelo de datos orientado a objetos es otro modelo de datos que est recibiendo una atencin creciente. El modelo orientado a objetos se puede observar como una extensin del modelo E-R con las nociones de encapsulacin, mtodos (funciones) e identidad de objeto. El modelo de datos relacional orientado a objetos combina las caractersticas del modelo de datos orientado a objetos y el modelo de datos relacional. Proyecto de Fin de Curso Pgina 29
Los modelos de datos semi-estructurados permiten la especificacin de datos donde los elementos de datos individuales del mismo tipo pueden tener diferentes conjuntos de atributos. Esto es diferente de los modelos de datos mencionados anteriormente, en los que cada elemento de datos de un tipo particular debe tener el mismo conjunto de atributos. El lenguaje de marcas extensible (XML, eXtensible Markup Language) se usa ampliamente para representar datos semiestructurados. Histricamente, otros dos modelos de datos, el modelo de datos de red y el modelo de datos jerrquico, precedieron al modelo de datos relacional. Estos modelos estuvieron ligados fuertemente a la implementacin subyacente y complicaban la tarea del modelado de datos. Como resultado se usan muy poco actualmente, excepto en el cdigo de bases de datos antiguo que an est en servicio en algunos lugares. 3.5. Ventajas del uso de Base de Datos La utilizacin de bases de datos como plataforma para el desarrollo de sistemas de Aplicacin en las Organizaciones se ha incrementado notablemente en los ltimos aos, se debe a las ventajas que ofrece su utilizacin, algunas de ellas son: Globalizacin de la informacin: permite a los diferentes usuarios considerar la informacin como un recurso corporativo que carece de dueos especficos. Proyecto de Fin de Curso Pgina 30
Eliminacin de la informacin inconsistente: si existen dos o ms archivos con la misma informacin, los cambios que se hagan a estos debern hacerse a todas las copias del archivo. Permite compartir informacin. Permite mantener la integridad en la informacin: esta es una de sus cualidades altamente deseables y tiene por objetivo que solo se almacena la informacin correcta. Independencia de datos: es quiz el que ms ha ayudado a la proliferacin del desarrollo de Sistemas de Bases de Datos. La independencia de datos implica un divorcio entre programas y datos. 3.5.1. Administrador de una Base de Datos El administrador de la base de datos (DBA) es la persona que est encargada del control general del sistema de base de datos. Entre sus muchas funciones estn: Decidir el contenido de la informacin en la base de datos: debe identificar las entidades y la informacin importante. Tiene que realizar el esquema conceptual, a este proceso se le denomina diseo lgico. A partir de un estudio de las necesidades de la empresa, obtiene items, atributos y relaciones entre items. El esquema conceptual se escribe utilizando el DDL. Decidir la estructura de almacenamiento y la estrategia de acceso: decide cmo se almacenan los datos y define su representacin interna. A esta fase se le denomina diseo fsico de la base de datos. Tambin tiene que decidir la correspondencia conceptual/interna. Proyecto de Fin de Curso Pgina 31
Conexin con los usuarios: debe disear los esquemas externos y las correspondencias externa/conceptual que sean necesarias, tanto para usuarios terminales como para programadores de aplicaciones. Definir aspectos de seguridad e integridad: control de acceso e integridad de la informacin. Definir procedimientos de copias de respaldo (backups) y recuperacin: se suelen tener copias de seguridad de la base de datos de manera que si se produce alguna prdida importante de informacin se pueda recuperar el sistema a partir de la ltima copia. Control de transacciones (unidades de programa cuya ejecucin debe ser atmica). Optimizacin del rendimiento de la base de datos: es responsable de que la base de datos funcione de la mejor forma posible, realizando para ello los ajustes que vayan siendo necesarios. Para realizar todas estas funciones, el DBA dispone de una serie de herramientas software y estructuras de informacin acerca de la base (ej.: diccionario de datos, procedimientos estadsticos de medida de rendimiento,...). 3.5.2. Usuarios de una Base de Datos Son usuarios no sosticados que interactan con el sistema mediante la invocacin de alguno de los programas de aplicacin permanentes que se ha escrito previamente. Por ejemplo, un cajero bancario que Proyecto de Fin de Curso Pgina 32
necesita transferir S/. 50 de la cuenta A a la cuenta B invoca un programa llamado transferir. Este programa pide al cajero el importe de dinero a transferir, la cuenta de la que el dinero va a ser transferido y la cuenta a la que el dinero va a ser transferido. Como otro ejemplo, considrese un usuario que desee encontrar su saldo de cuenta en World Wide Web. Tal usuario podra acceder a un formulario en el que introduce su nmero de cuenta. Un programa de aplicacin en el servidor Web recupera entonces el saldo de la cuenta, usando el nmero de cuenta proporcionado, y pasa la informacin al usuario. La interfaz de usuario normal para los usuarios normales es una interfaz de formularios, donde el usuario puede rellenar los campos apropiados del formulario. Los usuarios normales pueden tambin simplemente leer informes generados de la base de datos.
Proyecto de Fin de Curso Pgina 33
PROYECTO DE FIN DE CURSO 4.1. DESCRIPCIN El laboratorio acadmico de la FIIS cuenta con seis aulas y un nmero variables de PCs en cada una. Se desea desarrollar un sistema informtico para el manejo de turnos. El laboratorio funcionan de 08:00 a 22:00 horas; las PCs de cada aula esta numeradas de 0 en adelante, cada curso tiene asignada un aula y solo los estudiantes inscritos pueden practicar en ellas, en el momento de reservar un turno, el sistema debe de verificar con el carnet del estudiante sea parte de un curso valido. El estudiante debe pedir turno el mismo da que se desea trabajar. Las operaciones a tener en cuenta son: - Reservar un turno para un alumno. - Cancelar una reserva de un turno de un alumno: dado el carnet de alumno y la hora de turno, el sistema anula el mencionado turno. - Consultar turno a una hora determinada: dado el carnet del alumno y el turno, el sistema informa el aula, nmero de la Pc y el turno que el alumno tiene. - Persistencia. Estadsticas - Informar sobre las horas punta, das punta y mes punta(). - Horas de uso por cada alumno. - Horas de uso por curso. - Influye en el aprovechamiento el mayor uso del laboratorio. Proyecto de Fin de Curso Pgina 34
Para el desarrollo del sistema se planteara el diseo n 2 el cual modela la informacin importante del problema: Diseo 2: struct TURNO{ int hora; //hora de turno int aula; //Aula en el cual tiene asignado el turno int nPcs; //Nmero de PC que tiene asigana TURNO*sgte; // Apuntador al nodo(turno) siguiente };
struct CURSO{ int codCurso; // Cdigo del curso int nAula; // Sala asignada al curso CURSO*sgte; // Apuntador al nodo(curso) siguiente };
struct NODO{ int codAlu; //Carnet del estudiante CURSO*scurso; //Listas de curso del alumno TURNO*sturno; //Lista de turnos reservados por el alumno NODO*sgte; //Siguiente nodo(alumno) en la lista };
Proyecto de Fin de Curso Pgina 35
4.2. MODELO RELACIONAL DEL SISTEMA
Proyecto de Fin de Curso Pgina 36
PANTALLAS PRINCIPAL MENU DE OPCIONES
RESERVA TURNO
Proyecto de Fin de Curso Pgina 37
CANCELAR TURNO
CONSULTAR TURNO
Proyecto de Fin de Curso Pgina 38
CODIGO FUENTE /* *nomprog:PROYECTO *descripcion:Proyecto para la 4ta y 5ta PC *autores: DIAZ HERNANDEZ, JoseEduardo, ROQUE RUIZ, Johana Lizeth *fecha:13/06/13 */ #include <iostream> #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <iomanip> #include <math.h> #define max 6 #define line1 "\t\t----" #define line2 "==========================================" using namespace std;
struct ALUMNO{ int cod; int curso[max]; int sec[max]; } Proyecto de Fin de Curso Pgina 39
struct TURNAR{ int cod; int hora; int aula; int nPcs; };
struct TURNO{ int hora; int aula; int nPcs; TURNO*sgte; };
struct CURSO{ int codCurso; int nAula; CURSO*sgte; };
struct NODO{ int codAlu; CURSO*scurso; TURNO*sturno; Proyecto de Fin de Curso Pgina 40
NODO*sgte; };
int usuario(); int reservaTurno(NODO*nodi); int cancelaTurno(NODO*nodi); int consultaTurno(NODO*nodi); int menu(); void crearListaTurno(TURNO**turni); void crearListaCurso(CURSO**cursi); void crearListaNODO(NODO**nodi); void insertaNodoIni(NODO**nodi,CURSO**cursi,TURNO**turni); void mostrarNodoIni(NODO*nodi);
int main() { int op; int r; //usuario(); do{
NODO*nod; Proyecto de Fin de Curso Pgina 41
TURNO*turn; CURSO*curs; crearListaTurno(&turn); crearListaCurso(&curs); crearListaNODO(&nod); insertaNodoIni(&nod,&curs,&turn); //mostrarNodoIni(nod); op=menu(); switch(op){ case 1: {r=reservaTurno(nod); break;} case 2: {r=cancelaTurno(nod); break;} case 3: {r=consultaTurno(nod); break;} case 4: {exit(0); break;} } }while (r==1); return(0); } void crearListaTurno(TURNO**turni){ *turni=NULL; } void crearListaCurso(CURSO**cursi){ *cursi=NULL; } void crearListaNODO(NODO**nodi){ Proyecto de Fin de Curso Pgina 42
*nodi=NULL; } void insertaNodoIni(NODO**nodi,CURSO**cursi,TURNO**turni){ system("cls"); //Busca el codigo del alumno en el archivo alumnos.txt FILE *F; FILE *G; ALUMNO a; TURNAR b; F=fopen("alumnos.txt","a+"); //chequea si ha habido exito en la apertura if(F==NULL){ printf("No se puede crear file . . .\n"); system("pause"); exit(0); } //leer el archivo alumno fread(&a,sizeof(ALUMNO),1,F); while(!feof(F)){ NODO*p; CURSO*q=NULL; TURNO*r=NULL; //TURNO*r; int codal,codcur,nau,hor,ausep,npc,enc=1,i; Proyecto de Fin de Curso Pgina 43
p=(NODO*)malloc(sizeof(NODO)); p->codAlu=a.cod; //---------------------------------------------------------- //q=(CURSO*)malloc(sizeof(CURSO)); for(i=0;i<max;i++){ if(a.curso[i]!=0){ CURSO*m=NULL; m=(CURSO*)malloc(sizeof(CURSO)); m->codCurso=a.curso[i]; m->nAula=a.sec[i]; m->sgte=q; q=m; } } G=fopen("turno.txt","a+"); //chequea si ha habido exito en la apertura if(G==NULL){ printf("No se puede crear file . . .\n"); system("pause"); exit(0); } fread(&b,sizeof(TURNAR),1,G); while(!feof(G)){ if(a.cod==b.cod){ Proyecto de Fin de Curso Pgina 44
TURNO*n=NULL; n=(TURNO*)malloc(sizeof(TURNO)); n->aula=b.aula; n->hora=b.hora; n->nPcs=b.nPcs; n->sgte=r; r=n; } fread(&b,sizeof(TURNAR),1,G); } //---------------------------------------------------------- /* r=(TURNO*)malloc(sizeof(TURNO)); cout<<"Ingrese hora de separacion: "; cin>>hor; r->hora=hor; cout<<"Ingrese aula de sep: "; cin>>ausep; r->aula=ausep; cout<<"Ingrese numero de Pc: "; cin>>npc; r->nPcs=npc; */
Proyecto de Fin de Curso Pgina 45
if(*nodi==NULL){ //SI LA LISTA ESTA VACIA... p->sgte=*nodi; *nodi=p; //q->sgte=*cursi; *cursi=q; p->scurso=*cursi; //r->sgte=*turni; *turni=r; p->sturno=*turni; } else{ p->sgte=*nodi; *nodi=p; //q->sgte=*cursi; *cursi=q; p->scurso=*cursi; //r->sgte=*turni; *turni=r; p->sturno=*turni; } fread(&a,sizeof(ALUMNO),1,F); } fclose(F); } Proyecto de Fin de Curso Pgina 46
int reservaTurno(NODO*nodi){ system("cls"); system("color 8b"); FILE *F; TURNAR a; int z; //abre un archivo de texto llamado alumnos F=fopen("turno.txt","a"); //cheque si ha habido exito en la apertura if(F==NULL){ printf("No se puede crear file . . .\n"); system("pause"); exit(0); } NODO*p=nodi; int cod; int enc1=0,enc2=0; int codCurso; Proyecto de Fin de Curso Pgina 48
int naula; int hora; int npc; cout<<"Ingrese el codigo del ALUMNO: "; cin>> cod; while(p){ if(cod==p->codAlu){ CURSO*r=p->scurso; cout<<"CURSOS: "<<r->codCurso; r=r->sgte; while(r){ cout<<", "<<r->codCurso; r=r->sgte; } cout<<"\nIngrese Codigo del Curso: "; cin>>codCurso; CURSO*q=p->scurso;
while(q){ if(codCurso==q->codCurso){ cout<<"Ingrese HORA: "; do{ cin>>hora; Proyecto de Fin de Curso Pgina 49
}while(hora<8 || hora>21); cout<<"Ingrese NUMERO DE PC: "; do{ cin>>npc; }while(npc<0); enc2=1; a.cod=cod; a.aula=q->nAula; a.hora=hora; a.nPcs=npc; fwrite(&a,sizeof(TURNAR),1,F); fclose(F); } q=q->sgte; } if(enc2==0){ system("cls"); cout<<"El alumno NO LLEVA EL CURSO\n\n"; } enc1=1; } p=p->sgte; } if(enc1==0){ Proyecto de Fin de Curso Pgina 50
system("cls"); cout<<"ALUMNO NO ENCONTRADO\n\n"; } cout<< "DESEA REALIZAR OTRA OPERACION???...(SI = 1 / NO = 0): "; do{ cin>>z; }while(z!=1 && z!=0); return(z); }
int cancelaTurno(NODO*nodi){ FILE *F; FILE *G; TURNAR a; TURNAR aux; int z;
system("cls"); system("color 8b"); NODO*p=nodi;
//abre un archivo de texto llamado alumnos G=fopen("turno.txt","a"); Proyecto de Fin de Curso Pgina 51
//cheque si ha habido exito en la apertura if(G==NULL){ printf("No se puede crear file . . .\n"); system("pause"); exit(0); } //abre un archivo de texto llamado alumnos F=fopen("temporal.txt","a"); //cheque si ha habido exito en la apertura if(F==NULL){ printf("No se puede crear file . . .\n"); system("pause"); exit(0); }
int cod,enc1=0,aula,hora,w,v;
cout<<"Ingrese Codigo del Alumno: "; cin>>cod; while(p){
if(cod==p->codAlu){ system("cls"); TURNO*q=p->sturno; Proyecto de Fin de Curso Pgina 52
cout<<"=================================================\n\n"; enc1=1; } p=p->sgte; } if(enc1==1){ Proyecto de Fin de Curso Pgina 56
cout<< "DESEA REALIZAR OTRA OPERACION???...(SI = 1 / NO = 0): "; do{ cin>>z; }while(z!=1 && z!=0); return(z); } cout<<"ALUMNO NO ENCONTRADO...!!!\n\n"; cout<< "DESEA REALIZAR OTRA OPERACION???...(SI = 1 / NO = 0): "; do{ cin>>z; }while(z!=1 && z!=0); return(z); }
int menu(){ system("cls"); char menuOpc[]="M E N U D E O P C I O N E S"; char lin[]="--------------------------------------------------------------------------------"; int opc; printf("\n\n%s\n\t\t%37s\n%s\n\n",lin,menuOpc,lin); printf(" \t\t\t1. RESERVAR TURNO\n"); printf(" \t\t\t2. CANCELAR TURNO\n"); printf(" \t\t\t3. CONSULTAR TURNO\n"); printf(" \t\t\t4. SALIR\n"); Proyecto de Fin de Curso Pgina 57
printf("\n\n"); printf(" \t\t\t\t\t\tDigite su opcion : "); scanf("%d",&opc); while(!(0<=opc&&opc<=4)){
printf(" \t\t\t\tRango<0,4>\tDigite su opcion : "); scanf("%d",&opc); } return(opc); } int usuario(){ int usu,pass; cout<<"\n\n"; cout<<"\t\t\tLOGIN\n"; cout<<"\t\t\t-----\n\n";
Informacin bsica del equipo Sistema operativo: Windows 7 Home Basic Fabricante: Samsung Eletronics Procesador: Intel(R) Core(TM)i5-2410M CPU Memoria instalada (RAM): 4.00 GB Tipo de sistema: Sistema operativo de 64bits Nombre del equipo: JOHANA-PC
Compilador: Codeblocks 12.11
Proyecto de Fin de Curso Pgina 59
CONCLUSIONES Al concluir el proyecto sobre un sistema informtico para el manejo de turnos hemos apreciado la gran utilidad de la programacin estructurada en problemas reales y la relevancia que tiene en la optimizacin de procesos de cualquier tipo. Para esto, debemos tener un dominio de la programacin estructurada lo que a su vez implica tener alto sentido de pensamiento lgico y abstracto, ya que este nos permite manejar adecuadamente los temas de algoritmos, hay que declarar en forma correcta, secuenciar, relacionar y modelar sistemas mediante el uso de un sistema gestor de base de datos. As mismo, el mantener un orden adecuado a la hora de programar nos ayuda enormemente a evitar confusiones y en caso se diera el error encontrarlo ms fcilmente y as evitar una prdida de tiempo innecesaria. Finalmente, podemos afirmar categricamente que gracias a la programacin podemos dar soluciones a problemas que se presentan en la realidad y con esto ayudar a la sociedad.
Proyecto de Fin de Curso Pgina 60
BIBLIOGRAFIA - JOYANES AGUILAR, Luis, ZAHONERO MARTNEZ, Ignacio - segunda edicin 2005 PROGRAMACION EN C: Metodologa, algoritmos y estructura de datos. Mc Graw Hill, Madrid, 719p. - Garca-Bermejo Giner, Jos Rafael (2 de 2008) (en espaol). Programacin estructurada en C (1 edicin). Pearson Prentice Hall. - Valls Ferrn, Jos Mara; Camacho Fernndez, David (9 de 2004) (en espaol). Programacin estructurada y algoritmos en Pascal (1 edicin). Pearson Alhambra. McGraw-Hill, Madrid, 895p.