Simulacion Cola de Un Banco

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 7

Diseñar e implementar una clase para simular la cola de atención de un banco,

donde los nodos de la lista con la que se implanta contiene el nombre del usuario,
el valor de la operación y el nombre de la operación.
Suponga que la cola para el cajero del banco solo puede contener a 15 personas.
Además considere que la probabilidad de entrada o llegada de un cliente es del
30% y la atención es del 60% (10% cajero sin actividad) de modo que a lo largo
del tiempo el programa agregue o elimine un nuevo cliente generando al azar la
operación a realizar. Imprima en todo momento el nombre del cliente del frente y
su operación y el nombre del cliente final.
Simulación

Se creará un programa que simule el proceso una cola de banco de N clientes, para obtener
información estadística.

Propiedades del cliente

 servicio : identificador numérico (único) que representa el requerimiento.

Los requerimientos son los siguientes :

1.- depósito --> cliente realiza un depósito


2.- giro --> cliente realiza giro
3.- ambos --> cliente realiza un giro y un depósito
4.- otro --> cliente realiza otro requerimiento ( ej : cambiar
dólares )
5.- nulo --> cliente es atendido pero no realiza trámite
 tipoCuenta : identificador numérico (único) que representa el tipo de cuenta del Cliente

Tipos de cuenta :

1.- Cuenta Corriente


2.- Cuenta de Ahorro
3.- ninguna --> cliente no se identifica con cuenta alguna
 tiempoMax : tiempo máximo que el cliente está dispuesto a estar en la cola.

Esta propiedad será medida en segundos, y será asignada aleatoriamente.

 tiempoEspera : tiempo que permanece el cliente en la cola.


 tiempoServicio : tiempo que demora en realizar el trámite .

Con estas características estamos en condiciones de crear la clase ClienteBanco

class ClienteBanco
{
int servicio;
int tipoCuenta;
int tiempoMax;
int tiempoEspera;
int tiempoServicio;
}

Propiedades de la simulación

Proceso del cliente


1) Llega al final de cola

2) Por cada puesto que avanza , incrementa su variable tiempoEspera, que


corresponde al tiempo de Servicio del último cliente en ser atendido.

3) Si todavía se encuentra en la cola y su tiempo de espera sobrepasa a


su tiempo
máximo de espera (tiempoMax) se retira de la cola y se va.

4) Si todavía se encuentra en la cola y le toca el turno para ser


atendido, éste sale
de la cola terminando su tiempo de espera.

5) Al empezar el trámite virtual se asigna aleatoriamente un tiempo de


servicio (tiempoServicio)

6) Finaliza la atención, y se actualiza la cola.

Estadísticas

Despúes de procesar a N clientes se quiere saber lo siguiente :

a) Tiempo promedio de espera


b) Tiempo promedio de servicio
c) Cantidad de clientes que abandonaron la cola durante el proceso.
d) cantidad de clientes atendidos
e) Porcentaje de clientes que realizaron requerimiento i-esimo (giro, depósito..)
f) Porcentaje de clientes que presentaron Cuenta i-ésima (corriente , ahorro ..)
g) Total de clientes atendidos

Creación de una clase estadística


Necesitamos un objeto capaz de almacenar todos los datos requeridos y además realizar
operaciones necesarias para obtenerlos.

class Estadistica
{
public Estadistica(int numRequerimientos, int numTiposCuenta);

public void informe(String strReq[ ] , String strTipoDeCuenta[ ] );


public void ClienteDespachado(ClienteBanco cte ,boolean atendido)
public static double redondear(double num, int decimales);
}

*nota : esta clase consta de seis atributos privados , un constructor, tres métodos públicos y
seis métodos privados.

bajar implementación (Clases : ClienteBanco y Estadistica)


Estadistica( ) : requiere como parámetro el número de requerimientos y
tipos
de cuenta del cliente ( 5 y 3 respectivamente).

informe( ) : muestra en pantalla los valores estadñisticos obtenidos en


el proceso. Como parámetro requiere dos arreglos de String con las
descripciones
respectivas de requerimientos y tipos de Cuenta.

Ejemplo

private String strReq[ ] = { "deposito","giro ","ambos ","otro


","nulo "};
private String strCuenta[ ] = { "corriente","ahorro ","ninguna "};

estad.informe(strReq,strCuenta);

ClienteDespachado( ) : actualiza las variables según la información del


último
cliente que salió de la cola, fuera atendido o no.

redondear( ) : Redondea una variable double a un número determinado de


decimales.

Creación de una clase Simulación

Se creo una clase que manejara internamente una estructura de tipo Cola y un objeto
Estadistica, proporcionando sólo, los métodos naturales para realizar la simulación desde
un programa de prueba.

class Simulacion
{
public final static int NUM_REQUERIMIENTOS = 5;
public final static int NUM_TIPOS_CUENTA = 3;
public static int TIEMPO_MAX_PROM = 1550;
public static int DESV_TMAX= 205;
public static int TIEMPO_SERV_PROM = 97;
public static int DESV_TSERV = 15;
public static double TASA_LLEGADA = (7.0 / 3.0);

public Simulacion( );

public void llegaCliente( );


public void atenderCliente( );
public int generarClientes( );
public void informe( );
public boolean ColaVacia( );
}

*nota : esta clase consta de cuatro atributos privados ,siete atributos públicos y estáticos ,
un constructor, cinco métodos públicos y cinco métodos privados.

bajar implementación
NUM_REQUERIMIENTOS : número de operaciones o requerimientos.

NUM_TIPOS_CUENTA : tipos de cliente según cuenta.

TIEMPO_MAX_PROM : tiempo máximo de espera (primedio).

DESV_TMAX : desviación estandar de tiempo máximo de espera.

TIEMPO_SERV_PROM : tiempo promedio de servicio.

DESV_TSERV : desviación estandar del tiempo de servicio.

TASA_LLEGADA : tasa de llegada de clientes. En este caso por cada siete


clientes
que llegan a la cola, tres se van de ella.

llegaCliente( ) : incluye un nuevo cliente en la Cola, asignando


aleatorialente el requerimiento, tipo de cuenta y tiempo máximo de
espera.

atenderCliente( ) : elimina el primer elemento de la cola y obtiene su


información
para actualizar la cola entera ( tiempos de espera ). Durante la
actualización se producen
abandonos por citerio de tiempo máximo de espera.

generarClientes( ) : genera un número ( N > 0 ) determinado de clientes


para
que se incorpore a la cola, retornando la cantidad generada.
Este número se determina aleatoriamente según la tasa de llegada.
informe( ) : muestra el informe estadístico. ColaVacia( ) : retorna true si la cola se
encuentra sin elementos, false en caso contrario.

Programa de prueba
Este programa consiste en realizar una sumulación con los siguientes datos ingresados por
teclado :

 número inicial de clientes : Se incorporan clientes a la Cola pero no se atienden.


Representa a la cola inicial, antes que la caja comience a atender.
 número esperado de clientes : es el número de clientes que se quiere incoprporar a la
cola, para realizar la simulación. El proceso termina cuando la cola se vacía.

Código fuente

import java.io.*;

class ProgSimulacion
{
public static void main(String arg[ ])
{

Simulacion simul = new Simulacion( );

BufferedReader in = new BufferedReader(new


InputStreamReader(System.in));

int cont = 0;
int cte_esp = 0;

try
{
System.out.print("\n\tIngrese clientes iniciales : ");
int cte_ini = Integer.parseInt(in.readLine( ) );

do
{
simul.llegaCliente( );
cont++;
} while(cont < cte_ini);

} catch(Exception e) { System.out.println("Error : " + e); }

try
{
System.out.print("\n\tIngrese clientes esperados : ");
cte_esp = Integer.parseInt(in.readLine( ) );
}
catch(Exception e)
{
cte_esp = 200;
System.out.println("\tPor error de entrada, se usara el valor
200");
}

while(cont < cte_esp)


{
cont += simul.generarClientes( );
simul.atenderCliente( );
}

while (!simul.ColaVacia( ) )
{
simul.atenderCliente( );
}

System.out.println( );
simul.informe( );
System.out.println( );
}

También podría gustarte