INSTITUTO POLITÉCNICO NACIONAL
ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD ZACATENCO
INGENIERIA EN COMUNICACIONES Y ELECTRONICA
PROGRAMACION ORIENTADA A OBJETOS
GRUPO:2CM11
Bibliotheka-1
Caso: Revistas
Febrero-2019
FECHA 26/02/2019
A. Metodo del proyecto de Ingenieria (MPI) con POO Se muestra a continuación el desarrollo del proyecto denominado Bibliotheka-1, para lo cual se utiliza el MPI, Programacion Orientada a Objetos (POO)
Requerimientos
Opciones de Solución
Evaluacion y seleccion
Detalle (pseudocodigo)
Implementacion (C++)
Pruebas y depuracion
Figura A-1. La Programación Orientada a Objetos en el Ciclo de Anteproyecto. particularmente la etapa de anteproyecto (Ver figura A-1).
B. Requerimientos Los requerimientos se especifican como resultado de las entrevistas realizadas con los s del sistema de información (programa). B1. Dominio de la aplicación (Programa). Proyectar un sistema de información computarizado (programa de computo), el cual se denominará Bibliotheka1 y que tendrá como función permitir el almacenamiento (entrada por teclado) y la recuperación (salida por pantalla) de los datos de las colecciones de libros, revistas, CD´s, alumnos y profesores de una biblioteca escolar. Los datos de cada libro serán: a) Identificador (LbrID), b) Titulo (LbrTtl), c) Tema (LbrTma), y d) Precio (LbrPrc). Los datos de cada revista serán: a) Identificador (RvsID), b) Titulo (RvsTtl), c) Periodicidad (RvsPrd), y d) Precio (RvsPrc). Los datos de cada CD serán: a) Identificador (CdID), b) Titulo (CdTtl), c) Contenido (CdCnt), y d) Precio (CdPrc). Los datos de cada alumno serán: a) Identificador (AlmID), b) Nombre (AlmNmb), c) Carrera (AlmCrr), y d) Beca (AlmBca). Y los datos de cada profesor serán: a) Identificador (PfrID), b) Nombre (PfrNmb), c) Departamento (PfrDpt), y d) Salario (PfrSlr). Las operaciones a realizar con los libros, serán: a) Escribir libro (LbrEsc), b) Leer libro (LbrLer) y c) Buscar libro (LbrBsc). Las operaciones a realizar con revistas, serán: a) Escribir revistas (RvsEsc). Se utilizara el método de Proyecto de Ingenieria (fase anteproyecto), la programación Orientada a Objetos (POO), el Lenguaje de Modelo Unificado (UML) y el lenguaje de programacio C++. Los recursos a utilizar son los del Laboratorio de Computacion y la fecha de entrega es el ultimo dia del mes en curso
B.2. Detalle del problema B2.1 Requerimientos funcionales
B2.1.1 Caso de uso: Diagrama Los casos de uso especifican principalmente la funcionalidad o casos para los que se usara el sistema (programa) Bibliotheka-1. Los casos para los cuales se utilizará el sistema (programa) se muestran en el diagrama UML de Casos de Uso, Figura B1. Nombre del sistema Sistema
Caso de uso Bibliotheka-1
Libros
Actor
Escribir Leer
Buscar
Escribir Operador
Principal Revistas
Leer
Buscar CDs
Alumnos Figura B1. Diagrama de casos de uso
Profesores
B.2.1.2 Casos de uso: Detalle. (Solo se desarrollarán los Casos de Uso Principal, Libros y revistas, quedando los demás en construcción.) La descripción detallada de los casos de uso se realiza describiendo la interacción entre los actores y el sistema (programa); es decir, para cada casi de uso se describen las actividades que realizará el operador al interactuar con el sistema.
B.2.1.2.1 Caso de uso Principal. El caso de uso principal describe la funcionalidad general del sistema, desde que se inicia la ejecución del programa y hasta que termina, describiendo en general la interacción del (operador) con el sistema (programa), como se muestra en la figura B-2.
Figura B-2. Caso de uso principal Nombre: Principal ID: CU1 Actores: Operador Precondición: El operador (O) ha iniciado una sesión de la aplicación (A), desde SO Actividad: 1. La A despliega (en pantalla): “Bienvenido a Bibliotheak-1” “pulse una tecla para continuar” 2. El O pulsa una tecla. 3. La A despliega: “Menu principal” “1. Libros 2. Revistas. 3. CDs 4. Alumnos. 5. Profesores. 6. Salir.” “Elija una opción del menú” 4. El O elije una opción tecleando 1,2,3,4,5,6. 4.1 Si el O elije 1, La A ejecuta el caso Libros, Al final de lo cual retorna a (3) 4.2 Si el O elije 1, La A ejecuta el caso Revistas, Al final de lo cual retorna a (3) 4.3 Si el O elije 1, La A ejecuta el caso CDs, Al final de lo cual retorna a (3) 4.4 Si el O elije 1, La A ejecuta el caso Alumnos, Al final de lo cual retorna a (3) 4.5 Si el O elije 1, La A ejecuta el caso Profesores, Al final de lo cual retorna a (3) 4.6 Si el O elije 1, La A ejecuta el caso Salir, Al final de lo cual retorna a SO Postcondicion: La A retorna al SO
B.2.1.2.2. Caso de uso Libros. Figura B-3. Caso de uso Libros Nombre: Libros ID: CU2 Actores: Operador Precondición: El operador (O) ha elegido la Opcion 1 (Libros) del menú Principal. Actividad: 1. La A despliega (en pantalla): “Menu Libros” “1. Escribir Libros 2. Leer libros 3. Buscar Libros 4. Salir.” “Elija una opción del menú” 2. El O elije una opción tecleando 1,2,3,4. 2.1. Si el O elije 1, La A ejecuta el caso EscribirLibros, Al final de lo cual retorna a (1) 2.2. Si el O elije 1, La A ejecuta el caso LeerLibros, Al final de lo cual retorna a (1) 2.3. Si el O elije 1, La A ejecuta el caso BuscarLibros, Al final de lo cual retorna a (1) 2.4. Si el O elije 1, La A ejecuta el caso Salir, Al final de lo cual retorna al Menu Principal Postcondicion: La A retorna al Menú Principal B.2.1.2.3 Caso de uso escribir Libro Figura B-4. Caso de uso excribir libro Nombre: EscribirLibros ID: CU4 Actores: Operador Precondición: El operador (O) ha elegido la Opcion 1 (Escribir Libros) del menú Libros. Actividad: 1. La A despliega (en pantalla): “Escribir Libros” “Libro 1” “Id: “ 2. El O teclea el Id y pulsa enter. 3. La A despliega: “Titulo:” 4. El O teclea el título y pulsa enter. 5. La A despliega: “tema: 6. El O teclea el tema y pulsa enter 7. La A depliega: “precio: “ 8. El o Teclea el precio y pulsa enter.
9. Mientras no termina, regresa a (1). 10. La a despliega: “Pulse una tecla para continuar” 11. La A retorna al menú Libros. Postcondicion: La A retorna al Menú Principal B.2.1.2.4 Caso de uso Leer libro. Figura B-5. Caso de uso Leer libro Nombre: Leer Libros ID: CU4 Actores: Operador Precondición: El operador (O) ha elegido la Opcion 2 (Leer Libros) del menú Libro. Actividad: 1. La A despliega (en pantalla): “Lista de libros en la coleccion” 2. La A despliega (en pantalla): “Id: [LbrId]” “Título: [LbrTma]” “Tema: [LbrTma]” “Precio: [LbrPrc]” 3. Mientras no termina regresa a (2). 4. La A despliega en pantalla: “Pulse una tecla para terminar” 5. El O pulsa una tecla. 6. La A retorna al menú libros. Postcondicion: La A retorna al Menú Libros B.2.1.2.5 Caso de Uso buscar Libros Figura B-6. Caso de uso Buscar Libro Nombre: Buscar Libros ID: CU5 Actores: Operador Precondición: El operador (O) ha elegido la Opcion 3 (Buscar Libros) del menú Libro. Actividad: 1. La A despliega en pantalla: “Buscar libros en la colección” “En construcción” “Pulse una tecla para continuar” 2. El O pulsa una tecla. 3. La A retorna al Menu Libros Postcondicion: La A retorna al Menú Libros
B.2.1.2.6 Caso de uso Salir Libros. Figura B-7. Caso de uso Salir Libros Nombre: Salir Libros ID: CU6 Actores: Operador Precondición: El operador (O) ha elegido la Opcion 4 (Salir) del menú Libro. Actividad: 1. La A despliega: “Salir de Menu Libros” “Pulse una tecla para continuar.” 2. La A retorna al Menu principal Postcondicion: La A retorna al Menú Principal B.2.1.2.2. Caso de uso Revistas. Figura B-3. Caso de uso Revistas
Nombre: Revistas ID: CU7 Actores: Operador Precondición: El operador (O) ha elegido la Opcion 2 (Revistas) del menú Principal. Actividad: 3. La A despliega (en pantalla): “Menu Revistas” “1. Escribir Revistas 2. Leer Revistas 3. Buscar Revistas 4. Salir.” “Elija una opción del menú” 4. El O elije una opción tecleando 1,2,3,4. 2.5. Si el O elije 1, La A ejecuta el caso Escribir Revistas, Al final de lo cual retorna a (1) 2.6. Si el O elije 1, La A ejecuta el caso Leer Revistas, Al final de lo cual retorna a (1) 2.7. Si el O elije 1, La A ejecuta el caso Buscar Revistas, Al final de lo cual retorna a (1) 2.8. Si el O elije 1, La A ejecuta el caso Salir, Al final de lo cual retorna al Menu Principal Postcondicion: La A retorna al Menú Principal
B.2.1.2.3 Caso de uso escribir Revistas Figura B-4. Caso de uso escribir Revistas Nombre: Escribir Revistas ID: CU8 Actores: Operador Precondición: El operador (O) ha elegido la Opcion 1 (Escribir Libros) del menú Revistas. Actividad: 12. La A despliega (en pantalla): “Escribir Revistas” “Revista 1” “Id: “ 13. El O teclea el Id y pulsa enter. 14. La A despliega: “Titulo:” 15. El O teclea el título y pulsa enter. 16. La A despliega: “Periodicidad: 17. El O teclea la periodicidad y pulsa enter 18. La A depliega: “precio: “ 19. El o Teclea el precio y pulsa enter. 20. Mientras no termina, regresa a (1). 21. La a despliega: “Pulse una tecla para continuar” 22. La A retorna al menú Revistas. Postcondicion: La A retorna al Menú Revistas
B.2.1.2.4 Caso de uso Leer Revistas. Figura B-5. Caso de uso Leer Revistas Nombre: Leer Revistas ID: CU9 Actores: Operador Precondición: El operador (O) ha elegido la Opcion 2 (Leer Revistas) del menú Revistas. Actividad: 7. La A despliega (en pantalla): “Lista de Revistas en la coleccion” 8. La A despliega (en pantalla): “Id: [RvsId]” “Título: [RvsTma]” “Periodicidad: [RvsPrd]” “Precio: [RvsPrc]” 9. Mientras no termina regresa a (2). 10. La A despliega en pantalla: “Pulse una tecla para terminar” 11. El O pulsa una tecla. 12. La A retorna al menú Revistas. Postcondicion: La A retorna al Menú Revistas B.2.1.2.5 Caso de Uso buscar Revistas Figura B-6. Caso de uso Buscar Revistas Nombre: Buscar Revistas ID: CU10 Actores: Operador Precondición: El operador (O) ha elegido la Opcion 3 (Buscar Revistas) del menú Revistas. Actividad: 4. La A despliega en pantalla: “Buscar Revistas en la colección” “En construcción” “Pulse una tecla para continuar” 5. El O pulsa una tecla. 6. La A retorna al Menu Revistas Postcondicion: La A retorna al Menú Revistas
B.2.1.2.6 Caso de uso Salir Revistas Figura B-7. Caso de uso Salir Revistas
Nombre: Salir Revistas ID: CU11 Actores: Operador Precondición: El operador (O) ha elegido la Opcion 4 (Salir) del menú Revistas. Actividad: 3. La A despliega: “Salir de Menu Revistas” “Pulse una tecla para continuar.” 4. La A retorna al Menu principal Postcondicion: La A retorna al Menú Principal B.2.1.2.7 Caso de uso Salir de Principal Nombre: SalirPrincipal ID: CU12 Actores: Operador Precondición: El operador (O) ha elegido la Opcion 6 (Salir) del menú Principal. Actividad: 1. La A despliega: “Salir de Bibliothela-1” “Pulse una tecla para continuar.” 2. La A retorna al SO Postcondicion: La A retorna al SO B2.2 Datos de entrada y Salida Por simplicidad, los datos serán solamente 3 libros (Posteriormente podría ampliarse a un número mayor). B.2.2.1 Datos de entrada de Libros: Identificador (LbrId), Numero natural. Titulo (LbrTtl), cadena de caracteres (30). Tema (LbrTma), cadena de caracteres (30). Precio (LbrPrc) Número real. Formato: Listado simple
B.2.2.2 Datos de salida de libros: Identificador(LbrId) Titulo(LbrTtl) Tema(LbrTma) Precio(LbrPrc) Formato: Listado simple
B.2.3 Requerimientos no funcionales: -Se utilizara el método del Proyecto de Ingeniería. -Se utilizara la Programación Orientada a Objetos. - Se utilizara el lenguaje de Modelado Unificado. - Se utilizara el lenguaje de programación C++. -Se utilizaran los recursos del laboratorio de computación. -La fecha límite de entrega será el último día del mes en curso
C. opciones de resolución de problema En esta etapa del anteproyecto es en donde el ingeniero aplica su ingenio, su creatividad, pues es aquí donde imagina soluciones innovativas al problema a resolver. Se procede entonces a modelar groso modo el sistema(programa), media diagrama UML, considerando los requerimientos (sección A anterior) tanto funcionales (dominio de la aplicación, casos de uso, datos de entrada y salida), como los no-funcionales. Conforme a la POO, para el modelo del sistema se procede como sigue: 1. Desarrollar el diagrama de clases. 2. Desarrollar los métodos de todas las clases. 3. Desarrollar el método principal. A continuación se aplicaran los tres pasos anteriores para desarrollar cada una de las opciones de solución al problema
C1. Opción 1. C.1.1 Modelado del sistema C.1.1.1 Diagrama de clases De acuerdo con la técnica de POO, lo primero que debe hacerse para modelar un sistema es identificar las clases y objetos (nombre, atributos y operaciones) que representaran la realidad, lo cual se muestra con el diagrama
de clases de UML. En la redacción del problema a resolver, las clases se identifican por los sustantivos y los métodos por verbos. Así, al leer el dominio de la aplicación (problema), inciso A.1, Identificamos a la colección de libros de la biblioteca como una clase (cLibro), y revistas como otra clase (cRevistas)de manera que cada uno de los libros de la biblioteca los identificamos como objetos. Adicionalmente, en esta opción elegimos una arquitectura (estructura) simple, donde el Principal es el Controlador y Vista, y las clases cLibro y cRevistas son el Modelo.
De este modo, en la figura C-1 se muestra el diagrama de clases, utilizando diagramas UML.
Control y Vista
Modelo
Principal()
cLibro
Nombre de la clase
LbrId LbrTtl LbrTma LbrPrc
Metodos de la clase
cLibro() mLbrEsc() mLbrLer() mLbrBsc()
Metodo constructor
oLibro1
oLibro2
Atributos
de la clase
oLibro3
Control y Vista
Modelo
Principal() cRevistas RvsId RvsTtl RvsPrd RvsPrc cRevistas() mRvsEsc() mRvsLer() mRvsBsc()
Metodo constructor
oRevista1
oRevista2
Nombre de la clase
Metodos de la clase
Atributos
de la clase
oRevista3
C.1.1.2 Metidos (Diagramas de Actividad) Una vez elaborado el diagrama de clases, se procede a elaborar el diagrama de actividad (programas) de todos los métodos, de todas las clases, en este caso las clases cLibro y cRevista, como se muestra en las figuras anteriores para los métodos cLibro(), mLbrEsc(), mLbrLer() y mLbrBsc, asi como cRevistas(), mRvsEsc(), mRvsLer y mRvsBsc().
C.1.1.2.1 Metodo constructor cLibro()
Entra LbrId=0 LbrTtl=0 LbrTma=0 LbrPrc=0 Figura C-2. Metodo Escribir Libro mLbrEsc()
C.1.1.2.2. Metodo escribir libro mLbrEsc()
Sale “Libro Id:” Entra LbrId Sale “Libro Título:” Entra LbrTtl Sale “Libro Tema:” Entra LbrTma Sale “Libro Precio:” Entra LbrPrc Figura C-3. Metodo mLbrEsc() de cLibro
Retorna
C.1.1.2.3 Metodo Leer Libro mLbrLer().
Sale Libro Id Sale LbrTtl Sale LbrTma Sale LbrPrc Figura C-4. Metodo mLbrLer() de cLibro
Retorna
C.1.1.2.4. Metodo Buscar Libro mLbrBsc().
Sale “En construcción” Retorna Figura C-5. Metodo mLbrBsc() de cLibro
C.1.1.3 Principal El método principal es el controlador y vista del programa, como se muestra en la figura C-6
Inicio Principal
Declara Elección Principal: entero
Sale: “Bienvenido a Bilbliotkea-1 Pausa Inicio do-While
Sale “Menú principal” “1. Libros” “2. Revistas”. “3. CDs” “4. Alumnos.” “5. Profesores” “6. Salir.” “Seleccione una opcion”
Entra Selección principal Inicio Switch
Selección Principal
Caso 1: Libros() Caso 2: Revistas() Caso 3: CDs() Caso 4: Alumnos Caso 5: Profesores Caso 6: Salir Fin Switch
Selección ¡=6 Figura C-7. Modulo Principal
Fin Do-While Fin Principal
Inicio Principal Sale: i,SeleccionLibro: Enteros oLibro[MaxLbr]: cLibro Inicio do-While
Sale “Menú Libros” “1. Escribir Libro” “2. Leer libro”. “3. Buscar libro” “4. Salir” “Seleccione una opcion”
Entra Selección Libro Inicio Switch
Selección Libro
Caso 1: for(i=0;i<MaxClc;i++) oLibro[i].LbrEsc()
Caso 2: for(i=0;i<MaxClc;i++) oLibro[i].LbrLer()
Caso 3: oLibro.LbrBsc() Caso 4: Salir
Fin Switch
Selección ¡=6 Figura C-8. Modulo Libro
Fin Do-While Fin Principal
Inicio Principal Declara i,SeleccionRevista: Enteros oRevista[MaxLbr]: cRevista Inicio do-While Sale “Menú Revista” “1. Escribir Revista” “2. Leer Revista”. “3. Buscar Revista” “4. Salir” “Seleccione una opcion”
Entra Selección Revista Inicio Switch
Selección Revista
Caso 1: for(i=0;i<MaxClc;i++) oRevista[i].RvsEsc()
Caso 2: for(i=0;i<MaxClc;i++) oRevista[i].RvsLer()
Caso 3: oRevista.RvsBsc() Caso 4: Salir
Fin Switch
Selección ¡=6 Figura C-9. Modulo Libro
Fin Do-While Fin Principal
Sale: “CDs” “En construcción”
Figura C-10. Modulo CDs
Sale: “Alumnos” “En construcción”
Figura C-11. Modulo Alumnos
Sale: “Profesores” “En construcción”
Figura C-12. Modulo Profesores
C.1.1.4 Diagrama de Interacción Complementariamente, en la figura3-5 se muestra el diagrama de interacción de la opción 1 Operador
Principal
cLibro
Inicio Sale del menú Principal Elige Libros Sale del Menu Libros Elige Escribir libros
LbrEsc()
Sale Menu Libros
Retorna I:=0..2
Elige Leer Sale Menu LibrosSalir Elige
LbrLer() Retorna I:=0..2
Retorna
Figura C-13. Diagrama de Interacción, cLibro
Operador
Principal
cRevista
Inicio Sale del menú Principal Elige Revistas Sale del Menu Revistas Elige Escribir Revistas Sale Menu Revistas
RvsEsc() Retorna I:=0..2
Elige Leer Sale Menu LibrosSalir Elige
RvsLer() Retorna I:=0..2
Figura C-13. Diagrama de Interacción, cRevista
Retorna
D. Evaluación y selección de la opción Mejor Para evaluar las opciones de solución se elabora una tabla de decisión, como la mostrada en la Tabla-1, donde se muestran las dos soluciones en la primera columna y, en las columnas siguientes se muestran los criterios de evaluación, así como los valores asignados. El criterio de factibilidad técnica se refiere a la posibilidad de realización del sistema. La flexibilidad se refiere a la facilidad de modificar el sistema para mejorarlo o adaptarlo a otros requerimientos. La reusabilidad se refiere a la posibilidad de reusar partes del sistema en otras aplicaciones. El valor económico se refiere al mayor o menor beneficio que el sistema puede proporcionar a sus s. Finalmente, La posibilidad financiera se refiere a la disponibilidad de recursos (monetarios) suficientes para realizar completamente el sistema. Tabla d-1. Tabla de decisión, para selección Opción\Criterios Técnico Factibilidad Opción 1 100 Opción 2 100
Técnico Flexibilidad 75 100
Técnico Reusabilidad 50 75
Económico Valor 100 100
Financiero Posibilidad 100 100
Para el caso que nos ocupa, se asignan valores mostrados en la tabla D-1, por lo que la opción seleccionada es la dos
E. Detalle La opción seleccionada se detalla entonces suficientemente, para construir un prototipo. En éste caso, el detalle se expresa, en segunda aproximación (Refinamiento), mediante pseudocódigo. (Ver diagrama de UML). Usaremos los símbolos de visibilidad de atributos y operaciones:
-Privada (Private) +Publica (Public) #Protegido (Protected) Al codificar en detalle (Pseudocódigo), se escribe el programa de orden siguiente: -
Clases Métodos Principal
Conforme se va requiriendo, se añaden las constantes y variables globales, etc. A continuación, se muestra el programa en pseudocódigo
Programa Bibliotheka-1 Declara Constantes globales MaxLbr, MaxRvs: Entero=3
Declara tipo Nombre cMenu Atributos -OpcionPrincipal -OpcionLibro -OpcionRevista Operaciones cMenu() +mMnuPrn(Vacio): Entero +mMnuLbr(Vacio): Entero +mMnuRvs(Vacio): Entero Declara tipo Nombre cLibro Atributos -LbrId: Entero -LbrTtl: Cadena -LbrTma: Cadena -LbrPrc: Flotante Operaciones cLibro() ~cLibro(){} + mLbrEsc(Vacio): Vacio + mLbrLer(Vacio): Vacio + mLbrBsc(Vacio): Vacio
Metodo cMenu()de cmenu Entra OpcionPrincipal=0 OpcionLibro=0 OpcionRevista=0 Metodod mMnuPrn() de cMenu Sale: “Menu Principal” “Menu principal” “1. Libros 2. Revistas. 3. CDs 4. Alumnos. 5. Profesores. 6. Salir.” “Elija una opción del menú” Entra OpcionPrincipal Retorna OpcionPrincipal Metodod MnuLbr() de cMenu Sale “Menu Libros” “1. Escribir Libros 2. Leer libros 3. Buscar Libros 4. Salir.” “Elija una opción del menú” Entra OpcionLibro Retorna OpcionLibro Metodo cLibro() de cLibro Entra LbrId=0; LbrTtl='\0'; LbrTma='\0'; LbrPrc=0;
Metodo LbrEsc() de cLibro Sale “Libro Id:” Entra LbrId Sale “Libro Título:” Entra LbrTtl Sale “Libro Tema:” Entra LbrTma Sale “Libro Precio:” Entra LbrPrc Retorna Metodo mLbrLer() de cLibro Sale Libro Id Sale LbrTtl Sale LbrTma Sale LbrPrc Retorna Metodo LbrBsc() de cLibro Sale “En construccion” Pausa Retorna
Metodod MnuRvs() de cMenu Sale “Menu Revistas” “1. Escribir Revistas 2. Leer Revistas 3. Buscar Revistas
4. Salir.” “Elija una opción del menú” Entra Opcion Revistas Retorna Opcion Revistas Metodo cRevista() de c Revistas Entra RvsId=0; RvsTtl='\0'; RvsPrc='\0'; RvsPrc=0;
Metodo RvsEsc() de cRevista Sale “Revista Id:” Entra RvsId Sale “Revista Título:” Entra RvsTtl Sale “Revista Tema:” Entra RvsTma Sale “Revista Precio:” Entra RvsPrc Retorna Metodo mRvsLer() de cRevista Sale RvsId Sale RvsTtl Sale RvsPrc Sale
RvsPrc Retorna Metodo RvsBsc() de cRevista Sale “En construccion” Pausa Retorna Modulo Libros() Declara Variables I,SeleccionLibro: Entero Objetos oMenu: cMenu oLibro[MaxLbr]: cLibro sale “Libros” Pausa Do Calcula SeleccionLibro= oMenu.mMnuLbr() Switch(SeleccionLibro) Caso 1 Para(i=0, i<MaxLbr, i++) Sale “Escribir Libro” (i+1) Invoca oLibro[i].MlbrEsc() break Caso 2 Limpia pantalla Sale Lista Libros Para(i=0, i<MaxLbr, I++) Sale “Libro” (i+1) Invoca oLibro[i].mLbrLer() Sale “Fin de Lista” Pausa break
Caso 3 Limpia la pantalla Invoca oLibro[i].mLbrBsc() break Caso 4 Break Fin Switch While (SeleccionLibro ¡= 4) Retorna Modulo Revistas() Limpia pantalla Declara Variables I,SeleccionRevista: Entero Objetos oMenu: cMenu oRevista[MaxRvs]: cRevista sale “Revistas” Pausa Do Calcula Seleccion Revista = oMenu.mMnuRvs() Switch(SeleccionRevista) Caso 1 Para(i=0, i<MaxRvs, i++) Sale “Escribir Revista” (i+1) Invoca oRevista [i].mRvsEsc() break Caso 2 Limpia pantalla Sale Lista Revista Para(i=0, i<MaxRvs, I++) Sale “Revista” (i+1) Invoca oRevista [i].mRvsLer() Sale “Fin de Lista”
Pausa break Caso 3 Limpia la pantalla Invoca oRevista [i].mRvsBsc() break Caso 4 Break Fin Switch While (SeleccionRevista ¡= 4) Retorna
Modulo CDs() Limpia pantalla Sale “CDs” “En construccion” Pausa Retorna Modulo Alumnos() Limpia pantalla Sale “Alumnos” “En construccion” Pausa Retorna Modulo Profesores() Limpia pantalla Sale “Profesores” “En construccion” Pausa Retorna Modulo Principal() Declara Variables I,SeleccionPrincipal: Entero Objetos
oMenu: cMenu oLibro[MaxLbr]: cLibro oRevista[MaxRvs]: cRevista Sale “Bienvenido a Bibliotheka-1” Pausa Do Limpia Pantalla Calcula SeleccionPrincipal = cMenu.mMnuPrn() Switch(SeleccionPrincipal) Caso 1 Libros() Break Caso 2 Revistas() Break Caso 3 CDs() Break Caso 4 Alumnos() Break Caso 5 Profesores() Break Caso 6 Break While(Selección ¡=6) Retorna 0 Obsérvese que, hasta aquí, la solución al problema está dada en forma de diagramas UML y en pseudocódigo, lo cual no presupone un lenguaje de programación y, por lo tanto, el sistema puede ser programado en lenguaje c++ u otro lenguaje de programación que soporta la programación orientada a objetos tal como java. Sin embargo, la codificación del sistema (programa) se hará finalmente en lenguaje C++
F. Implementacion 1. /*Bibliotheka-1.p 2. Programa para automatizar una biblioteca * / 3. #include
4. #include "cadena" 5. #include "stdlib.h" 6. usando namespace std ; 7. const int MaxLbr = 3 , MaxRvst = 3 ; 8. clase cMenu { 9. privada : 10. int OpcionPrincipal ; 11. int OpcionLibros ; 12. int OpcionRevista ; 13. pública : 14. cMenu ( ) ; 15. ~ cMenu ( ) { } ; 16. int mMnuPrn ( void ) ; 17. int mMnuLbr ( void ) ; 18. int mMnuRvst ( void ) ; 19. } ; 20. 21. clase cLibro { 22. privada : 23. int LbrId ; 24. cadena LbrTtl ; 25. cadena LbrTma ; 26. flotador LbrPrc ; 27. pública : 28. cLibro ( ) ; 29. ~ cLibro ( ) { } ; 30. void mLbrEsc ( void ) ; 31. void mLbrLer ( void ) ; 32. void mLbrBsc ( void ) ; 33. } ; 34. 35. clase cRevista { 36. privada : 37. int RvstId ; 38. cadena RvstTtl ; 39. cadena RvstPrd ; 40. float RvstPrc ; 41. pública : 42. cRevista ( ) ; 43. ~ cRevista ( ) { } ; 44. void mRvstEsc ( void ) ; 45. void mRvstLer ( void ) ; 46. void mRvstBsc ( void ) ; 47. } ; 48. 49. cMenu :: cMenu ( ) 50. { 51. OpcionPrincipal = 0 ; 52. OpcionLibros = 0 ; 53. OpcionRevista = 0 ; 54. }
55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111.
int cMenu :: mMnuPrn ( void ) { sistema ( "cls" ) ; cout << "Menú principal" << endl ; cout << "1. Libros" << endl ; cout << "2. Revistas" << endl ; cout << "3. CDs" << endl ; cout << "4. Alumnos" << endl ; cout << "5. Profesores" << endl ; cout << "6. Salir" << endl ; cout << endl << "Seleccione una opcion:" ; cin >> OpcionPrincipal ; volver OpcionPrincipal ; } int cMenu :: mMnuLbr ( void ) { sistema ( "cls" ) ; cout << "Menu books " << endl ; cout << "1. Escribir libro" << endl ; cout << "2. Leer libro" << endl ; cout << "3. Buscar libro" << endl ; cout << "4. Salir" << endl ; cout << endl << "Seleccione una opcion:" ; cin >> OpcionLibros ; volver OpcionLibros ; } int cMenu :: mMnuRvst ( void ) { sistema ( "cls" ) ; cout << "Menu Revistas" << endl ; cout << "1. Escribir Revista" << endl ; cout << "2. Leer Revista" << endl ; cout << "3. Buscar Revista" << endl ; cout << "4. Salir" << endl ; cout << endl << "Seleccione una opcion:" ; cin >> OpcionRevista ; volver OpcionRevista ; } cLibro :: cLibro ( ) { LbrId = 0 ; LbrTtl = ' \ 0 ' ; LbrTma = ' \ 0 ' ; LbrPrc = 0 ; } cRevista :: cRevista ( ) { RvstId = 0 ; RvstTtl = ' \ 0 ' ; RvstPrd = ' \ 0 ' ; RvstPrc = 0 ; } void cLibro :: mLbrEsc ( void ) { cout << endl << "Id:" ; cin >> LbrId ;
112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168.
cout << endl << "Titulo:" ; cin >> LbrTtl ; cout << endl << "Tema:" ; cin >> LbrTma ; cout << endl << "Precio:" ; cin >> LbrPrc ; volver ; } void cRevista :: mRvstEsc ( void ) { cout << "Id:" ; cin >> RvstId ; cout << "Titulo:" ; cin >> RvstTtl ; cout << "Periodicidad:" ; cin >> RvstPrd ; cout << "Precio:" ; cin >> RvstPrc ; volver ; } void cLibro :: mLbrLer ( void ) { cout << endl << "Id:" << LbrId << endl ; cout << endl << "Titulo:" << LbrTtl << endl ; cout << endl << "Tema:" << LbrTma << endl ; cout << endl << "Precio:" << LbrPrc << endl ; volver ; } void cRevista :: mRvstLer ( void ) { cout << endl << "Id:" << RvstId << endl ; cout << "Titulo:" << RvstTtl << endl ; cout << "Periodicidad:" << RvstPrd << endl ; cout << "Precio:" << RvstPrc << endl << endl ; volver ; } void cLibro :: mLbrBsc ( void ) { cout << endl << "en construccion". << endl << endl << endl ; sistema ( "pausa" ) ; } void cRevista :: mRvstBsc ( void ) { cout << endl << "en construccion". << endl << endl << endl ; sistema ( "pausa" ) ; } void libros ( void ) { int i, SeleccionLibro ; cMenu oMenu ; cLibro oLibro [ MaxLbr ] ; cout << endl << "Libros" << endl << endl << endl << endl ; sistema ( "pausa" ) ; hacer { SeleccionLibro = oMenu. mMnuLbr ( ) ; interruptor ( SeleccionLibro ) {
169. caso 1 : // Escribir libro 170. { 171. para ( i = 0 ; i < MaxLbr ; i ++ ) 172. { 173. cout << endl << "Escribe Libro" << ( i + 1 ) << endl ; 174. oLibro [ i ] . mLbrEsc ( ) ; 175. } 176. romper ; 177. } 178. caso 2 : // Leer Libro 179. { 180. sistema ( "cls" ) ; 181. cout << endl << "Lista libros" << endl ; 182. para ( i = 0 ; i < MaxLbr ; i ++ ) 183. { 184. cout << endl << "Libro" << ( i + 1 ) ; 185. oLibro [ i ] . mLbrLer ( ) ; 186. } 187. cout << endl << "Fin de Lista" << endl << endl << endl ; 188. sistema ( "pausa" ) ; 189. romper ; 190. } 191. caso 3 : // Buscar libro 192. { 193. sistema ( "cls" ) ; 194. oLibro [ i ] . mLbrBsc ( ) ; 195. romper ; 196. } 197. caso 4 : // Salir Libros 198. { 199. romper ; 200. } 201. } 202. } while ( SeleccionLibro ! = 4 ) ; 203. volver ; 204. } 205. 206. Revistas vacío ( void ) { 207. sistema ( "cls" ) ; 208. int i, SeleccionRevista ; 209. cMenu oMenu ; 210. cRevista oRevista [ MaxRvst ] ; 211. cout << endl << "Revistas" << endl << endl << endl ; 212. sistema ( "pausa" ) ; 213. hacer { 214. SeleccionRevista = oMenu. mMnuRvst ( ) ; 215. interruptor ( SeleccionRevista ) { 216. caso 1 : // Escribir Revista 217. { 218. para ( i = 0 ; i < MaxRvst ; i ++ ) 219. { 220. cout << endl << "Escribe Revista" << ( i + 1 ) << endl ; 221. oRevista [ i ] . mRvstEsc ( ) ;
222. } 223. romper ; 224. } 225. caso 2 : // Leer Revista 226. { 227. sistema ( "cls" ) ; 228. cout << endl << "Lista Revistas" << endl ; 229. para ( i = 0 ; i < MaxRvst ; i ++ ) 230. { 231. cout << endl << "Revista" << ( i + 1 ) ; 232. oRevista [ i ] . mRvstLer ( ) ; 233. } 234. cout << endl << "Fin de Lista" << endl << endl << endl ; 235. sistema ( "pausa" ) ; 236. romper ; 237. } 238. caso 3 : // Buscar Revista 239. { 240. sistema ( "cls" ) ; 241. oRevista [ i ] . mRvstBsc ( ) ; 242. romper ; 243. } 244. caso 4 : // Salir Revistas 245. { 246. romper ; 247. } 248. } 249. } while ( SeleccionRevista ! = 4 ) ; 250. volver ; 251. } 252. 253. CDs vacíos ( void ) { 254. sistema ( "cls" ) ; 255. cout << "CDs" ; 256. cout << endl << "en construccion". << endl << endl << endl ; 257. sistema ( "pausa" ) ; 258. volver ; 259. } 260. 261. Alumnos vacíos ( void ) { 262. sistema ( "cls" ) ; 263. cout << "Alumnos" ; 264. cout << endl << "en construccion". << endl << endl << endl ; 265. sistema ( "pausa" ) ; 266. volver ; 267. } 268. 269. Profesores del vacío ( vacío ) { 270. sistema ( "cls" ) ; 271. cout << "Profesores" ; 272. cout << endl << "en construccion". << endl << endl << endl ; 273. sistema ( "pausa" ) ; 274. volver ; 275. }
276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322.
int main ( ) { int i, SeleccionPrincipal ; cMenu oMenu ; cLibro oLibro [ MaxLbr ] ; cout << "Bienvenido a la Bibliotheka1" << endl << endl << endl ; sistema ( "pausa" ) ; hacer { sistema ( "cls" ) ; SeleccionPrincipal = oMenu. mMnuPrn ( ) ; interruptor ( SeleccionPrincipal ) { caso 1 : // libros { Libros ( ) ; romper ; } caso 2 : // Revistas { Revistas ( ) ; romper ; } caso 3 : // CDs { CDs ( ) ; romper ; } caso 4 : // Alumnos { Alumnos ( ) ; romper ; } caso 5 : // Profesores { Profesores ( ) ; romper ; } caso 6 : // Salir principal { romper ; } } } while ( SeleccionPrincipal ! = 6 ) ; devuelve 0 ; } // Fin main ()
Diagrama de la RAM RAM
Dir 00 01 02 03 04
Localidad Nota
A1 A2 A3.. … AA AB AC … B4 B5 B6 B7 B8 B9 BA BB
LbrId LbrTtl[0] LbrTtl[1] … LbrTtl[9] LbrTma[0] LbrTma[1] … Lbr[Tma] LbrPrc
G. Pruebas y Depuracion Banco de pruebas. Prueba # 1 2 3
Libro # 1 2 3
Identificador 1 2 3
Titulo Esperanza Ignorancia Ventas
Autor Peje Penas Judas
Precio 100 200 300
Resultado: Bienvenido a la Bibliotheka-1
Título: 0
Presione una tecla para continuar . . .
Tema: 0
Menu principal
Precio: 0
1. Libros 2. Revistas
Libro3
3. CDs
Id: 0
4. Alumnos 5. Profesores
Titulo: 0
6. Salir
Tema: 0 Precio: 0
Seleccione una opcion: Fin de Lista Menu libros
Id: 1
1. Escribir libro 2. Leer libro
Titulo: Juan
3. Buscar libro 4. Salir
Tema: Historia
Seleccione una opcion:
Precio: 250
Id: 0
Libro2
Titulo: 0
Id: 2
Tema: 0 Precio: 0
Titulo: Plebes
Libro2
Tema: Documental
Id: 0
Precio: 300 Tema: Drogas Libro3 Id: 3
Precio: 275
Titulo: DMT
Fin de Lista
Menu Revistas 1. Escribir Revista
Revista 3
2. Leer Revista
Id: 3
3. Buscar Revista
Titulo:
4. Salir
Periodicidad: Mensual
Seleccione una opcion:
Precio: 300
Lista Revistas Fin de Lista Revista 1 Id: 1 Titulo: IQ Periodicidad: quincenal Precio: 233
Revista 2 Id: 2 Titulo: Action Periodicidad: semanal Precio: 200
H. Mejora Continua Observaciones para la mejora del programa: -
Mejorar la entrada de datos; por ejemplo, permitiendo la entrada de nombres compuestos de varias palabras separadas por espacios.
H: Reportes Informe Tecnico Manual de