Вы находитесь на странице: 1из 11

Curso: Tcnicas de Manejo de Archivos

APLICACIN: GESTIN DE LIBROS DE BIBLIOTECA


I.

OBJETIVOS:
1. Familiarizarse con el entorno de Netbeans y en la creacin de aplicaciones de escritorio para Windows.
2. Implementar clases definidas por el usuario y mtodos especiales .
3. Utilizar controles de java swing como JPanel , JTabbledPane, JComboBox y otros necesarios para dar
funcionalidad a la aplicacin.
4. Implementar la clase ArrayList para hacer uso de los mtodos de manejo de listas.

II.

PROCEDIMIENTO:
1. Ejecutar el programa Netbeans y elegir nuevo proyecto del tipo Java Application. Indique adems el
nombre del proyecto y la ruta donde se guardar el proyecto

Curso: Tcnicas de Manejo de Archivos


2. Aadir un nuevo objeto JFrame a la aplicacin, asignarle el nombre Principal

3. .Proceder a aadir archivo Java Class., al primero asignarle el nombre Libro y al siguiente Libros

Curso: Tcnicas de Manejo de Archivos


5. Proceder a escribir los siguientes cdigos para cada uno de los archivos Class.
public class Libro{
private String Titulo, Autor, Codigo,Editorial, FechaDev;
private String dia, mes, anio, Estado;
private int Edicion;
public Libro() {
public Libro(Libro uno){
setTitulo(uno.getTitulo());
setAutor(uno.getAutor());
setCodigo(uno.getCodigo());
setEditorial(uno.getEditorial());
setFechaDev(uno.getFechaDev());
setDia(uno.getDia());
setMes(uno.getMes());
setAnio(uno.getAnio());
setEstado(uno.getEstado());
setEdicion(uno.getEdicion());
}// fin del constructor
public String getTitulo() {
return Titulo;
}
public void setTitulo(String Titulo) {
this.Titulo = Titulo; }
public String getAutor() {
return Autor;
}
public void setAutor(String Autor) {
this.Autor = Autor;
}
public String getCodigo() {
return Codigo;
}
public void setCodigo(String Codigo) {
this.Codigo = Codigo;
}
public String getEditorial() {
return Editorial;
}
public void setEditorial(String Editorial) {
this.Editorial = Editorial;
}
public String getFechaDev() {
return FechaDev;
}
public void setFechaDev(String FechaDev) {
this.FechaDev = FechaDev; }
public String getDia() {
return dia;
}
public void setDia(String dia) {
this.dia = dia; }
public String getMes() {
return mes; }
public void setMes(String mes) {
this.mes = mes; }
public String getAnio() {
return anio; }
public void setAnio(String anio) {
this.anio = anio; }
public String getEstado() {
return Estado; }
public void setEstado(String Estado) {
this.Estado = Estado; }
public int getEdicion() {
return Edicion; }
public void setEdicion(int Edicion) {
this.Edicion = Edicion; }

import java.util.*;// para la clase ArrayList


public class Libros {
private ArrayList v;

// constructor
public Libros(){
v = new ArrayList();
}
// metodos de gestion
// agrega un nuevo Libro
public void addLibro(Libro e){
v.add(e);
}
// obtiene un Libro de la posicion dada
public Libro getLibro(int i){
return (Libro)v.get(i);
}
// reemplaza un Libro ya existente
public void setLibro(int i, Libro e){
v.set(i,e);
}
// retorna el numero de Libros guardados en el ArrayList
public int numeroLibros(){
return v.size();
}
// busca un Libro por su codigo
public int busca(String codigo){
for (int i=0; i<numeroLibros(); i++)
if (codigo.equals(getLibro(i).getCodigo()))
return i;// retorna la posicin encontrada
return -1; //significa que no lo encuentra
}
// elimina un Libro
public void elimina(int i){
v.remove(i);
}
// elimina todos los objetos del ArrayList
public void eliminaTodo(){
v.removeAll(v);
}
}// fin de la clase Libros

}
3

Curso: Tcnicas de Manejo de Archivos


6.

Al objeto JFrame asignarle un layout del tipo BorderLayout

public Principal() {
initComponents();
add(new PanelPrincipal());
setSize(500,300);
}
7. Aadir el siguiente cdigo al construtor del JFrame
8. Proceder a aadir a la aplicacin paneles con los siguientes nombres:
Panel1: PanelPrincipal

Panel4: PanelListado

Panel2: PanelTabla

Panel5: PanelIngresos

Panel3: PanelMovimientos

Panel6: PanelDisponibilidad

9. Al objeto PanelPrincipal aadir un control contenedor JTabbledPane y asignarle como nombre de


variable jtpMenu, asimismo asignarle como layoult del tipo: BorderLayoult

import java.awt.Color;
public class PanelPrincipal extends javax.swing.JPanel {
// declarar objetos de la GUI
PanelIngresos
panIng;
PanelMovimientos
panMovi;
PanelDisponibilidad
panDisp;
PanelListado
panList;
public PanelPrincipal() {
initComponents();
// Paneles definidos en clases separadas
panIng = new PanelIngresos();
panMovi = new PanelMovimientos();
panDisp = new PanelDisponibilidad();
panList = new PanelListado();
// enlaza cada pestaa con un panel a mostrar
jtpMenu. addTab("Ingresos",panIng);
jtpMenu.addTab("Movimientos",panMovi);
jtpMenu.addTab("Disponibilidad",panDisp);
jtpMenu.addTab("Listado",panList);
// establece texto que aparece al pasar el Mouse por cada
// ficha
jtpMenu.setToolTipTextAt(0,"Ingresa nuevo libro");
jtpMenu.setToolTipTextAt(1,"Cambia de estado:libre, sala, domicilio");
jtpMenu.setToolTipTextAt(2,"Muestra el estado actual del libro");
jtpMenu.setToolTipTextAt(3,"Muestra todos los libros");
// establece color de fondo para cada pestaa
jtpMenu.setBackgroundAt(0,new Color(149,199,199));
jtpMenu.setBackgroundAt(1,new Color(199,199,149));
jtpMenu.setBackgroundAt(2,new Color(199,149,199));
jtpMenu.setBackgroundAt(3,new Color(249,249,199));
4

Curso: Tcnicas de Manejo de Archivos


10. En el contenedor PanelIngresos aada los siguientes objetos

Asignar el tipo layout: BoderLayout


Insertar un label: Propiedad Text: INGRESOS
Insertar dos paneles: Jpanel1
Asignar el tipo layout: Gridlayout
Propiedad columns= 3
Insertar botones: btnAceptar
btnCancelar
btnSalir
Jpanel2
Asignar el tipo layout: Gridlayout
Propiedad columns= 3
Insertar Jpanels: Jpanel3, JPanel4, JPanel5
Jpanel3:
Asignar el tipo layout: Gridlayout
Propiedad rows= 6
Border: TiTledBorder (title=etiquetas)
Insertar labels: JLabel2, JLabel3, JLabel4, JLabel5,
JLabel6, JLabel7
Jpanel4:
Asignar el tipo layout: Gridlayout
Propiedad rows= 6
Border: TiTledBorder (title=datos)
Insertar JTextFields y un objeto JComboBox
Jpanel5:
Asignar el tipo layout: BorderLayout
Insertar JScrollPane
JTextArea

Prop. Editable
Columns: 20
Rows: 5

Finalmente el PanelIngresos deber presentar el siguiente diseo:

Curso: Tcnicas de Manejo de Archivos


11. Aadir los siguientes cdigos para dar funcionalidad a los objetos:
import javax.swing.JOptionPane;
public class PanelIngresos extends javax.swing.JPanel {
// objeto de admiinstracin de todos los libros
static Libros libros = new Libros();

public void ingresarDatos() {


// creamos espacio en memoria para un libro
unLibro=new Libro();

//ingresar datos de un libro


unLibro.setCodigo( leerCodigo() );
unLibro.setTitulo( leerTitulo() );
unLibro.setAutor( leerAutor() );
unLibro.setEditorial( leerEditorial() );
unLibro.setEdicion( Integer.parseInt(leerAnioDeEdicion()) );
unLibro.setEstado("Libre");
unLibro.setFechaDev("00/00/00");

// un objeto para administrar un libro


Libro unLibro = new Libro();
public PanelIngresos() {
initComponents();
for (int i=2000; i <=2050; i++)
cboEdicion.addItem(""+i);
}
public String leerCodigo() {
return txtCodigo.getText();}
public String leerTitulo() {
return txtTitulo.getText();}
public String leerAutor() {
return txtAutor.getText();}
public String leerEditorial() {
return txtEditorial.getText();}
public String leerAnioDeEdicion() {
String AnioEdicion;
AnioEdicion =
cboEdicion.getSelectedItem().toString();
return AnioEdicion; }

public void borrarArea() {


txtSalida.setText(""); }
public void imprime(String cadena) {
txtSalida.append(cadena + "\n"); }
public void prepararNuevoIngreso(){
txtCodigo.setText("");
txtTitulo.setText("");
txtAutor.setText("");
txtEditorial.setText("");
cboEdicion.setSelectedIndex(0);
txtCodigo.requestFocus();
}

public boolean datosCorrectos() {


String ValidarCodigo;
int longitudCodi;
ValidarCodigo = txtCodigo.getText();
longitudCodi = ValidarCodigo.length();
if ( longitudCodi < 5 || longitudCodi > 5) {
mostarMensaje(longitudCodi);
return false;
// datos incorrectos
}
else
return true;
// datos correctos
}
public void mostarMensaje(int ContCodi) {
JOptionPane.showMessageDialog(this,"El Cdigo tiene " +
ContCodi +
" cifras y debe tener 5 cifras" );
txtCodigo.requestFocus();
}
public void almacenaDatos() {
libros.addLibro(unLibro);
mostrarNumeroDeRegistro(); }
public void mostrarNumeroDeRegistro() {
txtRegistro.setText(""+libros.numeroLibros()); }
public void mostrarIngresos() {
borrarArea();
imprime("Nmero de Registro :" + libros.numeroLibros());
imprime("Cdigo\t:" + unLibro.getCodigo());
imprime("Titulo\t:" + unLibro.getTitulo());
imprime("Autor\t:" + unLibro.getAutor());
imprime("Editorial\t:" + unLibro.getEditorial());
imprime("Ao de Edicin\t:" + unLibro.getEdicion());
PanelMovimientos.getComboCodigos().addItem(unLibro.getCodigo());
PanelDisponibilidad.getComboCodigos().addItem(unLibro.getCodigo());
}

Curso: Tcnicas de Manejo de Archivos


private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt)
{ aceptarIngresos();
}
private void btnCancelarActionPerformed(java.awt.ev evt)
{ prepararNuevoIngreso(); }
public void aceptarIngresos() {
ingresarDatos();
if ( datosCorrectos() )
{
int i=libros.busca(unLibro.getCodigo());
if(i == -1)
{// codigo NO REPETIDO
almacenaDatos();
mostrarIngresos();
prepararNuevoIngreso();
}
else
{
JOptionPane.showMessageDialog(this,"Cdigo Repetido");
txtCodigo.requestFocus();
}
}
}
12. En el PanelListado aadir los objetos necesarios tal como se muestra en la imagen siguiente:

JPanel1:

import java.awt.BorderLayout;
public class PanelListado extends . {
PanelTabla
panTabla;
public PanelListado() {
initComponents();
panTabla = new PanelTabla();
panTabla.setOpaque(false);
panTabla.setVisible(false);
add(panTabla,BorderLayout.CENTER);
}

Asignar el tipo layout: Gridlayout


Propiedad columns= 2

public void mostrarListado() {


inicializaTabla();
panTabla.setVisible(true);
// proceso repetitivo
for(int i = 0; i < PanelIngresos.libros.numeroLibros(); i++)
{
//referencia cada objeto del arreglo
Libro unLibro = PanelIngresos.libros.getLibro(i);
Object[] datos = {unLibro.getCodigo(),
unLibro.getTitulo(),
unLibro.getAutor(),
String.valueOf(unLibro.getEdicion()),
unLibro.getEstado()};
panTabla.getMiModelo().addRow(datos);
}
}
private void btnRefrescarActionPerformed(.) {
mostrarListado();
}
public void inicializaTabla(){
// obtiene numero de filas de la tabla
int filas = panTabla.getMiTabla().getRowCount();
// remueve todas las filas de la tabla
for (int fila=0; fila<filas; fila++)
panTabla.getMiModelo().removeRow(0);
panTabla.setVisible(false);
}

Curso: Tcnicas de Manejo de Archivos


13. En el objeto PanelTabla aada los objetos siguientes y luego los cdigos necesarios para dar
funcionalidad a los objetos.
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class PanelTabla extends javax.swing.JPanel {
private String[] cabecera= {"Codigo", "Titulo","Autor","Ao","Estado"};
private String[][] data = {};
private DefaultTableModel miModelo;
/** Creates new form PanelTabla */
public PanelTabla() {
initComponents();
miModelo = new DefaultTableModel(data,cabecera);
miTabla.setModel(miModelo);
}
public JTable getMiTabla(){ return miTabla;}
public DefaultTableModel getMiModelo(){ return miModelo;}
}

14. Para el objeto PanelMovimientos, aada los siguientes objetos

cboCodigos: Variable modifiers=private static


Propiedad: model= Codigos disponibles
cboNuevoEstado: Propiedad: model= Nuevo Estado
Libre
Prestamo en Sala
Prestamo en Domicilio
cboMes: Propiedad: model= EneroDiciembre
JPane1: GridLayout: columns=3
JPane2: GridLayout: columns=2
JPane3: GridLayout: rows=6
JPane4: GridLayout: rows=6
JPane5: GridLayout: columns=3

Curso: Tcnicas de Manejo de Archivos


public void cancelarMovimientos(){
// leer posicion del codigo elegido
int indice=cboCodigos.getSelectedIndex()-1;
if (indice>=0){// se ha seleccionado un codigo
// recupera estado original
PanelIngresos.libros.setLibro(indice,original);

// borra datos mostrados


txtAutor.setText("");
txtTitulo.setText("");
txtEstado.setText("");
cboDia.setSelectedIndex(0);
cboMes.setSelectedIndex(0);
cboAo.setSelectedIndex(0);
cboNuevoEstado.setSelectedIndex(0);

import javax.swing.JComboBox;
public class PanelMovimientos extends javax.swing.JPanel {
// objetos para acceder a la informacin de un libro
Libro original, cambiado;

btnAceptar.setEnabled(false);

public PanelMovimientos() {
initComponents();

// ocultar devolucion
ocultaDevolucion(false);

for (int i=1; i <=31; i++)


cboDia.addItem(""+i);
for (int i=2003; i <=2050; i++)
cboAo.addItem(""+i);

// refresca la seleccion de los codigos


cboCodigos.setSelectedIndex(0);
}

public void aceptarMovimientos() {


int indice;
String Fecha="",dia,mes,anio;

public void seleccionarEstado() {


int posEstado,posCodigo;
String Estado="";
// leer posicion de estado y codigo
posEstado=cboNuevoEstado.getSelectedIndex();
posCodigo=cboCodigos.getSelectedIndex()-1;

// leer posicion del codigo elegido


indice=cboCodigos.getSelectedIndex()-1;

// si no se ha seleccionado en los combos


if (posCodigo==-1||posEstado==0)
btnAceptar.setEnabled(false);
else{
btnAceptar.setEnabled(true);
// determinar nuevo estado del libro
switch (posEstado) {
case 1: // libre
Estado="Libre";
ocultaDevolucion(false);
break;
case 2:// prestamo en sala
Estado="En Sala";
ocultaDevolucion(false);
break;
case 3:// prestamo a domicilio
Estado="A Domicilio";
ocultaDevolucion(true);
break;
}

if (indice==-1)// no se ha seleccionado codigo


borrar();
else{
// leer dia, mes ao elegidos
dia = cboDia.getSelectedItem().toString();
mes = cboMes.getSelectedItem().toString();
anio = cboAo.getSelectedItem().toString();
// juntar nueva fecha
Fecha = dia +"/" + mes + "/" + anio;
// actualiza fecha de devolucion
cambiado.setFechaDev(Fecha);
// actualiza libro cambiado en el vector
PanelIngresos.libros.setLibro(indice,cambiado);
ocultaDevolucion(false);
btnAceptar.setEnabled(false);
seleccionarLibro();
}

// actualizar nuevo estado en el libro cambiado


cambiado.setEstado(Estado);
}

}
9

Curso: Tcnicas de Manejo de Archivos


public void borrar(){
txtAutor.setText("");
txtEstado.setText("");
txtTitulo.setText("");
}
//---------------------------public static JComboBox getComboCodigos()
{ return cboCodigos;}

public void ocultaDevolucion(boolean estado){


jPanel5.setVisible(estado);
}
public void seleccionarLibro() {
borrar();
// lee posicion del codigo seleccionado
int indice=cboCodigos.getSelectedIndex()-1;
if (indice>=0){
// obtiene datos del libro seleccionado
original = PanelIngresos.libros.getLibro(indice);
cambiado = new Libro(original);
// ver libro seleccionado
txtTitulo.setText(cambiado.getTitulo());
txtAutor.setText(cambiado.getAutor());
txtEstado.setText(cambiado.getEstado());
}
}
private void cboCodigosActionPerformed(java.awt.event.ActionEvent evt) {
seleccionarLibro();}

private void cboNuevoEstadoActionPerformed(java.awt.event.ActionEvent evt) {


seleccionarEstado();}
private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) {
aceptarMovimientos();}
private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {
cancelarMovimientos();}
15. Aada al panelDisponibilidad los siguientes objetos y cdigos necesarios:

cboCodigos: Variable modifiers=private static


Propiedad: model= Codigos disponibles
JPane1: GridLayout: columns=2
JPane2: GridLayout: rows=5
JPane3: GridLayout: rows=5

10

Curso: Tcnicas de Manejo de Archivos


import javax.swing.JComboBox;
public void seleccionarLibrosDisponibles(){
// leer posicion del codigo seleccionado
int i=cboCodigos.getSelectedIndex()-1;
if (i>=0){

// obtiene libro seleccionado


Libro unLibro = PanelIngresos.libros.getLibro(i);
deshabilitaDevolucion(false);
// ver datos de libro seleccionado
txtTitulo.setText(unLibro.getTitulo());
txtAutor.setText(unLibro.getAutor());
txtEstado.setText(unLibro.getEstado());
if (unLibro.getEstado().equals("A Domicilio")) {
deshabilitaDevolucion(true);
txtFechaDev.setText(unLibro.getFechaDev());
}
}
}

public void deshabilitaDevolucion(boolean estado)


{ txtFechaDev.setVisible(estado);
}
public void borrar(){
txtAutor.setText("");
txtFechaDev.setText("");
txtEstado.setText("");
txtTitulo.setText("");
}
public static JComboBox getComboCodigos()
{ return cboCodigos;}

private void cboCodigosActionPerformed(.) {


borrar();
seleccionarLibrosDisponibles();
}

Finalmente ejecutar la aplicacin

III.

ACTIVIDAD DOMICILIARIA:

Elaborar una aplicacin similar a la trabajada en clase que manipule informacin de personal de una empresa.
Fecha de entrega: 7 de Noviembre

11

Вам также может понравиться