jueves, 24 de noviembre de 2011

Ejercicios SQL

Ejercicio 1
Para generar este resultado:
Utilice este comando:
SELECT City, CompanyName FROM customers WHERE City LIKE 'Ber%'
En donde se realiza solo la consulta de las columnas City y CompanyName en donde se encuentren las iniciales Ber en la columna City.

Ejercicio B
Para generar este resultado:
Utilice este comando:
SELECT CompanyName, ContactName FROM customers ORDER BY ContactName
En donde se realiza la consulta de las columnas CompanyName y ContactName, pero la columna ContactName se ordena en forma ascendente.

Ejercicio C
Pata generar este resultado:
Utilice este comando:
SELECT COUNT(City) FROM CUSTOMERS WHERE City LIKE 'Ber%'
En donde se cuentan el número de registros en la columna City en donde las iniciales son Ber.

Ejercicio D
Consultas de la página de prueba

Comando:
SELECT * FROM customers
Resultado:
Se seleccionó la consulta de toda la tabla customers.

Comando:
SELECT CompanyName, ContactName FROM customers
Resultado:
Se seleccionó la consulta de las columnas CompanyName y ContactName de la tabla customers.

Comando:
SELECT * FROM customers WHERE CompanyName LIKE 'a%'
Resultado:
Se seleccionó la consulta de todos los campos en donde en la columna CompanyName los registros comenzarán con a.

Comando:
SELECT CompanyName, ContactName
FROM customers
WHERE CompanyName > 'a'

Resultado:
Se realizó la consulta de las columnas CompanyName y ContactName en donde aparecieran todos los registros de la columna CompanyName después del registro que empeieza con la letra a, incluyendo a este.


---Continuación---

Referencias

Eventos en Java

En esta entrada explicaré como funcionan los eventos al presionar un botón en Java.

Cuando creamos una aplicación en Java utilizamos botones que al presionarlos, realizan una función. Explicare un ejemplo sencillo de como funcionan tres botones al presionarlos, uno de ellos será un botón de salida de la ventana, el otro al presionarlo imprimirá algo en la terminal y el otro cambiará de color al panel contenido en la ventana.

Ejemplo

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Eventos implements ActionListener{

JButton boton;
JButton boton2;
JButton boton3;
JPanel ev;

public Eventos(){
JFrame ventana = new JFrame();
ventana.setTitle("Ventana");
ventana.setSize(500, 250);
ventana.setVisible(true);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ev = new JPanel();
ventana.setContentPane(ev);
ev.setBackground(Color.WHITE);
ev.setLayout(null);

boton = new JButton("Imprime");
boton.addActionListener(this);
boton.setBounds(60, 100, 100, 50);
ev.add(boton);

boton2 = new JButton("Salir");
boton2.addActionListener(this);
boton2.setBounds(170, 100, 100, 50);
ev.add(boton2);

boton3 = new JButton("Cambia color");
boton3.addActionListener(this);
boton3.setBounds(280, 100, 150, 50);
ev.add(boton3);

}

public void actionPerformed(ActionEvent e){
if(boton == e.getSource()){
System.out.println("Imprimiendo");
}
if(boton2 == e.getSource()){
System.exit(0);
}
if(boton3 == e.getSource()){
ev.setBackground(Color.GREEN);
}
}
public static void main(String args[]){

Eventos evento = new Eventos();

}
}

El ActionListener avisa que se a presionado el boton, es decir, se a creado un evento, por esta razón los botones Imprime, Salir y Cambia color agregan un AcionListener.
El actionPerformed es en donde van las acciones que se realizarán al presionar cada botón.

Si presionamos el botón Imprime, se imprimirá un mensaje en la terminal que dice "Imprimiendo", en cambio si presionamos el botón Salir, se cerrará la ventana y si presionamos el botón Cambia color, el panel de la ventana, cambiará de color blanco a verde.

La clase debe implementar el ActionListener para que los botones realicen una acción al ser presionados.

Imagenes


Referencias

Saludos.



Comandos SQL

Esta entrada es para explicar como se manipula una base de datos en MySQL en terminal, para cuando se desea trabajar un proyecto en el cual se incorpore una conexión a una base de datos en Mysql.

Para comenzar a usar MySQL en la terminal, abrimos nuestra terminal y tecleamos lo siguiente:
mysql -u root -p
Nos pedirá la contraseña que le asignamos cuando instalamos el cliente y el servidor de MySQL.
Ahora ya estamos en MySQL, y ya podremos crear nuestra base de datos.

Para crear nuestra base de datos escribimos el comando siguiente:
CREATE DATABASE nombrebase;

El comando CREATE DATABASE esta escrito en mayúsculas, pero se puede escribir con minúsculas en Linux, solo se escribe en mayúsculas para separar los comandos de los nombres de las bases, de los nombres de los campos, etc.

Ahora para ver nuestra base, tecleamos el comando:
SHOW DATABASES;

Con el comando anterior, se muestran las bases creadas en MySQL.

Ahora, para insertar tablas en nuestra base de datos, tenemos que teclear el comando:
USE nombrebase;

El comando anterior se utiliza para usar la base de datos a la que le queremos insertar tablas, datos.
Para crear una tabla en nuestra base se utiliza el comando:
CREATE TABLE nombretabla();
Pero dentro de los paréntesis van los campos que llevara nuestra tabla a crear y el tipo de dato que es. Además se puede agregar cual es la llave primaria en nuestra tabla y si algun campo puede ser o no NULL (nulo).

Por ejemplo, para crear una tabla que se llame cliente, en donde queremos que el cliente tenga un ID, un nombre, una edad y un telefono, teclearemos lo siguiente:
CREATE TABLE cliente(ID int AUTO_INCREMENT PRIMARY KEY, nombre CHAR(15), edad CHAR(5), telefono CHAR(10));
Creé el campo ID como un INT y AUTO_INCREMENT es para que la ID del cliente se vaya aumentando automáticamente conforme se vaya ingresando un cliente; coloqué PRIMARY KEY en este campo, ya que este campo será la llave primaria de la tabla cliente.
Creé los campos nombre, edad y telefono como CHAR(), ya que serán caracteres porque en los campos edad y telefono no se necesita que sean de tipo entero, ya que no se realizará ninguna operación con ellos. Dentro de los paréntestis se coloca el número de caracteres para el campo.

Ahora ingresamos el comando:
SHOW TABLES;
Y nos mostrará las tablas que hayamos creado en nuestra base.

