Sei sulla pagina 1di 17

UNIVERSIDAD JUREZ AUTNOMA DE

TABASCO
DIVISIN ACADMICA DE INFORMTICA Y SISTEMAS

PARA
JUVENIL

MANUAL PARA SOFTWARE PUBLICITARIO


PROMOCIN DE UNA TIENDA DE ROPA

Asignatura:

Laboratorio

de Construccin de Software

Presentan:

Jos
ngel de
Winebaldo

Andrs Silva Hernndez


Jess Gonzlez Martnez
Jos Collado Martnez

Profesor:

M.A.T.I.

Nicols Torres Martnez


Pgin
a1

Cunduacn, Tabasco

29 de Mayo, 2014

Crontrol de Clientes y Publicidad: Playeras Doshi


Se utiliz la herramienta NeatBeans y la Base de Datos MySQL.
Se elige un nuevo proyecto, Java, Java Application y le dan el nombre que gusten, en este caso se
llama ControlClientes y selecciona la casilla Clase Ejecutable.
Toca agregar JDBC para la conexin para la Base de Datos Oracle, en la carpeta libreras, add
jar/folder, en la carpeta donde este instalado Oracle buscar la carpetas product,11.2.0,server,jbcd,lib
y seleccionar ojdbc5.jar.
Agregar una clase sobre el paquete de ControlClientes, se le llamo Sistema, se agrega los imports
que son necesarios para la conexin a la BD, fuera de la clase:
import java.sql.Connection; //conexion a SQL
import java.sql.DriverManager; //Manejador de SQL
import java.sql.ResultSet; //Resultados de consultas
import java.sql.SQLException; //excepciones generados por SQL
import java.sql.Statement; //sentencia SQL
import javax.swing.JOptionPane; // panel para mostrar mensajes cuadro de dialogo
Dentro de la calse agregar las siguientes variables:
private static Connection conexion; //variable para manejar la conexin a la BD private static
Statement sentencia; //para mandar las sentencias SQL a la BD
public static String titulo; //ttulo de nuestra aplicacin
Despues de las variables agregar el siguiente cdigo:
/**
* trata de conectarse a la base de datos
* si se conecta regresa true
* sino muestra el error y regresa false
* @return
*/
public static boolean conectarBaseDatos() {
try {
titulo="Control de Clientes y Publicidad";
// cargar el driver en este caso oracle
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
// hacer la conexion
conexion =
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:nombreBD", usuario",
password");
sentencia = conexion.createStatement();
return true;
} catch (Exception ex) {
mensaje(ex.getMessage());
Pgin
a2

return false;
}
}
/**para desconectar de la base de datos
*
*/
public static void desconectarBaseDatos(){
try {
conexion.rollback();
} catch (SQLException ex) {
mensaje(ex.getMessage());
}
}
/**
* regresa el ResulSet con los datos de la consulta
* si hay un error muestra el mensaje de error de la bd y regresa null
* @param sql
* @return
*/
public static ResultSet getResultSet(String sql) {
try {
return sentencia.executeQuery(sql);
} catch (SQLException ex) {
mensaje(ex.getMessage());
return null;
}
}
/**
* ejecuta un comando de insert, update o delete en la base de datos
* si la base de datos acepta regresa true, sino muetsra el errro y regresa false
* @param sql sentencia sql
* @return
*/
public static boolean ejecuta(String sql) {
try {
sentencia.executeUpdate(sql);
return true;
} catch (SQLException ex) {
mensaje(ex.getMessage());
return false;
}
}

Pgin
a3

/*** Muestra mensaje en una caja de dialogo


* @param mensaje */
public static void mensaje(String mensaje){
JOptionPane.showMessageDialog(null, mensaje, titulo,JOptionPane.NO_OPTION);
}
/*** Muestra una pregunta y el usuario acepta o la rechaza
* @param mensaje */
public static boolean preguntar(String mensaje){
return JOptionPane.showConfirmDialog(null, mensaje, titulo,
JOptionPane.YES_NO_OPTION)==0;
}
/**
* pide un texto en una caja de dialogo
* @param mensaje
*/
public static String getTexto(){
String x = JOptionPane.showInputDialog(null, "Introduzca el texto", titulo,
JOptionPane.QUESTION_MESSAGE);
if (x==null)
x="";
return x;
}
Agregar una clase que servira para manipuar los datos mostrados en la pantalla en forma de
cuadricula. La clase se llamo MiTableModel, afuera de la clase agregar:
import javax.swing.table.DefaultTableModel
Sobre la clase agregar extends DefaultTableModel, quedaria as:
public class MiTableModel extends DefaultTableModel
Dentro de la clase agregar el siguiente cdigo:
boolean columnas[] = new boolean[30];
public void setColumnaEditable(int columna, boolean editable){
columnas[columna] = editable;
}
public void setColumnasEditable(boolean editable){
for (int i=0; i < columnas.length;i++)
columnas[i]= editable;
}
@Override
public boolean isCellEditable (int row, int column)
{
return columnas[column];
}
Pgin
a4

