Enunciado
Se desea construir una aplicación para manejar una alcancía. La alcancía debe permitir guardar monedas de las siguientes denominaciones: $50, $100, $200, $500 y $1000. No se guardan ni billetes ni monedas de otras denominaciones.
La alcancía debe mostrar cuántas monedas tiene de cada denominación en todo momento. Adicionalmente, permite romper la alcancía, mostrando el valor total que había en ella y vaciando su contenido.
El sistema debe permitir:
1. Agregar una moneda de una denominación dada a la alcancía.
2. Mostrar la cantidad de monedas que hay de cada denominación.
3. Mostrar el total de dinero que hay en la alcancía.
4. Romper la alcancía vaciando su contenido.
5. Crear una nueva alcancía.

/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Universidad de los Andes (Bogotá - Colombia)
* Departamento de Ingeniería de Sistemas y Computación
* Licenciado bajo el esquema Academic Free License version 2.1
*
* Proyecto Cupi2 (http://cupi2.uniandes.edu.co)
* Ejercicio: n1_alcancia
* Autor: Equipo Cupi2 2017
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
package uniandes.cupi2.alcancia.interfaz;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import uniandes.cupi2.alcancia.mundo.Alcancia;
/**
* Clase principal de la interfaz.
*/
public class InterfazAlcancia extends JFrame
{
// -----------------------------------------------------------------
// Atributos
// -----------------------------------------------------------------
/**
* Clase principal del mundo.
*/
private Alcancia alcancia;
// -----------------------------------------------------------------
// Atributos de la Interfaz
// -----------------------------------------------------------------
/**
* Panel con la imagen.
*/
private PanelImagen panelImagen;
/**
* Panel donde se muestra el estado actual de la alcancía.
*/
private PanelAlcancia panelAlcancia;
/**
* Panel con los botones de las acciones de la aplicación.
*/
private PanelBotones panelBotones;
/**
* Panel donde se seleccionan y agregan las monedas.
*/
private PanelMonedas panelMonedas;
// -----------------------------------------------------------------
// Constructores
// -----------------------------------------------------------------
/**
* Construye la interfaz de la aplicación y la inicializa con una alcancía vacía. <br>
* <b>post: </b> Se inicializó la ventana principal de la aplicación con sus páneles.
*/
public InterfazAlcancia( )
{
setTitle( "Alcancía" );
setSize( 600, 650 );
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
alcancia = new Alcancia( );
panelImagen = new PanelImagen( );
getContentPane( ).add( panelImagen, BorderLayout.NORTH );
JPanel panelCentral = new JPanel( );
panelCentral.setLayout( new BorderLayout( ) );
panelMonedas = new PanelMonedas( this );
panelCentral.add( panelMonedas, BorderLayout.NORTH );
panelAlcancia = new PanelAlcancia( );
panelCentral.add( panelAlcancia, BorderLayout.CENTER );
panelBotones = new PanelBotones( this );
panelCentral.add( panelBotones, BorderLayout.EAST );
getContentPane( ).add( panelCentral, BorderLayout.CENTER );
setLocationRelativeTo( null );
setResizable( false );
}
// -----------------------------------------------------------------
// Métodos
// -----------------------------------------------------------------
/**
* Agrega una moneda a la alcancía siempre y cuando no esté rota. <br>
* <b>post: </b>Se agregó la cantidad indicada a la alcancía o se presentó un mensaje de error si estaba rota.
* @param pDenominacion Denominación de la moneda que se va a agregar a la alcancía. pDenominacion >0.
*/
public void agregarMoneda( int pDenominacion )
{
if( alcancia.darEstado( ) == 0 )
{
if( pDenominacion == 1000 )
{
alcancia.agregarMoneda1000( );
panelMonedas.cambiarCantidad( 1000, alcancia.darNumeroMonedas1000( ) );
}
else if( pDenominacion == 50 )
{
alcancia.agregarMoneda50( );
panelMonedas.cambiarCantidad( 50, alcancia.darNumeroMonedas50( ) );
}
else if( pDenominacion == 100 )
{
alcancia.agregarMoneda100( );
panelMonedas.cambiarCantidad( 100, alcancia.darNumeroMonedas100( ) );
}
else if( pDenominacion == 200 )
{
alcancia.agregarMoneda200( );
panelMonedas.cambiarCantidad( 200, alcancia.darNumeroMonedas200( ) );
}
else if( pDenominacion == 500 )
{
alcancia.agregarMoneda500( );
panelMonedas.cambiarCantidad( 500, alcancia.darNumeroMonedas500( ) );
}
panelAlcancia.cambiarMensaje( "Se agregaron $" + pDenominacion + " a la alcancía.\nEn la alcancía hay $" + alcancia.calcularTotalDinero( ) + " pesos." );
}
else
{
JOptionPane.showMessageDialog( this, "No se pueden agregar monedas a una alcancía rota.", "Agregar moneda", JOptionPane.ERROR_MESSAGE );
}
}
/**
* Crea una nueva alcancía. <br>
* <b>post: </b> Se creó una alcancia nueva.
*/
public void nuevaAlcancia( )
{
alcancia = new Alcancia( );
panelAlcancia.cambiarImagenAlcancia( false );
panelAlcancia.cambiarMensaje( "La alcancía está vacía." );
panelMonedas.cambiarCantidad( 50, alcancia.darNumeroMonedas50( ) );
panelMonedas.cambiarCantidad( 100, alcancia.darNumeroMonedas100( ) );
panelMonedas.cambiarCantidad( 200, alcancia.darNumeroMonedas200( ) );
panelMonedas.cambiarCantidad( 500, alcancia.darNumeroMonedas500( ) );
panelMonedas.cambiarCantidad( 1000, alcancia.darNumeroMonedas1000( ) );
}
/**
* Rompe la alcancía y actualiza la información mostrada. <br>
* <b>post: </b>La alcancía está rota.
*/
public void romperAlcancia( )
{
String mensaje = alcancia.darEstadoAlcancia( );
alcancia.romperAlcancia( );
panelAlcancia.cambiarImagenAlcancia( true );
panelAlcancia.cambiarMensaje( "La alcancía está rota." );
JOptionPane.showMessageDialog( this, mensaje, "Romper alcancía", JOptionPane.INFORMATION_MESSAGE );
}
// -----------------------------------------------------------------
// Puntos de Extensión
// -----------------------------------------------------------------
/**
* Punto de extensión 1.
*/
public void reqFunc1( )
{
String resultado = alcancia.metodo1( );
JOptionPane.showMessageDialog( this, resultado, "Respuesta", JOptionPane.INFORMATION_MESSAGE );
}
/**
* Punto de extensión 2.
*/
public void reqFunc2( )
{
String resultado = alcancia.metodo2( );
JOptionPane.showMessageDialog( this, resultado, "Respuesta", JOptionPane.INFORMATION_MESSAGE );
}
// -----------------------------------------------------------------
// Main
// -----------------------------------------------------------------
/**
* Ejecuta la aplicación.
* @param pArgs Parámetros de la ejecución. No son necesarios.
*/
public static void main( String[] pArgs )
{
try
{
// Unifica la interfaz para Mac y para Windows.
UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName( ) );
InterfazAlcancia ia = new InterfazAlcancia( );
ia.setVisible( true );
}
catch( Exception e )
{
e.printStackTrace( );
}
}
}
|
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Universidad de los Andes (Bogotá - Colombia)
* Departamento de Ingeniería de Sistemas y Computación
* Licenciado bajo el esquema Academic Free License version 2.1
*
* Proyecto Cupi2 (http://cupi2.uniandes.edu.co)
* Ejercicio: n1_alcancia
* Autor: Equipo Cupi2 2017
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
package uniandes.cupi2.alcancia.interfaz;
import java.awt.BorderLayout;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;
/**
* Panel donde se muestra el estado actual de la alcancía.
*/
public class PanelAlcancia extends JPanel
{
// -----------------------------------------------------------------
// Atributos de la Interfaz
// -----------------------------------------------------------------
/**
* Etiqueta donde se dibuja la alcancía.
*/
private JLabel lblAlcancia;
/**
* Area donde se muestran los mensajes sobre la alcancía.
*/
private JTextArea txtMensaje;
// -----------------------------------------------------------------
// Constructores
// -----------------------------------------------------------------
/**
* Construye un nuevo panel. <br>
* <b>post: </b>Se construyó el panel y se inicializaron sus componentes.
*/
public PanelAlcancia( )
{
setLayout( new BorderLayout( ) );
lblAlcancia = new JLabel( new ImageIcon( "./data/alcancia.png" ) );
add( lblAlcancia, BorderLayout.CENTER );
txtMensaje = new JTextArea( 3, 40 );
Font fuente = new Font( "Tahoma", Font.PLAIN, 12 );
txtMensaje.setFont( fuente );
txtMensaje.setText( "Alcancía vacía" );
txtMensaje.setWrapStyleWord( true );
txtMensaje.setLineWrap( true );
txtMensaje.setBackground( getBackground( ) );
txtMensaje.setEditable( false );
add( txtMensaje, BorderLayout.SOUTH );
setBorder( new TitledBorder( "Alcancía" ) );
}
// -----------------------------------------------------------------
// Métodos
// -----------------------------------------------------------------
/**
* Cambia el mensaje mostrado. <br>
* <b>post: </b>Se cambió el mensaje.
* @param pMensaje Mensaje que se quiere mostrar. pMensaje!=null.
*/
public void cambiarMensaje( String pMensaje )
{
txtMensaje.setText( pMensaje );
validate( );
}
/**
* Cambia el dibujo de la alcancía según el estado actual. <br>
* <b>post: </b>Se actualizó el dibujo de la alcancía.
* @param pRota Indica si actualmente la alcancía está rota o no.
*/
public void cambiarImagenAlcancia( boolean pRota )
{
if( pRota )
{
lblAlcancia.setIcon( new ImageIcon( "./data/alcanciaRota.png" ) );
}
else
{
lblAlcancia.setIcon( new ImageIcon( "./data/alcancia.png" ) );
}
validate( );
}
}
|
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Universidad de los Andes (Bogotá - Colombia)
* Departamento de Ingeniería de Sistemas y Computación
* Licenciado bajo el esquema Academic Free License version 2.1
*
* Proyecto Cupi2 (http://cupi2.uniandes.edu.co)
* Ejercicio: n1_alcancia
* Autor: Equipo Cupi2 2017
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
package uniandes.cupi2.alcancia.interfaz;
import java.awt.BorderLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
/**
* Panel en el que se encuentran los botones para romper la alcancía y crear una nueva.
*/
public class PanelBotones extends JPanel implements ActionListener
{
// -----------------------------------------------------------------
// Constantes
// -----------------------------------------------------------------
/**
* Constante para romper la alcancía.
*/
private static final String ROMPER = "romper";
/**
* Constante para crear una nueva alcancía.
*/
private static final String NUEVA = "nueva";
/**
* Constante para la extensión 1.
*/
private static final String OPCION_1 = "opcion1";
/**
* Constante para la extensión 2.
*/
private static final String OPCION_2 = "opcion2";
// -----------------------------------------------------------------
// Atributos
// -----------------------------------------------------------------
/**
* Ventana principal de la aplicación.
*/
private InterfazAlcancia principal;
// -----------------------------------------------------------------
// Atributos de la Interfaz
// -----------------------------------------------------------------
/**
* Botón usado para romper la alcancía.
*/
private JButton btnRomper;
/**
* Botón usado para crear una nueva alcancía.
*/
private JButton btnNueva;
/**
* Botón para la extensión 1.
*/
private JButton btnOpcion1;
/**
* Botón para la extensión 2.
*/
private JButton btnOpcion2;
// -----------------------------------------------------------------
// Constructores
// -----------------------------------------------------------------
/**
* Construye un nuevo panel .<br>
* <b>post: </b>Se construyó el panel y se inicializaron sus componentes.
* @param pPrincipal Referencia a la clase principal de la interfaz. pPrincipal != null
*/
public PanelBotones( InterfazAlcancia pPrincipal )
{
principal = pPrincipal;
setLayout( new BorderLayout( ) );
// Inicializa los componentes del panel
JPanel panelInternoRomper = new JPanel( );
btnRomper = new JButton( new ImageIcon( "./data/martillo.png" ) );
btnRomper.setActionCommand( ROMPER );
btnRomper.setMargin( new Insets( 1, 1, 1, 1 ) );
btnRomper.addActionListener( this );
btnRomper.setOpaque( false );
btnRomper.setContentAreaFilled( false );
panelInternoRomper.add( btnRomper );
panelInternoRomper.setBorder( new TitledBorder( "Romper alcancía" ) );
add( panelInternoRomper, BorderLayout.CENTER );
JPanel panelInternoBotones = new JPanel( );
btnNueva = new JButton( "Nueva alcancía" );
btnNueva.setActionCommand( NUEVA );
btnNueva.addActionListener( this );
panelInternoBotones.add( btnNueva );
btnOpcion1 = new JButton( "Opción 1" );
btnOpcion1.setActionCommand( OPCION_1 );
btnOpcion1.addActionListener( this );
panelInternoBotones.add( btnOpcion1 );
btnOpcion2 = new JButton( "Opción 2" );
btnOpcion2.setActionCommand( OPCION_2 );
btnOpcion2.addActionListener( this );
panelInternoBotones.add( btnOpcion2 );
add( panelInternoBotones, BorderLayout.SOUTH );
}
// -----------------------------------------------------------------
// Métodos
// -----------------------------------------------------------------
/**
* Ejecuta la acción según el botón sobre el que se haya hecho click.
* @param pEvento Evento de click sobre un botón. pEvento != null.
*/
public void actionPerformed( ActionEvent pEvento )
{
String comando = pEvento.getActionCommand( );
if( NUEVA.equals( comando ) )
{
principal.nuevaAlcancia( );
}
else if( ROMPER.equals( comando ) )
{
principal.romperAlcancia( );
}
else if( OPCION_1.equals( comando ) )
{
principal.reqFunc1( );
}
else if( OPCION_2.equals( comando ) )
{
principal.reqFunc2( );
}
}
}
|
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Universidad de los Andes (Bogotá - Colombia)
* Departamento de Ingeniería de Sistemas y Computación
* Licenciado bajo el esquema Academic Free License version 2.1
*
* Proyecto Cupi2 (http://cupi2.uniandes.edu.co)
* Ejercicio: n1_alcancia
* Autor: Equipo Cupi2 2017
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
package uniandes.cupi2.alcancia.interfaz;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* Panel con la imagen del banner.
*/
public class PanelImagen extends JPanel
{
// -----------------------------------------------------------------
// Constructores
// -----------------------------------------------------------------
/**
* Constructor del panel.<br>
* <b>post: </b> Panel quedó inicializado.
*/
public PanelImagen( )
{
JLabel imagen = new JLabel( );
ImageIcon icono = new ImageIcon( "data/Encabezado.png" );
imagen = new JLabel( "" );
imagen.setIcon( icono );
add( imagen );
}
}
|
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Universidad de los Andes (Bogotá - Colombia)
* Departamento de Ingeniería de Sistemas y Computación
* Licenciado bajo el esquema Academic Free License version 2.1
*
* Proyecto Cupi2 (http://cupi2.uniandes.edu.co)
* Ejercicio: n1_alcancia
* Autor: Equipo Cupi2 2017
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
package uniandes.cupi2.alcancia.interfaz;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.SwingConstants;
import javax.swing.border.BevelBorder;
import javax.swing.border.TitledBorder;
/**
* Panel donde se selecciona la denominación de una moneda para agregarla a la alcancía.
*/
public class PanelMonedas extends JPanel implements ActionListener, ItemListener
{
// -----------------------------------------------------------------
// Constantes
// -----------------------------------------------------------------
/**
* Constante para agregar una moneda a la alcancía.
*/
private static final String AGREGAR = "agregar";
// -----------------------------------------------------------------
// Atributos
// -----------------------------------------------------------------
/**
* Ventana principal de la aplicación.
*/
private InterfazAlcancia principal;
// -----------------------------------------------------------------
// Atributos de la Interfaz
// -----------------------------------------------------------------
/**
* Opción para seleccionar monedas de $50.
*/
private JRadioButton radio50;
/**
* Opción para seleccionar monedas de $100.
*/
private JRadioButton radio100;
/**
* Opción para seleccionar monedas de $200.
*/
private JRadioButton radio200;
/**
* Opción para seleccionar monedas de $500.
*/
private JRadioButton radio500;
/**
* Opción para seleccionar monedas de $1000.
*/
private JRadioButton radio1000;
/**
* Grupo de botones que asegura que solamente se selecciona una moneda a la vez.
*/
private ButtonGroup grupoBotones;
/**
* Botón para agregar una moneda a la alcancía.
*/
private JButton btnAgregar;
// -----------------------------------------------------------------
// Constructores
// -----------------------------------------------------------------
/**
* Construye un nuevo panel. <br>
* <b>post: </b>Se construyó el panel y se inicializaron sus componentes.
* @param pPrincipal Referencia a la clase principal de la interfaz. pPrincipal != null.
*/
public PanelMonedas( InterfazAlcancia pPrincipal )
{
principal = pPrincipal;
// Inicializa los componentes del panel
grupoBotones = new ButtonGroup( );
radio50 = new JRadioButton( "0", new ImageIcon( "./data/50.png" ) );
grupoBotones.add( radio50 );
radio50.setVerticalTextPosition( SwingConstants.BOTTOM );
radio50.setHorizontalTextPosition( SwingConstants.CENTER );
radio50.addItemListener( this );
radio50.setBorder( null );
add( radio50 );
radio100 = new JRadioButton( "0", new ImageIcon( "./data/100.png" ) );
grupoBotones.add( radio100 );
radio100.setVerticalTextPosition( SwingConstants.BOTTOM );
radio100.setHorizontalTextPosition( SwingConstants.CENTER );
radio100.addItemListener( this );
radio100.setBorder( null );
add( radio100 );
radio200 = new JRadioButton( "0", new ImageIcon( "./data/200.png" ) );
grupoBotones.add( radio200 );
radio200.setVerticalTextPosition( SwingConstants.BOTTOM );
radio200.setHorizontalTextPosition( SwingConstants.CENTER );
radio200.addItemListener( this );
radio200.setBorder( null );
add( radio200 );
radio500 = new JRadioButton( "0", new ImageIcon( "./data/500.png" ) );
grupoBotones.add( radio500 );
radio500.setVerticalTextPosition( SwingConstants.BOTTOM );
radio500.setHorizontalTextPosition( SwingConstants.CENTER );
radio500.addItemListener( this );
radio500.setBorder( null );
add( radio500 );
radio1000 = new JRadioButton( "0", new ImageIcon( "./data/1000.png" ) );
grupoBotones.add( radio1000 );
radio1000.setVerticalTextPosition( SwingConstants.BOTTOM );
radio1000.setHorizontalTextPosition( SwingConstants.CENTER );
radio1000.addItemListener( this );
radio1000.setBorder( null );
add( radio1000 );
radio50.setSelected( true );
btnAgregar = new JButton( "Agregar moneda" );
btnAgregar.setActionCommand( AGREGAR );
btnAgregar.addActionListener( this );
add( btnAgregar );
setBorder( new TitledBorder( "Monedas" ) );
}
// -----------------------------------------------------------------
// Métodos
// -----------------------------------------------------------------
/**
* Cambia la cantidad de monedas que hay de una cierta cantidad.
* @param pDenominacion Denominación de la moneda. pDenominacion>0.
* @param pCantidad Cantidad de esas monedas que hay. pCantidad>0.
*/
public void cambiarCantidad( int pDenominacion, int pCantidad )
{
if( pDenominacion == 1000 )
{
radio1000.setText( "" + pCantidad );
}
else if( pDenominacion == 50 )
{
radio50.setText( "" + pCantidad );
}
else if( pDenominacion == 100 )
{
radio100.setText( "" + pCantidad );
}
else if( pDenominacion == 200 )
{
radio200.setText( "" + pCantidad );
}
else if( pDenominacion == 500 )
{
radio500.setText( "" + pCantidad );
}
}
/**
* Ejecuta la acción según el botón sobre el que se haya hecho click.
* @param pEvento Evento de click sobre un botón. pEvento != null.
*/
public void actionPerformed( ActionEvent pEvento )
{
String comando = pEvento.getActionCommand( );
if( AGREGAR.equals( comando ) )
{
int denominacion = 0;
if( radio1000.isSelected( ) )
{
denominacion = 1000;
}
else if( radio50.isSelected( ) )
{
denominacion = 50;
}
else if( radio100.isSelected( ) )
{
denominacion = 100;
}
else if( radio200.isSelected( ) )
{
denominacion = 200;
}
else if( radio500.isSelected( ) )
{
denominacion = 500;
}
principal.agregarMoneda( denominacion );
}
}
/**
* Método se llama cuando se selecciona alguno de los botones que indican las denominaciones. <br>
* El método se encarga de dibujar un borde alrededor de la denominación seleccionada.
* @param pEvento Evento de la selección de una denominación. pEvento!=null.
*/
public void itemStateChanged( ItemEvent pEvento )
{
JRadioButton boton = ( JRadioButton )pEvento.getItem( );
if( pEvento.getStateChange( ) == ItemEvent.SELECTED )
{
boton.setBorder( new BevelBorder( BevelBorder.LOWERED, Color.BLACK, Color.GRAY, Color.LIGHT_GRAY, Color.GRAY ) );
boton.setBorderPainted( true );
}
else
{
boton.setBorder( null );
}
validate( );
}
}
|
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Universidad de los Andes (Bogotá - Colombia)
* Departamento de Ingeniería de Sistemas y Computación
* Licenciado bajo el esquema Academic Free License version 2.1
*
* Proyecto Cupi2 (http://cupi2.uniandes.edu.co)
* Ejercicio: n1_alcancia
* Autor: Equipo Cupi2 2017
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
package uniandes.cupi2.alcancia.mundo;
/**
* Clase que representa una alcancía.
*/
public class Alcancia
{
// -----------------------------------------------------------------
// Atributos
// -----------------------------------------------------------------
/**
* Número de monedas de $50 que hay en la alcancía.
*/
private int numeroMonedas50;
/**
* Número de monedas de $100 que hay en la alcancía.
*/
private int numeroMonedas100;
/**
* Número de monedas de $200 que hay en la alcancía.
*/
private int numeroMonedas200;
/**
* Número de monedas de $500 que hay en la alcancía.
*/
private int numeroMonedas500;
/**
* Número de monedas de $1000 que hay en la alcancía.
*/
private int numeroMonedas1000;
/**
* Estado de la alcancía. <br>
* 0 indica que no está rota. <br>
* 1 indica que está rota.
*/
private int estado;
// -----------------------------------------------------------------
// Métodos
// -----------------------------------------------------------------
/**
* Construye la alcancía. <br>
* <b>post: </b> El número de monedas de 50, número de monedas de 100, número de monedas de 200, número de monedas de 500, número de monedas de 1000 y el estado fueron
* incializados en 0.
*/
public Alcancia( )
{
numeroMonedas50 = 0;
numeroMonedas100 = 0;
numeroMonedas200 = 0;
numeroMonedas500 = 0;
numeroMonedas1000 = 0;
estado = 0;
}
/**
* Retorna el número de monedas de $50 que hay en la alcancía.
* @return Número de monedas de $50 en la alcancía.
*/
public int darNumeroMonedas50( )
{
return numeroMonedas50;
}
/**
* Retorna el número de monedas de $100 que hay en la alcancía.
* @return Número de monedas de $100 en la alcancía.
*/
public int darNumeroMonedas100( )
{
return numeroMonedas100;
}
/**
* Retorna el número de monedas de $200 que hay en la alcancía.
* @return Número de monedas de $200 en la alcancía.
*/
public int darNumeroMonedas200( )
{
return numeroMonedas200;
}
/**
* Retorna el número de monedas de $500 que hay en la alcancía.
* @return Número de monedas de $500 en la alcancía.
*/
public int darNumeroMonedas500( )
{
return numeroMonedas500;
}
/**
* Retorna el número de monedas de $1000 que hay en la alcancía.
* @return Número de monedas de $1000 en la alcancía.
*/
public int darNumeroMonedas1000( )
{
return numeroMonedas1000;
}
/**
* Informa si la alcancía está rota o no.
* @return Retorna 1 si está rota, 0 en caso contrario.
*/
public int darEstado( )
{
return estado;
}
/**
* Retorna el total de dinero que hay en la alcancía.
* @return Total de dinero que hay en la alcancía.
*/
public int calcularTotalDinero( )
{
return numeroMonedas1000 * 1000 + numeroMonedas50 * 50 + numeroMonedas100 * 100 + numeroMonedas200 * 200 + numeroMonedas500 * 500;
}
/**
* Retorna el estado de la alcancía. <br>
* <b>pre: </b>La alcancía no está rota.<br>
* @return Cadena que informa la cantidad de monedas que había en la alcancía y la cantidad total de dinero.
*/
public String darEstadoAlcancia( )
{
int totalDinero = calcularTotalDinero( );
return "La alcancía tenía: \n " + numeroMonedas50 + " moneda(s) de $50 \n " + numeroMonedas100 + " moneda(s) de $100 \n " + numeroMonedas200 + " moneda(s) de $200 \n " + numeroMonedas500 + " moneda(s) de $500 \n " + numeroMonedas1000
+ " moneda(s) de $1000 \n " + "Para un total de $" + totalDinero + " pesos.";
}
/**
* Agrega una moneda de $50 a la alcancía. <br>
* <b>pre: </b>La alcancía no está rota. <br>
* <b>post: </b>Aumentó en uno la cantidad de monedas de $50 en la alcancía.
*/
public void agregarMoneda50( )
{
numeroMonedas50 = numeroMonedas50 + 1;
}
/**
* Agrega una moneda de $100 a la alcancía. <br>
* <b>pre: </b>La alcancía no está rota. <br>
* <b>post: </b>Aumentó en uno la cantidad de monedas de $100 en la alcancía.
*/
public void agregarMoneda100( )
{
numeroMonedas100 = numeroMonedas100 + 1;
}
/**
* Agrega una moneda de $200 a la alcancía. <br>
* <b>pre: </b>La alcancía no está rota. <br>
* <b>post: </b>Aumentó en uno la cantidad de monedas de $200 en la alcancía.
*/
public void agregarMoneda200( )
{
numeroMonedas200 = numeroMonedas200 + 1;
}
/**
* Agrega una moneda de $500 a la alcancía. <br>
* <b>pre: </b>La alcancía no está rota. <br>
* <b>post: </b>Aumentó en una la cantidad de monedas de $500 en la alcancía.
*/
public void agregarMoneda500( )
{
numeroMonedas500 = numeroMonedas500 + 1;
}
/**
* Agrega una moneda de $1000 a la alcancía. <br>
* <b>pre: </b>La alcancía no está rota. <br>
* <b>post: </b>Aumentó en uno la cantidad de monedas de $1000 en la alcancía.
*/
public void agregarMoneda1000( )
{
numeroMonedas1000 = numeroMonedas1000 + 1;
}
/**
* Rompe la alcancía. <br>
* <b>pre: </b>La alcancía no está rota. <br>
* <b>post: </b>La alcancía está rota.
*/
public void romperAlcancia( )
{
estado = 1;
}
// -----------------------------------------------------------------
// Puntos de Extensión
// -----------------------------------------------------------------
/**
* Método para la extensión 1.
* @return Respuesta 1.
*/
public String metodo1( )
{
return "Respuesta 1";
}
/**
* Método para la extensión 2.
* @return Respuesta 2.
*/
public String metodo2( )
{
return "Respuesta 2";
}
}
|