Sie sind auf Seite 1von 20

1.

1 Definicin y Objetivos del Proyecto:


Sistema de Biblioteca como Base de nuestra Red Social
Educativa:
Definicin:
En este proyecto vamos a desarrollar una aplicacin distribuida con
arquitectura
Cliente /Servidor que simular la comunicacin tanto
entre servidor (que en nuestro caso es el Administrador de la biblioteca)
como el cliente o clientes (alumnos).
Nuestra aplicacin consiste en simular la comunicacin entre el
Administrador y los alumnos mediante comunicacin escrita mediante
sockets, implementamos tambin el uso directo de lo que es una
biblioteca como por ejemplo, para la parte de Administrador: el poder
aadir, editar y eliminar un libro que ingresa a la Biblioteca. Y para el
alumno el poder consultar, registrarse, pedir un libro de la base de
datos que se tiene dentro de la Biblioteca.

Objetivos:
Objetivos principales:
El objetivo del proyecto es poder llevar como funciones principales, el
uso correcto de almacenamiento y registros de libros, mediantes
ficheros
para luego, un(os) alumno(s) pueda(n) hacer la consulta
respectiva del libro a buscar y si en caso encontrase el libro consultado,
pueda tener en su posesin dicho libro.
La otra funcin es la comunicacin entre el Administrador y el alumno, o
entre Servidor y Cliente mediante uso de sockets para poder hacer
consultas respectivas referentes a un Sistema de Biblioteca.
El manejo de sockets servir para la comunicacin dentro de una red
local entre el administrador y los usuarios para que puedan intercambiar
mensajes que viene a ser una parte importante de nuestra Red Social
Educativa.
Objetivos secundarios:
Crear y utilizar objetos para nuestro proyecto.
Crear y utilizar variables y mtodos de clases.

Utilizar try, catch y finally para detectar y manejar excepciones,


sobretodo tambin para el uso de ficheros y sockets.

1.2 Marco Terico del tema:


Los Socket se utilizan para poder enviar rdenes a un servidor que est
atendiendo nuestras peticiones.
Socket designa un concepto abstracto por el cual dos programas
(posiblemente
situados
en
computadoras
distintas)
pueden
intercambiarse cualquier flujo de datos, generalmente de manera fiable
y ordenada
Partiendo de esta idea, en el proyecto que implementaremos, usaremos
sockets para un Sistema de Biblioteca dentro de nuestra Red Social
Educativa.
Un Sistema de Biblioteca es aquel sistema donde se puede hacer
consultas de libros de una Biblioteca y la facilidad de esto es que
permite, para un alumno, obtener de manera efectiva una bsqueda del
libro a solicitar, si en caso encuentre en la bsqueda, obtendr su pedido
para luego tener en posesin el libro solicitado.
Para nuestro caso implementaremos la parte administrativa como la
parte del alumno.
Luego veremos la comunicacin entre ambos, mediante sockets, es decir
que el alumno podr mandar mensajes al administrador y este podr
responderle atendiendo a sus pedidos pero para esta primera
presentacin solo mostraremos la estructura bsica y las relaciones
entre las clases que hemos definido para posteriormente en otro informe
abarcar de lleno lo que se refiera a comunicacin de dos programas
dentro de una red mediante sockets.

1.3 La relacin de recursos humanos,


(Software y hardware) y logsticos.
Para nuestro
siguiente:
-

proyecto

en

recursos

humanos

Usamos el programa NetBeans 6.9 para


poder realizar la implementacin del GUI
como la implementacin de las clases
usadas para nuestro proyecto as como
tambin la adicin del plugin de UML para
el diseo del Diagrama de Clases como
punto de partida de nuestro proyecto .
Usamos una PC AMD athlon x2 con 3gb de
ram para poder Run proyect de manera
mucho ms rpida.

En Logstica:
-

usamos

lo

Tiempo por cada uno de los miembros del equipo para elaborar el
proyecto.
Uso de distintos materiales de estudio, como libros y material de
informacin obtenido de internet (foros de programacin, blogs
sobre algn tipo de lenguaje de programacin en especial,
comunicacin con compaeros acerca del tema).
Ejemplos de lo referente a nuestro tema de proyecto. Para darnos
idea de lo que vendr a ser en concreto a nuestro proyecto de
Sistema de Biblioteca como nuestra Primera Parte de la Red Social
Educativa.

En relacin a Tcnico:
-

tcnicos.

Completo dominio de clases y atributos.


Uso de paquetes.

Saber el concepto de herencia, para nuestra clase Persona con


