You are on page 1of 18

DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN

INFORME DE SOFTWARE DIRIGIDO AL APRENDIZAJE BÁSICO
DE MATEMÁTICAS

INTEGRANTES:
Michelle Torres
Juan Ruiz
Michael Valdivieso
TUTOR:
ING. RUBÉN ARROYO
ASIGNATURA:
PROGRAMACIÓN II

2. una base de datos MySQL y los intérpretes para los lenguajes PHP y Perl. M(MySQL). Entre sus ventajas destacan que es una plataforma independiente tiene versiones para diferentes tipos de sistemas operativos como son Windows. Fecha:2016-02-09 NRC: 1009 1. Teniendo como principal desventaja que la configuración por defecto tiene algunas deficiencias de seguridad por lo que no es recomendable usarla como una herramienta de producción. 3. los principios básicos de las Matemáticas como es la clasificación de números. es una forma muy sencilla y rápida de montar en una máquina un entorno de desarrollo de cualquier aplicación web q use PHP y base de datos. P (PHP). MacOS X y Solaris.1 Objetivo específico: Identificar de manera práctica la noción básica que refuerza al alumno a equiparar los diferentes tipos de números a través del programa realizado. 2. Tema: Software dirigido al aprendizaje básico de Matemáticas.Marzo 2015. afianzando los conocimientos adquiridos dentro de las aulas convirtiéndose en una herramienta de apoyo para los estudiantes que se encuentran cursando el 8vo año de educación. por ello su nombre X (para cualquier sistema operativo). Asignatura: Programación II. A(Apache). 2010) . (Spona.2015-2016 UNIVERSIDAD DE LAS FUERZAS ARMADAS “ESPE” Ingeniería de Sistemas e Informática Integrantes: Michelle Torres. XAMPP es un paquete formado por un servidor web Apache. P(Perl). entretenida y amigable para el usuario. Desarrollo Realización de conexión con la base de datos. La herramienta que usamos para gestionar la base de datos es XAMPP. Juan Ruiz. Objetivo General: Conocer de manera didáctica. Michael Valdivieso Periodo: Octubre . Linux.

Driver") Para posterior usar la conexión a dirección de la base de datos "jdbc:mysql://localhost/" + bd. apellido.out. indicando el usuario y contraseña indicadas en las variables login y password. primero obtenemos el objeto de la clase asociado al controlador y creamos la nueva instancia.jdbc.getConnection(url.Driver"). logrando obtener una conexión satisfactoria entre nuestro software y nuestra base de datos la cual nos servirá para el registro de nuestros usuarios con sus respectivos puntajes y avances de los juegos.mysql. static String login = "root".println(e). } public void Desconectar(){ conn = null. } catch(ClassNotFoundException e){ System. el color favorito. conn = DriverManager. static String password = "".jdbc. } } Dentro del paquete entidades tenemos dos clases Avance y Usuario.println(e).mysql. public class Conexion { static String bd ="db_mafacil". Connection conn = null. usando el siguiente código conn = DriverManager. Para conectarnos a la base de datos.out. en las cuales se tienen los datos de los usuarios registrados como el nombre.Dentro de la programación de nuestro software utilizamos un objeto de la clase Conexión para comunicarnos con la base de datos.getConnection(url. Class. un usuario y contraseña por defecto y la dirección de la base de datos.forName("com. } } public Connection GetConnexion(){ return conn. login.forName("com. password). 2010) En esta clase se hace la conexión entre NetBeans y nuestra base de datos XAMPP recibe el nombre del script. login. con el siguiente código. static String url = "jdbc:mysql://localhost/" + bd. password). . contraseña. (Montoro. public Conexion() { try { Class. } catch(SQLException e){ System.

} .Color = Color. this.Usu = Usu. String Contraseña. } public void setNombre(String Nombre) { this. } public void setColor(String Color) { this.Contraseña = Contraseña.su puntuación y sus avances en los juegos. private String Usu. con sus respectivos constructores getters y setter.Nombre = Nombre. } public void setApellido(String Apellido) { this. String Usu. private String Apellido. } public String getTipo() { return Tipo. String Apellido.Tipo = Tipo. public Usuario(String Nombre. private String Tipo.Tipo = Tipo. this. private String Contraseña.Apellido = Apellido. public class Usuario { public String getColor() { return Color. this. } private String Nombre. } public void setTipo(String Tipo) { this. String Tipo. } public Usuario() { } public String getNombre() { return Nombre. this. private String Color.Nombre = Nombre. } public String getApellido() { return Apellido.Apellido = Apellido. this. String Color) { this.Color = Color.

this. float Puntuacion.Contraseña = Contraseña. } public Avance() { } public int getNivel() { return Nivel. } public void setPuntuacion(float Puntuacion) { this.public String getUsu() { return Usu.Puntuacion = Puntuacion. private float Puntuacion. } public void setNivel(int Nivel) { this. public Avance(int Nivel.Usu = Usu.Puntuacion = Puntuacion._Usuario = _Usuario. } public void setUsu(String Usu) { this. } public float getPuntuacion() { return Puntuacion. private String _Usuario.Nivel = Nivel. } public String getUsuario() { return _Usuario.Nivel = Nivel. } public void setUsuario(String _Usuario) { this. } public void setContraseña(String Contraseña) { this. String _Usuario) { this. } } public class Avance { private int Nivel._Usuario= _Usuario. } public String getContraseña() { return Contraseña. } } Reproductor de audio y video en Java . this.

video.add("South". es decir son compatibles con la sincronización.100). API fue desarrollada por Microsystems. imagen y sonido mediante una dirección. video = player. if(controles != null) panel. procesamiento y presentación de tales medios. } try { player = Manager. controles = player. ex). null.setVisible(true). video. s.mpg").log(Level. controles.f.) Función por la cual con la cual creamos los controladores para la reproducción de video. hemos utilizado el API Java Media Framework (JMF) la cual es una interfaz de programación de aplicaciones para la incorporación de audio. panel.Para realizar nuestro de proyecto de manera más interactiva con el usuario. (Oracle. control. JMF es un paquete opcional que amplía las capacidades de multimedia de la plataforma Java.setVisible(true).setLayout(new BorderLayout()).class. Silicon Graphics e Intel Corporation. try { url = new URL("file:/c:/Users/USER/Documents/NetBeansProjects/Menues/src/Videos/Teoria _Divicion.start(). if(video != null) panel. player. video y otros medios de comunicación basadas en el tiempo de las aplicaciones y applets Java.controles).getName()). URL url=null.createRealizedPlayer(new MediaLocator(url)).setSize(800. .updateUI().SEVERE.getVisualComponent(). } catch (MalformedURLException ex) { Logger.video).setSize(800.add("Center". panel.getControlPanelComponent(). El API se centra en la reproducción y transmisión de medios de comunicación almacenados. private void init() { //panel principal JPanel panel = new JPanel().500). add(panel).getLogger(Ventana_Divicion. controles.

2003) Con la ayuda de este método la función del primer juego del módulo uno ordena un arreglo de números comparando el arreglo que se genera con los datos que el usuario ingresa. } if(ver == 8){ JOptionPane.class. de acuerdo a la cantidad de aciertos se da la puntuación. (Astrachan & Owen. j < 8.getLogger(Ventana_Divicion.getName()). num[j] = aux. j++) { if(num[i] < num[j]) { aux = num[i].showMessageDialog(null.SEVERE. una vez acomodado el más grande. i++) { for(int j = 0. for(int i = 0. i < 8. "Nota obtenida: "+ver+"\nPerfecto !!!"). } } Método de la burbuja Consiste en acomodar el vector moviendo el mayor hasta la última casilla comenzando desde la casilla cero del vector hasta haber acomodado el número más grande en la última posición. num[i] = num[j]. los aciertos se cuentan con un acumulador (cont).} catch (Exception ex) { Logger. i++) { if(num[i] == numAux[i]) ver++. null. } } } for(int i = 0. ponerCeros(). y así sigue hasta ordenar todos los elementos el arreglo. int aux = 0.log(Level. public void Evaluar() { int ver = 0. ex). i < 8. prosigue a encontrar y acomodar el siguiente más grande comparando de nuevo los números desde el inicio del vector. } if(ver == 7){ .

"Nota obtenida: "+ver+"\nInorrecto. btnRespuesta. } if(ver == 5){ JOptionPane.setEnabled(true). } if(ver == 4){ JOptionPane. } if(ver == 6){ JOptionPane. ponerCeros(). sigue estudiando !!!"). } if(ver == 3){ JOptionPane. revisa la materia !!!").setEnabled(true).showMessageDialog(null. } if(ver == 2){ JOptionPane. btnRespuesta. ponerCeros(). ponerCeros(). sigue estudiando !!!"). "Nota obtenida: "+ver+"\nBien.showMessageDialog(null.showMessageDialog(null. btnRespuesta. vuelva a intentarlo !!!"). "Nota obtenida: "+ver+"\nInorrecto. } if(ver == 0){ JOptionPane.setEnabled(true). vuelva a intentarlo !!!").showMessageDialog(null. btnRespuesta. "Nota obtenida: "+ver+"\nMuy bien.setEnabled(true).showMessageDialog(null.showMessageDialog(null. ponerCeros().showMessageDialog(null.setEnabled(true).setEnabled(true). "Nota obtenida: "+ver+"\nInorrecto. ponerCeros(). } if(ver == 1){ JOptionPane. ponerCeros(). btnRespuesta. btnRespuesta. "Nota obtenida: "+ver+"\nCorrecto. ponerCeros(). "Nota obtenida: "+ver+"\nInorrecto. btnRespuesta. sigue estudiando !!!"). vuelva a intentarlo !!!").setEnabled(true). btnRespuesta.JOptionPane.setEnabled(true). vuelva a intentarlo !!!"). "Nota obtenida: "+ver+"\nRegular. .showMessageDialog(null.

JOptionPane.setPuntaje(puntaje).dispose().getPuntaje()). //this.showMessageDialog(null.getPuntaje()). //this."Respuestas correctas.dispose(). pun. LO SENTIMOS\n Puntaje: "+pun. } } } Numero randómico .showMessageDialog(null. } else { if (((band1[0] == 0) && (band1[1] == 0) && (band1[2] == 0)) || ((band2[0] == 0) && (band2[1] == 0) && (band2[2] == 0)) || ((band3[0] == 0) && (band3[1] == 0) && (band3[2] == 0)) || ((band4[0] == 0) && (band4[1] == 0) && (band4[2] == 0)) || ((band5[0] == 0) && (band5[1] == 0) && (band5[2] == 0)) || ((band6[0] == 0) && (band6[1] == 0) && (band6[2] == 0)) || ((band7[0] == 0) && (band7[1] == 0) && (band7[2] == 0)) || ((band8[0] == 0) && (band8[1] == 0) && (band8[2] == 0))) { pun. if (((band1[0] == 1) && (band1[1] == 1) && (band1[2] == 1)) || ((band2[0] == 1) && (band2[1] == 1) && (band2[2] == 1)) || ((band3[0] == 1) && (band3[1] == 1) && (band3[2] == 1)) || ((band4[0] == 1) && (band4[1] == 1) && (band4[2] == 1)) || ((band5[0] == 1) && (band5[1] == 1) && (band5[2] == 1)) || ((band6[0] == 1) && (band6[1] == 1) && (band6[2] == 1)) || ((band7[0] == 1) && (band7[1] == 1) && (band7[2] == 1)) || ((band8[0] == 1) && (band8[1] == 1) && (band8[2] == 1))) { puntaje=puntaje+100.setPuntaje(puntaje). usted a ganado \n Puntaje: "+pun."USTED A PERDIDO.ponerCeros().0f. } } Esta función compara un arreglo de enteros asignada a cada uno de los botones del juego comparando las condiciones del tres en raya el jugador con el cual el programa determinara si el usuario gana o pierde la partida. public void evaluar() { float puntaje=0. JOptionPane. Puntuacion pun=new Puntuacion().

