Java - Ayuda con Java

 
Vista:
sin imagen de perfil
Val: 28
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Ayuda con Java

Publicado por Arturo (2 intervenciones) el 23/10/2018 17:16:49
Buen día a todos.

Yo trabajo en una empresa de paqueteria y necesito guardar mis archivos con información de paquetes entregados, qué cuando los busque, me presente los resultados ya capturados.
Lo qué necesito es hacer el programa en Java, pero no me a salido, tengo problemas con las variables, lo que necesito es que capture los datos e imprima en pantalla y los resultados de los datos capturados, estos son los datos:

Número de acuse
Nombre del consig.
Dirección
Estado
Tipo de servicio
Cantidad de paquetes
Nombre del destinatario
Dirección
Municipio
Firma de quien recibe
Fecha
Observaciones
Baja en sistema
Fecha de envío a destino
Folio de envío a destino

El dato que corresponde al Número de acuse tiene que combinar una letra y despues numeros enteros, ejemplo: R5620378.
Espero que me ayuden en este emprendimiento, se los agradesco mucho, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Johnson
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con Java

Publicado por Billy Johnson (786 intervenciones) el 23/10/2018 20:52:42
Yo resolví el problema así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
 
/**
 *
 * @author Billy Joel
 */
public class Acuses {
 
    public static void main(String[] args) {
        final int OPCION_SALIR = 0;
        final int OPCION_MOSTRAR = 1;
        final int OPCION_CAPTURAR = 2;
        String[] datos = {
            "Numero de acuse",
            "Nombre del consig.",
            "Dirección",
            "Estado",
            "Tipo de servicio",
            "Cantidad de paquetes",
            "Nombre del destinatario",
            "Dirección",
            "Municipio",
            "Firma de quien recibe",
            "Fecha",
            "Observaciones",
            "Baja en sistema",
            "Fecha de envío a destino",
            "Folio de envío a destino"
        };
        Map<String, Map<String, String>> acuses = new HashMap();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int opcion = -1;
        while (opcion != OPCION_SALIR) {
            System.out.println("Introduzca 1 para mostrar los acuses");
            System.out.println("Introduzca 2 para capturar nuevos acuses");
            System.out.println("Introduzca 0 para salir:");
            try {
                opcion = Integer.parseInt(br.readLine());
            } catch (IOException | NumberFormatException ex) {
                opcion = -1;
            }
            switch (opcion) {
                case OPCION_SALIR:
                    System.out.println("Adios...");
                    break;
                case OPCION_MOSTRAR:
                    System.out.println("MOSTRAR DATOS");
                    if (acuses.isEmpty()) {
                        System.out.println("No hay acuses que mostrar");
                    } else {
                        acuses.keySet().forEach((k) -> {
                            System.out.println("------------------------------------");
                            System.out.println("Acuse: " + k);
                            for (String dato : datos) {
                                System.out.println(dato + ": " + acuses.get(k).get(dato));
                            }
                            System.out.println("------------------------------------");
                        });
                    }
                    break;
                case OPCION_CAPTURAR:
                    Map<String, String> acuse = new HashMap();
                    System.out.println("CAPTURA DE DATOS");
                    System.out.println("Introduzca los siguientes datos");
                    for (String dato : datos) {
                        System.out.println(dato);
                        try {
                            acuse.put(dato, br.readLine());
                        } catch (IOException ex) {
                            ex.printStackTrace(System.out);
                        }
                        acuses.put(acuse.get("Numero de acuse"), acuse);
                    }
                    break;
                default:
                    System.out.println("opcion incorrecta\n\n");
                    break;
            }
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 28
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Ayuda con Java

Publicado por Arturo (2 intervenciones) el 23/10/2018 23:46:33
Gracias Bro.

Me has ayudado mucho, te lo agradesco grandemente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con Java

Publicado por Kabuto (981 intervenciones) el 04/11/2018 15:17:29
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...
gestionEntregas

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.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar