Implementación: Sistema De Reservaciones Con Bd - Cannes

Preview only show first 6 pages with water mark for full document please download

Transcript

Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld InterfaceUsuario.java class InterfaceUsuario extends Frame implements WindowListener, ActionListener { private Pagina pagina; // pagina a desplegar private Manejador manejador; public InterfazUsuario() { setSize(800,600); setBackground(Color.lightGray); addWindowListener(this); ManejadorPrincipal manejador = new ManejadorPrincipal(this); manejador.ejecutarTransaccionInicializar(); } public void desplegarPagina(Pagina p) { if (pagina != null) pagina.resetPagina(this); if (p != null) pagina = p; if (pagina != null) pagina.desplegarPagina(this); show(); } public void setPagina (Pagina p) { pagina = p; } public void setManejador (Manejador m) { manejador = m; } public void actionPerformed(ActionEvent event) { System.out.println("Action: "+event.getActionCommand()); if (manejador != null) manejador.manejarEvento(event.getActionCommand()); else System.out.println("Manejador nulo"); } public void windowClosed(WindowEvent event) { } public void windowDeiconified(WindowEvent event) { } public void windowIconified(WindowEvent event) { } public void windowActivated(WindowEvent event) { } public void windowDeactivated(WindowEvent event) { } public void windowOpened(WindowEvent event) { } public void windowClosing(WindowEvent event) { System.exit(0); } public static void main(String[] args) { System.out.println("Starting System..."); InterfazUsuario iu = new InterfazUsuario(); } } Manejador.java public abstract class Manejador { protected InterfaceUsuario interfaceUsuario; protected Pagina pagina; protected Pagina rPagina; protected Manejador mParent; static protected boolean db_flag; // true - BD, false - archivos 1 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld public Manejador(InterfaceUsuario ui) { interfaceUsuario = ui; } public Manejador(Manejador m,InterfaceUsuario ui) { interfaceUsuario = ui; mParent = m; } public void setPaginaRegresar(Pagina p) { rPagina = p; } public void setPagina(Pagina p) { pagina = p; } public Pagina getPaginaRegresar() { return rPagina; } public Pagina getPagina() { return pagina; } public void desplegarPagina(Pagina p) { pagina = p; if (pagina != null) { interfaceUsuario.setManejador(p.getManejador()); interfaceUsuario.desplegarPagina(p); } else System.out.print("Pagina Nula"); } public void manejarEventosRegresarSalir(String str) { if (str.equals("Regresar")) { rPagina = pagina.getPaginaRegresar(); desplegarPagina(rPagina); } else if (str.equals("Salir")) System.exit(0); else System.out.println("Error en pagina: "+this+", Evento: "+str); } public abstract void manejarEvento(String str); public void escribirElementos(Pagina p,Datos datos) { p.escribirElementos(datos); } public void leerElementos(Pagina p,Datos datos) { p.leerElementos(datos); } public void print(Vector lista) { int n = lista.size(); for (int i = 0; i < n; i++) { Datos datos = (Datos) lista.elementAt(i); datos.printAll(); } } } ManejadorPrincipal.java 2 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld public class ManejadorPrincipal extends Manejador { private ManejadorRegistroUsuario mr; private ManejadorServicio ms; public ManejadorPrincipal(InterfaceUsuario ui) { super(ui); db_flag = true; } // Contrato 1 public void manejarEvento(String str) { if (str.equals("Registrarse por Primera Vez")) ejecutarTransaccionCrearRegistroUsuario(); else if (str.equals("OK")) { String login = pagina.getElemento("login"); String passwd = pagina.getElemento("password"); ejecutarTransaccionValidarRegistro(login,passwd); } else if (str.equals("Salir")) System.exit(0); else System.out.println("Error en ManejadorPrincipal: "+str); } // Contrato 2 public void ejecutarTransaccionInicializar() { desplegarPagina(new PaginaPrincipal(interfaceUsuario,this)); } // Responsabilidades Privadas public void ejecutarTransaccionCrearRegistroUsuario() { if (mr == null) mr = new ManejadorRegistroUsuario(this,interfaceUsuario); mr.ejecutarTransaccionCrear(pagina); } public void ejecutarTransaccionValidarRegistro(String log,String pass) { if (mr == null) mr = new ManejadorRegistroUsuario(this,interfaceUsuario); if (mr.ejecutarTransaccionValidarRegistro(log,pass) == true) ejecutarTransaccionServicio(mr); else desplegarPagina(pagina); } public void ejecutarTransaccionServicio(ManejadorRegistroUsuario mr) { if (ms == null) ms = new ManejadorServicio(this,interfaceUsuario); ms.setManejadorRegistro(mr); ms.ejecutarTransaccionInicializar(pagina); } } ManejadorRegistroUsuario.java public class ManejadorRegistroUsuario extends Manejador { private private private private Pagina paginaCrearRegUsuario; Pagina paginaObtenerRegUsuario; RegistroUsuario registroUsuario; ManejadorRegistroTarjeta mrt; 3 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld 4 private InterfaceRegistro interfaceRegistro; public ManejadorRegistroUsuario(Manejador m,InterfaceUsuario ui) { super(m,ui); registroUsuario = new RegistroUsuario(); if (interfaceRegistro == null) { if (db_flag == true) { System.out.println("Usando Base de Datos"); interfaceRegistro = new InterfaceBaseDatosRegistro(); } else { System.out.println("Usando Archivos"); interfaceRegistro = new InterfaceArchivoRegistro(); } } } public InterfaceRegistro getInterfaceRegistro() { return interfaceRegistro; } // Contrato 1 public void manejarEvento(String str) { if (str.equals("Registrar")) ejecutarTransaccionCrear(); else if (str.equals("Actualizar")) ejecutarTransaccionActualizar(); else if (str.equals("Eliminar")) ejecutarTransaccionEliminar(); else if (str.equals("Registrar Tarjeta")) ejecutarTransaccionRegistrarTarjeta(); else manejarEventosRegresarSalir(str); } // Contrato 2: Crear public void ejecutarTransaccionCrear(Pagina p) { if (paginaCrearRegUsuario == null) paginaCrearRegUsuario = new PaginaCrearRegUsuario(p,interfaceUsuario,this); desplegarPagina(paginaCrearRegUsuario); } // Contrato 3: Validar public boolean ejecutarTransaccionValidarRegistro(String log, String pass) { return interfaceRegistro.validarRegistro(registroUsuario,log,pass); } // Contrato 4: Obtener public void ejecutarTransaccionObtener(Pagina p) { if (paginaObtenerRegUsuario == null) paginaObtenerRegUsuario = new PaginaObtenerRegUsuario(p,interfaceUsuario,this); escribirElementos(paginaObtenerRegUsuario,registroUsuario); desplegarPagina(paginaObtenerRegUsuario); } // Responsabildiades Privadas public void ejecutarTransaccionCrear() { registroUsuario = new RegistroUsuario(); leerElementos(pagina,registroUsuario); interfaceRegistro.escribirRegistro(registroUsuario); Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld ejecutarTransaccionObtener(pagina); } public void ejecutarTransaccionActualizar() { leerElementos(pagina,registroUsuario); interfaceRegistro.actualizarRegistro(registroUsuario); } public void ejecutarTransaccionEliminar() { interfaceRegistro.eliminarRegistro(registroUsuario); ejecutarTransaccionCrear(pagina); } public void ejecutarTransaccionRegistrarTarjeta() { if (registroUsuario == null) System.out.println("Registro Invalido"); else { if (mrt == null) mrt = new ManejadorRegistroTarjeta(this,interfaceUsuario); String id = registroUsuario.elementAt(0); mrt.ejecutarTransaccionInicializar(pagina,id); } } } Pagina.java public abstract class Pagina { protected InterfaceUsuario interfaceUsuario; protected Manejador manejador; protected Pagina pRegresar; // pagina de retorno protected Vector paneles,botones,textos,etiquetas; protected Panel panel; protected Button boton; protected TextField texto; protected Label etiqueta; public Pagina() { resetPagina(); createPagina(); } public Pagina(Pagina p) { this(); pRegresar = p; } public Pagina(InterfaceUsuario ui,Manejador m) { this(); interfaceUsuario = ui; manejador = m; } public Pagina(Pagina p,InterfaceUsuario ui,Manejador m) { this(p); interfaceUsuario = ui; manejador = m; } public abstract void createPagina(); public void agregarBotonesRegresarSalir(Panel panel){ boton = new Button ("Regresar"); botones.addElement(boton); 5 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld panel.add(boton); boton = new Button ("Salir"); panel.add(boton); botones.addElement(boton); paneles.addElement(panel); } public Manejador getManejador() { return manejador; } public void setPaginaRegresar(Pagina p) { pRegresar = p; public Pagina getPaginaRegresar() { return return_p; } public void desplegarPagina(InterfazUsuario ui) { System.out.println("Desplegando: "+ this); int ps = paneles.size(); ui.setLayout(new GridLayout(ps,1)); for (int i = 0; i < ps; i++) ui.add((Panel)paneles.elementAt(i)); int bs = botones.size(); for (int i = 0; i < bs; i++) if ((boton = (Button)botones.elementAt(i)) != null) boton.addActionListener(ui); } public void resetPagina() { paneles = new Vector(); botones = new Vector(); textos = new Vector(); etiquetas = new Vector(); } public void resetPagina(InterfazUsuario ui) { ui.removeAll(); int bs = botones.size(); for (int i = 0; i < bs; i++) if ((boton = (Button)botones.elementAt(i)) != null) boton.removeActionListener(ui); } public String getElemento(int i) { String str = null; if (i >= 0 && i < textos.size()) str = ((TextField) textos.elementAt(1)).getText(); else System.out.println("Texto invalido: "+i); return str; } public void leerElementos(Datos datos) { String name0,str,name; for (int i = 0; i < datos.size(); i++) { name0 = (String)datos.getName(i); str = null; name = null; for (int j = 0; name0.equals(name) == false && j < textos.size(); j++) { name = ((Component) textos.elementAt(j)).getName(); if (name0.equals(name) == true) { str = ((TextField) textos.elementAt(j)).getText(); if (str.equals("") == true) str = " "; datos.setElementAt(str,i); 6 } Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld } } System.out.println(name+": "+str); } } public void escribirElementos(Datos datos) { String str0,str1,name; for (int i = 0; i < datos.size(); i++) { str0 = (String)datos.getName(i); str1 = (String)datos.elementAt(i); // if (str0 == null || str1 == null) // continue; if (str1 == null || str1.equals(" ") == true) str1 = ""; name = null; for (int j = 0; str0 != name && j < textos.size(); j++) { name = ((Component) textos.elementAt(j)).getName(); if (str0 == name) { ((TextField) textos.elementAt(j)).setText(str1); System.out.println(str0+": "+str1); } } } } } PaginaPrincipal.java class PaginaPrincipal extends Pagina { public PaginaPrincipal (InterfaceUsuario ui,Manejador m) { super(ui,m); } public void createPagina() { panel = new Panel(); panel.setLayout(new GridLayout(1,1)); panel.add(new Label("SISTEMA DE RESERVACIONES DE VUELO", Label.CENTER)); paneles.addElement(panel); panel = new Panel(); panel.setLayout(new GridLayout(4,1));//5 fila, 1 cols panel.add(new Label("Servicios Ofrecidos:", Label.CENTER)); panel.add(new Label("* Consulta de Vuelos, Tarifas y Horarios", Label.CENTER)); panel.add(new Label("* Reserva de Vuelos", Label.CENTER)); panel.add(new Label("* Compra de Boletos", Label.CENTER)); paneles.addElement(panel); panel = new Panel(); panel.setLayout(new GridLayout(1,1)); panel.add(new Label("Para registrarse por primera vez oprima:", Label.CENTER)); paneles.addElement(panel); panel = new Panel(); 7 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld boton = new Button ("Registrarse por Primera Vez"); botones.addElement(boton); panel.add(boton); paneles.addElement(panel); panel = new Panel(); panel.setLayout(new GridLayout(1,1)); panel.add(new Label("Para accesar todos los servicios de vuelo (consulta, reserva, compra) o modificar su registro, oprima:", Label.CENTER)); paneles.addElement(panel); panel = new Panel(); panel.add(new Label("Login:", Label.LEFT)); panel.add(new TextField (20)); paneles.addElement(panel); panel = new Panel(); panel.add(new Label("Password:")); texto = new TextField(20); texto.setEchoChar('#'); panel.add(texto); paneles.addElement(panel); panel = new Panel(); boton = new Button("OK"); botones.addElement(boton); panel.add(boton); boton = new Button("Salir"); botones.addElement(boton); panel.add(boton); paneles.addElement(panel); } } PaginaRegUsuario.java abstract class PaginaRegUsuario extends Pagina { public PaginaRegUsuario(Pagina p,InterfaceUsuario ui,Manejador m) { super(p,ui,m); } public void createPagina() { panel = new Panel(); panel.setLayout(new GridLayout(2,1)); panel.add(new Label("SISTEMA DE RESERVACIONES DE VUELO", Label.CENTER)); panel.add(new Label("Registro de Usuario", Label.CENTER)); paneles.addElement(panel); panel = new Panel(); panel.add(new Label("Nombre:")); texto = new TextField(20); textos.addElement(texto); panel.add(texto); 8 Implementación: Sistema de Reservaciones con BD y Archivos panel.add(new Label("Apellido:")); texto = new TextField(20); textos.addElement(texto); panel.add(texto); paneles.addElement(panel); panel = new Panel(); panel.add(new Label("Calle:")); texto = new TextField(20); textos.addElement(texto); panel.add(texto); panel.add(new Label("Colonia:")); texto = new TextField(20); textos.addElement(texto); panel.add(texto); paneles.addElement(panel); panel = new Panel(); panel.add(new Label("Ciudad:")); texto = new TextField(20); textos.addElement(texto); panel.add(texto); panel.add(new Label("Pais:")); texto = new TextField(10); textos.addElement(texto); panel.add(texto); panel.add(new Label("Codigo Postal:")); texto = new TextField(5); textos.addElement(texto); panel.add(texto); paneles.addElement(panel); panel = new Panel(); panel.add(new Label("Tel Casa:")); texto = new TextField(15); textos.addElement(texto); panel.add(texto); panel.add(new Label("Tel Of.:")); texto = new TextField(15); textos.addElement(texto); panel.add(texto); panel.add(new Label("Fax:")); texto = new TextField(15); textos.addElement(texto); panel.add(texto); paneles.addElement(panel); panel = new Panel(); panel.add(new Label("Login:")); texto = new TextField(10); textos.addElement(texto); Weitzenfeld 9 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld panel.add(texto); panel.add(new Label("E-Mail:")); texto = new TextField(40); textos.addElement(texto); panel.add(texto); paneles.addElement(panel); panel = new Panel(); panel.add(new Label("Password")); texto = new TextField(20); texto.setEchoChar('#'); textos.addElement(texto); panel.add(texto); panel.add(new Label("Repetir Password")); texto = new TextField(20); texto.setEchoChar('#'); textos.addElement(texto); panel.add(texto); paneles.addElement(panel); } } PaginaCrearRegUsuario.java class PaginaCrearRegUsuario extends PaginaRegUsuario { public PaginaCrearRegUsuario(Pagina p,InterfaceUsuario ui,Manejador m) { super (p,ui,m); } public void createPagina() { super.createPagina(); panel = new Panel(); boton = new Button("Registrar"); botones.addElement(boton); panel.add(boton); boton = new Button("Registrar Tarjeta"); botones.addElement(boton); panel.add(boton); agregarBotonesRegresarSalir(panel); } } Datos.java public class Datos { protected Vector campos[]; public Datos() { campos = new Vector[2]; for (int i = 0; i < 2; i++) campos[i] = new Vector(); } public void addElement(String str) { campos[0].addElement(str); 10 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld campos[1].addElement(""); } public String serializarSQL() { String serializa0 = ""; // String serializa1 = ""; for (int i = 0; i < campos[1].size(); i++) { if (i > 0) { serializa0 = serializa0 + ", "; // serializa1 = serializa1 + ", "; } serializa0 = serializa0 + campos[0].elementAt(i) + " = " "'" + campos[1].elementAt(i) + "'"; // serializa0 = serializa0 + campos[0].elementAt(i); // serializa1 = serializa1 + "'" + campos[1].elementAt(i) } // return "(" + serializa0 + ") VALUES (" + serializa1 + ")"; return serializa0; } public String serializarSQLinsert() { String serializa0 = ""; String serializa1 = ""; for (int i = 0; i < campos[1].size(); i++) { // if ((campos[1].elementAt(i)).equals("") 00 true) // != if (i > 0) { serializa0 = serializa0 + ", "; serializa1 = serializa1 + ", "; } serializa0 = serializa0 + campos[0].elementAt(i); serializa1 = serializa1 + "'" + campos[1].elementAt(i) // } } return "(" + serializa0 + ") VALUES (" + serializa1 + ")"; } public void setElementAt(String str,int i) { campos[1].setElementAt(str,i); } public void setElementAt(int num,int i) { String str = String.valueOf(num); campos[1].setElementAt(str,i); } public String getName(int i) { return (String) campos[0].elementAt(i); } public String elementAt(int i) { return (String) campos[1].elementAt(i); } public int size() { return campos[0].size(); } public void resetAll() { for (int i = 0; i < campos[0].size(); i++) campos[1].addElement(""); } public void printAll() { for (int i = 0; i < campos[0].size(); i++) { 11 + + "'"; null) { + "'"; // Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld 12 System.out.print(campos[0].elementAt(i)+": "); System.out.println(campos[1].elementAt(i)); } } } RegistroUsuario.java public class RegistroUsuario extends Datos { public RegistroUsuario() { addElement("login"); addElement("password"); addElement("rpassword"); addElement("nombre"); addElement("apellido"); addElement("direccion"); addElement("colonia"); addElement("ciudad"); addElement("pais"); addElement("CP"); addElement("telCasa"); addElement("telOficina"); addElement("fax"); addElement("email"); } } InterfaceRegistro.java public abstract class InterfaceRegistro { protected Datos datos; protected RegistroUsuario registroUsuario; protected RegistroTarjeta registroTarjeta; public InterfaceRegistro(){ } // Contrato 1: Registrar Usuario // Contrato 3: Registrar Tarjeta public abstract boolean leerRegistro(Datos reg,String log); public abstract void escribirRegistro(Datos reg); public abstract void actualizarRegistro(Datos reg); public abstract void eliminarRegistro(Datos reg); // Contrato 2: Validar Registro public abstract boolean validarRegistro(Datos reg,String log,String pass); public String getClassName(Datos reg){ String regname; Class regclass = reg.getClass(); String fullname = regclass.getName(); int index = fullname.lastIndexOf('.'); if (index > 0) regname = fullname.substring(index+1); else regname = fullname; return regname; Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld } } InterfaceBaseDatosRegistro.java public class InterfaceBaseDatosRegistro extends InterfaceRegistro { Connection con; Statement stmt; ResultSet rs; public InterfaceBaseDatosRegistro() { int fg1 = checkDriverSun(); int fg2 = checkDriverMS(); if (fg1 == 0 || fg2 == 0) open("jdbc:odbc:reservaciones", "alfredo", "ITAM"); } // Leer Registro public boolean leerRegistro(Datos reg,String log) { System.out.println("Login: "+log); String regname = getClassName(reg); String querysql = "SELECT * FROM " + regname + " WHERE (login = '" + log + "')"; boolean fg = leerRecordSetRegistro(querysql,reg); if (fg == true) System.out.println("Se valido registro " + regname + ": " + log); else System.out.println("No se valido registro " + regname + ": " + log); return fg; } // Escribir Registro public void escribirRegistro(Datos reg) { String log = reg.elementAt(0); System.out.println("log: " + log); String regname = getClassName(reg); String textsql = reg.serializarSQLinsert(); String querysql = "INSERT INTO " + regname + " " + textsql; System.out.println("querysql: " + querysql); if (actualizarRecordSetRegistro(querysql) == true) System.out.println("Se inserto en " + regname + " record de " + log); else System.out.println("No se pudo insertar en " + regname + " record de " + log); } // Actualizar Registro public void actualizarRegistro(Datos reg) { String log = reg.elementAt(0); System.out.println("log: " + log); String regname = getClassName(reg); String textsql = reg.serializarSQL(); 13 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld 14 String str = "UPDATE " + regname + " SET " + textsql + " WHERE Login = '" + log + "';"; if (actualizarRecordSetRegistro(str) == true) System.out.println("Se actualizo en " + regname + " record de " + log); else System.out.println("No se pudo actualizar en " + regname + " record de " + log); } // Eliminar Registro public void eliminarRegistro(Datos reg) { String log = reg.elementAt(0); System.out.println("log: " + log); String regname = getClassName(reg); String str = "DELETE FROM " + regname + " WHERE Login = '" + log + "';"; if (actualizarRecordSetRegistro(str) == true) System.out.println("Se elimino en " + regname + " record de " + log); else System.out.println("No se pudo eliminar en " + regname + " record de " + log); } // Contrato 2 // Validar Registro public boolean validarRegistro(Datos reg,String log, String pass) { System.out.println("Login: "+log); System.out.println("Password: "+pass); String regname = getClassName(reg); String querysql = "SELECT * FROM " + regname + " WHERE (login = '" + log + "') AND (password = '" + pass + "')"; boolean fg = leerRecordSetRegistro(querysql,reg); if (fg == true) System.out.println("Se valido registro: " + log + "," + pass); else System.out.println("No se valido registro: " + log + "," + pass); return fg; } // Responsabilidades Privadas public boolean leerRecordSetRegistro(String query,Datos datos) { if (datos == null) { System.out.println("Datos nulos"); return false; } try { rs = stmt.executeQuery (query); ResultSetMetaData rsmd = rs.getMetaData (); int numCols = rsmd.getColumnCount (); System.out.println("Cargando registro"); if (rs.next()) { for (int i = 1; i <= numCols; i++) { // datos.size() if (i > 1) System.out.print(","); String str = rs.getString(i); Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld System.out.print(str); datos.setElementAt(str,i-1); } return true; } System.out.println(""); } catch (SQLException ex) { System.out.println ("\n*** Error de SQL interceptado ***\n"); while (ex != null) { System.out.println ("SQLState: " + ex.getSQLState ()); System.out.println ("Mensaje: " + ex.getMessage ()); System.out.println ("Error: " + ex.getErrorCode ()); ex = ex.getNextException (); System.out.println (""); } } catch (Exception ex) { ex.printStackTrace (); } return false; } public boolean actualizarRecordSetRegistro(String query) { try { int n = stmt.executeUpdate (query); return true; } catch (SQLException ex) { System.out.println ("\n*** Error de SQL interceptado ***\n"); while (ex != null) { System.out.println ("SQLState: " + ex.getSQLState ()); System.out.println ("Mensaje: " + ex.getMessage ()); System.out.println ("Error: " + ex.getErrorCode ()); ex = ex.getNextException (); System.out.println (""); } } catch (Exception ex) { ex.printStackTrace (); } return false; } // desplegar lectura de BD public void displayAllDataRegistro() { displayRecordSet("SELECT * FROM REGISTRO"); } public void displayAllDataTarjeta() { displayRecordSet("SELECT * FROM TARJETA"); } public void displayRecordSet (String query) { 15 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld try { if (stmt != null) { rs = stmt.executeQuery (query); dispResultSet(rs); } else return; } catch (SQLException ex) { // Una excepci¢n de SQL fu‚ generada. La obtiene y // despliega el mensaje de error. Note que puede haber // m£ltiples errores que podr¡an encadenarse. System.out.println ("\n*** Error de SQL interceptado ***\n"); while (ex != null) { System.out.println ("SQLState: " + ex.getSQLState ()); System.out.println ("Mensaje: " + ex.getMessage ()); System.out.println ("Error: " + ex.getErrorCode ()); ex = ex.getNextException (); System.out.println (""); } } catch (java.lang.Exception ex) { // Si existe alg£n otro error, lo despliega del stack ex.printStackTrace (); } } private static void dispResultSet (ResultSet rs) throws SQLException { int i; ResultSetMetaData rsmd = rs.getMetaData (); int numCols = rsmd.getColumnCount (); // Despliega los nombres de los campos for (i=1; i<=numCols; i++) { if (i > 1) System.out.print(","); System.out.print(rsmd.getColumnLabel(i)); } System.out.println(""); // Despliega informaci¢n hasta que no existan m s registros boolean more = rs.next (); while (more) { // Hace un ciclo por cada columna y la despliega en pantalla for (i=1; i<=numCols; i++) { if (i > 1) System.out.print(","); System.out.print(rs.getString(i)); } System.out.println(""); // Avanza al siguiente registro more = rs.next (); } } public int checkDriverSun() { 16 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld int fg = 0; try { Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); System.out.println ("\n*** Utilizando driver de Sun ***\n"); } catch (ClassNotFoundException ex) { // System.out.println ("\n*** Sun ClassNotFoundException interceptado ***\n"); fg = 1; } return fg; } public int checkDriverMS() { int fg = 0; try { Class.forName ("com.ms.jdbc.odbc.JdbcOdbcDriver"); System.out.println ("\n*** Utilizando driver de Microsoft ***\n"); } catch (ClassNotFoundException ex) { // System.out.println ("\n*** MS ClassNotFoundException interceptado ***\n"); fg = 1; } return fg; } public void open(String url,String log,String pass) { try { con = DriverManager.getConnection (url, log, pass); checkForWarning (con.getWarnings ()); DatabaseMetaData dma = con.getMetaData (); System.out.println("\nConectado a " + dma.getURL()); System.out.println("Driver " + dma.getDriverName()); System.out.println("Versi¢n " + dma.getDriverVersion()); System.out.println(""); stmt = con.createStatement (); } catch (SQLException ex) { System.out.println ("\n*** Error de SQL interceptado ***\n"); while (ex != null) { System.out.println ("SQLState: " + ex.getSQLState ()); System.out.println ("Mensaje: " + ex.getMessage ()); System.out.println ("Error: " + ex.getErrorCode ()); ex = ex.getNextException (); System.out.println (""); } } catch (Exception ex) { System.out.println ("\n*** Exception interceptado ***\n"); ex.printStackTrace (); } } public static boolean checkForWarning (SQLWarning warn) throws SQLException { 17 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld boolean rc = false; if (warn != null) { System.out.println ("\n *** Advertencia ***\n"); rc = true; while (warn != null) { System.out.println ("SQLState: " + warn.getSQLState ()); System.out.println ("Mensaje: " + warn.getMessage ()); System.out.println ("Error: " + warn.getErrorCode ()); System.out.println (""); warn = warn.getNextWarning (); } } return rc; } } InterfaceArchivoRegistro.java public class InterfaceArchivoRegistro extends InterfaceRegistro { private String path = "reservaciones/baseDatos"; private String fileRegistro = "Registro.dat"; private String fileTarjeta = "Tarjeta.dat"; private File freg, ftar; private Vector archivoRegistro; private ArchivoRegistro ar; public InterfaceArchivoRegistro() { archivoRegistro = new Vector(); ar = new ArchivoRegistro(path,fileRegistro, "reservaciones.registro.usuario","RegistroUsuario"); archivoRegistro.addElement(ar); ar = new ArchivoRegistro(path,fileTarjeta, "reservaciones.registro.tarjeta","RegistroTarjeta"); archivoRegistro.addElement(ar); } // Contrato 1: Registrar Usuario // Contrato 3: Registrar Tarjeta // Leer Registro public boolean leerRegistro(Datos reg, String log) { String regname = getClassName(reg); for (int i = 0; i < archivoRegistro.size(); i++) { ar = (ArchivoRegistro) archivoRegistro.elementAt(i); if (ar != null && regname.equals(ar.getName()) == true) return ar.leerRegistro(reg, log); } return false; } // Escribir Registro public void escribirRegistro(Datos reg) { String regname = getClassName(reg); for (int i = 0; i < archivoRegistro.size(); i++) { 18 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld ar = (ArchivoRegistro) archivoRegistro.elementAt(i); if (ar != null && regname.equals(ar.getName()) == true) ar.escribirRegistro(reg); } } // Actualizar Registro public void actualizarRegistro(Datos reg) { String regname = getClassName(reg); for (int i = 0; i < archivoRegistro.size(); i++) { ar = (ArchivoRegistro) archivoRegistro.elementAt(i); if (ar != null && regname.equals(ar.getName()) == true) ar.actualizarRegistro(reg); } } // Eliminar Registro public void eliminarRegistro(Datos reg) { String regname = getClassName(reg); for (int i = 0; i < archivoRegistro.size(); i++) { ar = (ArchivoRegistro) archivoRegistro.elementAt(i); if (ar != null && regname.equals(ar.getName()) == true) ar.eliminarRegistro(reg); } } // Contrato 2: Validar Registro public boolean validarRegistro(Datos reg, String log, String pass) { String regname = getClassName(reg); for (int i = 0; i < archivoRegistro.size(); i++) { ar = (ArchivoRegistro) archivoRegistro.elementAt(i); if (ar != null && regname.equals(ar.getName()) == true) return ar.validarRegistro(reg, log, pass); } return false; } } ArchivoRegistro.java public class ArchivoRegistro { private Vector listaRegistro; private File freg; private Datos registro; private Class creg; private String name; public ArchivoRegistro(String dirname, String filename, String packagename, String classname) { try { creg = Class.forName(packagename+"."+classname); name = classname; System.out.println ("\nLeyendo archivo con objetos de clase: " + classname); 19 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld } catch (ClassNotFoundException ex) { System.out.println ("\n*** ClassNotFoundException interceptado ***\n"); ex.printStackTrace (); } listaRegistro = new Vector(); freg = new File(dirname,filename); inicializarRegistros(); } // Contrato 2: Validar Registro public boolean leerRegistro(Datos reg, String log) { System.out.println("Login: "+log); return leerRecordSetRegistro(log,reg); } // Escribir Registro public void escribirRegistro(Datos reg) { if (leerRecordSetRegistro(reg.elementAt(0),reg) == false){ listaRegistro.addElement(reg); actualizarArchivoRegistro(); } else actualizarRegistro(reg); } // Actualizar Registro public void actualizarRegistro(Datos reg) { int indice = leerIndiceRegistro(reg.elementAt(0)); if (indice != -1) { listaRegistro.setElementAt(reg,indice); actualizarArchivoRegistro(); } } // Eliminar Registro public void eliminarRegistro(Datos reg) { int indice = leerIndiceRegistro(reg.elementAt(0)); if (indice != -1) { listaRegistro.removeElementAt(indice); actualizarArchivoRegistro(); } } // Contrato 2: Validar Registro public boolean validarRegistro(Datos reg, String log, String pass) { System.out.println("Login: "+log); System.out.println("Password: "+pass); if (leerRecordSetRegistro(log,reg) != false && reg != null) { String preg = reg.elementAt(1); if (pass.equals(preg)) return true; } System.out.println("registro: "+reg); return false; } 20 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld // Responsabilidades Privadas private void inicializarRegistros() { try { BufferedReader is = new BufferedReader(new FileReader(freg)); leerRegistros(listaRegistro,is); is.close(); } catch(IOException e) { System.out.print("Error Lectura Registro: " + e); System.exit(1); } } private void leerRegistros(Vector vectorDatos, BufferedReader is) throws IOException { String s = is.readLine(); Integer ns = Integer.valueOf(s); int n = ns.intValue(); for (int i = 0; i < n; i++) { try { registro = (Datos) creg.newInstance(); } catch (Exception ex){ System.out.println ("\n*** IllegalAccessException interceptado ***\n"); ex.printStackTrace (); } s = is.readLine(); StringTokenizer t = new StringTokenizer(s, "|"); for (int j = 0; j < registro.size(); j++) { String val = t.nextToken(); registro.setElementAt(val,j); } vectorDatos.addElement(registro); } } private void actualizarArchivoRegistro() { try { BufferedWriter os = new BufferedWriter(new FileWriter(freg)); escribirDatos(listaRegistro, os); os.close(); } catch(IOException e) { System.out.print("Error: " + e); System.exit(1); } } private void escribirDatos(Vector vectorDatos, BufferedWriter os) 21 Implementación: Sistema de Reservaciones con BD y Archivos Weitzenfeld throws IOException { int num = vectorDatos.size(); String numStr = String.valueOf(num); os.write(numStr); os.newLine(); for (int i = 0; i < num; i++) { Datos datos = (Datos) vectorDatos.elementAt(i); for (int j = 0; j < datos.size(); j++) { String str = datos.elementAt(j); if (str.equals("") == true) str = " "; os.write(str+"|"); } os.newLine(); } } private boolean leerRecordSetRegistro(String log, Datos reg) { for (int i = 0; i < listaRegistro.size(); i++) { Datos datos = (Datos) listaRegistro.elementAt(i); if (log.equals(datos.elementAt(0))) { for (int j = 0; j < datos.size(); j++) { reg.setElementAt(datos.elementAt(j),j); } return true; } } return false; } private int leerIndiceRegistro(String regname) { for (int i = 0; i < listaRegistro.size(); i++) { registro = (Datos) listaRegistro.elementAt(i); if (regname.equals(registro.elementAt(0)) == true) return i; } return -1; } String getName() { return name; } } 22