Para ingresar datos en nuestra tabla se usa el comando:
INSERT INTO cliente VALUES();

Dentro de los paréntesis van en orden los valores que le queremos agregar a los campos nombre, edad y telefono.

Por ejemplo si queremos agregar un cliente que se llame Sandra y de edad tenga 20 años y su telefono sea 83765420, estos datos, se ingresarán de la manera siguiente:
INSERT INTO cliente VALUES(1, 'Sandra', '20', '83765420');
Coloque el número 1, como ID de sandra. Solo los datos que ingresamos de tipo CHAR, deben estar dentro de comillas simples ' '.

Ahora para ver los datos que acabamos de ingresar en MySQL hay un comando que es SELECT, este comando, sirve para realizar consultas.
Para consultar toda la tabla, ingresamos el comando siguiente:
SELECT * FROM cliente;

Si queremos que solo ciertos datos aparezcan y no toda la tabla, se utiliza este comando SELECT pero con condiciones.
Por ejemplo, si solo queremos ver la columna nombre, el comando a utilizar será:
SELECT nombre FROM cliente;
Lo anterior, es algo básico para comenzar a utilizar MySQL en terminal.

Referencias
Referencia1 Esta referencia es muy buena, sirve mucho.

Saludos.

Layouts en Java

Los Layouts son clases que dicen como se van a acomodar los componentes en una interfaz gráfica en Java.
Algunos de ellos, son GridLayout, GridBagLayout, FlowLayout, BorderLayout, etc.

Cada Layout tiene una manera diferente de acomodar los componentes como botones, labels, textfields, etc., en una ventana.

Explicaré el uso de algunos de los Layouts de Java, con el siguiente código.

Uso del BorderLayout, GridLayout y FlowLayout.
import java.awt.*;
import javax.swing.*;

public class Layouts{

public Layouts(){
}

public static void main(String[] args) {

JFrame ventana = new JFrame(); //creacion de la ventana

ventana.setSize(1028, 740); //tamaño de la ventana
ventana.setLocation(0, 25); //donde se localiza la ventana
ventana.setTitle("Ventana"); //como se llama la ventana
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //cuando se cierra la ventana

JPanel p = new JPanel(); //panel contenedor de los demas paneles
JPanel pBorder = new JPanel(); //panel para el BorderLayout
JPanel pGrid = new JPanel(); //panel para el GridLayout
JPanel pFlow = new JPanel(); //panel para el FlowLayout

ventana.setContentPane(p); //la ventana contiene el panel p
p.add(pBorder);
p.add(pGrid); //el panel p contiene a los paneles pBorder, pGrid y pFlow
p.add(pFlow);

p.setLayout(new GridLayout(3, 1));
pBorder.setLayout(new BorderLayout());
pGrid.setLayout(new GridLayout(3, 2));
pFlow.setLayout(new FlowLayout());

p.setBackground(Color.WHITE);
pBorder.setBackground(Color.YELLOW); //colores de los layouts
pGrid.setBackground(Color.GREEN);
pFlow.setBackground(Color.RED);

JLabel centro = new JLabel("¡Centro!");
JLabel norte = new JLabel("¡Norte!");
JLabel sur = new JLabel("¡Sur!"); //labels
JLabel este = new JLabel("¡Este!");
JLabel oeste = new JLabel("¡Oeste!");

JPanel panel = new JPanel(); //panel que esta en el centro del panel pBorder
panel.add(centro); //este panel agrega el label centro
pBorder.add(panel, BorderLayout.CENTER);
pBorder.add(norte, BorderLayout.NORTH); //este panel agrega el label norte al norte
pBorder.add(sur, BorderLayout.SOUTH); //este panel agrega el label sur al sur
pBorder.add(este, BorderLayout.EAST); //este panel agrega el label este al este
pBorder.add(oeste, BorderLayout.WEST); //este panel agrega el label oeste al oeste

JButton bot1 = new JButton("Boton1");
JButton bot2 = new JButton("Boton2");
JButton bot3 = new JButton("Boton3"); //botones
JButton bot4 = new JButton("Boton4");
JButton bot5 = new JButton("Boton5");
JButton bot6 = new JButton("Boton6");

pGrid.add(bot1);
pGrid.add(bot2);
pGrid.add(bot3); //el panel pGrid agrega todos estos botones
pGrid.add(bot4);
pGrid.add(bot5);
pGrid.add(bot6);

JLabel lab = new JLabel("Ejemplo");
JButton bot = new JButton("Boton");
JButton boton = new JButton("Boton");
JLabel label = new JLabel("Ejemplo");

pFlow.add(lab);
pFlow.add(bot); //el panel pFlow contiene estos componentes
pFlow.add(boton);
pFlow.add(label);

ventana.setVisible(true);

return;
}
}
Imagen de la ejecución

BorderLayout
Como se ve en el código anterior el BorderLayout se usa para acomodar los componentes al norte, sur, este, oeste y centro de una ventana. Solo hay que agregar un componente a un BorderLayout y decir donde queremos que se vea, ya sea al centro, al norte, al sur, al este o al oeste.

GridLayout
El GridLayout se utiliza para crear matrices en una ventana. Acomoda los componentes en un mismo tamaño. Es útil para realizar calculadoras.
Como se muestra en el código, para decir cuantas filas y columnas queremos en la matriz, se coloca primero el número de filas y después el número de columnas, por ejemplo, en el código, en el GridLayut del panel pGrid hay 3 filas y dos columnas, pGrid.setLayout(new GridLayout(3, 2)).

FlowLayout
Este Layout es muy sencillo, ya que solo acomoda los componentes en fila hasta donde se lo permita la ventana.

Referencias

Clase Moto

Pseudocódigo

Clase Moto{
placa, estadoMotor, velocidad, vidaBateria

Moto(placa)
placa = placa
estadoMotor = apagado
velocidad = 0
vidaBateria = 100

verPlaca()
return placa

encender()
estadoMotor = encendido
vidaBateria --

apagar()
estadoMotor = apagado
velocidad = 0

acelerar()
if estadoMotor == encendido
velocidad = velocidad + 20

frenar()
if estadoMotor == encendido && velocidad > 0
velocidad = velocidad - 20

}

