Filtro CPL Polarizado ventajas

Sistema de Base de Datos para CyberCafe Con JAVA Y MySQL (Proyecto Completo + Código Fuente)

Sistema de Base de Datos para CyberCafe Con JAVA Y MySQL (Proyecto Completo + Código Fuente y Script SQL)



En este post les quiero compartir un pequeño sistema de Base de Datos para administrar un CyberCafe.

De forma muy general el programa puede hacer lo siguiente:
Consultas con SELECT, INSERT, UPDATE, DELETE, consultas con JOIN.

Ofrece dos niveles de "manipulación" el empleado simple y el administrador.

El programa interactua en los frame's, para acceder al sistema, rentar una computadora o vender algún producto sencillo, agregar/eliminar equipos, agregar/eliminar empleados (en caso de que sea administrador), entre otros.

Bueno al grano!

Les muestro como esta relacionado el sistema de base de datos:


Digamos que la tabla principal es la de Ventas.

Realizamos la conexión con la base de datos, desde una clase:
package cybercafe;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 *
 * @author Ivan Luis Jimenez
 */
public class conexion {
        Connection con = null;
    public Connection conex (){
        try{
        Class.forName("com.mysql.jdbc.Driver");
        con= DriverManager.getConnection("jdbc:mysql://localhost/cybercafe","root","chkdskshrasd");
            System.out.println("Conexion establecida");
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        return con;
    }
}

Ahora les muestro la clase metodos() en la cual vamos a realizar todas las consultas que maneja el sistema:
 package cybercafe;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Armando, Ivan, Karla
 */
public class Metodos {
    /*objeto de tipo conexion*/

    conexion C = new conexion();
    Connection CC = C.conex();
    PreparedStatement us;
    String sql, usuario = "";

    public boolean iniciar(String user, String cont) {
        boolean R = false;
        try {
            Statement st = CC.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM Admins;");
            while (rs.next()) {

                if (rs.getString(2).equals(user) && rs.getString(4).equals(cont)) {
                    R = true;
                    usuario = rs.getString("Usuario");
                }
            }
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(Metodos.class.getName()).log(Level.SEVERE, null, ex);
        }
        return R;
    }
    
     public void elimina_empleado(int Id){
        try {  
            String sql = "DELETE FROM admins WHERE idAdmins="+Id; 
            us = CC.prepareStatement(sql);
            us.executeUpdate();
        } catch (Exception e) {
            System.out.println("Error al eliminar empleado " + e);
        }
    }
    
    public void Agregar_empleado(int Id, String Usuario, JComboBox turno,String pass){
         try {
            us = CC.prepareStatement("INSERT INTO admins(idAdmins, Usuario, Turno, Pass) VALUES("
                    + Id + ",'" + Usuario + "','"+turno.getSelectedItem()+"','" + pass + "')");
            us.executeUpdate();
        } catch (SQLException ex) {
             System.out.println("");
        }
    }
    
    public void llena_combobox(JComboBox tabla){
        try {
            sql = "SELECT NombreC FROM clientes";
            us = C.conex().prepareStatement(sql);
            ResultSet res = us.executeQuery();
            while (res.next()) {
                tabla.addItem(res.getString("NombreC"));
            }
            System.out.println("Ya agregó los clientes al combobox");
            res.close();
        } catch (Exception e) {
            System.out.println("no visualiza clientes existentes: " + e);
        }
    }

    public void Mostrarconsultas(DefaultTableModel tabla, String sql) {
        int Nc = tabla.getColumnCount();
        Object[] datos = new Object[Nc];
        try {
            us = CC.prepareStatement(sql);
            ResultSet res = us.executeQuery();
         
            while (res.next()) {
                for (int i = 0; i < Nc; i++) {
                    datos[i] = res.getObject(i + 1);
                }
                tabla.addRow(datos);
            }
            res.close();
        } catch (Exception e) {
        }
    }

