Competencias: Apli. Ciencias de la Ingenieria
Palabras Clave: MySQL, Java, Conexion, Aplicacion, Cliente Servidor
Introduccion
En esta entrada se mostrara el uso conjunto de Java y MySQL a un nivel medianamente dificil para alumnos de prime año como yo
Descripcion de la actividad:
Considere el siguiente modelo para los 2 ejercicios especificados mas adelante:
Hay que crear las siguientes tablas en la base de datos que nos entregaron
factura ( nroFactura, fecha, total_neto, rut_proveedor)
producto ( id_producto, nombre_producto, precio_neto, stock)
detalle_fta_pvd ( nroFactura, id_producto, cantidad, precio_vta_neto )
El enunciado del problema es el Siguiente:
Analice, diseñe e implemente una aplicación en consola Java, que muestre todos los
productos comprados a un proveedor determinado; para lo cual el usuario ingresa el rut del
proveedor mediante el teclado y el programa carga en una colección de tipo TreeSet los
datos solicitados, los cuales son específicamente: id_producto, nombre de cada producto, el
precio al cual se compró dicho producto y el numero de productos comprados a dicho precio.
Tome en consideración que a un mismo proveedor pudo haberse comprado una cantidad X
de un mismo producto, a un precio Y, y el mismo producto X a otro precio Z. La aplicación
debe evidenciar ambas situaciones, exhibiendo el cantidad comprada a un precio Y y la
cantidad comprada a un precio Z.
Un vez recuperada la información desde la base de datos, muestre la colección por pantalla,
de manera clara y ordenada.
Dado que los rut de los proveedores poseen un formato especifico (determinado por cada
programador), diseñe una Excepción propria de tal manera que obligue al usuario a digitar
cada rut según el formato especificado por el diseñador de la aplicación.
---------------------------------------------------------------------------------------------------------------------------------------
Para comenzar ejemplos que ayudaran en la resolucion :
Ejemplos Entrada/Salida
1.- “3231#2” → [proceso] → [Resultado de la Consulta]
2.- “awd”#h” → [proceso] → “Error”
3.- “1543#A” → [proceso] →[Resultado de la Consulta]
4.- “nagkjafs” → [proceso] → “Error”
5.- 010120 → [proceso] → “Error”
6.- “Dios mio esto es una frase Random!” → [proceso] → “Error”
7.- “2314-5” → [proceso] → “Error”
8.- “4233#B” → [proceso] → [Resultado de la Consulta]
9.- “123d#A” → [proceso] → “Error”
10.- “5433#C”→ [proceso] → “Error”
11.- “4654#a”→ [proceso] → “Error”
12.- “1243#AC”→ [proceso] → “Error”
13.- ”!234#!” → [proceso] → “Error”
14.- 123123 → [proceso] → “Error”
15.-”1345#K” → [proceso] → “Error”
En este caso el analisis siguiente escruto solo se saco lo que llevo a la solucion, se omitio cualquier otra palabra para ahorrar espacio
Analisis y Diseño
Para empezar quiero que el usuario ingrese el rut del Pvd
yo quiero que ingrese un String compuesto por 4 digitos, un separador que sera '#', y el
verificador entre 0-9 o A,B o C
main
//leer rut y mandarlo a un metodo
//verifica Escribir “Ingrese rut”;
validarRut(leer .nextLine.trim().toUpperCase());
// quiero que no hayan espacios, tampoco que las letras del verificador sean minusculas
Fin main
validarRut (String rut)
verificar largo del rut // que sean de 6 caracteres
ahora quiero que se verifique que el “#” este en la posicion correcta
necesito ver que el sector antes de “#”
sean solamente numeros
tengo que pasar el numero a un metodo externo
soloNumeros(rut)
if(soloNumeros(rut)) == false){
problemaAvistado = true;
} // crea el metodo mas tarde!
Lo ultimo seria ver si el verificador es el correcto
char verificador ← rut.charAt(5);
//Acuerdate 0-9 o A,B o C
if(Character.isDigit(verificador)
|| verificador == 'A'
|| verificador == 'B'
|| verificador == 'C'){
problemaAvistado = false;
}else {
problemaAvistado = true; // crea una excepcion
}
Si en el proceso se ha encontrado algun problema
ejecutar la excepcion y mandar un mensaje (?)
y si todo salio bien seguir con la consulta
Ahora debo crear el metodo soloNumeros
tengo que devolver un boolean(?)// SI
boolean esNumero = true // supongo que ya son numeros
como paso el rut y este es un string tengo que hacer un ciclo que llegue al numero
antes “#”
Por ultimo hacer la consulta select
sera:
select id_producto, nombre_producto. precio_vta_neto, cantidad
from producto
natural join detalle_fta_pvd
natural joinn factura
where rut_proveedor = [rut ingresado por usuario]
se crea el statement y el resultSet
y se hace lo normal cuando se trata de TreeSet
y se muestran los registros ordenados
Los siguientes diagramas, son Diagramas en UML para detallar al usuario como se desarrollo el programa
Diagrama de Clases y Actividades
Diagrama de Clases
Diagrama de Actividades
main()
main()
validarRut()
verProductosComprados()
El codigo del programa es muy largo para postearlo aqui asi que el siguiente link lo llevara hacia este.
(El codigo esta comentado por cualquier duda)
http://pastebin.com/F5u862jv
Conclusion
En esta actividad puedo que me dificulto, porque tenia que pensar en la manera en que todo iria a funcionar, literalmente me costo 1 dia encontrar una solucion, pero me llevo a tener una mejor experiencia en termino de ingeniarselas para una solucion.