Clase MainMoto
public class Moto
{
private int placa;
private boolean estadom;
private int velocidad;
private int vbateria; //atributos

public Moto(int placa)
{
placa = placa;
estadom = false;
velocidad = 0;
vbateria = 100;
}

public int verplaca(int placa)
{
System.out.println("Placa: "+placa);

return placa;
}

public void encender()
{
estadom = true;
System.out.println("El motor esta encendido");
vbateria--;
System.out.println("Bateria: "+ vbateria);

return;
}

public void apagar()
{
estadom = false;
System.out.println("El motor esta apagado");
velocidad = 0;
System.out.println("La velocidad es 0");

return;
}

public void acelerar()
{
if(estadom==true){
velocidad = velocidad + 20;
System.out.println("Velocidad: "+ velocidad);
}
else{
System.out.println("El motor esta apagado");
}

return;
}

public void frenar()
{
if(velocidad > 0 && estadom == true){
velocidad = velocidad - 20;
System.out.println("Velocidad: "+ velocidad);
}
else{
System.out.println("El motor esta apagado / La velocidad no puede ser negativa");
}

return;
}

}
Clase Moto
import java.util.Scanner;

public class MainMoto{

public static void main(String args[]){

Moto motoEjemplo = new Moto(42424);

Scanner leer = new Scanner(System.in);
int opc;
do{

System.out.println("\t\tMoto");
System.out.println("1.- Ver placa");
System.out.println("2.- Encender");
System.out.println("3.- Apagar");
System.out.println("4.- Acelerar");
System.out.println("5.- Frenar");
opc = leer.nextInt();

switch(opc){
case 1:
motoEjemplo.verplaca(343);
break;
case 2:
motoEjemplo.encender();
break;
case 3:
motoEjemplo.apagar();
break;
case 4:
motoEjemplo.acelerar();

break;
case 5:
motoEjemplo.frenar();
break;
}
}while(opc<=5);
}
}

Ejecución

Referencias

Saludos.

miércoles, 23 de noviembre de 2011

Documentación técnica y auto-generación de código

Documentación técnica y auto-generación de código de ogro y príncipe

Para realizar la auto-generación de código del juego del ogro y príncipe, utilizare Umbrello.

En la terminal nos posicionamos en la carpeta del juego y escribimos lo siguiente umbrello juego.

Se desplegará el diagrama de clases del proyecto juego del ogro y príncipe.
Para la auto-generación de código, daremos click en la opción Code y damos click a Code Generation Wizard y nos aparecerá una ventana como esta:


Ahora le damos click al botón Next y nos aparecerá otra ventana en la que nos aparece la dirección en que se guardara la auto-generación del código y además aparece en que lenguaje deseamos que se auto-genere el código, en este caso pondre la opción que el código se realice en el lenguaje Java. Damos click al botón Next.
Nos aparecerá otra ventana en la que daremos click a Generate. Y automáticamente el código del ogro y el príncipe se a generado en el lenguaje Java a partir del diagrama de clases creado en Umbrello.

Código auto-generado
/**
* Class Personaje
*/
public class Personaje {

//
// Fields
//

private String nombre;

//
// Constructors
//
public Personaje () { };

//
// Methods
//


//
// Accessor methods
//

/**
* Set the value of nombre
* @param newVar the new value of nombre
*/
private void setNombre ( String newVar ) {
nombre = newVar;
}

/**
* Get the value of nombre
* @return the value of nombre
*/
private String getNombre ( ) {
return nombre;
}

//
// Other methods
//

}
/**
* Class Princesa
*/
public class Princesa extends Personaje implements Capturable {

//
// Fields
//

private String status = "libre";

//
// Constructors
//
public Princesa () { };

//
// Methods
//


//
// Accessor methods
//

/**
* Set the value of status
* @param newVar the new value of status
*/
private void setStatus ( String newVar ) {
status = newVar;
}

/**
* Get the value of status
* @return the value of status
*/
private String getStatus ( ) {
return status;
}

//
// Other methods
//

/**
*/
public void capturar( )
{
}


/**
*/
public void liberar( )
{
}


}
import java.util.*;


/**
* Class Principe
*/
public class Principe extends PersonajeAtacable implements Curable {

//
// Fields
//


//
// Constructors
//
public Principe () { };

//
// Methods
//


//
// Accessor methods
//

//
// Other methods
//

/**
* @return Mago
*/
public Mago invocarMago( )
{
}


/**
* @param o
*/
public void atacar( Ogro o )
{
}


/**
* @param c
*/
public void rescatar( Capturable c )
{
}


/**
* @return int
*/
public int curar( )
{
}


}
/**
* Class PersonajeAtacable
*/
public class PersonajeAtacable extends Personaje implements Atacable {

//
// Fields
//

static private int DEFAULT_VIDA = 100;
private int vida;

//
// Constructors
//
public PersonajeAtacable () { };

//
// Methods
//


//
// Accessor methods
//

/**
* Get the value of DEFAULT_VIDA
* @return the value of DEFAULT_VIDA
*/
private int getDEFAULT_VIDA ( ) {
return DEFAULT_VIDA;
}

/**
* Set the value of vida
* @param newVar the new value of vida
*/
private void setVida ( int newVar ) {
vida = newVar;
}

/**
* Get the value of vida
* @return the value of vida
*/
private int getVida ( ) {
return vida;
}

//
// Other methods
//

/**
* @param cuanta
*/
public void restarVida( int cuanta )
{
}


/**
* @param a
*/
public void atacar( Atacable a )
{
}


/**
* @param intensidad
*/
public void recibirAtaque( int intensidad )
{
}


}
import java.util.*;


/**
* Class Ogro
*/
public class Ogro extends PersonajeAtacable implements Capturable, Congelable {

//
// Fields
//

private boolean congelado = false;

//
// Constructors
//
public Ogro () { };

//
// Methods
//


//
// Accessor methods
//

/**
* Set the value of congelado
* @param newVar the new value of congelado
*/
private void setCongelado ( boolean newVar ) {
congelado = newVar;
}

/**
* Get the value of congelado
* @return the value of congelado
*/
private boolean getCongelado ( ) {
return congelado;
}

//
// Other methods
//

/**
* @param c
*/
public void capturar( Capturable c )
{
}


/**
*/
public void capturar( )
{
}


/**
*/
public void liberar( )
{
}


/**
*/
public void congelar( )
{
}


}
import java.util.*;