    public void Agregarequipo(JComboBox tipo_e, int Id, String nombre) {

        try {
            us = CC.prepareStatement("INSERT INTO equipos(idEquipos, Tipo, Estatus, Nequipo) VALUES("
                    + Id + ",'" + tipo_e.getSelectedItem() + "','Espera','" + nombre + "')");
            us.executeUpdate();
        } catch (SQLException ex) {
            Logger.getLogger(Metodos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void nombreproductos(JComboBox elige_prod){
        elige_prod.removeAllItems();
        elige_prod.setVisible(true);
       
        try{
            sql = "SELECT NombreP FROM producto";
            us = CC.prepareStatement(sql);
            ResultSet res = us.executeQuery();
            while (res.next()) {
                elige_prod.addItem(res.getString("NombreP"));
            }
            System.out.println("Ya agregó los productos al combobox");
            res.close();
        
        }catch (Exception e) {
            System.out.println("no visualiza productos existentes: "+ e);
        }
    }
    
    public void Agregarventas(int idClientes, int Producto_idProducto, String Fecha_V,int Admins_idAdmins,int cantidad ,int Precio_final ){
         try{
            String sql ="INSERT INTO ventas (`Clientes_idClientes`, `Producto_idProducto`, `Fecha_V`, `Admins_idAdmins`, `Cantidad`, `Precio_final`) VALUES "
                    + "('"+idClientes+"', '"+Producto_idProducto+"', '"+Fecha_V+"', '"+Admins_idAdmins+"', '"+cantidad+"', '"+Precio_final+"');";
                                //no es necesario agregar el idVentas, ya que es autoincrementable
            us = CC.prepareStatement(sql);
            us.executeUpdate();
            us.close();
            System.out.println("Venta agregada");
        }catch(Exception e){
            System.out.println("Error al agregar nueva venta: "+e);
        }
    }
    
    public void clientenuevo(String nombre, String tipo, Integer visitas) {
        try {
            String sql = "INSERT INTO clientes(NombreC,Tipo, Visitas) "
                    + "VALUES('" + nombre + "','" + tipo + "'," + visitas + ")"; //no es necesario agregar el idCliente, 
                            //ya que es autoincrementable
            us = CC.prepareStatement(sql);
            us.executeUpdate();
            System.out.println("Cliente agregado");
        } catch (Exception e) {
            System.out.println("Error al agregar nuevo cliente: " + e);
        }
    }
    
    public Integer vistas(Integer idcliente){
        int visitas=0, vis=0;
        try {
            us = CC.prepareStatement("SELECT Visitas FROM Clientes WHERE idClientes = " + idcliente);
            ResultSet res = us.executeQuery();
            while (res.next()) {
               visitas = res.getInt("Visitas");
               
            }
                vis = visitas+1;
           
            us = CC.prepareStatement("UPDATE Clientes SET Visitas="+vis+" WHERE idClientes = " + idcliente);
            us.executeUpdate();
            System.out.println("Visitas actuales del cliente: "+vis);
        } catch (SQLException ex) {
            Logger.getLogger(Metodos.class.getName()).log(Level.SEVERE, null, ex);
        }
        return vis;
    }
    
     public Integer idcliente(String sql1){
        int id=0;
        try{
            us = CC.prepareStatement(sql1);
            ResultSet res = us.executeQuery();
            while (res.next()) {
                id =  res.getInt(1);
            }
            System.out.println("id cliente obtenido: "+id);
        }catch(Exception e){
            System.out.println("Error con el idCliente: "+ e);
        } 
        return id;
    }

    public void generarrenta(String H_inicio, String H_fin, int ideq, int idcliente, float monto, String fecha, Object idadmin) {
        try {
            us = CC.prepareStatement("INSERT INTO rentas(HoraInicio,HoraFin, idEquipos, idClientes,Fecha_R,Monto_a_pagar,Admins_idAdmins)"
                    + "VALUES('" + H_inicio + "','" + H_fin + "'," + ideq + "," + idcliente + ",'" + fecha + "'," + monto + "," + idadmin + ")");
            us.executeUpdate();
            System.out.println("Renta guardada");
            
            JOptionPane.showMessageDialog(null, "DATOS DE RENTA AGREGADOS.\nID CLIENTE: "+idcliente+
                "\nMONTO A PAGAR: $"+monto+"\nID ADMIN: "+idadmin);
            
            us=CC.prepareStatement("UPDATE equipos SET Estatus='Activa' WHERE idEquipos="+ideq);
            us.executeUpdate();
            System.out.println("Equipo cambiado a 'Activa'");
        } catch (SQLException e) {
            System.out.println("Error al guardar datos: " + e);
        }
    }
    
    public void cambiaestado(String sql){
        try{
            us = CC.prepareStatement(sql);
            us.executeUpdate();
            
            System.out.println("Estado del equipo cambiado a 'Espera'");
            JOptionPane.showMessageDialog(null, "!ESTADO DEL EQUIPO CAMBIADO¡");
            
        } catch (SQLException e) {
            System.out.println("Error al cambiar estado: " + e);
        }
         
     }

    public void limpiartabla(DefaultTableModel tabla) {
        for (int i = 0; i < tabla.getRowCount(); i++) {
            tabla.removeRow(i);
            i -= 1;
        }
    }

    public String empleado() {
        return usuario;
    }
    
    public  void mostrarreporte( DefaultTableModel tabla, String sql){
        Object[] datos = new Object[5];
        try {
            us = CC.prepareStatement(sql);
            ResultSet res = us.executeQuery();
            while (res.next()) {
                for (int i = 0; i < 5; i++) {
                    datos[i] = res.getObject(i + 1);
                }
                tabla.addRow(datos);
            }
            res.close();
        } catch (Exception e) {
            System.out.println("Error mostrando reporte: "+e);
        }
    }
    
    public Integer idadmin(){
        int idadmin=0;
        String sql;
        try{
            sql="SELECT idAdmins FROM admins WHERE Usuario='"+empleado()+"'";
            us = CC.prepareStatement(sql);
            ResultSet res = us.executeQuery();
            while (res.next()) {
                idadmin =  res.getInt(1);  
            }
            System.out.println("ID Admin: "+ idadmin);
            
        }catch(Exception e){
            System.out.println("Error en idAdmin: "+ e);
        }
        
        return idadmin;
    }
    
    public void elimina_equipo(int Id){
        try {  
            String sql = "DELETE FROM equipos WHERE idEquipos="+Id; 
            us = CC.prepareStatement(sql);
            us.executeUpdate();
        } catch (Exception e) {
            System.out.println("Error al eliminar equipo " + e);
        }
    }
}

Todos estos métodos se utilizan en el sistema.

Bueno ahora les muestro el Login del Sistema:



Código para validar el Login:
public void in() throws SQLException {
        String us, cont;
        us = nom_usuario.getText();
        cont = contrasena.getText();
        boolean R = S.iniciar(us, cont);
        empleado = S.empleado();
        if (R) {
            System.out.println("Entrando");
            this.setVisible(false);
            ACCIONES.setVisible(true);
            if (empleado.equals(Admin)) {
                A_Empleado.setEnabled(true);
            }
            usuario.setText("Emplead@: " + empleado);
            titulo_agregae.setText("Agrega/Elimina Equipo  |     Empleado:" + empleado);
            titulo_renta.setText("Renta de Equipo  |   Empleado:" + empleado);
            titulo_venta.setText("Venta Producto   |   Empleado:" + empleado);
            titulo_empl.setText("Empleados   |   Empleado:" + empleado);
            titulo_reporte.setText("Reporte");
            usuarioRR.setText("USUARIO:" + empleado);
        } else {
            System.out.println("ya valiste papu");
            Error.setText("Usuario o contraseña invalida");
        }
    }


public boolean iniciar(String user, String cont) {
        boolean R = false;
        try {
            Statement st = CC.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM Admins;");
            while (rs.next()) {

                if (rs.getString(2).equals(user) && rs.getString(4).equals(cont)) {
                    R = true;
                    usuario = rs.getString("Usuario");
                }
            }
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(Metodos.class.getName()).log(Level.SEVERE, null, ex);
        }
        return R;
    }
En el método iniciar() se compara directamente los valores de las columnas con las que ingreso el usuario.

El frame de acciones, este lo único que hace es mostrar el frame que el usuario solicite:


El código es sencillo, pero se los muestro:


private void acceptActionPerformed(java.awt.event.ActionEvent evt) {                                       
        if (rentar.isSelected()) {
            ACCIONES.setVisible(false);
            RENTA.setVisible(true);

        } else if (reporte.isSelected()) {
            S.limpiartabla(modelotabla3);
            S.limpiartabla(modelotabla5);
            idCliente = JOptionPane.showInputDialog(null, "INGRESE EL ID DEL CLIENTE:", "REPORTE DE CLIENTES. ID CLIENTE", 1);
            try {
                if ((JOptionPane.CANCEL_OPTION == -1) || (idCliente.isEmpty())) {
                    JOptionPane.showMessageDialog(null, "¡AGREGUE EL ID DEL CLIENTE!");
                } else {
                    //idrenta se utiliza para buscar los datos de un cliente ya registrado
                    sql = "SELECT Clientes.idClientes, idRentas, Fecha_R, idVentas, Fecha_V FROM clientes, rentas, ventas "
                            + "WHERE clientes.idClientes=" + idCliente + " AND rentas.idClientes=clientes.idClientes AND clientes.idClientes=ventas.Clientes_idClientes";
                    sql2 = "SELECT Clientes.idClientes, idRentas, Fecha_R, idVentas, Fecha_V FROM clientes, rentas, ventas "
                            + "                    WHERE rentas.idClientes=clientes.idClientes AND clientes.idClientes=ventas.Clientes_idClientes"
                            + "                    ORDER BY Fecha_R ASC;";
                    S.mostrarreporte(modelotabla3, sql);
                    S.mostrarreporte(modelotabla5, sql2);
                    ACCIONES.setVisible(false);
                    REPORTE_CLIENTE.setVisible(true);
                }
            } catch (Exception e) {
                System.out.println("Dio cancelar");
            }

        } else if (venta.isSelected()) {
            ACCIONES.setVisible(false);
            VENTA.setVisible(true);
            S.llena_combobox(elige_nomcliente1);
            S.nombreproductos(elige_prod);

        } else if (agregar.isSelected()) {
            ACCIONES.setVisible(false);
            AGREGA_E.setVisible(true);
        } else if (A_Empleado.isSelected()) {
            ACCIONES.setVisible(false);
            EMPLEADOS.setVisible(true);
        }
    }                                      

Los demás frames no los muestro para no hacer muy largo el Post, ya les mostré todos los métodos utilizados. Sólo les dejaré unas capturas;






Espero les sea de mucha ayuda!
Les dejo el link para que se descarguen los archivos:
Descargar

EXTRA!!!:
Si quieres que tu servidor de base de datos funcione de manera remota o de manera publica, es decir, que este disponible a todo el mundo, puedes seguir el siguiente link para aprender a configurarlo:
Les dejo un video también:

Cualquier duda, comentario o sugerencia, dejen su comentario o manden MP.
Saludos!
Created by Ivan Luis Jimenez (Ivanovich)

Comentarios

  1. Buenos diasamigo, tendras el scrip de la base de datos en mysql? de antemano muchas gracias

    ResponderBorrar
    Respuestas
    1. que tal amigo si te mandaron el script en mysql? tampoco puedo hacerlo funcionar :( aunque yo cree la base como dice en el diagrama

      Borrar
  2. disculpa me podrias mandar el scrip de la base de datos y la base no consigo hacerlo funcionar y ise justo lo que dice Porfavor

    ResponderBorrar
    Respuestas
    1. Hola! el archivo de descarga es: https://www.mediafire.com/?b38b08hsl3h4zc5
      Incluye todo lo necesario!. Posiblemente sea tu configuración de conexión en Java, checa bien el nombre de la base de datos, usuario y contraseña que asignaste. Cualquier otra duda sigo en linea!! Saludos!!

      Borrar
    2. Te lo agradezco yo ago la coneccion con Xampp y modifique las contraseñas y usuarios para que coincidieran a lo mejor es algun canpo o tabla que puese incorrecto , esq la imagen no se ve muy bien, gracias.

      Borrar
  3. Disculpa la Base de Datos fue creada con mysqlworkbench , es que no e trabajado mucho con ese programa me podrias deciar si hay alguna forma de convertirla a solo .db o como usar el MySqlWorkbench

    ResponderBorrar
  4. Como lograste poner tantas interfaces en solo un jframe

    ResponderBorrar
    Respuestas
    1. Las interfaces están en un JFrame por separado. No están en uno sólo.

      Borrar
  5. oye amigo cuales son los usuarios y contraseñas del programa

    ResponderBorrar
    Respuestas
    1. Las contraseñas son las que tu les quieras poner en tu tabla de usuarios. Revisa la tabla de usuarios ahí viene la contraseña.

      Borrar

Publicar un comentario