Administrador y Usuario.
Uso de clases abstractas, en nuestro proyecto hacemos uso de
clases abstractas en la clase Persona.
Uso y manejo de Polimorfismo.
Uso del try y catch para manejar excepciones, usados para
ficheros, sockets y otras funciones que lanazan excepciones y
sobretodo saber reconocer que tipo de excepcin ser lanzada y
saber qu hacer en cada caso.
Manejo de eventos y dominio de la Interfaz Grfica como JFrame,
JTextField, JButton y adicionar acciones a realizar como respuesta a
cada evento.
Dominio de ficheros y de los flujos de datos asociados a stos para
leer y escribir a y desde un archivo en disco (Persistencia de
Objetos) mediante la interfaz Serializable.
Posteriormente se mejorar todo esto adicionando la funcionalidad
de comunicacin y transporte de mensajes de una a otra pc en
una misma red con la arquitectura Cliente Servidor mediante
Sockets mencionado anteriormente .

1.4 El cronograma de actividades a desarrollar:


Durante el periodo que estuvimos avanzando el proyecto:

Una semana nos dedicamos a lo que es la idea del proyecto,


bsqueda de informacin y un posible esquema de lo que vendra
a ser nuestro avance: Bosquejo de Diagrama de clases.

Otra semana empezamos al diseo o diagrama de clases para ver


que entidades entraran a tallar en nuestro tema para poder luego
implementarlos en cdigo. El Diagrama de clases UML facilita el
reconocimiento de las relaciones entre las clases tales como
generalizacin, asociacin, agregacin, composicin, dependencia
e implementacin.

Luego vendra a ser la implementacin de las clases directamente


en cdigo con ayuda del Entorno de Desarrollo Integrado (IDE)
NetBeans que ayude a reconocer nuestros errores en tiempo real
antes incluso de la compilacin.

ltima semana vemos la Interfaz grfica, manejo de eventos


asociados a los botones y ver con mayor detenimiento si ocurre
algn error entre las clases (Depurado Final del cdigo hasta antes
de este primer informe)

1.5 El Diagrama de Clases:

1.6 Diccionario de las clases (nombre de la clase,


objetivo, descripcin de los atributos y mtodos de
cada clase)
Para nuestro proyecto empleamos paquetes (package), dentro de cada
paquete se halla las siguientes clases:
Paquete Clases Base:
Clase Persona: Clase abstracta que tiene como propsito funcionar
como clase base para las otras clases de Clase Usuario y Clase
Administrador.
Tiene atributos de nombre y DNI.
Implementa de Serializable, para que sea posible la serializacin
(Persistencia de Objetos)
Clase Usuario: Clase que hereda de Persona y tiene como atributos un
nombre , DNI y cdigo, un boolean para saber si tiene o no un libro en su
posesin y un objeto de tipo Libro que nos brinda las caractersticas del
Libro que se le ha prestado en caso de que sea as.
Clase Administrador: Posee los atributos de Persona, ya que hereda
de sta. Tiene como propio abributo el de password, el cual nos dara
acceso para entrar como Administrador al programa.
Clase Libro: Clase principal el cual tiene como atributos el cdigo, titulo
y autor de libro, y un boolean para conocer si un libro est disponible o
no.
Paquete Clases Conjunto:
Clase Biblioteca: Implementa Serializable para poder guardar los
objetos creados.
Podra decirse que es una de las clases ms importantes de nuestro
Sistema ya que esta clase declara y define los mtodos de
almacenamiento, bsqueda y ordenacin de los Libros y Usuarios de la
Biblioteca de nuestra Red Social Educativa.
Tiene como atributos: un ArrayList que nos almacena los libros creados,
un contador de libros:nLibros, un ArrayList para almacenar los Usuarios
que se registran, y un contador para saber la cantidad de Usuarios que
existe: nUsers.
Uitiliza los siguiente mtodos ms importantes:

-agregaLibro: agregar un nuevo Libro al Array de Libros.


-buscarLibro: realiza una bsqueda recursiva para obtener un libro tanto
por cdigo, autor o titulo.
-modificarLibro: realiza una bsqueda para obtener la posicin, luego se
pasara a editar datos del libro a modificar.
-eliminarLibro: realiza una bsqueda para obtener la posicin, luego se
proceder a eliminar un Libro del Array de Libros.
-agregarUsuario: aade al Array de Usuarios, un nuevo objeto de tipo
Usuario para almacenarlo en el Array.
-buscarUsuario: realiza una bsqueda secuencial iterativa dentro del
ArrayList listaUsuarios para obtener un Usuario.
Las bsquedas en la mayora de los casos tanto para libros como para
usuarios es por cdigo ya que es el nmero identificativo de cada
elemento dentro de su coleccin. No hay dos libros con el mismo cdigo.
Pueden tener el mismo ttulo y/o el mismo autor pero nunca el mismo
cdigo. Por ello es que cuando agregamos un nuevo libro primero
buscamos si es que no hay otro libro agregado anteriormente que ya
tenga ese cdigo. Caso similar para Usuarios.
Paquete Clases GUI :
GUI (Interfaz Grfica de Usuario) son un conjunto de clases que heredan
de Jframe o Jdialog para mostrar los elementos que interactuarn con el
usuario final que haga uso de nuestro software. Son las ventanas que
cumplen distintas funciones ya sea de entrada o muestra de resultados.
Cabe indicar que tambin usamos JoptionPane para los procedimientos
sencillos de ingreso de algunos datos de usuario o mostrar un mensaje
de confirmacin. Los JoptionPane facilitan este proceso sin la necesidad
de crear un ventana heredada de Jframe para esa accin.
Clase Login: JFrame que permite el ingreso como Administrador del