/**
* Class Mago
*/
public class Mago extends Personaje {

//
// Fields
//


//
// Constructors
//
public Mago () { };

//
// Methods
//


//
// Accessor methods
//

//
// Other methods
//

/**
* @param c
*/
public void lanzarHechizo( Congelable c )
{
}


/**
* @param c
*/
public void curar( Curable c )
{
}


}
/**
* Interface Curable
*/
public interface Curable {

//
// Fields
//


//
// Methods
//


//
// Accessor methods
//

//
// Other methods
//

/**
* @return int
*/
public int curar( );


}
/**
* Interface Congelable
*/
public interface Congelable {

//
// Fields
//


//
// Methods
//


//
// Accessor methods
//

//
// Other methods
//

/**
*/
public void congelar( );


}
/**
* Interface Capturable
*/
public interface Capturable {

//
// Fields
//


//
// Methods
//


//
// Accessor methods
//

//
// Other methods
//

/**
*/
public void capturar( );


/**
*/
public void liberar( );


}
/**
* Interface Atacable
*/
public interface Atacable {

//
// Fields
//


//
// Methods
//


//
// Accessor methods
//

//
// Other methods
//

/**
* @param a
*/
public void atacar( Atacable a );


/**
* @param intensidad
*/
public void recibirAtaque( int intensidad );


}
Como vimos en el código anterior se encuentran algunos comentarios inicializados con /** y terminados con */, esto es parte de la documentación técnica.
Dentro de la documentación en un proyecto podrán ir diferentes identificadores como:
@author - Autor del código fuente
@exception - Excpeciones del código
@param - Parámetros que se reciben en los métodos
@return - El valor que se regresa

Cualquier identificador comienza con /** y termina con */. Además cada línea escrita dentro de esos símboloes tendrán un * al comenzar.

Por ejemplo:
/**
*Esto es un ejemplo
*@return ejemplo
*/

Ahora para realizar la documentación técnica del juego el ogro y el príncipe, utilizare JavaDoc.
En la terminal, dentro de la carpeta del código fuente que se auto-generó, escribimos: javadoc *.java

Después de esto, la documentación del código fuente se generó. Se generaron varios archivos, entre ellos un archivo llamado index.html. Abrimos este archivo y se mostrará toda la documentación del juego del ogro y el príncipe.

Algunas imagenes de la documentación



En la documentación se muestran el constructor, los métodos, parámetros, atributos, etc del código fuente del ogro y el príncipe.

Referencias



Saludos.

martes, 22 de noviembre de 2011

Sistemas Distribuidos

El proyecto que yo realize es un sistema de un Videoclub que puede ser distribuido como un sistema cliente-servidor.

En cuanto a compatibilidad, el sistema esta creado en el lenguaje JAVA. Por la razón anterior el sistema, puede distribuirse en cualquier plataforma. Pero además, utiliza una base de datos, creada en MySQL, el cual tiene la ventaja de ser un software libre.

Puede ser utilizado por cualquier persona, lo cual es poco confiable, ya que no cuenta con contraseña de administrador, ni de usuarios.

En cuanto a tolerancia a fallos, el sistema puede producir fallos por diferentes razones, principalmente por la base de datos en MySQL, ya que podría haber concurrencia al acceder a la base de datos.

Referencias

viernes, 4 de noviembre de 2011

Eventos y excepciones

Algunos de los eventos y excpeciones en mi proyecto son los siguientes:

Clase Película y Cliente (conexión con la base de datos)
try{
Class.forName("com.mysql.jdbc.Driver");

conexion = DriverManager.getConnection("jdbc:mysql://localhost/videoclub", "root", "gjosue19");
System.out.println("Conexion realizada");
}
catch(ClassNotFoundException e){
System.out.println(e);
}
catch(SQLException e){
System.out.println(e);
}

Clase Cliente (método agregar)
 try{
st = conexion.createStatement();

st.executeUpdate("INSERT INTO cliente(nombre, telefono, colonia, calle, numero, cp) VALUES ('"+name+"', '"+tel+"', '"+col+"', '"+ca+"', '"+num+"', '"+codp+"')");

System.out.println("Se insertaron los datos");

JOptionPane.showMessageDialog(null, "Se han insertado los datos", "Cliente agregado", JOptionPane.WARNING_MESSAGE);

}catch(Exception e){
System.out.println("No se insertaron los datos");
JOptionPane.showMessageDialog(null, "No se han insertado los datos", "Cliente agregado", JOptionPane.WARNING_MESSAGE);
}

Clase Cliente (eventos de los botones)
public void actionPerformed(ActionEvent e){

if(bMenu == e.getSource()){
Videoclub vid = new Videoclub();
vid.crearVentanaV();
cliente.dispose();
}

if(bAgr == e.getSource()){
registrar();
}

if(bCan == e.getSource()){
System.exit(0);
}

if(limpiar == e.getSource()){
textNom.setText("");
textTel.setText("");
textCol.setText("");
textC.setText("");
textNum.setText("");
textCP.setText("");
}

}
Clase Película (eventos de los botones)
 public void actionPerformed(ActionEvent e){

if(botM == e.getSource()){
Videoclub vid = new Videoclub();
vid.crearVentanaV();
pelicula.dispose();
}

if(botAgP == e.getSource()){
agregar();
}

if(botCP == e.getSource()){
System.exit(0);
}
if(botLim == e.getSource()){
textTit.setText("");
textGen.setText("");
textCl.setText("");
textCV.setText("");
textCR.setText("");
textCantV.setText("");
textCantR.setText("");
}

if(botE == e.getSource()){
eliminar();
}

if(botC == e.getSource()){
System.exit(0);
}

if(botL == e.getSource()){
textNumPel.setText("");
}

if(botCPel == e.getSource()){
consultar();
}

}

