Archive

Posts Tagged ‘Ayudantia’

Certamen 2 [PEF2501]

Aquí dejo el Certamen 2 de la seccion PEF2501 de Programacion Orientada A Objetos.

Enunciado:
El restaurant PINPON ha decidido ofertar almuerzos a todos los trabajadores
de la empresa que así lo soliciten, para esto ha encargado la confección de
un sistema que permita llevar esos pedidos.

DEFINICIÓN DE CLASES – 20 PUNTOS
· Clase MenuEjecutivo.java

ATRIBUTOS TIPO
Entrada String
conConsome boolean
platoFondo String
Postre String
Liquido String
conCafe boolean

MÉTODOS

  • Constructor con parámetros (que reciba todos los atributos)
  • Accesador para cada atributo
  • Mutador para cada atributo
  • toString

 

REQUERIMIENTOS DE INTERFAZ – 30 PUNTOS
Basado en el anterior modelo de clases crear una aplicación que despliegue la
siguiente ventana:

C2

 

Una vez escogidas las alternativas se debe calcular el precio del menú. Para
lo anterior considere las siguientes reglas:

ENTRADA  VALOR
Palta Reina  1.500
Tomate relleno  1.400
Vegetariano  800

PLATO FONFO  VALOR
Arroz con pollo  2.300
Bistec a lo pobre  2.800
Tortilla española  800

POSTRE  VALOR
Fruta  100
De la casa  250

 

Los valores de los líquidos son los que se indican a continuación:

LÍQUIDO  VALOR
Bebida  300
Cerveza  420

Si  escoge  consomé  y  café  se  debe  aplicar  un  recargo  de  100,  si  escoge  sólo
café o sólo consomé se debe aplicar un recargo de 80.

El precio del menú se calcula de la siguiente manera:

PRECIO_MENU  =  VALOR_ENTRADA  +  VALOR_PLATO_FONDO  +  VALOR_POSTRE  +
VALOR_LIQUIDO + RECARGO

Se pide:

Implementar  las  acciones  en  cada  botón  de  la  ventana  de  acuerdo  a  las
siguientes consideraciones:

·  Botón Ingresar debe desplegar el contenido del menú escogido junto con
el valor de este en el TextArea de la ventana, considerar instanciar un
objeto de la clase MenuEjecutivo.

·  Botón Limpiar debe dejar los componentes limpios o en su estado inicial.
·  Botón Salir debe terminar la ejecución de la aplicación.

(50 PUNTOS)

 

MenuEjecutivo.java


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


public class MenuEjecutivo {
	
	private String 	entrada;
	private String 	platoFondo;
	private String 	postre;
	private String 	liquido;
	
	private boolean conConsome;
	private boolean conCafe;
	
	public MenuEjecutivo() { }
    public MenuEjecutivo(String entrada, boolean conConsome, String platoFondo,String postre, String liquido, boolean conCafe) {
    	this.entrada 	= entrada;
    	this.conConsome = conConsome;
    	this.platoFondo = platoFondo;
    	this.postre 	= postre;
    	this.liquido 	= liquido;
    	this.conCafe 	= conCafe;
    }

    /* Accesador */
    
    public String getEntrada(){
    	return this.entrada;
    }
    
    public boolean getConConsome(){
    	return this.conConsome;
    }
    
    public String getPlatoFondo(){
    	return this.platoFondo;
    }
    
    public String getPostre(){
    	return this.postre;
    }
    
    public String getLiquido(){
    	return this.liquido;
    }
    
    public boolean getConCafe(){
    	return this.conCafe;
    }
    
  
    /* Mutadores */

    public void setEntrada(String valor){
    	this.entrada = valor;
    }
    
    public void setConConsome(boolean valor){
    	this.conConsome = valor;
    }
    
    public void setPlatoFondo(String valor){
    	this.platoFondo = valor;
    }
    
    public void setPostre(String valor){
    	this.postre = valor;
    }
    
    public void setLiquido(String valor){
    	this.liquido = valor;
    }
    
    public void setConCafe(boolean valor){
    	this.conCafe = valor;
    }
    public int getValorEntrada() {
    	int valorEntrada = 0;
    	if(this.getEntrada().equals("Palta Reina")) {
    		valorEntrada = 1500;
    	} 
    	else if(this.getEntrada().equals("Tomate Relleno")) {
    		valorEntrada = 1400;
    	}
    	else if(this.getEntrada().equals("Vegetariano")) {
    		valorEntrada = 800;
    	}
    	return valorEntrada;
    }
    public int getValorPlatoFondo() {
    	int valorPlatoFondo = 0;
    	if(this.getPlatoFondo().equals("Arroz con Pollo")) {
    		valorPlatoFondo = 2300;
    	}
    	else if(this.getPlatoFondo().equals("Bistec a lo Pobre")) {
    		valorPlatoFondo = 2800;
    	}
    	else if(this.getPlatoFondo().equals("Tortilla Española")) {
    		valorPlatoFondo = 800;
    	}
    	return valorPlatoFondo;
    }
    public int getValorPostre() {
    	int valorPostre = 0;
    	if(this.getPostre().toLowerCase().equals("fruta")) {
    		valorPostre = 100;
    	}
    	else if(this.getPostre().toLowerCase().equals("de la casa")) {
    		valorPostre = 250;
    	} else {
    		valorPostre = 0;
    	}
    	return valorPostre;
    }
    public int getValorLiquido() {
    	int valorLiquido = 0;
    	if(this.getLiquido().equals("Bebida")) {
    		valorLiquido = 300;
    	}
    	else if(this.getLiquido().equals("Cerveza")) {
    		valorLiquido = 420;
    	}
    	return valorLiquido;
    }
    public int getValorRecargo() {
    	int recargo = 0;
    	if(conCafe && conConsome) {
    		recargo = 100;
    	} else if(conCafe || conConsome) {
    		recargo = 80;
    	}
    	return recargo;
    }
    public int getValorTotal() {
    	return this.getValorEntrada() + this.getValorPlatoFondo() + this.getValorPostre() + this.getValorLiquido() + this.getValorRecargo();
    }
    /* Sobrescritura del toString() */
    public String toString() {
    	return "Entrada: "+this.getEntrada()+"\t$"+String.valueOf(this.getValorEntrada())+"\nPlato de Fondo: "+this.getPlatoFondo()+"\t$"+String.valueOf(this.getValorPlatoFondo())+"\nPostre: "+this.getPostre()+"\t$"+String.valueOf(this.getValorPostre())+"\nLiquido: "+this.getLiquido()+"\t$"+String.valueOf(this.getValorLiquido())+"\nCon Consome: "+((this.getConConsome()) ? "Si" : "No")+"\nCon Café: "+((this.getConCafe()) ? "Si" : "No")+"\nRecargo: $"+String.valueOf(this.getValorRecargo())+"\nTotal: "+this.getValorTotal();
    }
}