Sistema de Biblioteca.
Por comodidad la contrasea para ingresar a este programa es 123.

Clase GUIAdmin: Es un JFrame el cual contiene los siguientes

caractersticas:
En el men Ayuda solo se presentan algunos recursos
externos al programa para profundizar o comprender
mejor la idea del proyecto y los mtodos utilizados.

Clase GUIUsuario: Es un JFrame el cual contiene los siguientes


caractersticas:

Las acciones de Archivo, Mostrar, Buscar, y Ayuda cumplen las


siguientes funciones:
Archivo: Se puede crear nuevo usuario, Solicitar libro, Devolver libro,
Mostrar: muestra los libros en un Jtable que esta catalogados por cdigo,
titulo y autor.
Buscar: busca un libro por cdigo, titulo o autor.
Ayuda: realiza las mismas acciones que en GUIadmin.

1.7 Diseo de la Arquitectura Grfica del Proyecto.


(Conjunto de ventanas del Proyecto)
Para nuestro avance implementamos la parte Administrativa que
por interfaz tiene esta arquitectura:

Donde el GUI del Administrador comprendera un men swing que


tiene un men Archivo, Mostrar y Buscar.
Posee un JTable el cual mostrara los datos de los libros que se
aaden al programa.

Para la parte de Usuario, que viene a ser un alumno de la Facultad:

Donde el GUI del Usuario comprendera un men swing que tiene


un men Archivo, Mostrar y Buscar.
Posee un JTextField para ver la cantidad de libros que almacena el
programa y otro JTextField para ver la cantidad de libros que puede
obtener si el cliente o usuario desea algn libro.

1.8 Cdigo Bsico del programa Red Social Educativa


(Sistema de Biblioteca)
//CLASE PERSONA
package ClasesBase;

