1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* Ejercicio: 2x1x01 Fecha: 20/09/2012 Enunciado: Escribe un programa que escriba los 100 primeros números naturales en un archivo numNaturales.txt */ import java.io.*; public class _2x1x01 { public static void main(String[] args) { try { FileWriter fw = new FileWriter("numNaturales.txt"); for( int i = 0 ; i < 100 ; i++ ) fw.write(i + "\r\n"); fw.close(); } catch( IOException ex ) { ex.printStackTrace(); } } } |
Categoría: Programación
Librería RTC para reloj Dallas DS1307 y DS3231
Después de probar bastantes de las librerías disponibles para este reloj y de que no me convenciera ninguna por su forma de funcionar, decidí programar mi propia librería basándome en el código que use en mi primer RTC.
Ahora al estar todo en una librería es mucho mas cómodo de usar que antes y tiene los métodos necesarios para poner el reloj en hora u obtener sus datos.
Leer másTraducir página web con php-gettext
Como vimos hace un tiempo traducir themes de WordPress era una tarea bastante sencilla, principalmente porque todas las funciones necesarias ya las incorporaba el núcleo de WP, solo necesitábamos llamar la función load_theme_textdomain(); para cargar el fichero de idiomas y encapsular el texto con las funciones __() y _e().
Pero qué sucede si lo que queremos traducir son ficheros .php que nada tienen que ver con WP, de una web que nos hemos hecho por ejemplo?
Cómo hacemos para poder usar las funciones __() y _e() y los ficheros .mo que contienen las traducciones para cada idioma, es mas, cómo sabemos cual de los ficheros debemos de cargar para mostrarle la traducción correcta al visitante?
Leer másRedirecciones JavaScript y PHP según el dispositivo para forocoches
Hay una cosa muy molesta que llevo sufriendo un tiempo con Opera, y es que el Speed Dial al sincronizarse con Opera Link me sintoniza el ordenador y el móvil para que tenga todas las configuraciones iguales. Esto no es ningún problema, si no toda una ventaja.
El problema esta cuando te encuentras páginas que aun disponiendo de una versión normal, para ordenadores, y otra móvil, para Smartphones, pasan completamente de hacer una redireccion, de modo que dependiendo del dispositivo con el que te conectes te cargue una plantilla u otra. Ejemplo de ello es forocoches, que dispone de versión normal bajo el subdominio www, y de versión móvil bajo el de m.
Leer más9×05: Calcular la letra de un DNI – Con Java e interfaz gráfica
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
/** * Proyecto: 9x05-Muestra letra DNI * Fichero: DNIGrafico.java * Fecha: 24/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://francho.org/2009/04/13/java-calculadora-sencilla-en-modo-grafico * http://www.javamexico.org/blogs/daniel/codigo_para_centrar_jframe */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DNIGrafico extends JFrame implements KeyListener { // PROPIEDADES: private JPanel panelBotones; // Creamos una variable en el que insertaremos los botones. private JTextField campoTexto; // También un campo de texto que hará de pantalla donde veremos los números y el resultado. private static final long serialVersionUID = -3263949043600021146L; // CONSTRUCTOR: public DNIGrafico() { // Se crea la ventana: super(); setSize(168, 100); // El tamaño de la ventana principal. setTitle("DNI"); // El titulo de la ventana. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // Para que cuando se cierre la ventana termine también el proceso. setResizable(false); // Bloquea la ventana para no permitir que se pueda cambiar de tamaño. JPanel ventana = (JPanel) this.getContentPane(); // ... ventana.setLayout(new BorderLayout()); // "Se indica que va a ser la ventana/panel/contenedor principal" // Se crean la pantalla (el campo de texto): campoTexto = new JTextField("", 1); // Instancia un campo de texto vacio de una columna. campoTexto.setFont(new Font("Arial", Font.BOLD, 25)); // Establece la fuente para el texto. campoTexto.setBackground(Color.WHITE); // El color de fondo. campoTexto.setEditable(false); // Hace que no se pueda escribir directamente sobre el campo (se capturan las teclas por eventos mas adelante) ventana.add("North", campoTexto); // Se coloca el campo de texto en la parte superior de la ventana. // Se crean los botones: panelBotones = new JPanel(); panelBotones.setLayout(new GridLayout(1, 2)); // Una botonera de 1 fila y 2 columnas. nuevoBoton("Calcular"); // Se llama al metodo privado que creara el boton. nuevoBoton("Borrar"); ventana.add("East", panelBotones); // Se añade la botonera a la parte inferior. // Revisar Con "South" no consigo poner los botones de un tamaño mayor mediante boton.setsize() campoTexto.addKeyListener(this); // Permite que la ventana pueda detectar pulsaciones del teclado. centrarVentana(); // Centra la ventana en el monitor del pc. validate(); // ... } // METODOS: // Crea un nuevo botón y después lo añade al panelBotones: private void nuevoBoton( String nombreBoton ) { JButton boton = new JButton(nombreBoton); // Se instancia el nuevo botón con el nombre recibido por valor. boton.addMouseListener(new MouseAdapter() // Al botón se le va a agregar la detección de eventos mediante el ratón, así se podrá saber si es pulsado el botón. { public void mouseReleased( MouseEvent evento ) { JButton boton = (JButton) evento.getSource(); // Cuando suceda un evento se recoge el botón que lo produjo. operacion(boton.getText()); // y se envía el texto del botón a operacion() campoTexto.requestFocus(); // Mantiene el foco en el campo de texto después de pulsar el botón. } }); panelBotones.add(boton); // Por ultimo se agrega el botón al panel de botones. } // Realiza la operación para calcular la letra del DNI: private void operacion( String nombreTecla ) { int dni; char letra; String letras = new String("TRWAGMYFPDXBNJZSQVHLCKE"); char ultCarCampoTexto; int numCarCampoTexto; // Es necesario, además de ejecutar el evento Calcular, que el campo de texto contenga números. if( !campoTexto.getText().isEmpty() && nombreTecla.equals("Calcular") ) { numCarCampoTexto = campoTexto.getText().length(); ultCarCampoTexto = campoTexto.getText().charAt(numCarCampoTexto - 1); // Además de la longitud del dni, hay que comprobar que no se pueda añadir mas números al campo de // texto si previamente se calculo la letra, ya que podría dar como resultado esto: "123Z25" = Error. if( numCarCampoTexto <= 8 && ultCarCampoTexto >= '0' && ultCarCampoTexto <= '9' ) { dni = Integer.parseInt(campoTexto.getText()); letra = letras.charAt(dni % 23); campoTexto.setText("" + dni + letra); } } else campoTexto.setText(""); } // Al implementar la interfaz KeyListener es obligatorio tener los tres métodos que actúan ante los eventos del teclado. // en este caso solo se usa el evento que actúa cuando se deja de pulsar la tecla. public void keyTyped( KeyEvent evento ){} public void keyPressed( KeyEvent evento ){} public void keyReleased( KeyEvent evento ) { int codCaracter = evento.getKeyCode(); char charCaracter = evento.getKeyChar(); int numCarCampoTexto = campoTexto.getText().length(); char ultCaracter = '0'; if( numCarCampoTexto != 0 ) ultCaracter = campoTexto.getText().charAt(numCarCampoTexto - 1); if( charCaracter >= '0' && charCaracter <= '9' && numCarCampoTexto < 8 && ultCaracter >= '0' && ultCaracter <= '9' ) campoTexto.setText(campoTexto.getText() + evento.getKeyChar()); else if( codCaracter == 10 ) operacion("Calcular"); else if( codCaracter == 8 && campoTexto.getText().length() != 0 ) campoTexto.setText(campoTexto.getText().substring(0, campoTexto.getText().length() - 1)); } // Este método se encarga de centrar la ventana principal: private void centrarVentana() { Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize(); // Se obtienen las dimensiones en píxels de la pantalla. Dimension ventana = getSize(); // Se obtienen las dimensiones en píxels de la ventana. setLocation((pantalla.width - ventana.width) / 2, (pantalla.height - ventana.height) / 2); // Una cuenta para situar la ventana en el centro de la pantalla. } } |
9×04: Bicola generica usando un Vector o Referencias con Ficheros
Código para Bicolas genéricas usando Vectores (con ficheros):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
/** * Proyecto: 9x04-Bicola - Vector y Ficheros * Fichero: Bicola.java * Fecha: 24/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html * http://mundogeek.net/archivos/2009/03/11/generics-en-java/ */ import java.util.Vector; /*import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable;*/ import java.io.*; public class Bicola<G> implements Serializable { // PROPIEDADES: private Vector<Nodo<G>> vNodos; private static final long serialVersionUID = 3717013638745390665L; // CONSTRUCTOR: // Se instancia un Vector de Nodos Genericos. (Del tipo con el que instanciamos la Bicola). public Bicola() { vNodos = new Vector<Nodo<G>>(5, 2); } // METODOS: // Se devuelve el numero de elementos usados en el Vector. public int getNumDeNodos() { return vNodos.size(); } // Se añade un Nodo a la izquierda y se desplazan los demas una posicion a la derecha en el indice. public void addNodoIzquierda( G dato ) { vNodos.add(0, new Nodo<G>(dato)); } // Se añade al final del Vector un nuevo Nodo: public void addNodoDerecha( G dato ) { vNodos.addElement(new Nodo<G>(dato)); } // Se copia el primer elemento en temp, despues se elimina del Vector. public G getNodoIzquierda() { G temp = vNodos.firstElement().getDatoNodo(); vNodos.removeElementAt(0); return temp; } // Se copia el ultimo elemento en temp, despues se elimina del Vector. public G getNodoDerecha() { G temp = vNodos.lastElement().getDatoNodo(); vNodos.removeElementAt(vNodos.size() - 1); return temp; } // Se concatenan todos los elementos del Vector en cadena y luego se devuelve. public String toString() { String cadena = ""; for( int i = 0; i < vNodos.size(); i++ ) cadena += vNodos.get(i).getDatoNodo() + ", "; return cadena; } // Lee un objecto Bicola desde el fichero backup y se devuelve por "valor". public Bicola<G> readBicolaFichero() { FileInputStream fichEntrada = null; ObjectInputStream objEntrada = null; Bicola<G> temp = null; try { fichEntrada = new FileInputStream("backup.dat"); objEntrada = new ObjectInputStream(fichEntrada); temp = (Bicola<G>) objEntrada.readObject(); } catch( FileNotFoundException e ) { System.out.println("El sistema no puede encontrar el archivo especificado"); } catch( ClassNotFoundException e ) { System.out.println("El contenido leido en \"backup.dat\" no era el esperado."); } catch( Exception e ) { System.out.println(e); } finally { // Como ultimo paso se cierran los ficheros. try { if( objEntrada != null ) objEntrada.close(); if( fichEntrada != null ) fichEntrada.close(); } catch( Exception e ) { System.out.println(e); } } return temp; } // Recibe por referencia un objeto Bicola que es guardado en el fichero backup. public void writeBicolaFichero( Bicola<G> bicola ) { FileOutputStream fichSalida = null; ObjectOutputStream objSalida = null; try { fichSalida = new FileOutputStream("backup.dat"); objSalida = new ObjectOutputStream(fichSalida); objSalida.writeObject(bicola); } catch( FileNotFoundException e ) { System.out.println("El sistema no puede encontrar el archivo especificado"); } catch( Exception e ) { System.out.println(e); } finally { // Como ultimo paso se cierran los ficheros. try { if( objSalida != null ) objSalida.close(); if( fichSalida != null ) fichSalida.close(); } catch( Exception e ) { System.out.println("No se pudo cerrar el fichero."); } } } } |
Leer más
9×03: Bicola generica usando un Vector o Referencias
Código para Bicolas genéricas usando Vectores:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
/** * Proyecto: 9x03-Bicola - Vector * Fichero: Bicola.java * Fecha: 17/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html * http://mundogeek.net/archivos/2009/03/11/generics-en-java/ */ import java.util.Vector; public class Bicola<G> { // PROPIEDADES: private Vector<Nodo<G>> vNodos; // CONSTRUCTOR: // Se instancia un Vector de Nodos Genericos. (Del tipo con el que instanciamos la Bicola). public Bicola() { vNodos = new Vector<Nodo<G>>(5, 2); } // METODOS: // Se devuelve el numero de elementos usados en el Vector. public int getNumDeNodos() { return vNodos.size(); } // Se añade un Nodo a la izquierda y se desplazan los demas una posicion a la derecha en el indice. public void addNodoIzquierda( G dato ) { vNodos.add(0, new Nodo<G>(dato)); } // Se añade al final del Vector un nuevo Nodo: public void addNodoDerecha( G dato ) { vNodos.addElement(new Nodo<G>(dato)); } // Se copia el primer elemento en temp, despues se elimina del Vector. public G getNodoIzquierda() { G temp = vNodos.firstElement().getDatoNodo(); vNodos.removeElementAt(0); return temp; } // Se copia el ultimo elemento en temp, despues se elimina del Vector. public G getNodoDerecha() { G temp = vNodos.lastElement().getDatoNodo(); vNodos.removeElementAt(vNodos.size() - 1); return temp; } // Se concatenan todos los elementos del Vector en cadena y luego se devuelve. public String toString() { String cadena = ""; for( int i = 0; i < vNodos.size(); i++ ) cadena += vNodos.get(i).getDatoNodo() + ", "; return cadena; } } |
Leer más
2×03: Función múltiple consulta (Fin MySQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* Pregunta 3 Realizar una función pregunta3 que calcule y devuelva el importe total de un pedido que se le pase como parámetro. La función devolverá -1 si no existe el pedido pasado como argumento. */ delimiter $$ drop function if exists 2x03 $$ create function 2x03(ped int) returns double begin if (select true from pedidos where num_pedido = ped) then return ( select sum(a.precio_unidad * d.unidades) from articulos a, detalle_pedidos d where a.cod_articulo = d.cod_articulo and d.cod_pedido = ped )- ( select descuento from pedidos where num_pedido = ped ); else return -1; end if; end $$ delimiter ; -- select 2x03(43) as 'Total'; |