WCertamen2.java

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

public class WCertamen2 extends JFrame {
	
	private JComboBox 		cmbEntrada,cmbFondo;
	private JTextField 		txtPostre;
	private JRadioButton 	rbCafe,rbConsome,rbAmbos,rbBebida,rbCerveza;
	private JButton			btnIngresar,btnLimpiar,btnCerrar;
	private JTextArea		areaDetalle;
	private ButtonGroup 	grupoA,grupoB;
	
	private MenuEjecutivo	menu;
	
	public WCertamen2() {
		super("Registro de Pedido");
		this.cmbEntrada		= new JComboBox();
			this.cmbEntrada.addItem("Palta Reina");
			this.cmbEntrada.addItem("Tomate Relleno");
			this.cmbEntrada.addItem("Vegetariano");
		this.cmbFondo 		= new JComboBox();
			this.cmbFondo.addItem("Arroz con Pollo");
			this.cmbFondo.addItem("Bistec a lo Pobre");
			this.cmbFondo.addItem("Tortilla Española");
		
		this.txtPostre 		= new JTextField();
		
		this.rbCafe			= new JRadioButton("Café");
		this.rbConsome		= new JRadioButton("Consome");
		this.rbAmbos		= new JRadioButton("Ambos");
		
		this.rbBebida		= new JRadioButton("Bebida");
		this.rbCerveza		= new JRadioButton("Cerveza");
		
		this.btnIngresar	= new JButton("Ingresar");
		this.btnLimpiar		= new JButton("Limpiar");
		this.btnCerrar		= new JButton("Cerrar");
		
		this.areaDetalle	= new JTextArea();
		this.init();
	}
	public void init() {
		this.setSize(300,450);
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
	
		grupoA = new ButtonGroup();
		grupoA.add(rbCafe);
		grupoA.add(rbConsome);
		grupoA.add(rbAmbos);
		
		grupoB = new ButtonGroup();
		grupoB.add(rbBebida);
		grupoB.add(rbCerveza);
		
		
		JPanel panelComida	= new JPanel();
		panelComida.setBorder(new TitledBorder(new EtchedBorder(),"Comida"));
		panelComida.setLayout(new GridLayout(2,2));
			panelComida.add(new JLabel("Entrada"));
			panelComida.add(cmbEntrada);
			panelComida.add(new JLabel("Plato Fondo"));
			panelComida.add(cmbFondo);
		
		Box horizontal = Box.createHorizontalBox();
		horizontal.setBorder(new TitledBorder(new EtchedBorder(),"Postre"));
			horizontal.add(new JLabel("Postre "));
			horizontal.add(txtPostre);
			horizontal.add(new JLabel(" Fruta,de la casa, sin postre"));
		
		
		JPanel panelAbajo = new JPanel();
		panelAbajo.setLayout(new GridLayout(2,2));
		
			JPanel panelCafeConsome = new JPanel();
			panelCafeConsome.setBorder(new TitledBorder(new EtchedBorder(),"Café/Consomé"));
			panelCafeConsome.setLayout(new GridLayout(3,1));
				panelCafeConsome.add(rbCafe);
				panelCafeConsome.add(rbConsome);
				panelCafeConsome.add(rbAmbos);
		panelAbajo.add(panelCafeConsome);
		
			JPanel panelLiquido = new JPanel();
			panelLiquido.setBorder(new TitledBorder(new EtchedBorder(),"Líquido"));
			panelLiquido.setLayout(new GridLayout(2,1));
				panelLiquido.add(rbBebida);
				panelLiquido.add(rbCerveza);
		panelAbajo.add(panelLiquido);
		
			JPanel panelDetalle = new JPanel();
			panelDetalle.setBorder(new TitledBorder(new EtchedBorder(),"Detalle Menú"));
			panelDetalle.setLayout(new GridLayout());
				panelDetalle.add(areaDetalle);
		panelAbajo.add(panelDetalle);
		
			JPanel panelBotones = new JPanel();
			panelBotones.setLayout(new GridBagLayout());
				panelBotones.add(btnIngresar);
				panelBotones.add(btnLimpiar);
				panelBotones.add(btnCerrar);
		panelAbajo.add(panelBotones);
		
		
		this.getContentPane().add(panelComida,BorderLayout.NORTH);
		this.getContentPane().add(horizontal,BorderLayout.CENTER);
		this.getContentPane().add(panelAbajo,BorderLayout.SOUTH);
		
		this.programarEventos();
		this.pack();
		this.setLocationRelativeTo(null);
		this.setResizable(false);
		this.setVisible(true);
	}
	public void programarEventos() {
		
		ActionListener agregar = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String entrada 		= cmbEntrada.getSelectedItem().toString();
				String platoFondo 	= cmbFondo.getSelectedItem().toString();
				String postre 		= txtPostre.getText();
				
				boolean conCafe 	= false;
				boolean conConsome 	= false;
				if(rbCafe.isSelected()) {
					conCafe 	= true;
				}
				if(rbConsome.isSelected()) {
					conConsome 	= true;
				}
				if(rbAmbos.isSelected()) {
					conCafe 	= true;
					conConsome 	= true;
				}
				
				String liquido		= "";

				if(rbBebida.isSelected()) {
					liquido = "Bebida";
				}
				if(rbCerveza.isSelected()) {
					liquido = "Cerveza";
				}
				//MenuEjecutivo(String entrada, boolean conConsome, String platoFondo,String postre, String liquido, boolean conCafe)
				menu = new MenuEjecutivo(entrada,conConsome,platoFondo,postre,liquido,conCafe);
				areaDetalle.setText(menu.toString());
				pack();
			}	
		};
		this.btnIngresar.addActionListener(agregar);
		
		ActionListener limpiar = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				txtPostre.setText("");
				grupoA.clearSelection();
				grupoB.clearSelection();
				areaDetalle.setText("");
				pack();
			}	
		};
		this.btnLimpiar.addActionListener(limpiar);
		
		ActionListener cerrar = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}	
		};
		this.btnCerrar.addActionListener(cerrar);
		
	}
}
public class CertamenDos {
    public static void main(String[] args) {
    	new WCertamen2();
    }
}