Luego clic derecho sobre controlclientes, nuevo, paquete java, se dio el nombre de visual, clic
derecho sobre visual, agregar dos clases nuevas JFrame Form, se le dio el nombre de Men y
Clientes.
En Men aparecera unas pestaas, que dicen Source (donde se muestra el cdigo) y Design (Se
muestra el entorno grfico) y en Design aparece un recuadro del lado derecho que se llama Palette
(Donde se puede elegir diferentes tipos de objetos).
En Palette, Seleccionar la pestaa Swing Menus y seleccionar Menu Bar, cambiar nombre de File por
Archivo y Edit por Informacin.
Clic derecho sobre Archivo, Add From Palette, Menu Item, colocar el nombre de Clientes, volver a
hacer el mismo procedimiento y colocar el nombre de Enviar Correo.
Ir al main de ControlClientes y agregar el siguiente cdigo:
if (Sistema.conectarBaseDatos()){
Menu menu = new Menu();
menu.setVisible(true);
}
Al ejecutarlo se mostrara la siguiente ventana:

Pgin
a5

En Clientes agregar el diseo que gusten, Table, Label, Button, Combo Box, TextField, acomodarlo a
su gusto.

Para programar las acciones sobre los comandos hacer clic derecho, Events, Action,
actionPerformed. En Menu, Clientes, events, action, actionPerformed. Lo mandara a la pestaa de
Source, agregar:
Cliente cliente = new Cliente(this,false);
Cliente.setVisible(true);
This: se para la referencia el mismo menu (JFrame Form) para que municipios (JDialog Form) pueda
existir, ya que funciona sobre el primero.
False: para que municipios no se ejecute encima de menu, si se coloca true hasta que se cierre se
regresa el control a menu.
Ahora comenzar a trabajar en Clientes:
MiTableModel modelo = new MiTableModel();
En Tabla clic derecho Table Contents, guardar, cerrar y abrir de nuevo el programa, hacer que el
usuario solo pueda seleccionar solo un registro, seleccionar la Tabla, propiedades, clic en
selectionModel, y cambiarlo a Single Selection.
Pgin
a6

Agregar las columnas en el constructor:


modelo.addColumn("ID");
modelo.addColumn("Nombre");
modelo.addColumn("Apellido Paterno");
modelo.addColumn("Apellido Materno");
modelo.addColumn("Sexo");
modelo.addColumn("E-Mail");
modelo.addColumn("Gustos");
tablaClientes.getColumn("ID").setPreferredWidth((int)(tablaClientes.getWidth()*0.10));
tablaClientes.getColumn("Nombre").setPreferredWidth((int)
(tablaClientes.getWidth()*0.20));
tablaClientes.getColumn("Apellido Paterno").setPreferredWidth((int)
(tablaClientes.getWidth()*0.15));
tablaClientes.getColumn("Apellido Materno").setPreferredWidth((int)
(tablaClientes.getWidth()*0.15));
tablaClientes.getColumn("Sexo").setPreferredWidth((int)(tablaClientes.getWidth()*0.05));
tablaClientes.getColumn("E-Mail").setPreferredWidth((int)(tablaClientes.getWidth()*0.20));
tablaClientes.getColumn("Gustos").setPreferredWidth((int)(tablaClientes.getWidth()*0.15));
Agregar un mtodo buscar. El mtodo recibe un parmetro String con la condicin de bsqueda. En el
constructor (primera vez) ejecutamos este mtodo con la cadena vaca (sin condicin). Cada vez que
el usuario elija buscar, llamaremos este mtodo con la condicin correspondiente.
private void buscar(String condicion){
try {
//construyendo la sentencia Select
String consulta=" select idClientes, nombre, apepa, apema, sexo, email, gustos "+
//seleccionando los valores de la tabla
" from Clientes "+ //origen de los datos
condicion+ //agregando la condicin
" order by nombre"; //ordenando alfabticamente

//ejecutando la consulta a la base de datos


ResultSet resultados = Sistema.getResultSet(consulta);
//limpiando la tabla desde el modelo
modelo.setRowCount(0);
//recorrer el ResultSet
while (resultados.next()){
//agregar registro uno a uno
modelo.addRow(new Object[] {resultados.getInt("idClientes"),
resultados.getString("nombre"),
resultados.getString("apepa"),
Pgin
a7

resultados.getString("apema"),
resultados.getString("sexo"),
resultados.getString("email"),
resultados.getString("gustos")
}
);
}

//para seleccionar siempre el primer registro despus de consultar la base de datos


if (modelo.getRowCount()>0){
tablaClientes.changeSelection(0, 0, false, false);
posicion =0; //apuntar al primer registro en modelo y tabla
nuevoRegistro = false; //si hay datos
}else{
posicion = -1; //para saber que esta vaco
nuevoRegistro = true; //no hay datos, automticamente en 'nuevo'
}
actualizar();
} catch (Exception ex) { //tambin puede ser SQLException
//no hacer nada, recuerde que en caso de error en la consulta, Sistema manda el error
}
}
Actualizar: Mtodo para actualizar el detalle del municipio, habilitar tabla y los botones de nuevo,
guardar, eliminar. Para ello es necesario saber la posicion de tabla.
Posicin: Puntero que seala cual es el registro activo en tabla, ser establecido como -1 (no hay
datos) y 0 (primer registro) en buscar, y variable cuando el usuario haga click en n registro.
Antes declarar nuevoRegistro y posicion, agregar este cdigo despues de MiTableModel modelo =
new MiTableModel();
private boolean nuevoRegistro;
private int posicion;
Agregando metodo actalizar:
private void actualizar(){
if (nuevoRegistro){
//deshabilitando los botones y tabla
tablaClientes.setEnabled(true);
nuevo.setEnabled(true);
eliminar.setEnabled(true);
tablaClientes.setEnabled(true);
//limpiando los objetos visuales
ID.setText("");
Pgin
a8

nombre.setText("");
apepa.setText("");
apema.setText("");
sexo.setSelectedIndex(-1);
email.setText("");
gustos.setText("");
}else{
//habilitando los botones y tabla
tablaClientes.setEnabled(true);
nuevo.setEnabled(true);
eliminar.setEnabled(true);
tablaClientes.setEnabled(true);
//llenado los objetos visuales de captura
ID.setText(modelo.getValueAt(posicion, 0).toString());
nombre.setText(modelo.getValueAt(posicion, 1).toString());
apepa.setText(modelo.getValueAt(posicion, 2).toString());
apema.setText(modelo.getValueAt(posicion, 3).toString());
String sex = modelo.getValueAt(posicion,4).toString();
if (sex.equals("M")){
sexo.setSelectedIndex(0);
}
else {
sexo.setSelectedIndex(1);
}
if (modelo.getValueAt(posicion,5)==null){
email.setText("");
// email.setEnabled(false);
}
else {
//email.setText("");
email.setEnabled(true);
email.setText(modelo.getValueAt(posicion,5).toString());
}
gustos.setText(modelo.getValueAt(posicion, 6).toString());
}
}
Click sobre cualquier registro y actualizar el detalle.
Botn derecho sobre tabla ->Events->Mouse->mouseClicked
posicion=tabla.getSelectedRow();
actualizar();

Pgin
a9

