Biblio Database 2013 – Manuel del Desarrollador
Desarrollado por:
-Daniel Alejandro Pulgarin Cruz - 20131020091
-Nicolás Huertas Bejarano – 201310200
Universidad Distrital Francisco José de Caldas
Introducción
Biblio Database es un software libre que facilita la sistematización de registros en una biblioteca para mejorar su funcionamiento y brindar un mejor servicio a los usuarios de la misma.
Requerimientos del sistema:
Sistema operativo :Microprocesador recomendado :Memoria recomendada :Resolución gráfica :
Windows 95, 98, NT4, Me, 2000, XPPentium32 MBVGA o superior
Nota*: Si se desea trabajar con el archivo fuente se necesita un software que maneje aquel entorno, se recomienda usar DEV-C++ o CodeBlocks.
Funciones:
*Permitir el registro de libros nuevos, recibiendo como parámetros el nombre del libro, autor y año.
*Realizar la búsqueda de un libro específico, ya sea por su nombre, autor o año de publicación, el programa muestra si el libro existe o no.
*Mostrar cuántos libros en total posee la biblioteca, mostrando su información por nombre del título, nombre del autor y fecha de publicación.
Objetivos
*Facilitar y sintetizar la tarea de organizar los datos en un archivo donde se guardarán todos los datos registrados.
*Realizar operaciones de forma rápida y que estas se muestran en pantalla para todoslos usuarios.
*Mostrar todo lo aprendido en clase de programación como el manejo de condicionales, funciones recursivas, operaciones con datos, y demás.
Desarrollo del problema
Análisis del problema:
-Datos de Entrada:
Registrar libro: “1”
*Nombre del libro.
*Nombre del autor.
*Año de publicación.
Buscar libro: “2”
* ”n” o “N” para búsqueda por nombre del libro.
Tipo Char
* ”a” o “A” para búsqueda por autor del libro.
Tipo Char
* ”o” o “O” para búsqueda por año de publicación.
Tipo Entero
Mostar la información de todos los libros: “3”
Salir: “0”
-Procesos:
*Guardar los datos de entrada en un archivo.
Escribir o leer sobre el archivo.
*Por cada dato del libro (i++).
-Datos de Salida:
*Menú principal (Registrar libro, buscar libro, mostrar todos los registros guardados)
Registrar libro:
*”Ingrese el nombre del libro”:
*”Ingrese el nombre del autor”:
*”Ingrese el año de publicación”:
Buscar libro:
*”Búsqueda por [N]ombre, [Autor]o Añ[o]”
*Información del libro buscado.
Mostrar libros de la biblioteca:
*Mostrar los datos de todos los registros en orden de creación.
Salir:
*”Presione cualquier tecla para salir”
Diagrama DFD:
Código fuente:
#include <algorithm>#include <cctype>#include <cstdio>#include <cstdlib>#include <fstream>#include <iostream>#include <string>#include <vector>using namespace std;// Estructura del librostruct Libro{string Nombre; // Nombre del librostring Autor; // Autor del libroint Anio; // Año del libro (la variable dice anio para evitar problemas con el compilador)};// Listado de los libros, tipo Vectortypedef vector<Libro> LibroVector;// Leer y escribir el archivovoid leerArchivo();void escribirArchivo();// Mostrar el menúvoid menu();// Limpiar la pantallavoid limpiaPantalla();// Imprimir el listado completo de librosvoid imprimirLibros();// Imprimir un listado parcial de libros dado por el argumento 'lalista'void imprimirLibros(LibroVector lalista);// Agregar un librovoid registrarLibro();// Buscar libros según un criterio, devuelve los resultados de búsqueda para su manipulación o impresión.LibroVector buscarLibro();// Elimina un libro de la base principalvoid eliminarLibro(Libro libro);// Pasa una palabra a minúsculas, para realizar la búsquedastring minusculas(string str);// La base principal de librosLibroVector listadoLibros;// Mainint main(int argc, char *argv[]) {// Lee el archivoleerArchivo();// Flag de salida, si es 0, el programa se cierraint salida = 1;
// Si salida = 0, salir del programawhile(salida){// Limpia la pantallalimpiaPantalla();// Muestra el menúmenu();// Captura el flagcin >> salida;// Limpia la pantallalimpiaPantalla();// Determina la acción a seguirswitch(salida){case 1: // 1: Registrar un nuevo libroregistrarLibro();break;case 2: // 2: Buscar un(os) libros e imprimirlo(s)imprimirLibros(buscarLibro());break;case 3: // Imprime la lista completa de librosimprimirLibros();default: // Acción incorrecta, vuelve a empezar o salebreak;}// Al de una opción espera acción del usuariosystem("pause");// Limpia la pantallalimpiaPantalla();}return 0;}void menu(){// Aquí imprime el menúcout << "Sistema de biblioteca Biblio Database 2013" << endl << endl<< "1) Registrar libro" << endl<< "2) Buscar libro" << endl<< "3) Imprimir libreria" << endl<< "0) Salir" << endl << endl<< "Escriba la opcion: ";}void limpiaPantalla(){// Aquí limpia la pantalla (NO FUNCIONA EN SISTEMAS UNIX)system("cls");}void imprimirLibros(){//Imprime la lista de libros de la base principalimprimirLibros(listadoLibros);}void imprimirLibros(LibroVector lalista){cout << "Resultados:\n" << endl;// Para cada libro imprimefor(int i = 0; i < lalista.size(); i++){// El consecutivo
cout << "------------- LIBRO " << i + 1 << " -------------" << endl;// El nombre del librocout << "Nombre: " << lalista[i].Nombre << endl;// EL autor del librocout << "Autor: " << lalista[i].Autor << endl;// El año de publicacióncout << "Ano: " << lalista[i].Anio << endl << endl;}}void registrarLibro(){// Crea una variable de tipo libroLibro nuevoLibro;// Toma los datos (AUTOR; NOMBRE; AÑO)cout << "Escriba el nombre del autor: ";while (getline(cin, nuevoLibro.Autor)){if (nuevoLibro.Autor != ""){break;}}cout << "Escriba el nombre del libro: ";getline(cin, nuevoLibro.Nombre);cout << "Escriba el ano del libro: ";cin >> nuevoLibro.Anio;// Inserta el libro en la base de libroslistadoLibros.push_back(nuevoLibro);escribirArchivo();}LibroVector buscarLibro(){// Genera una lista para filtrarLibroVector resultados;// Caracter de filtro (A=Autor, N=Nombre, O=Año)char filtro;// La cadena a buscarstring busqueda;// Lee el caracter de filtrocout << "Desea buscar por [N]ombre, [A]utor, o An[o]?: ";cin >> filtro;// Lee el término de búsquedacout << "Por favor ingrese el termino a buscar: ";while (getline(cin, busqueda)){// Para que lea la línea completaif (busqueda != ""){break;}}// Genera una copia de la base de librosLibroVector lalista = listadoLibros;switch(filtro){// n/N: Busca por nombrecase 'N':case 'n':
default:for(int i = 0; i < lalista.size(); i++){if(minusculas(lalista[i].Nombre).find(minusculas(busqueda)) != string::npos){resultados.push_back(lalista[i]); // Si hay coincidencias con el nombre, agrega a la lista filtrada}}break;// Busca por autorcase 'A':case 'a':for(int i = 0; i < lalista.size(); i++){if(minusculas(lalista[i].Autor).find(minusculas(busqueda)) != string::npos){resultados.push_back(lalista[i]); // Si hay coincidencias con el autor, agrega a la lista filtrada}}// Busca por añocase 'O':case 'o':int value = atoi(busqueda.c_str()); // Convierte de cadena a númerofor(int i = 0; i < lalista.size(); i++){if(lalista[i].Anio == value){resultados.push_back(lalista[i]); // Si es el año indicado, agrega a la lista filtrada}}break;}// Retorna los resultadosreturn resultados;}void escribirArchivo(){// Abre el archivo "Biblioteca" para escrituraofstream archivo;archivo.open("Biblioteca");// Existe la cantidad de libros en el archivoarchivo << listadoLibros.size() << endl;// Escribe cada libro en el archivofor(int i = 0; i < listadoLibros.size(); i++){archivo << listadoLibros[i].Nombre << endl;archivo << listadoLibros[i].Autor << endl;archivo << listadoLibros[i].Anio << endl;}// Cierra el archivoarchivo.close();}void leerArchivo(){// Abre el archivo "Biblioteca" para lecturaifstream archivo("Biblioteca");// Si el archivo existeif(!archivo.fail()){
int size;// Lee la cantidad de libros existentesarchivo >> size;// Para cada libro en el archivo, lee la información y la guarda en la base principalfor(int i = 0; i < size; i++){Libro nuevoLibro;while(getline(archivo, nuevoLibro.Nombre)){if(nuevoLibro.Nombre != ""){break;}}while(getline(archivo, nuevoLibro.Autor)){if(nuevoLibro.Autor != ""){break;}}archivo >> nuevoLibro.Anio;listadoLibros.push_back(nuevoLibro);}}// Cierra el archivoarchivo.close();}string minusculas(string str){// Convierte toda la palabra a minúsculas. Usa la función transform sobre str.std::transform(str.begin(), str.end(), str.begin(), (int(*)(int))std::tolower);return str;}
Conclusiones
En síntesis podemos observar que este programa facilitara y agilizara los procesos de información no solo de esta aplicación sino que al ser de libre uso también puede ser usada para otros procesos, llevando a cabo el fin de la Informática que es como su nombre lo indica Información Automática.
Bibliografía
*Cómo programar en C++ - Harvey M. Deitel, Paul J. Deitel - 6ta Edición
*http://c.conclase.net/
*http://es.wikipedia.org/wiki/Inform%C3%A1tica
*http://c.conclase.net/ficheros/