Descargar Codigo de Fuente:
http://estebanfuentealba.net/ayudantia/Certamen2-PEF2501.rar

Preparando Certamen Ejercicio 2 (Venta de Pizza) PEF2501

octubre 31, 2009 3 comentarios

Este es un ejercicio que les envió la profesora tipo certamen

Enunciado:
Una empresa de venta de pizzas desea agilizar su servicio.

Se necesita una aplicación Java que permita al usuario ingresar
los datos de la venta y ver el costo asociado en pantalla.

Se ha diseñado la siguiente Interfaz de Usuario para esta
aplicación:
Preparando2

Se deben respetar las siguientes reglas:

La masa tiene un costo de:

MASA COSTO
Normal 1.500
Integral 2.500

· El ingrediente básico tiene un costo de:

INGREDIENTE COSTO
Jamón 450
Extra queso 650
Tomate 500

· El ingrediente extra tiene un costo de:

INGREDIENTE COSTO
SIN INGREDIENTE EXTRA 0
Champiñones 700
Aceitunas 500
Espárragos 600
Tocino 650

El costo total, considerando el DESCUENTO se calcula con la
siguiente fórmula:

Total CON DESCUENTO = (Costo masa +
Costo Ingrediente básico +
Costo Ingrediente Extra) * 0.93

El costo total, SIN DESCUENTO se calcula con la siguiente fórmula:

Total SIN DESCUENTO = (Costo masa +
Costo Ingrediente básico +
Costo Ingrediente Extra)

Además:

1. Se debe validar que el usuario escoja todos los datos antes
de realizar el cálculo, el cual se ejecuta al presionar el
botón Calcular. En ese momento se deben actualizar los datos
de la boleta (TOTAL SIN DESCUENTO)
2. No se debe permitir modificar el cuadro donde se despliega el
Total.
3. El botón Imprimir debe habilitar un Dialog, donde se indique
el total SIN DESCUENTO y el total CON DESCUENTO.
4. El botón Salir debe cerrar la aplicación
5. Crear una aplicación que levante la ventana y permite
interactuar con ella.

Descargar Código de Fuente:
http://estebanfuentealba.net/ayudantia/PreparandoCertamen2.rar

Java Clases Internas Anónimas

octubre 31, 2009 7 comentarios

Muchas veces mas de alguna vez se preguntaron al agregarle un evento a un boton lo siguiente:
Por que al instanciar un ActionListener hay que poner unas llaves

ActionListener action = new ActionListener() {
	//...
};

La respuesta a esa interrogante es la siguiente:
ActionListener no es una class, sino que es una interface , eso quiere decir que no esta completa y alguna clase tiene que implementarla.
La forma común que conocemos de implementar es la siguiente:

interface IOrden {
	Object mayor(Object o);
}
/* Con la palabra reservada 'implements' tomo un acuerdo de implementar la interface */
public class Persona implements IOrden {
	//...
	/* Aqui implemento la interface */
	public Object mayor(Object o) {
		//...
	}
}

El codigo anterior muestra como la clase Persona implementó IOrden .

Otra forma de implementar interface es creando clases anónimas…
¿ que quiere decir esto ?
una clase sin nombre y sin una visibilidad definida.
Un ejemplo de clase anónima es la que ocupamos cuando agregamos ActionListener, al ser una interface debe ser implementada por alguna clase, nosotros a menudo la implementamos con una clase anónima
Ej:

ActionListener action = new ActionListener() {
	//...
};

Lo que esta entre llaves es la clase anónima que esta dentro de otra clase.

Ej:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
 
public class Tips {
    public int numero = 1;
    public Tips() {
    	/* Creo un Objeto de la Clase JFrame */
		JFrame win = new JFrame();
		/* A esa ventana le doy un ancho y alto */
		win.setSize(300,200);
		
		/* Creo un Objeto de la clase JButton */
		JButton b = new JButton("Clickear");
		/* A ese boton le agrego un evento */
		ActionListener click = new ActionListener() {
			public int numero=2;
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null,"Hola "+this.numero);
			}
		};
		b.addActionListener(click);
		
		/* Agrego el Boton al contenedor de la ventana */
		win.getContentPane().add(b);
		/* Muestro la ventana */
		win.setVisible(true);
    }
    
    public static void main(String[] args) {
    	new Tips();
    }
}

Para explicar lo anterior fijemonos en la siguientes lineas:

ActionListener click = new ActionListener() {
			public int numero=2;
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null,"Hola "+this.numero);
			}
		};

El objeto click es de una instancia de ActionListener , esta a su vez implementa la interface con una clase anónima, pero a su vez esa clase anónima esta dentro de la clase Tips.

Algo interesante es lo que pasa cuando ejecuto la siguiente linea:

JOptionPane.showMessageDialog(null,"Hola "+this.numero);

Esa linea debería mostrarnos una alerta por pantalla… Pero fijense:
La clase Tips tiene un atributo llamado:

public int numero = 1;

y la clase anónima tambien tiene un atributo:

public int numero=2;

Entonces ¿ A que atributo debía llamar la alerta ?

la palabra reservada this es para referenciar a elementos (atributos o metodos) de esta clase

JOptionPane.showMessageDialog(null,"Hola "+this.numero);

Como esa linea esta dentro del método actionPerformed y ese metodo está dentro de la clase anónima. El this ,en éste caso, va a hacer referencia al atributo dentro de dicha clase anonima, por lo que debería mostrar

Hola 2

Por eso nunca dentro del

public void actionPerformed(ActionEvent e) {
//...
}

Nunca deben llamar a elementos (métodos o atributos) con this, osino tendrán un error que el metodo o atributo no fue encontrado porque buscara el atributo en la clase anónima y no en la que anida dicha clase anónima.

Espero que les quede un poco mas claro,

Saludos!

Categorías:Java Etiquetas: , , , ,

Certamen 2 Programacion Orientada a Objetos [2008]

Bueno aqui les dejo el Certamen 2 que se hizo el año pasado la profesora Yasna Meza , espero que les sirva.

Enunciado:
Una empresa de venta de computadores desea agilizar su servicio. Se ha
detectado que muchos consumidores asisten a este local para consultar la
venta de un computador.

Se necesita una aplicación Java que permita al usuario ingresar los datos de
la venta y ver el costo asociado en pantalla.

Se ha diseñado la siguiente Interfaz de Usuario para esta aplicación:

WCertamen2

Se deben respetar las siguientes reglas:

· El modelo tiene un costo de:

Modelo Costo
Pentium V 300.000
AMD Duron 270.000
Athlon 250.000

· La pantalla tiene un costo de:

Pantalla Costo
Sin Pantalla 0
Pantalla 14” 50.000
Pantalla 15” 66.000
Pantalla 17” 85.000
Pantalla 19” 125.000
Sobre 19” 140.000

· El disco duro tiene un costo de:

Disco Duro Costo
80 GB 44.000
120 GB 60.000
160 GB 89.000
200 GB 122.000

El costo de venta total, considerando el IVA se calcula con la siguiente
fórmula:

Total IVA = (Costo modelo + Costo Pantalla + Costo Disco Duro) * 1.19

El costo de venta total, sin IVA se calcula con la siguiente fórmula:

Total SIN IVA = (Costo modelo + Costo Pantalla + Costo Disco Duro)

Además:

1. Se debe validar que el usuario escoja todos los datos antes de realizar
el cálculo, el cual se ejecuta al presionar el botón Calcular.
2. No se debe permitir modificar el cuadro donde se despliega el Total.
3. El botón Imprimir debe habilitar un Dialog, donde se indique el total
sin IVA y el total con IVA.
4. Crear una aplicación que levante la ventana y permite interactuar con
ella.

Clase Certamen2.java

/**
 * @(#)Certamen2.java
 *
 * Certamen2 application
 *
 * @author 
 * @version 1.00 2009/10/28
 */
 
public class Certamen2 {
    
    public static void main(String[] args) {
    	new WCertamen();
    }
}

Clase WCertamen.java

/*
 *	Importo todos los packages necesario para poder crear ventanas
 *	
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

/*
 *	Extiendo la clase WCertamen de JFrame, esto me permitirá heredar los metodos y atributos de la clase JFrame
 */
public class WCertamen extends JFrame {
	
	/* Atributos */
	
