/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* 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: n4_prestamos
* Autor: Equipo Cupi2 2017
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
package uniandes.cupi2.prestamos.interfaz;
import java.awt.BorderLayout;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import uniandes.cupi2.prestamos.mundo.CentralPrestamos;
import uniandes.cupi2.prestamos.mundo.Estudiante;
import uniandes.cupi2.prestamos.mundo.Recurso;
/**
* Ventana principal de la aplicación.
*/
@SuppressWarnings("serial")
public class InterfazPrestamos extends JFrame
{
// -----------------------------------------------------------------
// Atributos
// -----------------------------------------------------------------
/**
* La central de préstamos.
*/
private CentralPrestamos central;
/**
* Panel con la imagen de la aplicación.
*/
private PanelImagen panelImagen;
/**
* Panel de los recursos de la central.
*/
private PanelRecursos panelRecursos;
/**
* Panel de los estudiantes de la central.
*/
private PanelEstudiantes panelEstudiantes;
/**
* Panel de extensión.
*/
private PanelOpciones panelOpciones;
// -----------------------------------------------------------------
// Constructores
// -----------------------------------------------------------------
/**
* Crea la ventana principal de la aplicación.
*/
public InterfazPrestamos( )
{
setTitle( "Central de Préstamos Uniandes" );
setSize( 600, 700 );
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
// Crea la central
central = new CentralPrestamos( );
// EStablece el layout
setLayout( new BorderLayout( ) );
// Organiza la ventana
panelImagen = new PanelImagen( );
panelRecursos = new PanelRecursos( this );
panelEstudiantes = new PanelEstudiantes( this );
panelOpciones = new PanelOpciones( this );
JPanel centro = new JPanel( );
centro.setLayout( new BorderLayout( ) );
add( panelImagen, BorderLayout.NORTH );
add( panelRecursos, BorderLayout.CENTER );
centro.add( panelEstudiantes, BorderLayout.CENTER );
centro.add( panelOpciones, BorderLayout.SOUTH );
add( centro, BorderLayout.SOUTH );
setLocationRelativeTo( null );
setResizable( false );
}
// -----------------------------------------------------------------
// Métodos
// -----------------------------------------------------------------
/**
* Agrega un nuevo estudiante a la central. <br>
* <b>post: </b> El nuevo estudiante se agrega en la lista de estudiantes.
* @param pNombre El nombre del estudiante. pNombre != null y pNombre != "".
* @param pCodigo El código del estudiante. pCodigo es un código válido.
*/
public void agregarEstudiante( String pNombre, int pCodigo )
{
try
{
central.agregarEstudiante( pNombre, pCodigo );
panelEstudiantes.actualizarEstudiantes( central.darEstudiantes( ) );
}
catch( Exception e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Nuevo Estudiante", JOptionPane.ERROR_MESSAGE );
}
}
/**
* Agrega un nuevo recurso a la central. <br>
* <b>post: </b> El nuevo recurso se agrega en la lista de recursos disponibles.
* @param pNombre El nombre del recurso. pNombre != null y pNombre != "".
* @param pCodigo El código del recurso. pCodigo es un código válido.
*/
public void agregarRecurso( String pNombre, int pCodigo )
{
try
{
central.agregarRecurso( pNombre, pCodigo );
panelRecursos.actualizarRecursosDisponibles( central.darRecursosDisponibles( ) );
}
catch( Exception e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Nuevo Recurso", JOptionPane.ERROR_MESSAGE );
}
}
/**
* Presta un recurso a un estudiante. <br>
* <b>post: </b> El recurso deja de estar disponible, se agrega en la lista de recursos prestados.
*/
public void prestarRecurso( )
{
// Toma los valores seleccionados en la lista de estudiantes y recursos
int recurso = panelRecursos.darRecursoDisponibleSeleccionado( );
int estudiante = panelEstudiantes.darEstudianteSeleccionado( );
// Valida que los datos sean correctos
if( recurso == -1 )
{
JOptionPane.showMessageDialog( this, "No ha seleccionado ningún recurso disponible", "Préstamo de Recurso", JOptionPane.WARNING_MESSAGE );
}
else if( estudiante == -1 )
{
JOptionPane.showMessageDialog( this, "No ha seleccionado ningún estudiante", "Préstamo de Recurso", JOptionPane.WARNING_MESSAGE );
}
else
{
// Realiza el proceso de préstamo
try
{
central.prestarRecurso( estudiante, recurso );
panelRecursos.actualizarRecursosDisponibles( central.darRecursosDisponibles( ) );
panelRecursos.actualizarRecursosPrestados( central.darRecursosPrestados( ) );
panelEstudiantes.quitarSeleccion( );
}
catch( Exception e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Préstamo de Recurso", JOptionPane.ERROR_MESSAGE );
}
}
}
/**
* Devuelve un recurso dado. <br>
* <b>post: </b> El recurso vuelve a estar disponible, se agrega en la lista de recursos disponibles.
* @param pRecurso Recurso a devolver. pRecurso está registrado en el sistema.
*/
public void devolverRecurso( int pRecurso )
{
// Realiza el proceso de devolución
try
{
central.devolverRecurso( pRecurso );
panelRecursos.actualizarRecursosDisponibles( central.darRecursosDisponibles( ) );
panelRecursos.actualizarRecursosPrestados( central.darRecursosPrestados( ) );
panelEstudiantes.quitarSeleccion( );
}
catch( Exception e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Devolución de Recurso", JOptionPane.ERROR_MESSAGE );
}
}
/**
* Consulta el estudiante que tiene un recurso dado.
* @param pCodRecurso Código del recurso a consultar. pCodRecurso está registrado.
*/
public void consultarEstudiantePrestamoRecurso( int pCodRecurso )
{
Recurso recurso = central.buscarRecurso( pCodRecurso );
Estudiante estudiante = recurso.darEstudiante( );
JOptionPane.showMessageDialog( this, "El recurso de código " + pCodRecurso + " se prestó al estudiante " + estudiante.darNombre( ) + " (código " + estudiante.darCodigo( ) + ")", "Consulta de Préstamos", JOptionPane.INFORMATION_MESSAGE );
}
/**
* Consulta los recursos que tiene prestados un estudiante.
* @param pCodEstudiante Código del estudiante. pCodEstudiante está registrado.
*/
public void consultarRecursosPrestadosEstudiante( int pCodEstudiante )
{
Estudiante estudiante = central.buscarEstudiante( pCodEstudiante );
ArrayList<Recurso> prestados = estudiante.darPrestamos( );
DialogoPrestados ventana = new DialogoPrestados( prestados, this );
ventana.setVisible( true );
}
// -----------------------------------------------------------------
// Puntos de Extensión
// -----------------------------------------------------------------
/**
* Ejecuta la extensión 1.
*/
public void reqFuncOpcion1( )
{
String respuesta = central.metodo1( );
JOptionPane.showMessageDialog( this, respuesta, "Respuesta", JOptionPane.INFORMATION_MESSAGE );
}
/**
* Ejecuta la extensión 2.
*/
public void reqFuncOpcion2( )
{
String respuesta = central.metodo2( );
JOptionPane.showMessageDialog( this, respuesta, "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( ) );
InterfazPrestamos i = new InterfazPrestamos( );
i.setVisible( true );
}
catch( Exception e )
{
e.printStackTrace( );
}
}
}
|