ALGORITMO Y PROGRAMA DE COLAS ( PRORIDAD- IMPLEMENTACION DEL RELOJ)

Ejemplo con colas
Operaciones
• añadir un cliente
• atender a un cliente
• obtener el tiempo medio de espera de los clientes que aún no
han sido atendidos
• obtener el tiempo medio de espera de los clientes ya atendidos
• mostrar el estado de las colas
Escribir también un programa de prueba
Para la fecha y hora usar la clase predefinida Calendar

import java.util.*;
public class ColaEspera {
/** Clase interna para almacenar todos los
* datos de un cliente
*/
private static class DatosCliente {
Cliente c;
long entrada, salida; // milisegundos
/** Constructor; pone la hora de entrada*/
DatosCliente (Cliente c) {
this.c=c;
entrada=Reloj.ahora();
}
/**
* Nuevo cliente; se mete en la cola de espera
*/
public void nuevoCliente(Cliente c)
{
DatosCliente datos=new DatosCliente(c);
colaEspera.add(datos);
}
/**
* Atender cliente: se saca de la cola de
* espera y se mete en la de atendidos;
* retorna el cliente atendido
*/
public Cliente atenderCliente()
throws NoSuchElementException
{
DatosCliente datos=colaEspera.remove();
datos.atiende();
colaAtendidos.add(datos);
return datos.c;
}
{
long tiempo=0;
int num=0;
long ahora=Reloj.ahora();
for (DatosCliente datos: colaEspera) {
tiempo=tiempo + ahora-datos.entrada;
num++;
}
if (num==0) {
return 0.0;
} else {
return (((double) tiempo)/num)/1000.0;
}
}
public double tiempoEsperaAtendidos()
{
long tiempo=0;
int num=0;
for (DatosCliente datos: colaAtendidos) {
tiempo=tiempo+datos.salida-datos.entrada;
num++;
}
if (num==0) {
return 0.0;
} else {
return (((double) tiempo)/num)/1000.0;
}
}
}
/**
* Clase enumerada que representa la
* urgencia de un cliente
*/
public enum Urgencia
{
baja, media, alta
}
import java.util.*;
/public class ColaEsperaConUrgencia
{
/**
* Clase interna para almacenar los datos
* de un cliente con urgencia
*/
private static class DatosCliente
implements Comparable
{
Cliente c;
Urgencia urg;
/**
* Constructor de DatosCliente
*/
DatosCliente (Cliente c, Urgencia urg) {
this.c=c;
this.urg=urg;
}
/*
* Comparación de clientes por su urgencia
*/
public int compareTo(DatosCliente otro) {
return this.urg.compareTo(otro.urg);
}
// cola del servicio
private Queue colaEspera;
/**
* Constructor de ColaEspera
*/
public ColaEsperaConUrgencia()
{
colaEspera=new
PriorityQueue();
}
/**
* Nuevo cliente; se mete en la cola de espera
*/
public void nuevoCliente
(Cliente c, Urgencia urg)
{
DatosCliente datos=new DatosCliente(c,urg);
colaEspera.add(datos);
}
/**
* Atender cliente: se saca de la cola de
* espera; retorna el cliente atendido
*/
public Cliente atenderCliente()
throws NoSuchElementException
{
DatosCliente datos=colaEspera.remove();
return datos.c;
}
/**
* Mostrar el estado de la cola de espera
*/
public void muestraEstado() {
System.out.println();
System.out.println("--Estado de la cola--");
System.out.println("No atendidos "+
colaEspera.size());
if (colaEspera.size()>0) {
for (DatosCliente datos:colaEspera) {
System.out.println(datos.c+" urgencia:
"+datos.urg);
}
}
}
/**
* Num clientes en espera
*/
public int numClientesEnEspera() {
return colaEspera.size();
}
}




/*
* Reloj.java
*/

import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Calendar;
import java.text.SimpleDateFormat;

public class Reloj extends javax.swing.JApplet {

/** Constructor Reloj */
public Reloj() {
initComponents ();
}

/** Metodo llamado dentro del Constructor
*/
private void initComponents () {

// Instancia de Timer / Auxiliar para Reloj
tmrSegundos = new com.osmosislatina.reloj.Timer ();
jlblTiempoActual = new javax.swing.JLabel ();

// Clase Interna de TimerListener / Auxiliar para Reloj
tmrSegundos.addTimerListener (new com.osmosislatina.reloj.TimerListener () {
public void onTime (java.awt.event.ActionEvent evt) {
tmrSegundosOnTime (evt);
}
}
);

jlblTiempoActual.setText ("00:00:00");
jlblTiempoActual.setHorizontalAlignment (javax.swing.SwingConstants.CENTER);
jlblTiempoActual.setFont (new java.awt.Font ("Serif", 1, 30));


getContentPane().add (jlblTiempoActual, java.awt.BorderLayout.CENTER);


}


private void tmrSegundosOnTime (java.awt.event.ActionEvent evt) {
gCal.add(Calendar.SECOND,1);
String timeTxt = formatter.format(gCal.getTime());
if (jlblTiempoActual != null)
jlblTiempoActual.setText(timeTxt);
}

// Variables
private com.osmosislatina.reloj.Timer tmrSegundos;
private javax.swing.JLabel jlblTiempoActual;
private GregorianCalendar gCal = new GregorianCalendar();
private SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss");



No hay comentarios:

Publicar un comentario