Hola.
Esta semana he tenido unos dias libres y, a modo de ejercicio para practicar mis escasos conocimientos, he hecho un pequeño programa que sirve para guardar los datos de estas entregas en disco.
El programa ni es bonito, ni es perfecto, ni tiene demasiadas funciones...
Pero quizás pueda ser útil...
He creado una clase Entrega que modela los datos referentes a un envío entregado.
Luego, he creado otra clase llamada ColeccionEntregas, que básicamente es un LinkedHashMap que almacena los objetos Entrega.
Estas "colecciones de entregas" pueden guardarse en un archivo de bytes en disco, para luego poder abrirlas, añadir entregas, borrar, modificar..
A la Coleccion se le pone un nombre y este nombre será el que reciba el archivo en disco, con extensión
*.entregas.
Así se puede agrupar las Entregas en distintas Colecciones, por ejemplo, puede ser buena idea crear una Coleccion para cada mes. Así se tendrían las Entregas de noviembre en un archivo, las de diciembre en otro, las de enero....
Todo ello se hace desde una interfaz muy sencilla.
Como digo, ahora mismo es muy básico. No hay funciones de búsqueda que permitan buscar por número de acuse por ejemplo, o filtrar por fechas, o por nombre de consignatario...
Esto es algo que quiero mirar de añadir poco a poco, cuando pueda. Esto es para mí un hobby y mis dias libres se han terminado, así que normalmente no dispongo de mucho tiempo para dedicar a esto.
También me gustaría añadir posibilidad de exportar los datos a un archivo XML y/o a texto plano, ya que así los datos guardados son accesibles desde cualquier editor de texto por ejemplo. Ahora mismo se guardan en bytecode y si abres el archivo con un editor de texto, apenas se pueden identificar los datos entre decenas de caracteres raros.
Un dato que falta sobre las Entregas es el de la "firma de quien recibe" ya que no se bien como se gestiona esto.
¿Es solo el nombre del que recibe?
¿Es un archivo de imagen con la firma manuscrita desde un PDA con pantalla táctil?
Si fuera un simple String no hay problema. Si es algún tipo de imagen, la cosa se complica un poco.
En fin, adjunto un zip con un archivo JAR para ejecutar el programa y también el código fuente para quien quiera verlo o modificarlo.
El codigo fuente se divide en dos
packages: paneles y entregas
En
paneles simplemente tengo las clases para modelar los JPanel principales que componen la interfaz. Esta está dividida en tres paneles:
- Norte, donde se muestra informaion sobre la coleccion y estan los dos botones para moverse de una entrega a otra
- Centro, donde se muestran los campos de texto para leer e introducir datos de las entregas.
- Sur, donde está la hilera de botones para gestionar la Coleccion y la Entregas.
En
entregas tengo las dos clases mencionadas antes: Entregas y ColeccionEntregas.
También estan:
- Vista, que es la que se encarga de gestionar lo que ve el usuario, es decir, la interfaz
- Modelo, quien gestiona lo que el usuario NO VE, es decir, los datos en memoria de las entregas y colecciones.
- Controlador, hace de nexo entre la Vista y el Modelo, pasando los datos de uno al otro y viceversa
- GestionEntregas, es la clase principal, donde se define el marco (JFrame), se instancian el Controlador, Modelo y Vista y quien lanza la ejecución del programa.
Cada clase y sus métodos tienen comentarios de documentación explicando qué hacen y por qué.
Aún así supongo que es difícil interpretar un código un poquitín extenso cuando no lo ha escrito uno..., bueno, incluso yo a veces no recuerdo por qué hice tal método o desde donde tenía pensado invocarlo y tengo que pararme a interpretar mi própia lógica je je...
Por último,
muy importante, tener claro que este programa no es fiable. No soy profesional, ni amateur, apenas soy un aficionado...
He hecho este programa, por seguir aprendiendo y por divertirme un poco, pero no es una herramienta fiable.
Así que nadie debe confiar en que los datos que se introduzcan en él, ya están seguros.
De hecho, si introducimos determinados cambios en las clases Entrega o ColeccionEntregas, luego ya no podremos volver a abrir los archivos que hayamos guardado en disco. Esto es porque en estos archivos no se guardan únicamente el valor de los datos, lo que se hace es transformar los objetos Entrega instanciados en bytes y pasarlos al archivo.
Así que si modificamos la clase Entrega, por ejemplo añadiendo un nuevo atributo o un nuevo método, esos objetos Entrega guardados en bytes, ya no son reconocibles porque pertenecen a una versión anterior de la clase Entrega.
Y puesto que es un programa no finalizado, pues falta ver como añadir el dato de la "firma del recibí" a la clase Entrega o ver si lo de hacer búsquedas filtradas serán métodos que añadamos a la clase ColeccionEntregas, entonces es más que probable que los datos que guardemos en disco ahora, ya no serán accesibles en una versión posterior.
Por esto quiero añadir la opción de exportar a XML. En un XML solo se guardan los datos de los campos, así que siempre son recuperables aunque cambie la clase.
En principio hice lo de guardar directamente los objetos en forma de bytes porque es mucho más rápido y sencillo, pero no es la mejor forma.
En fín, no me enrollo más. Que este programa lo he hecho para aprender y practicar. Y aquí lo tenéis para quien pueda aprender algo de él, proponer mejoras o encontrarle utilidad.
Pero siempre teniendo en cuenta que no es fiable. Su propósito no es profesional, sino méramente didáctico..., y por diversión.
Un saludo.