import java.io.Serializable;
public abstract class Persona implements Serializable {
private String nombre;
private String DNI;
//constructor sin parmetros
public Persona() {
}
//constructor con parmetros
public Persona(String nombre, String DNI) {
this.nombre = nombre;
this.DNI = DNI;
}
//metodos de acceso a los atributos privados
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getDNI() {
return DNI;
}
public void setDNI(String DNI) {
this.DNI = DNI;
}
//redefiniendo el mtodo toString de la clase Object
@Override
public String toString() {
return "Nombre: " + nombre + "\nDNI: " + DNI;
}

//CLASE USUARIO
package ClasesBase;
import java.io.Serializable;
public class Usuario extends Persona implements Serializable {
private String codigo;
private boolean tieneLibro = false;
private Libro lib;
public Usuario() {
}
public Usuario(String nombre, String DNI, String codigo) {
super(nombre, DNI);
this.codigo = codigo;
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public boolean tieneLibro() {
return tieneLibro;
}
public void setTieneLibro(boolean b) {
tieneLibro = b;
}
public Libro getLib() {
return lib;
}
public void setLib(Libro lib) {
this.lib = lib;
}

@Override
public String toString() {
return super.toString()
+ "\nCodigo de Estudiante: " + codigo;
}
}

//CLASE ADMINISTRADOR
package ClasesBase;
import java.io.Serializable;
public class Administrador extends Persona implements Serializable {
private String password;
public Administrador() {
}
public Administrador(String nombre, String DNI, String password) {
super(nombre, DNI);
this.password = password;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return super.toString()
+ "\nPassword: " + password;
}
}

//CLASE LIBRO

package ClasesBase;
import java.io.Serializable;
public class Libro implements Serializable {
private
private
private
private

String codigolibro;
String titulolibro;
String autorlibro;
boolean disponible = true;

public Libro() {
}
public Libro(String cl, String tl, String al) {
this.codigolibro = cl;
this.titulolibro = tl;
this.autorlibro = al;
}
public String getCodigolibro() {
return codigolibro;
}
public void setCodigolibro(String codigolibro) {
this.codigolibro = codigolibro;
}
public String getTitulolibro() {
return titulolibro;
}
public void setTitulolibro(String titulolibro) {
this.titulolibro = titulolibro;
}
public String getAutorlibro() {
return autorlibro;
}
public void setAutorlibro(String autorlibro) {
this.autorlibro = autorlibro;
}
public boolean isDisponible() {

return disponible;
}
public void setDisponible(boolean estado) {
this.disponible = estado;
}
@Override
public String toString() {
if (isDisponible()) {
return "Codigo: " + codigolibro
+ "\nTitulo: " + titulolibro
+ "\nAutor : " + autorlibro
+ "\nEstado: Disponible";
} else {
return "Codigo: " + codigolibro
+ "\nTitulo: " + titulolibro
+ "\nAutor : " + autorlibro
+ "\nEstado: Ocupado";
}
}
}

//CLASE BIBLIOTECA
package ClasesConjunto;
import
import
import
import

ClasesBase.Libro;
ClasesBase.Usuario;
java.io.Serializable;
java.util.ArrayList;

import java.util.Iterator;
import javax.swing.JOptionPane;
public class Biblioteca implements Serializable {
private
private
private
private

ArrayList listaLibros;
int nLibros = 0;
ArrayList listaUsuarios;
int nUsers = 0;

public Biblioteca() {
listaUsuarios = new ArrayList();
listaLibros = new ArrayList();
}
public void agregarLibro(Libro L) {
Libro lib;
int k;
listaLibros.add(L);
for (k = nLibros - 1; k >= 0 && Integer.parseInt((lib = (Libro)
listaLibros.get(k)).getCodigolibro())
>
Integer.parseInt(L.getCodigolibro()); k--) {
listaLibros.set(k + 1, lib);
}
listaLibros.set(k + 1, L);
nLibros++;
}
private int busquedaBinaria(int i, int f, String cod) {
if (i == f) {
if (Integer.parseInt(((Libro) listaLibros.get(i)).getCodigolibro()) ==
Integer.parseInt(cod)) {
return i;
}
return -1;
}
int m = (i + f) / 2;
if (Integer.parseInt(cod) > Integer.parseInt(((Libro)
listaLibros.get(m)).getCodigolibro())) {
return busquedaBinaria(m + 1, f, cod);
}
return busquedaBinaria(i, m, cod);
}
public int buscarLibroC(String cod) {
if (nLibros == 0) {

return -1;
}
return busquedaBinaria(0, nLibros - 1, cod);
}
public int buscarLibroT(String titulo) {
int i = 0;
Iterator it = listaLibros.iterator();
while (it.hasNext()) {
if (((Libro) it.next()).getTitulolibro().equals(titulo)) {
return i;
}
i++;
}
return -1;
}
public int buscarLibroA(String autor) {
int i = 0;
Iterator it = listaLibros.iterator();
while (it.hasNext()) {
if (((Libro) it.next()).getAutorlibro().equals(autor)) {
return i;
}
i++;
}
return -1;
}
public void modificarLibro(String codigo) {
int pos = buscarLibroC(codigo);
if (pos != -1)//encontr el libro
{
((Libro)
listaLibros.get(pos)).setTitulolibro(JOptionPane.showInputDialog("Ingrese
nuevo ttulo"));
((Libro)
listaLibros.get(pos)).setAutorlibro(JOptionPane.showInputDialog("Ingrese
nuevo autor"));
} else//no encontr libro
{

JOptionPane.showMessageDialog(null, "Libro no existe",


"Mensaje", JOptionPane.ERROR_MESSAGE);
}
}
public void eliminarLibro(String cod) {
int pos = buscarLibroC(cod);
if (pos != -1) {
listaLibros.remove(pos);
nLibros--;
} else {
JOptionPane.showMessageDialog(null, "Libro no existe",
"Mensaje", JOptionPane.ERROR_MESSAGE);
}
}
public int numeroLib() {
return nLibros;
}
public int numeroLibDisponibles() {
int cont = 0;
Iterator it = listaLibros.iterator();
while (it.hasNext()) {
if (((Libro) it.next()).isDisponible()) {
cont++;
}
}
return cont;
}
public Libro libro(int i) {
return (Libro) listaLibros.get(i);
}
public void agregarUsuario(Usuario U) {
listaUsuarios.add(U);
nUsers++;
}
public int buscarUsuario(String cod) {
int i = 0;

Iterator it = listaUsuarios.iterator();
while (it.hasNext()) {
if (((Usuario) it.next()).getCodigo().equals(cod)) {
return i;
}
i++;
}
return -1;
}
public Usuario usuario(int i) {
return (Usuario) listaUsuarios.get(i);
}
public int numeroUsuarios() {
return nUsers;
}
}

Das könnte Ihnen auch gefallen