	/*
	 *	Aqui pondré todos los componentes que necesitaré usar a lo largo de la vida del programa,
	 *	Ej: Para despues asignarle un evento a los botones, sacar los datos de los combobox, etc
	 *	
	 */
	private JPanel panelArribaIzquierdo,panelArribaDerecho,panelAbajoIzquierdo,panelAbajoDerecho;
	private JTextField campoDeTexto;
	private JButton btnCalcular,btnSalir,btnImprimir;
	private JComboBox comboA,comboB;
	private ButtonGroup grupo;
	private JRadioButton radioA,radioB,radioC;
	/* Constructor por Defecto  */
	public WCertamen() {
		
		/* Con la palabra reservada "super" llamo al constructor por
		 * defecto de una entidad mas arriba en la jerarquia de clases
		 *
		 *	JFrame
		 *	|_______ WCertamen
		 *
		 *	En  este caso llamo a uno de los constructores de la Clase JFrame 
		 *	para setear el titulo de la ventana
		 *
		 */
		super("Certamen Dos");
		/* 
		 *	implemento el evento para que cuando al presionar el boton cerrar "X"
		 *	mi aplicacion se detenga.
		 **/
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		/*
		 *	A la ventana le asigno un Ancho y un Alto, el primer parametro.
		 *		Forma de uso:	setSize( ANCHO , ALTO )
		 */
		this.setSize(500,300);
		this.setLocationRelativeTo(null);
		
		/*
		 *	Al contenedor de la ventana (Contendrá todos los componentes) le asigno una
		 *	grilla, en palabras simples creo una grilla de 2 Filas y 2 Columnas
		 *		Forma de uso: 	GridLayout( FILAS , COLUMNAS )
		 *	La ventana Quedarà dividida Algo mas o menos asi :
		 *				Columnas
		 *			_________________
		 *			|		|		|
		 *			|_______|_______|
		 *  Filas	|		|		|
		 *			|_______|_______|
		 */
		this.getContentPane().setLayout(new GridLayout(2,2));
		
		
		/*
		 *	Creo 4 Paneles para cada espacio de la grilla
		 */
		
		this.panelArribaIzquierdo = new JPanel();
		this.panelArribaDerecho = new JPanel();
		this.panelAbajoIzquierdo = new JPanel();
		this.panelAbajoDerecho = new JPanel();
		
		
		/* Le seteo una grilla al panel izquierdo de arriba de 3,2 */
		this.panelArribaIzquierdo.setLayout(new GridLayout(3,2));
		JLabel lblModelo = new JLabel("Modelo: ");
		
		/* Creo tres Radio Buttons y los agrupo en el atributo "grupo" */
		radioA = new JRadioButton("Pentium v");
		radioB = new JRadioButton("AMD");
		radioC = new JRadioButton("Athlon");
		grupo = new ButtonGroup();
		grupo.add(radioA);
		grupo.add(radioB);
		grupo.add(radioC);
		
		/* Agrego al panel panelArribaIzquierdo todos los componentes */
		this.panelArribaIzquierdo.add(lblModelo);
		this.panelArribaIzquierdo.add(radioA);
		this.panelArribaIzquierdo.add(new JLabel());
		this.panelArribaIzquierdo.add(radioB);
		this.panelArribaIzquierdo.add(new JLabel());
		this.panelArribaIzquierdo.add(radioC);
		
		
		
		/* Vamos a Crear el segundo panel de arriba */
		this.panelArribaDerecho.setBorder(new EmptyBorder(30,0,30,0));
		this.panelArribaDerecho.setLayout(new GridLayout(2,3));
		
		/* Instancio la clase JComboBox y se lo asigno al tributo "comboA" */
		this.comboA = new JComboBox();
		comboA.addItem("80");
		comboA.addItem("120");
		comboA.addItem("180");
		comboA.addItem("200");
		/* Agrego los Componentes al JPanel "panelArribaDerecho" */
		this.panelArribaDerecho.add(new JLabel("Disco Duro"));
		this.panelArribaDerecho.add(comboA);
		this.panelArribaDerecho.add(new JLabel("GB"));
		
		
		this.comboB = new JComboBox();
		comboB.addItem("Sin");
		comboB.addItem("14");
		comboB.addItem("15");
		comboB.addItem("17");
		comboB.addItem("19");
		comboB.addItem("Mayor a 19");
		this.panelArribaDerecho.add(new JLabel("Pantalla"));
		this.panelArribaDerecho.add(comboB);
		this.panelArribaDerecho.add(new JLabel("Pulg."));
		
		
		this.panelAbajoIzquierdo.setLayout(new GridBagLayout());
		
		this.btnImprimir = new JButton("Imprimir");
		this.btnSalir = new JButton("Salir");
	
		this.panelAbajoIzquierdo.add(btnImprimir);
		this.panelAbajoIzquierdo.add(btnSalir);
			
		this.panelAbajoDerecho.setBorder(new EmptyBorder(50,0,50,0));
		this.panelAbajoDerecho.setLayout(new GridLayout(1,3));
			
		this.btnCalcular = new JButton("Calcular");
		this.panelAbajoDerecho.add(btnCalcular);
		this.panelAbajoDerecho.add(new JLabel("Total"));
		
		
		this.campoDeTexto = new JTextField();
this.campoDeTexto.setEnabled(false);
		this.panelAbajoDerecho.add(campoDeTexto);
			
		/*
		 *	Agrego todos los Paneles al Contenedor de la ventana
		 */
		this.getContentPane().add(panelArribaIzquierdo);
		this.getContentPane().add(panelArribaDerecho);
		this.getContentPane().add(panelAbajoIzquierdo);
		this.getContentPane().add(panelAbajoDerecho);
		
		this.pack();
		/* Llamo a el metodo 'agregarEventos()' para asignar todos los eventos */
		agregarEventos();
		/* Muestro la Ventana */
		this.setVisible(true);
	}
	/*
	 *	Metodo que calcula el total de la suma entre:
	 *	 Modelo + Disco Duro + Pantalla
	 *	Devuelve un int con la suma sin IVA.
	 */
	public int calcularSinIva() {
		/* 
		 *	declaro una variable llamada 'total' y la inicializo en 0 ,
		 *	ésta variable me llevara la cuenta de la sumna de:
		 *	 Modelo + Disco Duro + Pantalla
		 */
		int total=0;
		
		/*	#########
		 *	## MODELO
		 *	#########
		 *
		 *	Pregunto si el JRadioButton 'radioA' está seleccionado,
		 *	de ser asi debo sumarle al total el valor de un Pentium V
		 */
		 if(radioA.isSelected()) {
		 	/* Le sumo al total $300.000*/
		 	total += 300000;
		 } 
		 /* Osino, si el 'radioB' esta seleccionado,
		  *	debo sumar al total $270.000
		  */
		 else if(radioB.isSelected()) {
		 	/* Le sumo al total $270.000*/
		 	total += 270000;
		 }
		 /* Osino, si el 'radioC' esta seleccionado,
		  *	debo sumar al total $270.000
		  */
		 else if(radioC.isSelected()) {
		 	/* Le sumo al total $250.000*/
		 	total += 250000;
		 }
		 /*
		  *	Osino quiere decir que no seleccione ningun radioButton, 
		  *	entonces deberia lanzar una alerta con un error y no sumar nada al total
		  */
		 else {
		 	JOptionPane.showMessageDialog(null,"ERROR: Debes seleccionar un Modelo");
		 }
		 
		 /*
		  *	Si arriba hay un error quiere decir que no sume nada al total, en ese caso, 'total' aun estará en 0
		  *	Entonces si el valor es mayor a 0 quiere decir que debo continuar con la 
		  *	suma de los valores de disco duro y pantalla.
		  */
		  if(total > 0) {
		  	
			/*	#########
			 *	## Disco Duro
			 *	#########
			 *
		  	 *	Ahora seguire sumando el valor de los discos duros,
		  	 *	Para eso iré preguntando cual es el 
		  	 *	valor (texto)  de la opcion del JComboBox seleccionada
		  	 */
		  	if(comboA.getSelectedItem().toString()=="80") {
		  		/* Si la opcion seleccionada en el combobox es 80 debo sumar al total $44000 */
		  		total += 44000;
		  	} else if(comboA.getSelectedItem().toString()=="120") {
		  		/* Osino, Si la opcion seleccionada en el combobox es 120 debo sumar al total $60000 */
		  		total += 60000;
		  	} else if(comboA.getSelectedItem().toString()=="160") {
		  		/* Osino, Si la opcion seleccionada en el combobox es 160 debo sumar al total $89000 */
		  		total += 89000;
		  	} else if(comboA.getSelectedItem().toString()=="200") {
		  		/* Osino, Si la opcion seleccionada en el combobox es 200 debo sumar al total $122000 */
		  		total += 122000;
		  	} 
		  	
		  	/*	#########
			 *	## Pantalla
			 *	#########
			 *	Ahora seguire sumando el valor de las Pantallas ,
		  	 *	Para eso iré preguntando cual es el 
		  	 *	valor (texto)  de la opcion del JComboBox seleccionada
		  	 */
			 if(comboB.getSelectedItem() == "14") {
			 	/* Si la opcion seleccionada en el combobox es 14 debo sumar al total $50000 */
			 	total += 50000;
			 }
			 else if(comboB.getSelectedItem() == "15") {
			 	/* Si la opcion seleccionada en el combobox es 15 debo sumar al total $66000 */
			 	total += 66000;
			 }
			 else if(comboB.getSelectedItem() == "17") {
			 	/* Si la opcion seleccionada en el combobox es 17 debo sumar al total $85000 */
			 	total += 85000;
			 }
			 else if(comboB.getSelectedItem() == "19") {
			 	/* Si la opcion seleccionada en el combobox es 19 debo sumar al total $125000 */
			 	total += 125000;
			 } else if(comboB.getSelectedItem() == "Mayor a 19") {
			 	/* Si la opcion seleccionada en el combobox es 'Mayor a 19' debo sumar al total $140000 */
			 	total += 140000;
			 } else {
			 	/* 
			 	 *	Si la opcion no es ninguna de las anteriores 
			 	 *	quiere decir que seleccione la opcion 'Sin' donde debo sumar $0 
			 	 */
			 }
		  } 
		  /* 
		   *	Con el calculo hecho retorno el valor de la Variable 'total'
		   */
		   return total;
		  
	}
	public void agregarEventos() {
		ActionListener calcular = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/* Llamo al metodo 'calcularSinIva()' para traer el valor de la suma total */
				int sumaSinIva = calcularSinIva();
				/* 
				 *	Le asigno al campo de texto el total de la compra 
				 */
				campoDeTexto.setText(String.valueOf(sumaSinIva));
			}
		};
		btnCalcular.addActionListener(calcular);
		
		ActionListener imprimir = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/* Llamo al metodo 'calcularSinIva()' para traer el valor de la suma total */
				int sumaSinIva = calcularSinIva();
				/* 
				 *	Le agrego el iva a la 'sumaSinIva' y lo guardo en la variable 'sumaConIva'
				 */
				double sumaConIva = sumaSinIva * 1.19;
				/* 
				 *	Desplego una alerta mostrando los datos
				 */
				JOptionPane.showMessageDialog(null,"Valor Sin Iva: "+sumaSinIva+"\nValor Con Iva: "+sumaConIva);
			}
		};
		btnImprimir.addActionListener(imprimir);
		
		ActionListener salir = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/* Detengo la Ejecucion del programa */
				System.exit(0);
			}
		};
		btnSalir.addActionListener(salir);
	}

}

