lunes, 24 de mayo de 2010

Proyecto 2

Aqui esta una propuesta basica para resolver el Proyecto 2

/**
 * @(#)empleado.java
 *
 * Imprime el recibo de pago de un empleado, de acuerdo a los datos introducidos:
 * auxiliar de Horas Trabajadas en un mes y el Pago por Hora correspondiente.
 * Se toma en cuenta las deducciones correspondientes al Seguro Social, Ley de Politica Habitacional, y
 * Paro Forzoso. De igual manera el pago de horas extras, pago de un bono adicional del 30% al empleado
* que tenga mas de 20 horas extras, y otro bono adicional del 10 % para el empleado que labora sus horas correspondientes,
 * sin ninguna inasistencia, y el pago por hora sea menor a BsF. 20.
 *
 * * @author DOMINGO CLEMENTE
 * @version 1.00 2010/5/20
 */
import java.io.*;
import java.text.NumberFormat;

public class empleado{
       
        String nombre;    // Nombres y Apellidos del Empleado.
        int horastrabajadas; // auxiliar de horas trabajadas en el mes.
        double pagohora; // Pago por hora trabajada.
        double sueldobasico; // Monto del sueldo basico del empleado.
        double horasextras; //Monto a pagar por las horas extras laboradas
        double bono1; // Establece los montos del bono (30 % del salario basico) correspondiente a aquellos empleados que laboren mas de 20 horas extras.
        double bono2; // Establece el monto del bono (10 % del salario basico) correspondiente por asistencia completa y un pago por hora menor a BsF 20.
        double sso; // Deduccion correspondiente al Seguro Social por un monto del 4 % del sueldo basico hasta un maximo de Bs 5.000.
        double lph; // Deduccion correspondiente a la Ley de Politica Habitacional por un monto del 2 % del sueldo basico hasta un maximo de Bs 5.000.
        double paro; // Deduccion correspondiente al Paro Forzoso por un monto del 0.5% del sueldo basico hasta un maximo de Bs 5.000.       
       
        public empleado(){
            nombre=" ";
            horastrabajadas=0;
            pagohora=0;
            sueldobasico=0;
            horasextras=0;
            bono1=0;
            bono2=0;
            sso=0;
            lph=0;
            paro=0;
        }

   //Calcula el sueldo basico que recibira el empleado de acuerdo a las horas trabajadas.
    double sueldo (){
        if (horastrabajadas<160){
            sueldobasico=horastrabajadas*pagohora;
        }
        else{
            sueldobasico=160*pagohora;
        }
        return sueldobasico;
    }
           
    //Calcula el monto del pago de las horas extras.
    double he (){
        if (horastrabajadas>160){
            horasextras=(horastrabajadas-160)*2*pagohora;
        }
        else{
            horasextras=0;
        }
        return horasextras;
    }

    //Calcula el monto de los bonos sean del tipo 1 o del 2.
    double bono (int i){       
        if (i==1){
            if (horastrabajadas>180){
                bono1=160*pagohora*0.3;
            }   
            else{
                bono1=0;
            }               
            return bono1;
        }
        else {
            if ((horastrabajadas>=160) && (pagohora<20)) {
                bono2=160*pagohora*0.1;
            }       
            else{
                bono2=0;
            }       
            return bono2;                   
        }       
    }

    //Calcula las deducciones de acuerdo a cada caso.
    double d(int i) {
       
        if (sueldobasico>5000){
            sso=5000*0.04;           
            lph=5000*0.02;                           
            paro=5000*0.005;                                           
        }
        else{
            sso=sueldobasico*0.04;                                                   
            lph=sueldobasico*0.02;                 
            paro=sueldobasico*0.005;                  
        }
        switch (i){
            case 1:
                return sso;   
            case 2:
                return lph;
            case 3:                   
                return paro;
            default:
                return 0.0;
        }   
    }   


