simulador de procesos

Iniciado por m@o_614, 23 Junio 2015, 03:36 AM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

Saludos

Tengo el siguiente programa que se trata de un simulador de procesos

Tengo que introducir desde el teclado N procesos, estos seran los que conformen los lotes,
la capacidad máxima de un lote es de 5, y si el número de procesos que se introduce
excede esta cantidad, se conformará otro lote.Al terminar un lote se ejecuta.

La información a capturar por cada proceso es:

1)Nombre de Programador
2)Operación(+,-,*,/) y datos a realizar(validar operaciones)
3 Tiempo Máximo Estimado (validar, debe ser mayor a 0)

Los procesos se atenderán en el orden en que se capturaron. En pantalla debe mostrarse lo
siguiente:

a) Procesos en Espera
   1) Nombre de programador
   2) Tiempo Maximo Estimado
   3) Si hay lotes en espera, anotar el número de lotes pendientes.
b) Proceso en Ejecucion
   1) Se deberán mostrar todos los datos del proceso (Nombre, Operacion, tiempo max)
   2) Tiempo transcurrido de ejecución
   3) Tiempo restante por ejecutar.
c) Procesos Terminados
   1) Número de Programa
   2) Operación y datos
   3) Resultado de la operación.

Desde que se inicia la simulacion, se desplegará un reloj global, es decir, un contador
que lleve el tiempo desde el inicio del programa hasta que termine
El programa se pausa una vez que se hayan realizado todas las operaciones.

hasta ahora tengo ya la parte que captura la información de los procesos y los va
almacenando en un arreglo de tipo infoProceso, pero no se bien como tengo que usar hilos
(Threads) para que se vayan ejecutando los procesos, tengo que usar una clase para los lotes???

el codigo es el siguiente:

Código (java) [Seleccionar]
class infoProceso{
String nombreProgramador;
int numeroPrograma,tiempoMaximo,num1,num2,resultado;
char operador;
}

public class ProcesamientoPorLotes
{
public static int MAX = 5;
public static infoProceso[] lote = new infoProceso[50];
public static void main(String[] args)
{
int numProcesos;
Scanner entradaTeclado = new Scanner(System.in);
System.out.println("Dame el numero de procesos: ");
numProcesos = entradaTeclado.nextInt();
entradaTeclado.close();
capturarInformacion(numProcesos);
}

public static void capturarInformacion(int numProcesos)
{
String nombre = "",operador = "";
boolean opValido,tiempoValido = true,idRepetido = false;
int tiempo,numero,i,j;
        for(i = numProcesos;i > 0;i--)
        {
for(j = 0;j < MAX;j++)
{
Scanner teclado = new Scanner(System.in);
//ingresar nombre del programador
System.out.println("Dame Nombre de Programador: ");
nombre = teclado.nextLine();
lote[j].nombreProgramador = nombre;
//ingresar la operación
do
{
System.out.println("Dame la Operacion: ");
operador = teclado.nextLine();
teclado.close();
opValido = validarOperador(operador);
}while(!opValido);
capturarOperacion(operador,j);
//ingresar el máximo tiempo estimado
do
{
System.out.println("Dame el tiempo maximo estimado: ");
tiempo = teclado.nextInt();
teclado.close();
tiempoValido = validarTiempo(tiempo);
}while(!tiempoValido);
lote[j].tiempoMaximo = tiempo;
//ingresar ID
do
{
    System.out.println("Dame el numero de programa: ");
    numero = teclado.nextInt();
    teclado.close();
    verificarID(numero);
}while(idRepetido);
}
//
}
}

public static boolean verificarID(int numero)
{
boolean esRepetido = false;
return esRepetido;
}

public static boolean validarOperador(String op)
{
boolean esValido;
char operador = op.charAt(0);
if(operador == '+' || operador == '-' || operador == '*' || operador == '/')
   esValido = true;
else
   esValido = false;
return esValido;
}

public static boolean validarTiempo(int tiempo)
{
boolean esValido = true;
if(tiempo <= 0)
{
        System.out.println("Tiempo invalido (debe ser mayor a 0).\nIntroducir dato nuevamente");
        esValido = false;
}
return esValido;
}

public static void capturarOperacion(String op,int j){
char operador = op.charAt(0);
int num1,num2;
Scanner entrada1 = new Scanner(System.in);
Scanner entrada2 = new Scanner(System.in);
System.out.println("Dame el numero1: ");
        num1 = entrada1.nextInt();
        System.out.println("Dame el numero2: ");
        num2 = entrada2.nextInt();
        lote[j].num1 = num1;
    lote[j].num2 = num2;
    lote[j].operador = operador;
switch(operador)
{
    case '+': 
       lote[j].resultado = lote[j].num1+lote[j].num2;
       break;
    case '-':
       lote[j].resultado = lote[j].num1-lote[j].num2;
       break;
    case '*':
       lote[j].resultado = lote[j].num1*lote[j].num2;
       break;
    case '/':
       lote[j].resultado = lote[j].num1/lote[j].num2;
       break;
}
entrada1.close();
entrada2.close();
}
}


de antemano gracias