Descargar Código de Fuente:
http://estebanfuentealba.net/ayudantia/Certamen2.rar

Categorías:Java Etiquetas: , , , ,

Preparando Certamen 2 GUI PEF2501

octubre 30, 2009 3 comentarios

A partir del diagrama de clases del Certamen 1 de PEF2501
Se pide:

– Construir la siguiente Aplicación

preparando

NOTA: Se valora el hecho de validaciones y ventanas de alerta si los textfield se envian sin datos.

– Al presionar Activar se deben habilitar los textfields y buttons del producto seleccionado.
– En el combobox se deben mostrar los nombres de libros y dvds agregados.
– El total se debe ir actualizando a medida de ir aumentando la lista.
– El boton Mostrar debera mostrar todos los datos del Producto seleccionado por medio de una alerta
Nombre – TIPO – Duracion/Paginas

Descargar Código de Fuente:
http://estebanfuentealba.net/ayudantia/PracticaCertamen.rar

Certamen 1 Parte Practica [PEF2501]

octubre 29, 2009 2 comentarios

Aquí dejo el Certamen de la seccion PEF2501 de Programacion Orientada A Objetos

Enunciado:

Considerando el siguiente diagrama de clases:
ModeloClasesCertamen

El método masBreve DEBERÁ DEVOLVER, entre dos productos, aquella que sea
menor. El criterio para escoger el menor DEPENDE del tipo de producto. Cuando
se trata de DVDs, se deberá comparar a través de la duración y cuando se
trata de libros se deberá comparar a través del número de páginas. El método
esMasBreve DEBERÁ devolver un valor lógico que indique si un producto es más
que otro.

Se pide que usted:

· Implemente el diagrama de clases anterior
(15 PUNTOS)

NOTA. Se valora el hecho de que aplique la mayor cantidad de conceptos
de OO que se han revisado en clases.

· Construya una aplicación en Java que permita cumplir con la siguiente
funcionalidad:

· R01 – Crear una lista de productos (DVDs y libros). El usuario debe
ingresar el total de productos que desea ingresar.
(5 PUNTOS)

· R02 – Imprimir un informe que responda a la siguiente estructura

NOMBRE PRODUCTO TIPO DURACIÓN/PÁGINAS
————— —- —————-

En la lista DEBEN aparecer primero los DVD y luego los libros.

(15 PUNTOS)

· R03 – A partir de un nombre, obtenido desde la entrada estándar,
mostrar la TODA información relacionada con el producto, indicando
además el tipo de producto del que se trata.

(5 PUNTOS)

· R04 – Pedir al usuario que ingrese dos números enteros, x e y,
comparar la especie que se encuentra en la posición x de la lista con
la especie que está en la posición y de la lista para luego mostrar,
en la salida estándar, EL OBJETO más extenso (libro con mayor número
de páginas o DVD de mayor duración).