Dndole funcionalidad a cada uno de los botones, para cada uno botn clic derecho, Events, Action,
actionPerformed. Funcin al botn nuevo:
private void nuevoActionPerformed(java.awt.event.ActionEvent evt) {
nuevoRegistro = !nuevoRegistro;
if (modelo.getRowCount()==0)
nuevoRegistro= false;
actualizar();
}
Funcin al botn Guardar:
private void guardarActionPerformed(java.awt.event.ActionEvent evt) {
if (Sistema.preguntar("Confirmar Guardar")){
String consulta;
//variables para almacenar los valores del detalle, para su posterior envo a la BD
int temporalId=0;
String temporalNombre= "";
String temporalApePa= "";
String temporalApeMa= "";
String temporalEmail= "";
String temporalSexo = "";
String temporalGustos = "";//por si no seleccion, para mandar null a la BD
//leyendo el Id e intentando convertirlo a entero
try {
temporalId= Integer.parseInt(ID.getText());
}catch(Exception ex){
Sistema.mensaje("ID No Vlido");
}
temporalSexo="null";
if (sexo.getSelectedIndex()==-1)
{
Sistema.mensaje("Seleccione el Sexo del Cliente");
return ;
Pgin
a 10

}else
temporalSexo=sexo.getSelectedItem().toString().substring(0,1);
temporalNombre= nombre.getText().toUpperCase();
temporalApePa= apepa.getText().toUpperCase();
temporalApeMa= apema.getText().toUpperCase();
temporalEmail= email.getText();
temporalGustos = gustos.getText();
if (nuevoRegistro){
consulta = "insert into clientes (idClientes, nombre, apepa, apema, sexo, email,
gustos) values "+
"("+temporalId+
","+Sistema.cadenaBaseDatos(temporalNombre)+
","+Sistema.cadenaBaseDatos(temporalApePa)+
","+Sistema.cadenaBaseDatos(temporalApeMa)+
","+Sistema.cadenaBaseDatos(temporalSexo)+
","+Sistema.cadenaBaseDatos(temporalEmail)+
","+Sistema.cadenaBaseDatos(temporalGustos)+")";
if (Sistema.ejecuta(consulta)){
nuevoRegistro=false;
modelo.addRow(new Object[]
{temporalId,temporalNombre,temporalApePa,temporalApeMa,temporalSexo,temporalEmail,tem
poralGustos});
posicion = posicion +1;
actualizar();
}
}else{
consulta = "update clientes set"+
" idClientes="+temporalId+
",nombre ="+Sistema.cadenaBaseDatos(temporalNombre)+
",apepa ="+Sistema.cadenaBaseDatos(temporalApePa)+
Pgin
a 11

",apema ="+Sistema.cadenaBaseDatos(temporalApeMa)+
",sexo ="+Sistema.cadenaBaseDatos(temporalSexo)+
",email ="+Sistema.cadenaBaseDatos(temporalEmail)+
",gustos ="+Sistema.cadenaBaseDatos(temporalGustos)+
" where idClientes="+modelo.getValueAt(posicion, 0);
if (Sistema.ejecuta(consulta)){
modelo.setValueAt(temporalId, posicion, 0);
modelo.setValueAt(temporalNombre, posicion, 1);
modelo.setValueAt(temporalApePa, posicion, 2);
modelo.setValueAt(temporalApeMa, posicion, 3);
modelo.setValueAt(temporalSexo, posicion, 4);
modelo.setValueAt(temporalEmail, posicion, 5);
modelo.setValueAt(temporalGustos, posicion, 6);
actualizar();
}
}
}
}
Funcin al botn Eliminar:
private void eliminarActionPerformed(java.awt.event.ActionEvent evt) {
if (Sistema.preguntar("Confirmar Eliminar")){
String consulta = "delete clientes "+
" where idClientes="+modelo.getValueAt(posicion, 0);
if (Sistema.ejecuta(consulta)){
modelo.removeRow(posicion);
tablaClientes.setRowSelectionInterval(0, 0);
posicion=0;
actualizar();
}
}
}

Pgin
a 12

Funcin al botn Deshacer:


private void deshacerActionPerformed(java.awt.event.ActionEvent evt) {
if (nuevoRegistro && modelo.getRowCount()>0)
nuevoRegistro = false;
actualizar();//
}
Funcin al botn BuscarNombre:
private void buscarNombreActionPerformed(java.awt.event.ActionEvent evt) {
String texto = Sistema.getTexto("Introduce el nombre o parte de l");
if (!texto.isEmpty()){
try {
texto = " where nombre like '%"+texto.trim().toUpperCase()+"%'";
buscar(texto);
}
catch (Exception ex){
}
}
}
Ahora a trabajar para enviar correos electrnicos. Hay que descargar el archivo java javax.mail,
luego clic derecho en libreras, Add Jar/Folder, buscar donde quedo el archivo y seleccionarlo, se
agregara javax.mail.jar.
Clic derecho sobre el paquete ControlCliente, nuevo, paquete java, se le dio nombre de correo, clic
derecho en correo, crear dos clases, se le dio el nombre de JCMail y SMTPAuthenticator.