  //Llamada al metodo main.      
    public static void main (String[] args) throws IOException {
        String opcion;
        BufferedReader in;
        in=new BufferedReader(new InputStreamReader(System.in));
        empleado e= new empleado();
        NumberFormat nf = NumberFormat.getCurrencyInstance();
               
        do {                               
            System.out.println("\n\n\n");
            System.out.println("   *****  Menu de Nomina  *****\n");
            System.out.println("            1: Calcular Pago.");
            System.out.println("            2: Condiciones.");
            System.out.println("            3: Salir.\n");
            System.out.print("   Seleccione una Opcion: ");
            opcion=in.readLine();
           
            if (opcion.equals("1"))    {
   
                System.out.print("\n\n   Indique el nombre del empleado: ");
                e.nombre=in.readLine();
                System.out.print("   Indique las horas trabajadas:   ");
                e.horastrabajadas=Integer.parseInt(in.readLine());           
                System.out.print("   Indique el pago por hora:       ");
                e.pagohora=Double.parseDouble(in.readLine());               
               
                System.out.println("\n\n\n");
                System.out.println("   ************   RECIBO DE PAGO  ************\n\n");
                System.out.println("   NOMBRE:           " + e.nombre);
                System.out.println("   HORAS TRABAJADAS: " + e.horastrabajadas);
                System.out.println("   PAGO POR HORA:    " + nf.format(e.pagohora));
                System.out.println("\n\n   ************    ASIGNACIONES   *************\n");
                System.out.println("   SUELDO BASICO:                 " + nf.format(e.sueldo()));   
                if (e.horastrabajadas>160) {
                    System.out.println("   HORAS EXTRAS (" + (e.horastrabajadas-160) + "):             " + nf.format(e.he()));
                }
                if (e.horastrabajadas>180) {               
                    System.out.println("   BONO CANTIDAD HORAS EXTRAS:    " + nf.format(e.bono(1)));
                }
                if ((e.horastrabajadas>=160) && (e.pagohora<20)){
                    System.out.println("   BONO ASISTENCIA:               " + nf.format(e.bono(2)));
                }
                System.out.println("\n                                     =============\n");
                System.out.println("   TOTAL ASIGNACIONES:            " + nf.format(e.sueldobasico+e.horasextras+e.bono1+e.bono2));
               
                   
                System.out.println("\n\n   ************    DEDUCCIONES    *************\n");
               
                System.out.println("   SSO:                              " + nf.format(e.d(1)));                                   
                System.out.println("   LPH:                              " + nf.format(e.d(2)));
                System.out.println("   PARO FORZOSO:                     " + nf.format(e.d(3)));       

                System.out.println("\n                                    =============\n");
                System.out.println("   TOTAL DEDUCCIONES:                " + nf.format(e.sso+e.lph+e.paro));
                System.out.println("\n                                  =============\n");
                System.out.println("   SUELDO NETO:                   " + nf.format((e.sueldobasico+e.horasextras+e.bono1+e.bono2)-(e.sso+e.lph+e.paro)));

            }

            if (opcion.equals("2"))    {
                System.out.println("\n\n   **********    CONDICIONES PARA EL CALCULO DEL PAGO DEL SALARIO    **********");
                System.out.println("\n\n   1. El salario es cancelado mensualmente.");
                System.out.println("   2. Las horas de trabajo minimas son 160 por mes, y el pago se calcula por hora laborada.");
                System.out.println("   3. Las horas extras son canceladas a partir de la hora 161, siempre y cuando el empleado no tuvo inasistencias en el mes.");
                System.out.println("   4. Si posee inasistencias, las horas extras no se contabilizan sino como horas sencillas hasta completar las 160 horas minimas.");
                System.out.println("   5. El empleado que labor mas de 20 horas extras al mes, recibira un bono equivalente al 30% del salario basico.");
                System.out.println("   6. Aquellos empleados que laboren sus 160 horas como minimo al mes, y el pago por hora sea menor a Bs. 20,");
                System.out.println("   recibira un bono equivalente al 10% del salario basico como incentivo.");
            }   
        } while (!opcion.equals("3"));

    }   
}
   

domingo, 9 de mayo de 2010

Resolucion de la Pregunta 2 de la Prueba

/**
*Este programa permite dada una frase introducida por el usuario contar la cantidad de digitos, caracteres
*especiales, letras, y las veces que se repite una letra.
*
*@author Domingo Clemente 
*@version 1.0
*/

import java.io.*;