(15 PUNTOS)

 

IOrden.java

/*
 *	Interfaz IOrden 
 */
interface IOrden {
	/* metodo "masBreve" , Recibe un "Object" y retorna un "Object" */
	Object masBreve(Object o);
	/* metodo "esMasBreve" , Recibe un "Producto" y retorna un "boolean" */
	boolean esMasBreve(Producto o);
}

Producto.java

/*
 *	Clase Producto Definida como abstract Para que las clases hijas 
 *	implementen los metodos de la interfaz IOrden
 */
public abstract class Producto implements IOrden {

	public String nombre;
	
	/* Constructor por defecto */
	public Producto() {
	}
	/* Accesador */
	public String getNombre() {
		return nombre;
	}
	/* Mutador */
	public void setNombre(String val) {
		this.nombre = val;
	}
	/*
	 *	Solo declaro los metodos de la interfaz, los declaro 
	 *	como abstract para que los implementen las clases hijas
	 */
	public abstract Object masBreve(Object o);
	public abstract boolean esMasBreve(Producto o);
	
	/*
	 *	Sobre escribo el metodo "toString"
	 */
	public String toString() {
		return "Nombre: "+this.getNombre();
	}
	
}

Libro.java

/*
 *	Clase Libro extiende de Producto, 
 *	Implementa los metodos que la clase padre no implemento
 */
 
public class Libro extends Producto {
	
	/* Atributos */
	public int paginas;
	
	/* Constructor por defecto */
	public Libro() {}
	
	/* Accesador */
	public int getPaginas() {
		return paginas;
	}
	/* Mutadores */
	public void setPaginas(int val) {
		this.paginas = val;
	}
	
	/*
	 *	Implementacion del metodo "esMasBreve" definido en la interfaz "IOrden"
	 *	recibe como parametro un Producto y retorna un boolean (true o false)
	 */
	public boolean esMasBreve(Producto o) {
		/* 
		 *	Al producto que le paso por parametro 
		 *	le hago un Cast, una conversion implícita de Producto a Libro 
		 *	para poder acceder a los metodos de Libro
		 */
		Libro producto = (Libro)o;
		/*
		 *	Comparo las paginas de éste (this) objeto con las 
		 *	del libro que pase por parametro
		 */
		if(this.getPaginas() < producto.getPaginas()) {
			/* 	
			 *	Si las paginas de éste Libro son menores a las paginas del 
			 *	libro pasado por el parametro retorno true 
			 */
			return true;
			/* Osino retorno false */
		} else {
			return false;
		}
	}
	
	/*
	 *	Implementacion del metodo "masBreve" definido en la interfaz "IOrden"
	 *	Recibe como parametro un "Object" y retorna el Objeto mas breve (menor)
	 */
	public Object masBreve(Object o) {
		/* 
		 *	uso el metodo esMasBreve definido arriba y
		 *	Pregunto si éste (this) "objeto" es mas breve que el que pase por parametro
		 */
		if(this.esMasBreve((Producto)o)) {
			/*
			 *	Retorno todo este objeto (this)
			 */
			return this;
		} else {
			return o;
		}
	}
	
	/*
	 *	Sobre escribo el metodo "toString"
	 */
	public String toString() {
		return "Tipo: Libro "+super.toString()+" Paginas: "+this.getPaginas();
	}
	
}

DVD.java

/*
 *	Clase DVD extiende de Producto, 
 *	Implementa los metodos que la clase padre no implemento.
 */
 
 public class DVD extends Producto {
	
	/* Atributos */
	private byte duracion;
	
	/* Constructor por defecto */
	public DVD() {
	}
	
	/* Accesador */
	public byte getDuracion() {
		return this.duracion;
	}
	
	/* Mutadores */
	public void setDuracion(byte val) {
		this.duracion = val;
	}
	
	/*
	 *	Implementacion del metodo "esMasBreve" definido en la interfaz "IOrden"
	 *	recibe como parametro un Producto y retorna un boolean (true o false)
	 */
	public boolean esMasBreve(Producto o) {
		/* 
		 *	Al producto que le paso por parametro 
		 *	le hago un Cast, una conversion implícita de Producto a DVD 
		 *	para poder acceder a los metodos de DVD
		 */
		DVD producto = (DVD) o;
		/*
		 *	Comparo el valor de la duracion de éste (this) objeto con las 
		 *	del dvd que pase por parametro
		 */
		if(this.getDuracion() < producto.getDuracion()) {
			/* 	
			 *	Si la duracion de éste DVD es menor a la duracion del 
			 *	DVD pasado por parametro retorno true 
			 */
			return true;
			/* Osino retorno false */
		} else {
			return false;
		}
	}
	
	/*
	 *	Implementacion del metodo "masBreve" definido en la interfaz "IOrden"
	 *	Recibe como parametro un "Object" y retorna el Objeto mas breve (menor)
	 */
	public Object masBreve(Object o) {
		if(this.esMasBreve((Producto)o)) {
			return this;
		} else {
			return o;
		}
	}
	
	/*
	 *	Sobre escribo el metodo "toString"
	 */
	public String toString() {
		return "Tipo: DVD "+super.toString()+" Duración: "+this.getDuracion();
	}
}

CertamenA.java

/**
 * @(#)CertamenA.java
 *
 * CertamenA application
 *
 * @author 	Esteban Fuentealba
 * @version 1.00 2009/10/28
 */

/* 
 *	Hago el Import para usar la clase Scanner
 *	que me permite leer datos desde teclado
 */
import java.util.Scanner;
 
public class CertamenA {
    