random() función que retorna un punto flotante.30). (Sotelio & Daiant. lblnum1. para el juego de tres en raya que definen la operación y los números de la operación. num3=tempcociente*num4.setText("*"). public OP() { initComponents(). aux = (int)(Math. lblsigno.setText("-").setText("/").setBounds(0.setIcon(uno). 2015) Con la ayuda de esta función generaremos nuestros números (randómicos). lblnum2. lblnum2. num3=(int)(Math. lblnum2.random() * (100 + 100) .uno.100). .setText(num2+" "). el cual no puede ser modificado por el usuario.getIconHeight()). if(selecionSigno()==1){ lblnum1.random() * (100 + 100) .setText(num1+" "). num2=(int)(Math.30).random() * (30 + 30) . }else{ if(selecionSigno()==3){ lblnum1.random() * (30 + 30) .setText(num4+" "). un número aleatorio dentro de un rango establecido [0. num4=(int)(Math.getClass().uno.setText(num1+" ").setText(num3+" ").0. lblsigno. JLabel fondo= new JLabel().Math.getIconWidth(). fondo.getResource("/Imagenes_Juego/fondop. fondo.jpg")).random() * 20 + 0).setText("+"). }else{ if(selecionSigno()==4){ //num1 dividendo y num2 divisor tempcociente=(int)(Math.random() * (30 + 30) .setText(num3+" "). num1=(int)(Math. }else{ lblnum1.setText(num2+" ").setText(num2+" ").100). }else{ if(selecionSigno()==2){ lblnum1. if(num4==0){ num4+=1.setText(num1+" "). lblnum2. lblsigno. La implementación selecciona inicia hasta que el algoritmo genere el número aleatorio.100). ImageIcon uno=new ImageIcon(this. lblsigno.30).

JOptionPane. try { Statement Query = _Conexion. si todo se ingresa correctamente ingresa un nuevo usuario en la base de datos. Query."Información". '"+_Usuario. '" +_Usuario. Query.JOptionPane.setContraseña(Pass). '"+_Usuario. _Usuario.Desconectar(). _Usuario.setNombre(Nombre).'"+_Usuario. lblsigno. _Conexion. public class Usuarios { public int Ingreso(String Nombre.setTipo(Tipo). _Usuario.String Tipo. return Ingresar(_Usuario).getApellido()+"'.String Usuario_.getColor()+"')"). } catch (SQLException e) { .String Apellido.String Pass.setApellido(Apellido).GetConnexion().close().getTipo() +"'. _Usuario.getUsu()+"'. _Usuario.lblnum2.'"+_Usuario. '" +_Usuario. ok=1.setColor(Color). } public Usuarios(){ } private int Ingresar(Usuario _Usuario) { int ok=0.getContraseña()+"'.setText("/").setText(num4+" "). } } } } } } Dentro de la clase Usuarios es donde podemos gestionar el ingreso de los nuevos usuarios en donde se valida que no se repita el nombre de usuario y la contraseña.getNombre() +"'.createStatement(). "Se ha registrado Exitosamente".INFORMATION_MESSAGE). String Color){ Usuario _Usuario = new Usuario().executeUpdate("INSERT INTO Usuarios VALUES (NULL.showMessageDialog(null. _Usuario.setUsu(Usuario_). Conexion _Conexion= new Conexion().

GetConnexion(). st.Desconectar().executeQuery("SELECT * FROM usuarios WHERE usuario='"+Usu+"' AND Pass ='"+Pass+"'"). ok = 1. st = conectar.println(String. _Conexion. String Usuario){ int ok = 0. try{ Conexion conectar = new Conexion().createStatement(). Statement st. Query.valueOf(encontrado)). // System.showMessageDialog(null. }catch (SQLException e) { JOptionPane.close(). reviselos").close(). Ok=2. String Pass) { int Ok=0.last().JOptionPane. } rs. "Sus datos son incorrectos. int encontrado=rs. } return Ok. ok=0.getRow().out.createStatement(). try { Statement Query = _Conexion. Ok=0. } else { JOptionPane.close().GetConnexion(). "Error interno"). } return ok. Query. } public int NuevaClave(String Clave. "No se Registro el Usuario").showMessageDialog(null. } public int Validar(String Usu. rs.showMessageDialog(null. } catch (SQLException e) { . if(encontrado==1) { Ok=1. ResultSet rs = st.executeUpdate("UPDATE usuarios set Pass= '" + Clave + "' where Usuario ='" + Usuario + "'"). Conexion _Conexion = new Conexion().

ok = 0. } rs. int encontrado=rs.out. } } Dentro de la clase Avances se actualizar los datos de los avances y puntajes de los usuarios en cada uno de los módulos de nuestra base de datos. } . Statement st.GetConnexion().setUsuario(_Usuario).println(String. }catch (SQLException e) { JOptionPane.createStatement(). try{ Conexion conectar = new Conexion(). ResultSet rs = st. st = conectar. } else { Ok=2. System. "Ha ocurrido un erro interno en el programa"). "Error interno").showMessageDialog(null.close().close(). Ok=0. } return Ok. rs. float Puntuacion.last().JOptionPane. _Avance. Ingresar(_Avance). String _Usuario) { Avance _Avance = new Avance().valueOf(encontrado)). st.setPuntuacion(Puntuacion). } return ok.showMessageDialog(null. if(encontrado==1) { Ok=1.executeQuery("SELECT * FROM usuarios WHERE usuario='"+Usu+"'" ).getRow(). } public int ExisteUsuario(String Usu) { int Ok=0.setNivel(Nivel). _Avance. _Avance. public class Avances { public void Ingreso(int Nivel.

GetConnexion().getNivel() + "')").'" + _Avance. Query. try { Statement Query = _Conexion. } } } Pide una nueva contraseña en caso de olvido. Query.ActionEvent evt) { // TODO add your handling code here: .event. try { Statement Query = _Conexion.Desconectar().Desconectar(). ok = 1. } catch (SQLException e) { JOptionPane. private void BtnVerificarActionPerformed(java.public Avances() { } private int Ingresar(Avance _Avance) { int ok = 0. Query. "Ha ocurrido un erro interno en el programa"). valida que la nueva contraseña sea correcta y actualiza la nueva contraseña.GetConnexion(). "Ha ocurrido un erro interno en el programa "+ e). _Conexion.close(). Query. Conexion _Conexion = new Conexion(). ok = 1. '" + _Avance.getUsuario() + "'"). } public void Actualizar(Avance _Avance) { int ok = 0.showMessageDialog(null.getUsuario() + "'.executeUpdate("UPDATE puntuacion set Puntuacion= " + _Avance.getPuntuacion() + ".close().Nivel=" + _Avance. ok = 0. } return ok.executeUpdate("INSERT INTO Puntuacion VALUES (NULL.createStatement().getPuntuacion() + "'.createStatement(). _Conexion. ok = 0.awt.getNivel() + " where idUsuario ='" + _Avance.'" + _ Avance. } catch (SQLException e) { JOptionPane. Conexion _Conexion = new Conexion().showMessageDialog(null.

getText())==false){ JOptionPane."Información".ActionEvent evt) { int usuarioExistente.JOptionPane.getText().length()==0){ JOptionPane. "No coinciden las contraseñas".JOptionPane. }else{ _Usuarios. "Falta la contraseña".INFORMATION_MESSAGE). } else if(TxtApellido.JOptionPane.showMessageDialog(null.getUsuario()). "Falta el Nombre ".getText()).length()==0){ JOptionPane.showMessageDialog(null. ."Información".showMessageDialog(null.JOptionPane.INFORMATION_MESSAGE). cont++."Información".getText(). etc. Global. el apellido. if(TxtNombre.getText().equals(TxtAnterior.awt.length()==0){ JOptionPane. }else If (TxtNueva.getText().getText(). "Falta el Apellido "."Información". "Falta la confirmación".length()==0){ JOptionPane. si todo está correcto llama a la función que ingresa los nuevos usuarios a la base de datos.ExisteUsuario(TxtUsuario.event.showMessageDialog(null.INFORMATION_MESSAGE).getText().JOptionPane.INFORMATION_MESSAGE). }else if(TxtNueva. } } Esta función valida todos los datos para el ingreso de un nuevo usuario como el nombre. int cont=0."Información". el usuario y la contraseña. int ok=0.NuevaClave(TxtNueva.INFORMATION_MESSAGE). private void BtnAccederActionPerformed(java.showMessageDialog(null. usuarioExistente= _Usuarios. cont++.if(TxtAnterior.

"Falta la contraseña".INFORMATION_MESSAGE). }else if(TxtPass1.getText().equals(TxtPass2.JOptionPane. "El usuario ya esta registrado ".length()==0){ JOptionPane.INFORMATION_MESSAGE). cont++.length()==0){ JOptionPane.showMessageDialog(null. "Falta el Usuario ". cont++. }else if(TxtColor. } else if(TxtPass2.length()==0){ JOptionPane.JOptionPane.INFORMATION_MESSAGE).getText().INFORMATION_MESSAGE).JOptionPane.INFORMATION_MESSAGE).length()!=0 && usuarioExistente==1 ){ JOptionPane.getText()."Información". .getText()."Información".JOptionPane."Información". "No coinciden las contraseñas". cont++.getText(). } else if(TxtPass1.showMessageDialog(null.} if(TxtUsuario."Información". cont++. }else if(TxtUsuario.getText().showMessageDialog(null.JOptionPane.showMessageDialog(null.INFORMATION_MESSAGE).showMessageDialog(null.showMessageDialog(null."Información". "Falta la confirmación de la contraseña".length()==0){ JOptionPane. cont++."Información".getText())==false){ JOptionPane. cont++.JOptionPane. "Falta completar la pregunta secreta".

getText(). FrmIngreso o = new FrmIngreso().getText(). fortifica altamente los conocimientos del alumno y permite práctica con respecto al tópico tratado. } } 4. convirtiéndose nuestro producto (software) en una herramienta complementaria. Conclusiones  Se finiquita que las Matemáticas como ciencia cubren un campo extenso que es aplicado en la vida diaria.TxtUsuario.TxtApellido.getText(). "US". los conocimientos impartidos en el 8vo año de educación son pilar fundamental para el desarrollo y motricidad a largo plazo.getText()). TxtUsuario. 6.  Se sugiere realizar más ejercicios como los expuestos dentro del producto software para desarrollar más habilidades. o.} if(usuarioExistente==2){ ok=_Usuarios. siendo los números de fundamental importancia. Recomendaciones  Se recomienda tener conocimientos básicos del manejo de una computadora. Bibliografía .dispose().getT ext().  Se concluye que el reconocer de forma sencilla los diferentes tipos de números a través del programa. _Avances. 0.setVisible(true).getText()).Ingreso(TxtNombre. } if(ok==2){ this. TxtPass1.TxtColor.Ingreso(1. 5.

& Owen. Obtenido de MDN: https://developer. Obtenido de https://www. . (22 de 03 de 2010). Montoro. Ordenamiento de burbuja: Un anális arqueológico de un algoritmo. Oracle Java Software.oracle. Mozilla Developer Network. Programación de base de datos con MySql y PHP. H. (2003). Oracle. (2010). marcombo.com/java/index.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/ Math/random Spona.).0.Astrachan. G.mozilla. Manual de NetBeans y XAMPP versión 1.f. (s. & Daiant. (09 de Julio de 2015).html Sotelio.