jueves, 7 de julio de 2011

Proyecto biblioteca (en MS-DOS)


En las últimas clases hemos tenido que crear un pequeño proyecto para poner en práctica el primer módulo del curso. Para ello hemos hecho un programa para la consola de comandos de MS-DOS que gestione una biblioteca.
El primer paso fue realizar un diagrama con la funcionalidad del programa para facilitar posteriormente la etapa de codificación. Para realizar esta tarea descubrí una herramienta online muy interesante (http://www.gliffy.com/). A continuación muestro los diagramas más genéricos realizados sobre la aplicación.


Una vez finalizada la etapa de planificación, era el momento de empezar a programar.
El primer paso es comprobar si existe la estructura de directorios, y si no es así crearla:

COMPROBAR EXISTENCIA DE DIRECTORIOS
@echo off
REM Comprobar la existencia de los directorios LIBROS, PRESTAMOS y LISTADOS
REM y, en caso de no existir, crearlos
echo ComprobarDirs 1
if not exist LIBROS md LIBROS
if not exist PRESTAMOS md PRESTAMOS
if not exist LISTADOS md LISTADOS
echo ComprobarDirs 2

Después se crea el menú principal mostrando las opciones que ofrece el programa y esperando por la elección del usuario:

MENÚ
@echo off
:inicio
call ComprobarDirs.bat
cls
echo 1) Anadir libro
echo 2) Prestar libro
echo 3) Listar todos (ordenados por signatura)
echo 4) Listar todos (ordenados alfabeticamente)
echo 5) Listar prestados
echo 6) Listar amigos con prestamos
echo 7) Devolver libros
echo 8) Buscar libro
echo 9) Salir

set /p opcion=Elija una opcion:
echo.

REM Opcion 1 (añadir libro)
if %opcion%==1 call AnadirLibro.bat
REM Opcion 2 (prestar libro)
if %opcion%==2 call PrestarLibro.bat
REM Opcion 3 (listar libros por signatura)
if %opcion%==3 call ListarLibSig.bat
REM Opcion 4 (listar libros alfabeticamente)
if %opcion%==4 call ListarLibAlf.bat
REM Opcion 5 (listar libros prestados)
if %opcion%==5 call ListarLibPrest.bat
REM Opcion 6 (listar amigos con prestados)
if %opcion%==6 call ListarAmigosPrest.bat
REM Opcion 7 (devolver libros)
if %opcion%==7 call DevolverLibros.bat
REM Opcion 8 (buscar libro)
if %opcion%==8 call BuscarLibro.bat
REM Opcion 9 (salir del programa)
if %opcion%==9 goto salir

goto inicio
:salir
echo Saliendo del programa...

A continuación se crean cada uno de los archivos .bat para realizar cada una de las tareas:

AÑADIR LIBROS
@echo off
REM Obtener signatura, título y autor del libro
set /p signatura=Introduzca la signatura del libro:
set /p titulo=Introduzca el titulo:
set /p autor=Introduzca el nombre del autor:

REM Crear un fichero "signatura.lib" y guardar en el
REM título - nombre autor
echo %titulo% - %autor% > .\LIBROS\%signatura%.lib
echo El libro ha sido incluido en la biblioteca
pause

PRESTAR LIBROS
@echo off
REM Obtenemos los parámetros titulo, nombreAmigo y fecha actual
set /p titulo=Introduzca titulo del libro:
set /p nombreAutor=Introducir nombreAutor:
set /p nombreAmigo=Introduzca el nombre de su amigo:
for %%A in (%Date%) do set fecha=%%A

REM Creamos el fichero "NombreAmigo.pre" y guardamos en el los
REM valores Título, nombreAmigo y fecha
echo %titulo% - %nombreAutor% - %fecha% > .\PRESTAMOS\%nombreAmigo%.pre
echo El prestamo ha sido guardado
pause

LISTAR LIBROS POR SIGNATURA
@echo off
REM Obtenemos todos los archivos de la carpeta libros
if exist .\LISTADOS\listadoLibrosAlf.txt del .\LISTADOS\listadoLibrosAlf.txt

SETLOCAL EnableDelayedExpansion
cd
for /f "tokens=1" %%G in ('dir /b LIBROS\*.lib') do (
set k=LIBROS/%%G
for /f "tokens=1 delims=-" %%A in (!k!) do echo a: %%A
echo %%H >> .\LISTADOS\listadoLibrosAlf.txt
)
echo.
echo El listado solicitado ha sido realizado y guardado en disco
echo.
pause

LISTAR LIBROS ALFABÉTICAMENTE

@echo off
REM Obtenemos todos los archivos de la carpeta libros
if exist .\LISTADOS\listadoLibrosAlf.txt del .\LISTADOS\listadoLibrosAlf.txt
for %%G in (.\LIBROS\*.lib) do (
for /f "tokens=1 delims=-" %%H in (%%G) do echo %%H >> .\LISTADOS\listadoLibrosAlf.txt
)
sort .\LISTADOS\listadoLibrosAlf.txt > temp.txt
move temp.txt .\LISTADOS\listadoLibrosAlf.txt
type .\LISTADOS\listadoLibrosAlf.txt
echo.
echo El listado solicitado ha sido realizado y guardado en disco
echo.
pause

LISTAR AMIGOS CON PRESTAMOS
@echo off
REM Obtener archivos de la carpeta prestamos y mostrar el nombre del archivo sin
REM extensión
if exist .\LISTADOS\listadoAmigosPrest.txt del .\LISTADOS\listadoAmigosPrest.txt
for /f "tokens=1 delims=." %%G in ('dir /b PRESTAMOS\*.pre') do echo %%G >> .\LISTADOS\listadoAmigosPrest.txt
type .\LISTADOS\listadoAmigosPrest.txt
pause

DEVOLVER LIBROS
@echo off
REM Obtener el nombre del amigo que devuelve los libros
set /p amigo=Introduzca el nombre del amigo:
REM Eliminar de la carpeta PRESTAMOS el archivo correspondiente al amigo indicado
del .\PRESTAMOS\%amigo%.pre 2> nul
echo Los prestamos indicados han sido eliminados
pause

BUSCAR LIBROS

@echo off
REM Buscar en el directorio LIBROS si alguno de los ficheros contiene el título seleccionado
REM Obtenemos el título a consultar
set /p titulo=Introduzca el titulo a buscar:
for /f %%G in ('dir /b .\LIBROS\*.lib') do (
for /f "tokens=2 delims=:" %%H in ('find /c ^"%titulo%^" .\LIBROS\%%G') do (
if %%H gtr 0 (
goto hayLibros
)
)
)
goto noHayLibros
:hayLibros
echo.
echo En la biblioteca existe algun libro con ese titulo
echo.
goto salir
:noHayLibros
echo En la biblioteca no existe ningun libro con ese titulo
:salir
pause

No hay comentarios:

Publicar un comentario