Clase Película (método agregar)
  try{

st = conexion.createStatement();

st.executeUpdate("INSERT INTO pelicula(titulo, genero, clasif, costoVta, costoRta, cantVta, cantRta) VALUES ('"+tit+"', '"+gen+"', '"+cl+"', '"+CV+"', '"+CR+"', '"+cantV+"', '"+cantR+"')");

System.out.println("Se insertaron los datos");
JOptionPane.showMessageDialog(null, "Se han insertado los datos", "Pelicula agregada", JOptionPane.WARNING_MESSAGE);

}catch(Exception e){
System.out.println("Aun No se insertaron los datos");
JOptionPane.showMessageDialog(null, "No se han insertado los datos", "Pelicula agregada", JOptionPane.WARNING_MESSAGE);

}
Clase Película (método eliminar)
 try{

st = conexion.createStatement();

st.executeUpdate("DELETE FROM pelicula WHERE id = '"+numPel+"'");

System.out.println("Se borraron los datos");
JOptionPane.showMessageDialog(null, "Se han eliminado los datos", "Pelicula eliminada", JOptionPane.WARNING_MESSAGE);

}catch(Exception e){
System.out.println("Aun no se borraron los datos");
JOptionPane.showMessageDialog(null, "No se han eliminado los datos", "Pelicula agregada", JOptionPane.WARNING_MESSAGE);

}
Clase Película (método consultar)
 try{
st = conexion.createStatement();
rs = st.executeQuery("SELECT * FROM pelicula where id = '"+numPel+"'");

while(rs.next()){
labTitulo.setText(""+rs.getObject(2));
labGenero.setText(""+rs.getObject(3));
labClas.setText(""+rs.getObject(4));
labCVta.setText(""+rs.getObject(5));
labCRta.setText(""+rs.getObject(6));

System.out.println("Consultando datos");
}

}catch(Exception e){
System.out.println("Aun no se han podido consultar los datos");
}
Clase TicketVenta (eventos de botones)
    public void actionPerformed(ActionEvent e){
if(botM == e.getSource()){
Videoclub vid = new Videoclub();
vid.crearVentanaV();
venta.dispose();
}

if(botAgP == e.getSource()){
consultar();
}

if(botAc == e.getSource()){
agregar();
}

if(botC == e.getSource()){
System.exit(0);
}
}
Clase TicketVenta (método consultar)
 try{
st = conexion.createStatement();
rs = st.executeQuery("SELECT * FROM pelicula where id = '"+num_pel+"'");

while(rs.next()){
titulo.setText(""+rs.getObject(2));
genero.setText(""+rs.getObject(3));
clasificacion.setText(""+rs.getObject(4));
costoVta.setText(""+rs.getObject(5));

System.out.println("Consultando datos");
String dato = String.valueOf(rs.getObject(5));
int x = Integer.parseInt(dato);
tot = tot + x;
total.setText(""+tot);

}

}catch(Exception e){
System.out.println("Aun no se han podido consultar los datos");
}
Clase TicketVenta (método agregar)
try{
st = conexion.createStatement();

st.executeUpdate("INSERT INTO ventas(total) VALUES ('"+tot+"')");

System.out.println("Se insertaron los datos");

JOptionPane.showMessageDialog(null, "Venta generada", "Ventas", JOptionPane.WARNING_MESSAGE);
}catch(Exception e){
System.out.println("No se insertaron los datos");

}

Referencias

Saludos.

Interfaz gráfica

Interfaz gráfica de mi proyecto.

Para realizar la interfaz gráfica utilice los Layouts GridLayout y GridBagLayout, este último fue el que mas utilice para acomodar los componentes como los JTextField, JButton, JLabel en los diferentes paneles que coloque en las ventanas.

Ventana prinicipal de menú


Ventana de Clientes


Ventana de Películas


Ventana de Ventas


Ventana de Rentas


Referencias

Saludos.

lunes, 24 de octubre de 2011

Auto-generación de código

Para realizar la auto-generación de código de mi proyecto, hice el diagrama de clases utilizando la herramienta Umbrello.

El código auto-generado es el siguiente:

Clase Empleado
/**
* Class Empleado
*/
public class Empleado {

//
// Fields
//

private int no_empleado;
private String nom_empleado;
private int contraseña;

//
// Constructors
//
public Empleado () { };

//
// Methods
//


//
// Accessor methods
//

/**
* Set the value of no_empleado
* @param newVar the new value of no_empleado
*/
private void setNo_empleado ( int newVar ) {
no_empleado = newVar;
}

/**
* Get the value of no_empleado
* @return the value of no_empleado
*/
private int getNo_empleado ( ) {
return no_empleado;
}

/**
* Set the value of nom_empleado
* @param newVar the new value of nom_empleado
*/
private void setNom_empleado ( String newVar ) {
nom_empleado = newVar;
}

/**
* Get the value of nom_empleado
* @return the value of nom_empleado
*/
private String getNom_empleado ( ) {
return nom_empleado;
}

/**
* Set the value of contraseña
* @param newVar the new value of contraseña
*/
private void setContraseña ( int newVar ) {
contraseña = newVar;
}

/**
* Get the value of contraseña
* @return the value of contraseña
*/
private int getContraseña ( ) {
return contraseña;
}

//
// Other methods
//

/**
*/
public void entrar( )
{
}


/**
*/
public void consultar( )
{
}


}
Clase Cliente
/**
* Class Cliente
*/
public class Cliente {

//
// Fields
//

private int no_cliente;
private String nom_cliente;
private String colonia;
private String calle;
private int no_dir;
private int cp_dir;
private int tel_cliente;

//
// Constructors
//
public Cliente () { };

//
// Methods
//


//
// Accessor methods
//

/**
* Set the value of no_cliente
* @param newVar the new value of no_cliente
*/
private void setNo_cliente ( int newVar ) {
no_cliente = newVar;
}

/**
* Get the value of no_cliente
* @return the value of no_cliente
*/
private int getNo_cliente ( ) {
return no_cliente;
}

/**
* Set the value of nom_cliente
* @param newVar the new value of nom_cliente
*/
private void setNom_cliente ( String newVar ) {
nom_cliente = newVar;
}

/**
* Get the value of nom_cliente
* @return the value of nom_cliente
*/
private String getNom_cliente ( ) {
return nom_cliente;
}

/**
* Set the value of colonia
* @param newVar the new value of colonia
*/
private void setColonia ( String newVar ) {
colonia = newVar;
}

/**
* Get the value of colonia
* @return the value of colonia
*/
private String getColonia ( ) {
return colonia;
}

/**
* Set the value of calle
* @param newVar the new value of calle
*/
private void setCalle ( String newVar ) {
calle = newVar;
}

/**
* Get the value of calle
* @return the value of calle
*/
private String getCalle ( ) {
return calle;
}

/**
* Set the value of no_dir
* @param newVar the new value of no_dir
*/
private void setNo_dir ( int newVar ) {
no_dir = newVar;
}

/**
* Get the value of no_dir
* @return the value of no_dir
*/
private int getNo_dir ( ) {
return no_dir;
}

/**
* Set the value of cp_dir
* @param newVar the new value of cp_dir
*/
private void setCp_dir ( int newVar ) {
cp_dir = newVar;
}

/**
* Get the value of cp_dir
* @return the value of cp_dir
*/
private int getCp_dir ( ) {
return cp_dir;
}

/**
* Set the value of tel_cliente
* @param newVar the new value of tel_cliente
*/
private void setTel_cliente ( int newVar ) {
tel_cliente = newVar;
}

/**
* Get the value of tel_cliente
* @return the value of tel_cliente
*/
private int getTel_cliente ( ) {
return tel_cliente;
}

//
// Other methods
//

/**
*/
public void registrar( )
{
}


}
Clase Película
/**
* Class Pelicula
*/
public class Pelicula {

//
// Fields
//

private int no_pel;
private String titulo;
private String material;
private String situacion;
private String genero;
private String clasificacion;
private double costoVta;
private double costoRta;
private int cantpel_vta;
private int cantpel_rta;

//
// Constructors
//
public Pelicula () { };

//
// Methods
//


//
// Accessor methods
//

/**
* Set the value of no_pel
* @param newVar the new value of no_pel
*/
private void setNo_pel ( int newVar ) {
no_pel = newVar;
}

/**
* Get the value of no_pel
* @return the value of no_pel
*/
private int getNo_pel ( ) {
return no_pel;
}

/**
* Set the value of titulo
* @param newVar the new value of titulo
*/
private void setTitulo ( String newVar ) {
titulo = newVar;
}

/**
* Get the value of titulo
* @return the value of titulo
*/
private String getTitulo ( ) {
return titulo;
}

/**
* Set the value of material
* @param newVar the new value of material
*/
private void setMaterial ( String newVar ) {
material = newVar;
}

/**
* Get the value of material
* @return the value of material
*/
private String getMaterial ( ) {
return material;
}

/**
* Set the value of situacion
* @param newVar the new value of situacion
*/
private void setSituacion ( String newVar ) {
situacion = newVar;
}

/**
* Get the value of situacion
* @return the value of situacion
*/
private String getSituacion ( ) {
return situacion;
}

/**
* Set the value of genero
* @param newVar the new value of genero
*/
private void setGenero ( String newVar ) {
genero = newVar;
}

/**
* Get the value of genero
* @return the value of genero
*/
private String getGenero ( ) {
return genero;
}

/**
* Set the value of clasificacion
* @param newVar the new value of clasificacion
*/
private void setClasificacion ( String newVar ) {
clasificacion = newVar;
}

/**
* Get the value of clasificacion
* @return the value of clasificacion
*/
private String getClasificacion ( ) {
return clasificacion;
}

/**
* Set the value of costoVta
* @param newVar the new value of costoVta
*/
private void setCostoVta ( double newVar ) {
costoVta = newVar;
}

/**
* Get the value of costoVta
* @return the value of costoVta
*/
private double getCostoVta ( ) {
return costoVta;
}

/**
* Set the value of costoRta
* @param newVar the new value of costoRta
*/
private void setCostoRta ( double newVar ) {
costoRta = newVar;
}

/**
* Get the value of costoRta
* @return the value of costoRta
*/
private double getCostoRta ( ) {
return costoRta;
}

/**
* Set the value of cantpel_vta
* @param newVar the new value of cantpel_vta
*/
private void setCantpel_vta ( int newVar ) {
cantpel_vta = newVar;
}

/**
* Get the value of cantpel_vta
* @return the value of cantpel_vta
*/
private int getCantpel_vta ( ) {
return cantpel_vta;
}

/**
* Set the value of cantpel_rta
* @param newVar the new value of cantpel_rta
*/
private void setCantpel_rta ( int newVar ) {
cantpel_rta = newVar;
}

/**
* Get the value of cantpel_rta
* @return the value of cantpel_rta
*/
private int getCantpel_rta ( ) {
return cantpel_rta;
}

//
// Other methods
//

/**
*/
public void vender( )
{
}


/**
*/
public void rentar( )
{
}


/**
*/
public void agregar( )
{
}


/**
*/
public void eliminar( )
{
}


}
Clase Ticket
/**
* Class Ticket
*/
public class Ticket {

//
// Fields
//

protected int no_tick;
protected int cantPeliculas = 0;
protected String fecha;
protected double subtotal;
protected double total;

//
// Constructors
//
public Ticket () { };

//
// Methods
//


//
// Accessor methods
//

/**
* Set the value of no_tick
* @param newVar the new value of no_tick
*/
protected void setNo_tick ( int newVar ) {
no_tick = newVar;
}

/**
* Get the value of no_tick
* @return the value of no_tick
*/
protected int getNo_tick ( ) {
return no_tick;
}

/**
* Set the value of cantPeliculas
* @param newVar the new value of cantPeliculas
*/
protected void setCantPeliculas ( int newVar ) {
cantPeliculas = newVar;
}

/**
* Get the value of cantPeliculas
* @return the value of cantPeliculas
*/
protected int getCantPeliculas ( ) {
return cantPeliculas;
}

/**
* Set the value of fecha
* @param newVar the new value of fecha
*/
protected void setFecha ( String newVar ) {
fecha = newVar;
}

/**
* Get the value of fecha
* @return the value of fecha
*/
protected String getFecha ( ) {
return fecha;
}

/**
* Set the value of subtotal
* @param newVar the new value of subtotal
*/
protected void setSubtotal ( double newVar ) {
subtotal = newVar;
}

/**
* Get the value of subtotal
* @return the value of subtotal
*/
protected double getSubtotal ( ) {
return subtotal;
}

/**
* Set the value of total
* @param newVar the new value of total
*/
protected void setTotal ( double newVar ) {
total = newVar;
}

/**
* Get the value of total
* @return the value of total
*/
protected double getTotal ( ) {
return total;
}

//
// Other methods
//

/**
*/
protected void imprimir( )
{
}


}
Clase TicketVenta
/**
* Class TicketVenta
*/
public class TicketVenta extends Ticket {

//
// Fields
//


//
// Constructors
//
public TicketVenta () { };

//
// Methods
//


//
// Accessor methods
//

//
// Other methods
//

/**
*/
public void imprimir( )
{
}


}
Clase TicketRenta
/**
* Class TicketRenta
*/
public class TicketRenta extends Ticket {

//
// Fields
//

private String fechaLimRta;
private String fechaEntrega;
private double multa;

//
// Constructors
//
public TicketRenta () { };

//
// Methods
//


//
// Accessor methods
//

/**
* Set the value of fechaLimRta
* @param newVar the new value of fechaLimRta
*/
private void setFechaLimRta ( String newVar ) {
fechaLimRta = newVar;
}

/**
* Get the value of fechaLimRta
* @return the value of fechaLimRta
*/
private String getFechaLimRta ( ) {
return fechaLimRta;
}

/**
* Set the value of fechaEntrega
* @param newVar the new value of fechaEntrega
*/
private void setFechaEntrega ( String newVar ) {
fechaEntrega = newVar;
}

/**
* Get the value of fechaEntrega
* @return the value of fechaEntrega
*/
private String getFechaEntrega ( ) {
return fechaEntrega;
}

/**
* Set the value of multa
* @param newVar the new value of multa
*/
private void setMulta ( double newVar ) {
multa = newVar;
}

/**
* Get the value of multa
* @return the value of multa
*/
private double getMulta ( ) {
return multa;
}

//
// Other methods
//

/**
*/
public void imprimir( )
{
}


}
El código auto-generado del esqueleto del proyecto es casi el mismo que el código del esqueleto que yo realice, solamente que en el código auto-generado se utilizan los método get y set para modificar y leer los atributos de cada clase.