public class p02{
    public static void main(String arg[])throws IOException    {
        int i, j, x, repeticion, letras, numero, blanco, otros;
        String str, cadena;

//LEER LA FRASE
        BufferedReader in;
        in=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("\n\n");
        System.out.print("Introduzca una frase: ");
        str=in.readLine();

//Creo un arreglo para contar cada caracter
        x = str.length();
        char c[] = new char [x];
        c = str.toCharArray(); //convierte el string a un array

//Inicializo los contadores
        numero=0;
        blanco=0;
        otros=0;
        letras=0;
          
        System.out.println("La frase de entrada es " + str);
        System.out.println("El tamaño de la frase es: " + x);
       
// Se cuentan los tipos de caracteres introducidos en la frase
        for(i=0; i
            if(Character.isLetter(c[i]))       

                letras+=1;
            else if(Character.isDigit(c[i])) //ver si es un digito
                numero+=1;
              else if(Character.isWhitespace(c[i]))// ver si es un espacio en blanco
                blanco+=1;
            else
                otros +=1; // es un caracter especial
        }

//Se imprimen los primeros resultados del analisis de la frase
        System.out.println("Cantidad de Letras es: " + letras);
        System.out.println("Cantidad de Digitos es: " + numero);
        System.out.println("Cantidad de Espacios en Blanco es: " + blanco);
        System.out.println("Cantidad de Caracteres Especiales es: " + otros);

// Se cuentan las repeticiones, cuando se consigue una repeticion, en esa posicion se le asigna un blanco,
// para no volverlo a contar, en la siguiente pasada del ciclo for.
       for(i=0; i
      {
                if(Character.isLetter(c[i])) //ver si es una letra
               {
                   repeticion=0;
                   for(j=i+1; j
 

//    Se verifican las repeticiones, sin tomar en cuenta si son mayusculas o minusculas.                      
                    if (Character.toUpperCase(c[i])==Character.toUpperCase(c[j]))
                    {
                        repeticion++;
                        c[j]=' ';
                    }
                }

// Si hay repeticiones, envio el mensaje con la cantidad de veces que se repite           
                if (repeticion>0)
                    System.out.println("La letra " + c[i] + " se repite: " + repeticion + " veces");
            }
        }
    }
}

Resolución de la Pregunta 1 de la Prueba

/**
*Este programa permite describir el vuelto exacto indicando la cantidad de monedas y billetes necesarios,
* de acuerdo al monto de la venta, porcentaje de descuento y el monto pagado por el cliente.
*
*/
import java.io.*;
import java.lang.Math;
import java.text.NumberFormat;

public  class p01 {
    public static void main (String args[]) throws IOException    {
    int i;
    String opcion;
    String []billetes=new String[12];
    int []sencillo = new int[12];
    int porcentaje;
    Double venta, venta2, pago, vuelto;
    NumberFormat nf = NumberFormat.getCurrencyInstance();
   
    /* INICIALIZO EL VALOR DE LAS MONEDAS Y BILLETES */
        billetes[0]="0.01";
        billetes[1]="0.05";
        billetes[2]="0.10";
        billetes[3]="0.25";
        billetes[4]="0.50";
        billetes[5]="1";
        billetes[6]="2";
        billetes[7]="5";
        billetes[8]="10";
        billetes[9]="20";
        billetes[10]="50";
        billetes[11]="100";

        BufferedReader in;
        in=new BufferedReader(new InputStreamReader(System.in));

        do {
//  INICIALIZO LA CANTIDAD DE BILLETES NECESARIOS PARA EL VUELTO A CERO
            for (i=0;i<12;i++) sencillo[i]=0;
            porcentaje = 0;
            venta2 = 0.0;
            System.out.println("\n\n\n");
            System.out.println("*****  Menu de Operaciones  *****\n");
            System.out.println("         1: Registrar una venta.");
            System.out.println("         2: Salir del Menu.\n");
            System.out.print("Seleccione una Opcion: ");
            opcion=in.readLine();

            if (opcion.equals("1"))            {
                do                 {
                    System.out.print("\n\nIntroduzca el Monto de la Venta:");
                        venta=Double.parseDouble(in.readLine());
                    if (venta<=0)
                        System.out.print("\n\nERROR el Monto de la venta debe ser mayor a Bs 0.\n\n\n");
                } while (venta<=0);           

                do {
                    System.out.print("\nIntroduzca el porcentaje del descuento: ");
                    porcentaje = Integer.parseInt(in.readLine());
                    if ((porcentaje<0)|(porcentaje>99))
                        System.out.print("\nERROR Monto del porcentaje debe ser >= 0 y < 100.\n\n");
                } while ((porcentaje<0) | (porcentaje>99)) ;
   
                venta2= (venta - (venta*porcentaje/100));
                System.out.print("\nEl monto a pagar es: " + nf.format(venta2) + ".\n\n");
               
                do {
                    System.out.print("\nIntroduzca el Monto del Pago: ");
                    pago=Double.parseDouble(in.readLine());
                    if (pago
                        System.out.print("\n\n\nERROR el Monto del Pago no puede ser menor a la venta.\n\n");
                } while (pago

                vuelto=pago-venta2;
                System.out.print("\n\nEl Monto de la Venta es: " + nf.format(venta));
                System.out.print("\nEl porcentaje de descuento es: " + porcentaje);
                System.out.print("\nEl monto a pagar es: " + nf.format(venta2));
                System.out.print("\n\nEl vuelto es: " + nf.format(vuelto) + "\n\n");

                i=11;
                while (i>=0)
                {
                    if (vuelto>=Double.valueOf(billetes[i]))
                    {
                        Double aux = new Double (vuelto / (Double.valueOf(billetes[i])));
                        sencillo[i]= aux.intValue();
                        vuelto = vuelto - (sencillo[i]*Double.valueOf(billetes[i]));
                    }
                    i--;
                }
                if ((pago-venta2)>0)   {
                    System.out.println("Entregar el vuelto de la siguiente manera:");
                    System.out.println("\n\n");
                    for (i=0;i<12;i++)
                    {
                        if (sencillo[i]==0)
                            continue;
                        else
                        {
                            if (i>5)
                            {
                                System.out.println(sencillo[i] + " billetes de Bs. " + billetes[i]);
                            }
                            else
                            {
                                System.out.println(sencillo[i] + " monedas de Bs. " + billetes[i]);
                            }
                        }
                    }
                }
            }
        } while (!opcion.equals("2"));
    }
}

Resolucion del Proyecto 1

/**
*Este programa permite describir el vuelto exacto indicando la cantidad de monedas y billetes necesarios,
* de acuerdo al monto de la venta y el monto pagado por el cliente.
*
*/
import java.io.*;
import java.lang.Math;
import java.text.NumberFormat;
public  class proyecto1
{
    public static void main (String args[]) throws IOException
    {
    int i;
    String opcion;
    String []billetes=new String[12];
    int []sencillo = new int[12];
    Double venta, pago, vuelto;

    /* INICIALIZO EL VALOR DE LAS MONEDAS Y BILLETES */
        billetes[0]="0.01";
        billetes[1]="0.05";
        billetes[2]="0.10";
        billetes[3]="0.25";
        billetes[4]="0.50";
        billetes[5]="1";
        billetes[6]="2";
        billetes[7]="5";
        billetes[8]="10";
        billetes[9]="20";
        billetes[10]="50";
        billetes[11]="100";

        BufferedReader in;
        in=new BufferedReader(new InputStreamReader(System.in));
        do {
// INICIALIZO LA CANTIDAD DE BILLETES NECESARIOS PARA EL VUELTO A CERO
            for (i=0;i<12;i++) sencillo[i]=0;
            System.out.println("\n\n\n");
            System.out.println("*****  Menu de Operaciones  *****\n");
            System.out.println("         1: Registrar una venta.");
            System.out.println("         2: Salir del Menu.\n");
            System.out.print("Seleccione una Opcion: ");
            opcion=in.readLine();

            if (opcion.equals("1"))            {

                do                 {
                     System.out.print("\n\nIntroduzca el Monto de la Venta: ");                                           
                     venta=Double.parseDouble(in.readLine());
                     if (venta<=0)
                         System.out.print("\n\nERROR el Monto de la venta debe ser mayor a Bs 0.\n\n\n");
                } while (venta<=0);           

                do {
                    System.out.print("\n\nIntroduzca el Monto del Pago: ");
                    pago=Double.parseDouble(in.readLine());
                    if (pago
                        System.out.print("\n\n\nERROR el Monto del Pago no puede ser menor a la venta.\n\n");
                } while (pago
                vuelto=pago-venta;
                NumberFormat nf = NumberFormat.getCurrencyInstance();
                System.out.print("\n\nEl vuelto es: " + nf.format(vuelto) + "\n\n");

                i=11;
                while (i>=0)   {
                    if (vuelto>=Double.valueOf(billetes[i]))
                    {
                        Double aux = new Double (vuelto / (Double.valueOf(billetes[i])));
                        sencillo[i]= aux.intValue();
                        vuelto = vuelto - (sencillo[i]*Double.valueOf(billetes[i]));
                    }
                    i--;
                }                               
                

                if ((pago-venta)>0)
                {
                    System.out.println("\n\nEntregar el vuelto de la siguiente manera:\n\n");
                    for (i=0;i<12;i++)
                    {
                        if (sencillo[i]==0)
                            continue;
                        else
                        {
                            if (i>5)
                            {
                                System.out.println(sencillo[i] + " billetes de Bs. " + billetes[i]);
                            }
                            else
                            {
                                System.out.println(sencillo[i] + " monedas de Bs. " + billetes[i]);
                            }
                        }
                    }
                }
            }
        } while (!opcion.equals("2"));
    }
}