Pgin
a 13

En el paquete visual, crear un JFrame que se le dio el nombre de Mail y la cual quedara como la
siguiente imagen.

En la clase SMTPAuthenticator.java agregar el siguiente cdigo, primero hay que importar:


import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
Agregar extends authenticator, que quedaria as: public class SMTPAuthenticator extends
Authenticator
Agregar el siguiente cdigo:
private String SMTP_AUTH_USER = "";
private String SMTP_AUTH_PWD = "";
public SMTPAuthenticator() {}
public SMTPAuthenticator(String user , String pass) {
this.SMTP_AUTH_USER = user;
this.SMTP_AUTH_PWD = pass;
}
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.SMTP_AUTH_USER, this.SMTP_AUTH_PWD);
}
Agregar en el siguiente cdigo en la clase JCMail, que se encargar del envo del mensaje, primero
agregar los import.
import java.util.Date;
import javax.mail.Message;
import javax.mail.Session;
import java.util.Properties;
Pgin
a 14

import javax.mail.Multipart;
import javax.mail.Transport;
import javax.swing.JOptionPane;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.AddressException;
Agregar el siguiente cdigo:
private String from = "";//tu_correo@gmail.com
private String password = "";//tu password: 123456 :)
private InternetAddress[] addressTo;// destinatario1@hotmail.com,destinatario2@hotmail.com,
destinatario_n@hotmail.com
private String Subject = "";//titulo del mensaje
private String MessageMail = "";//contenido del mensaje
public Jmail(){}
public void SEND()
{
try {
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.user", "usuario");
props.put("mail.smtp.port", 25);
//
SMTPAuthenticator auth = new SMTPAuthenticator( getFrom(), getPassword() );
Session session = Session.getDefaultInstance(props, auth);
session.setDebug(false);
//Se crea destino y origen del mensaje
MimeMessage mimemessage = new MimeMessage(session);
InternetAddress addressFrom = new InternetAddress( getFrom() );
mimemessage.setFrom(addressFrom);
mimemessage.setRecipients(Message.RecipientType.TO, addressTo);
mimemessage.setSubject( getSubject() );
// Se crea el contenido del mensaje
MimeBodyPart mimebodypart = new MimeBodyPart();
mimebodypart.setText( getMessage() );
mimebodypart.setContent( getMessage() , "text/html");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mimebodypart);
mimemessage.setContent(multipart);
mimemessage.setSentDate(new Date());
Pgin
a 15

Transport.send(mimemessage);
JOptionPane.showMessageDialog(null, "Correo enviado. Enjoy!!!");
} catch (MessagingException ex) {
System.out.println(ex);
}
}
//remitente
public void setFrom(String mail){ this.from = mail; }
public String getFrom(){ return this.from; }
//Contrasea
public void setPassword(char[] value){
this.password = new String(value);
}
public String getPassword(){ return this.password; }
//destinatarios
public void setTo(String mails){
String[] tmp =mails.split(",");
addressTo = new InternetAddress[tmp.length];
for (int i = 0; i < tmp.length; i++) {
try {
addressTo[i] = new InternetAddress(tmp[i]);
} catch (AddressException ex) {
System.out.println(ex);
}
}
}
public InternetAddress[] getTo(){ return this.addressTo; }
//titulo correo
public void setSubject(String value){ this.Subject = value; }
public String getSubject(){ return this.Subject; }
//contenido del mensaje
public void setMessage(String value){ this.MessageMail = value; }
public String getMessage(){ return this.MessageMail; }
En Mail darle funcin al boton Enviar:
private void cmdSENDActionPerformed(java.awt.event.ActionEvent evt) {
mail.setFrom( this.txtFROM.getText() );
mail.setPassword( this.txtPWD.getPassword() );
mail.setTo( this.txtTO.getText() );
mail.setSubject( this.txtSUBJECT.getText() );
mail.setMessage( this.txtMESSAGE.getText() );
mail.SEND(); }
Pgin
a 16

El programa queda listo.

Pgin
a 17

Potrebbero piacerti anche