Referencias:

Saludos.

domingo, 9 de octubre de 2011

Documentación técnica

Código

/**
*@author Gemma Tovanche Martínez

*La clase Videoclub es la clase principal.
*/
public class Videoclub{
public Videoclub(){
}

/**
*La clase Empleado es usada para administrar el sistema.
*/
public class Empleado{
private int no_empleado;
private String nom_empleado;
private int contraseña;

/**
*Constructor
*@param nume indica el numero de empleado
*@param nome indica el nombre del empleado
*@param con indica la contraseña del empleado
*/
public Empleado(int nume, String nome, int con){
no_empleado = nume;
nom_empleado=nome;
contraseña = con;
}

/**
*Metodo entrar para que el empleado acceda al sistema.
*/
public void entrar(){
return;
}
/**
*Metodo consultar para que el empleado consulte la base de datos.
*/
public void consultar(){
return;
}
}

/**
*La clase Cliente es usada para registrar a los clientes del Videoclub.
*/
public class Cliente{
private int no_cliente;
private String nom_cliente;
private String colonia;
private String calle;
private int no_dir;
private int cp_dir;
private int tel_cliente;


/**
*Constructor
*@param nomc indica nombre del cliente
*@param col indica colonia de direccion del cliente
*@param calle indica calle de direccion del cliente
*@param no_dir indica numero de direccion del cliente
*@param cp indica codigo postal de direccion del cliente
*/
public Cliente(String nomc, String col, String calle, int no_dir, int cp, int tel){
nom_cliente = nomc;
colonia = col;
calle = calle;
no_dir = no_dir;
cp_dir = cp;
tel_cliente = tel;
}

/**
*El metodo registrar, registra a los clientes del Videoclub.
*/
public void registrar(){
return;
}
}

/**
*La clase Pelicula permite realizar instancias para agregar peliculas a la base de datos.
*/
public class Pelicula{
protected int no_pel;
protected String titulo;
private String material;
private String situacion;
private String genero;
private String clasificacion;
protected double costoVta;
protected double costoRta;
private int cantpel_vta;
private int cantpel_rta;

/**
*Constructor
*@param numpel indica el numero de pelicula que se le asigna a cada pelicula
*/
public Pelicula(int numpel){
no_pel = numpel;
}
/**
*El metodo vender realiza la venta de peliculas.
*/
protected void vender(){
return;
}
/**
*El metodo rentar realiza la renta de peliculas.
*/
protected void rentar(){
return;
}
/**
*El metodo agregar realiza el registro de cada pelicula que se da de alta.
*/
public void agregar(){
return;
}
/**
*El metodo eliminar da de baja a peliculas.
*/
public void eliminar(){
return;
}
}

/**
*La clase Ticket hereda de la superclase Pelicula.
*La clase Ticket realiza el ticket que se producira al realizar una venta y/o renta.
*/
public class Ticket extends Pelicula{
private int no_tick;
private int no_cliente;
private int no_empleado;
private String nom_empleado;
private int cantPeliculas;
private String fecha;
private double subtotal;
private double total;
private String fechaLimRta;
private String fechaEntrega;
private double multa;

/**
*Constructor
*@param no_tick indica el numero de ticket que se le asigna a cada ticket
*/
public Ticket(int no_tick){
no_tick = no_tick;
}
/**
*El metodo imprimir muestra el ticket que se genero al realizarse una venta y/o renta.
*/
public void imprimir(){
return;
}
/**
*El metodo vender realiza la venta de peliculas.
*/
public void vender(){
super.vender();
return;
}
/**
*El metodo rentar realiza la renta de peliculas.
*/
public void rentar(){
super.rentar();
return;
}
}

public static void main(String[] args){
}
}

Para realizar la documentación de mi proyecto utilice JavaDoc.
Al estar en la terminal en la carpeta donde se encuentra mi proyecto en Java, teclee lo siguiente para la generación de la documentación:
javadoc *.java
Después se generaron una serie de archivos HTML, entre los cuales hay uno llamado index.html, el cual contiene la clase principal Videoclub y las demás clases del proyecto.
La siguiente imagen es una captura del archivo index.html.


Las imagenes de las capturas de la documentación de las demás clases del proyecto son las siguientes:

Clase Cliente
Clase Empleado
Clase Película
Clase Ticket
Las imagenes anteriores de la documentación muestran una parte de la documentación.

La documentación completa se encuentra aquí: Documentación

Saludos.


martes, 27 de septiembre de 2011

Herencia

Herencia aplicada en mi proyecto

En mi proyecto la clase padre o super clase será Ticket y habrán dos subclases de esta super clase, las cuales son TicketVenta y TicketRenta.

Super Clase Ticket
public class Ticket{

protected int no_tick;
protected int cantPeliculas;
protected String fecha;
protected double subtotal;
protected double total;

public Ticket(int numTick, String fecha){
no_tick = numTick;
fecha = fecha;
}

protected void imprimir(){
return;
}
}
Subclase TicketVenta
public class TicketVenta extends Ticket{

public TicketVenta(int numTick, String fecha){
super(numTick, fecha);
}
public void imprimir(){
super.imprimir();
return;
}
}
Subclase TicketRenta
public class TicketRenta extends Ticket{

private String fechaLimRta;
private String fechaEntrega;
private double multa;

public TicketRenta(int numTick, String fecha){
super(numTick, fecha);
}
public void imprimir(){
super.imprimir();
return;
}
}

En el costructor de la subclase TicketVenta se mandan llamar los parametros numTick y fecha de la suoerclase Ticket con la instrucción super(numTick, fecha). En el método de esta subclase de igual manera se manda a llmar al método imprimir() de la superclase Ticket con la instrucción super.imprimir().