    public static void main(String[] args) {
    	
    	
    	/* 
    	 *	Creo una instancia de Scanner
    	 *	le paso como parametro "System.in" (Entrada por Teclado)
    	 */
    	Scanner scan = new Scanner(System.in);
    	
    	
    	/* 	#########################
    	 *	#	R01					#
    	 *	#########################
    	 *
    	 *	Pido al usuario que ingrese la cantidad de Productos 
    	 */
    	System.out.println("Ingresa la cantidad de productos");
    	
    	/* 
    	 *	Espero que el usuario ingrese por teclado el numero del largo del array
    	 */
    	 
    	String lecturaDeTeclado = scan.nextLine();
    	int numero = Integer.parseInt(lecturaDeTeclado);
    	Producto[] productos = new Producto[numero];
    	/* 
    	 *	Creo una variable "contador" inicializado en 0 que sera el indice del array
    	 */
    	int contador = 0;
    	
    	
    	
		/*
    	 *	Pido al Usuario que ingrese Libros o DVDs
    	 */
    	for(int j=0; j< productos.length; j++) {
    	 	System.out.println("¿ Que Quieres Ingresar? ");
    	 	System.out.println("1.- Libro");
    	 	System.out.println("2.- DVD");
    	 	/*
    	 	 *	Espero que el usuario ingrese una opción
    	 	 */
    	 	int opcion = Integer.parseInt(scan.nextLine());
    	 	
    	 	/*
    	 	 *	Si el texto ingresado por teclado es un 1 
    	 	 *	Crearé un objeto de la clase Libro 
    	 	 */
    	 	if(opcion == 1) {
    	 		Libro l = new Libro();
    	 		System.out.println("Ingresa el Nombre del Libro");
		    	l.setNombre(scan.nextLine());
		    	System.out.println("Ingresa el numero de páginas del Libro");
		    	l.paginas = Integer.parseInt(scan.nextLine());
		    	
		    	/*
		    	 * 	Agrego el Objeto de Libro al arreglo de Productos
		    	 *	lo agrego en la posicion "contador", variable que cree mas arriba
		    	 */
		    	productos[contador] = l;
		    	/*
		    	 *	Incremento el contador de Productos
		    	 */
		    	contador++;
    	 	} 
    	 	/*
    	 	 *	Si el texto ingresado por teclado es un 2
    	 	 *	Crearé un objeto de la clase DVD y lo agregaré al arreglo de Productos
    	 	 */
    	 	 else if(opcion == 2) {
    	 		DVD d = new DVD();
    	 		System.out.println("Ingresa el Nombre del DVD");
		    	d.setNombre(scan.nextLine());
		    	System.out.println("Ingresa la Duración del DVD");
		    	d.setDuracion(Byte.parseByte(scan.nextLine()));
		    	
		    	/*
		    	 * 	Agrego el Objeto de DVD al arreglo de Productos
		    	 *	lo agrego en la posicion "contador", variable que cree mas arriba
		    	 */
		    	productos[contador] = d;
		    	/*
		    	 *	Incremento el contador de Productos
		    	 */
		    	contador++;
    	 	}
    	}

    	/* 	#########################
    	 *	#	R02					#
    	 *	#########################
		*/
		
    	System.out.println("Nombre\t\t\t\tTipo\t\t\t\tPaginas");
    	/* Recorro el arreglo de productos para mostrar todos los DVDs */
    	for(int indice=0; indice < productos.length; indice++) {
    		/* Del arreglo saco el producto en la posicion "indice" */
    		Producto producto = productos[indice];
    		/* Pregunto si el producto sacado es una instancia de la clase DVD*/
    		if(producto instanceof DVD) {
    			DVD unObjeto = (DVD)producto; 
    			System.out.println(producto.getNombre()+"\t\t\t\tDVD\t\t\t\t"+unObjeto.getDuracion());
    		} 
    	}
    	/* Recorro el arreglo de productos para mostrar todos los Libros */
    	for(int indice=0; indice < productos.length; indice++) {
    		/* Del arreglo saco el producto en la posicion "indice" */
    		Producto producto = productos[indice];
    		/* Pregunto si el producto sacado es una instancia de la clase Libro */
    		if(producto instanceof Libro) {
    			Libro a = (Libro)producto;
    			System.out.println(producto.getNombre()+"\t\t\t\tLibro\t\t\t\t"+a.getPaginas());
    		}
    	}
    	
    	/* 	#########################
    	*	#	R03					#
    	*	#########################
		*/
		
    	System.out.println("Ingresa el nombre a Busca");
    	String nombreABuscar = scan.nextLine();
    	/* 	
    	 *	Recorro el arreglo de productos para buscar en 
    	 *	todos los productos la palabra ingresada
    	 */
    	for(int indice=0; indice < productos.length; indice++) {
    		/* Del arreglo saco el producto en la posicion "indice" */
    		Producto p = productos[indice];
    		/* 
    		 *	Del producto llamo al metodo "getNombre" para que me 
    		 *	devuelva el nombre del producto , ese nombre lo dejo en minusculas (La Busquueda es sensible a Mayusculas y Minusculas)
    		 *	y pregunto si el nombre del producto contiene la palabra ingresada (Tambien en Minuscula)
    		 */
			if(p.getNombre().toLowerCase().contains(nombreABuscar.toLowerCase())) {
				/* 
				 *	Si la condicion se cumple imprimo el objeto
				 *	Como notarán no llamo a ningun metodo del objeto "p", esto es porque 
				 *	en las clases está Sobre escrito el metodo "toString"
				 */
				System.out.println(p);
			}	
    	}
    	
    	/* 	#########################
    	*	#	R04					#
    	*	#########################
		*/
    	System.out.println("Ingresa Numero x");
    	int numeroX = Integer.parseInt(scan.nextLine());
    	
    	System.out.println("Ingresa Numero Y");
    	int numeroY = Integer.parseInt(scan.nextLine());
    	
    	Producto primero = productos[numeroX];
    	Producto segundo = productos[numeroY];
    	
    
    	Object esMenor = primero.masBreve(segundo);
    	System.out.println("Objeto Menor:");
    	System.out.println(esMenor);
    }
}

Descargar Codigo de Fuente:
http://estebanfuentealba.net/ayudantia/Certamen1-PEF2501.rar

Saludos!.

Categorías:Java Etiquetas: , , ,