viernes, 9 de diciembre de 2011

"Autos de Persona"

Autor: Jorge Henriquez Romero
Competencia: Creatividad e innovación (Nivel 1)
Palabras claves: Programacion, MySQL, Java, Cliente, Servidor.



Descripción de la actividad

En la primera prueba del ramo cliente servidor, la segunda pregunta apuntaba al diseño de un programa para ingresar autos a una tabla en una base de datos MySQL.
El problema traba de lo siguiente:
Para esta pregunta considere el siguiente modelo:
persona (rut, nombre, edad)
auto (patente, marca, modelo, year, rut_propietario)

 Diseñe e implemente una aplicación que permita guardar, en una base de datos, los autos de una persona. Al ejecutar la aplicación, esta debe obtener todas las personas de la tabla “persona” y guardarlas en un TreeSet, el cual es mostrado en pantalla, esto con el objetivo de saber que personas existen para registrar sus autos. Luego, el usuario debe digitar el rut de una persona, para luego comenzar a ingresar los N autos que posee. El software mantendrá todos los autos en cache (para esto utilice un ArrayList), antes de enviarlos en conjunto a la base de datos, ya que el programa debe entregar la libertad de ingresar todos los vehículos de una persona, sin reiniciar la aplicación. Defina un formato de como el usuario debe ingresar la patente, y valide esto mediante una excepción propia, de tal manera, que si esta no es ingresada con el formato definido por el programador, se debe  volver a digitar.

Solución
La solución para este problema está dado en el siguiente código creado por mí mismo:


Clase principal:
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.TreeSet;
import utilidades.ConexionMysql;
import utilidades.Autos;
public class Prueba_Cliente2 {
static String x="";
public static void main(String[] args) {
Scanner l=new Scanner(System.in);
String ss="s", ru="", patente="";
Boolean sii=true, si=true;
//Conexion a la base de datos
ConexionMysql conMysql = new ConexionMysql();
try {
Statement s = conMysql.getConexionMysql().createStatement();
ResultSet rs = s.executeQuery("select * from persona");
//Creación del TreeSet para almacenar lo de la tabla persona
TreeSet lista = new TreeSet();
//Se guarda a través de un while y un next para que avance
while(rs.next())
{

lista.add("nombre:"+rs.getString(2)
+" rut:"+rs.getString(1));
x=x+(rs.getString(2)+rs.getString(1));
}
Iterator iter = lista.iterator();
System.out.println("---- Lista de Personas: ----");
//Se utiliza while para mostrar lo de TreeSet
while(iter.hasNext())
{
System.out.println(iter.next().toString());
}
System.out.print("Ingrese rut de la persona a la que desea ingresarle un
vehiculo: ");
//Variable que guarda el rut que se ingresa
ru=l.nextLine();
//Verificar si el rut es valido
if(x.indexOf(ru)>0){
ArrayList auto=new ArrayList();
System.out.println("Sintaxis de ingreso: primero ingrese la patente");
System.out.println(" y luego los demás datos.");
do
{
si=true;
System.out.println("Ejemplo de como ingresar patente: AS4455");
System.out.print("Ingrese la patente: ");
//Validación de la patente
while(si!=false)
{try{
patente=l.nextLine();
String lee, num="0123456789";
if(patente.length()==6)
{
lee = patente.substring(0,1);
if(0>num.indexOf(lee))
{
lee = patente.substring(1,2);
if(0>num.indexOf(lee))
{
lee = patente.substring(2,6);
int xxx = Integer.parseInt(lee);
si=false;
}
}
}
}catch(Exception ex){
System.out.println("Patente mal ingresada, ingresela nuevamente: ");
}
}
System.out.print("Ingrese los demas datos en el siguiente orden:
<Marca>,<Modelo>,<Año>: ");
//Ingreso del resto de los datos
String datos=l.nextLine();
//Paso de los datos a un array
String [ ] aDatos = datos.split(",");
Autos InAutos = new Autos(patente, aDatos[0], aDatos[1],
Integer.parseInt(aDatos[2].trim()), ru);
String ingresado = "('"
+InAutos.getPatente()+"','"+InAutos.getMarca()+"','"+InAutos.getModelo()
+"',"+InAutos.getAño()+",'"+ InAutos.getRut() +"')";
//Agrega ingresado al ArrayList
auto.add(ingresado);
//Consulta si se sigue o no ingresando autos
System.out.print("¿Desea ingresar mas vehiculos? (s/n): ");
ss=l.nextLine();
if( ss.equals("n"))
{
sii=false;
}
}while(sii!=false);
//Paso de los datos a la base de datos
List lista2 = new ArrayList(auto);
Iterator it = lista2.iterator();
while (it.hasNext()){
String sql = "insert into vehiculoos (patente, marca, modelo, year,
rut_propietario)" + "values"+it.next();
int Colum=s.executeUpdate(sql);}
System.out.println("Datos ingresados con exito.");
}
else
{System.out.println("Error al ingresar el rut.");}
} catch (SQLException e) {
//Error que envía si no se ingresa bien a la base de datos
System.out.println("Error al ingresar los datos: " + e.getMessage());
} finally {
//Cierre de la conexión
conMysql.closeConexionMysql();
}
}
}

Método utilizado
package utilidades;
public class Autos {
private int año;
private String patente, marca, modelo, rut;
//Constructores.
public Autos(){}
public Autos(String p, String ma, String mo, int a, String r)
{
this.patente=p;
this.marca=ma;
this.modelo=mo;
this.año=a;
this.rut=r;
}
//Implementacion de get’s y set’s
public int getAño() {
return año;}
public void setAño(int año) {
this.año = año;}
public String getPatente() {
return patente; }
public void setPatente(String patente) {
this.patente = patente; }
public String getMarca() {
return marca; }
public void setMarca(String marca) {
this.marca = marca;}
public String getModelo() {
return modelo;}
public void setModelo(String modelo) {
this.modelo = modelo; }
public String getRut() {
return rut; }
public void setRut(String rut) {
this.rut = rut;}}

Imagenes de la aplicacion:


Reflexión
Gracias a este trabajo pude aprender más sobre diseño, ya sea de la base de datos como la del programa. Esto me ayudara para futuros trabajos, he incluso para cuando sea momento de trabajar.
Espero la información que les acabo de dar les sea muy útil en el transcurso de su carrera.

No hay comentarios:

Publicar un comentario