La clase TicketRenta además de heredar los atributos de la clase padre Ticket, cuenta con sus propios atributos como fechaLimRta, fechaEntrega y multa. La subclase TicketRenta manda a llamar a los parametros numTick y fecha y al método imprimir() de la clase padre Ticket de la misma manera que la subclase TicketVenta.

lunes, 29 de agosto de 2011

Esqueleto de clases

Taller de programación orientada a objetos

El proyecto que realizaré es de un videoclub, en donde se realicen rentas y ventas de películas. Para dicho proyecto necesito usar una base de datos en donde se almacenen los datos del videoclub, como los datos de los empleados, de los clientes y de las películas.

El lenguaje en donde realizaré este proyecto es Java, para la base de datos utilizaré MySQL.


Las clases, atributos y métodos de mi proyecto son:

Clase principal: Videoclub.
Visibilidad: pública.
Atributos: empleados (empleados), clientes (clientes), películas (películas), ventas (ventas) y rentas (rentas).
Visibilidad: privada.
Métodos: crear().
Visibilidad: pública.

Clase: Empleado.
Visibilidad: pública.
Atributos: número (no_empleado), nombre (nom_empleado) y contraseña (contraseña).
Visibilidad: privada.
Métodos: consultar().
Visibilidad: pública.

Clase: Cliente.
Visibilidad: pública.
Atributos: número (no_cliente), nombre (nom_cliente), colonia (colonia), calle (calle), número de calle (no_dir), código postal (cp_dir) y teléfono (tel_cliente).
Visibilidad: privada.
Métodos: registrar().
Visibilidad: pública.

Clase: Película.
Visibilidad: pública.
Atributos: número (no_pel), título (título), material (material), situación (situacion), género (genero), clasificación (clasificacion), costo de venta (costo_vta), costo de renta (costo_rta), cantidad de películas de venta (cantpel_vta) y cantidad de películas de renta (cantpel_rta).
Visibilidad: privada.
Métodos: vender(), rentar(), registrar() y eliminar().
Visibilidad: pública.

Clase: Ticket de venta.
Visibilidad: pública.
Atributos: número de ticket de venta (no_tvta), número de cliente (no_cliente), número de empleado (no_empleado), nombre de empleado (nom_empleado), número de película (no_pel), costo de venta (costo_vta), título de la película (título), cantidad de películas vendidas (cant_vta), fecha de venta (fecha), subtotal (subtotal) y total (total).
Visibilidad: privada.
Métodos: imprimir().
Visibilidad: pública.

Clase: Ticket de renta.
Visibilidad: pública.
Atributos: número de ticket de renta (no_trta), número de cliente (no_cliente), número de empleado (no_empleado), nombre de empleado (nom_empleado), número de película (no_pel), costo de renta (costo_rta), título de la película (título), cantidad de películas rentadas (cant_rta), fecha de renta (fecha), fecha límite de renta (fechaLimRta), fecha de entrega (fechaEntrega), multa (multa), subtotal (subtotal) y total (total).
Visibilidad: privada.
Métodos: imprimir ().
Visibilidad: pública.

En la clase Empleado, se requiere el número de empleado y su contraseña para que el empleado pueda acceder a la base de datos.
El método consultar(), es el método con el cual el Empleado podrá consultar la base de datos.

En la clase Cliente, se requieren los atributos ya mencionados para registrar al cliente en la base de datos.
El método registrar() es para registrar a los clientes en la base de datos.

En la clase Película, el número de la película es el número con el que se identificara cada película que haya en el videoclub. El material puede ser VHS, DVD o Blu-ray. La situación de la película significa si la película esta disponible, o si esta rentada.
Los métodos vender() y rentar() se utilizarán cuando se realicen ventas y rentas respectivamente de las películas.
Los métodos agregar() y eliminar() se utilizarán para dar de alta una película y para eliminar una película respectivamente.

La clase TicketVenta contiene los atributos que aparecerán en un Ticket de venta al realizarse una venta.
El método imprimir() hará que se muestre el Ticket de la venta.

La clase TicketRenta contiene los atributos que aparecerán en un Ticket de renta al realizaese una renta.
El método imprimir() hará que se muestre el Ticket de la renta.

Por el momento las clases anteriores, son las clases que he observado en mi proyecto. Si después observo mas clases, las añadiré a mi proyecto.

Código de esqueleto de clases en Java
public class Videoclub{   //clase principal Videoclub
private String empleados;
private String clientes; //atributos
private String peliculas;
private String ventas;
private String rentas;

public Videoclub(){
//constructor
}

public void crear(){ //metodo
}

public class Empleado{ //clase Empleado
private int no_empleado;
private String nom_empleado; //atributos
private int contraseña;

public Empleado(){
//constructor
}

public void consultar(){ //metodo
}
}

public class Cliente{ //clase Cliente
private int no_cliente;
private String nom_cliente; //atributos
private String colonia;
private String calle;
private int no_dir;
private int cp_dir;
private int tel_cliente;

public Cliente(){
//constructor
}

public void registrar(){ //metodo
}
}

public class Pelicula{ //clase Pelicula
private int no_pel;
private String titulo;
private String material;
private String situacion; //atributos
private String genero;
private String clasificacion;
private double costo_vta;
private double costo_rta;
private int cantpel_vta;
private int cantpel_rta;

public Pelicula(){
//constructor
}

public void vender(){ //metodo
}

public void rentar(){ //metodo
}

public void agregar(){ //metodo
}

public void eliminar(){ //metodo
}
}

public class TicketVenta{ //clase TicketVenta
private int no_tvta;
private int no_cliente;
private int no_empleado;
private String nom_empleado;
private int no_pel; //atributos
private double costo_vta;
private String titulo;
private int cant_vta;
private String fechaVta;
private double subtotal;
private double total;

public TicketVenta(){
//constructor
}

public void imprimir(){ //metodo
}
}

public class TicketRenta{ //clase TicketRenta
private int no_trta;
private int no_cliente;
private int no_empleado;
private String nom_empleado;
private int no_pel;
private double costo_rta;
private String titulo;
private int cant_rta; //atributos
private String fechaRta;
private String fechaLimRta;
private String fechaEntrega;
private double multa;
private double subtotal;
private double total;

public TicketRenta(){
//constructor
}

public void imprimir(){ //metodo
}
}
}
Referencia

Saludos.