Java - Calcular costo llamada

 
Vista:

Calcular costo llamada

Publicado por Adrian (1 intervención) el 19/11/2019 17:32:04
Buenas, necesito ayuda para resolver y validar los datos de este problema.
Hacer un programa que calcule el costo de una llamada de larga distancia. El costo de la llamada se determina de acuerdo a las siguientes reglas:
• Cualquier llamada que se inicia entre las 8:00 am y 6:00 pm, de Lunes a Viernes, se tarifa a 0,45€ por minuto.
• Cualquier llamada que se inicia antes de las 8:00 am o después de las 6:00 pm, de Lunes a Viernes, se tarifa a 0,20€ por minuto.
• Cualquier llamada que se inicia el Sábado o el Domingo, se tarifa a 0,16€ por minuto.
La entrada del programa consiste en el día de la semana, la hora de inicio de la llamada y la duración de la llamada en minutos. La salida será el costo de la llamada.
El día de la semana se debe leer como un conjunto de dos caracteres que se deben almacenar en una variable tipo String:
Lu Ma Mi Ju Vi Sa Do
Tenga en cuenta que el usuario puede usar mayúsculas y/o minúsculas en la entrada de datos
La hora se debe leer en formato 24h, por ejemplo la 1:30 pm se debe entrar como:
13:30
La duración de la llamada se debe entrar como un dato de tipo entero.
Toda entrada de datos se debe validar para evitar datos erróneos. El programa debe incluir un bucle que permita al usuario repetir el cálculo tantas veces desee hasta que el usuario decida terminar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 42
Ha disminuido su posición en 18 puestos en Java (en relación al último mes)
Gráfica de Java

Calcular costo llamada

Publicado por jorge (18 intervenciones) el 19/11/2019 18:20:48
Y que has intentado hacer al respecto, o solo estás buscando que hagan la tarea por ti....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 1.822
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Calcular costo llamada

Publicado por Billy Joel (475 intervenciones) el 19/11/2019 19:05:53
Acá te dejo el método para calcular el costo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
 * Calcula el costo de una llamada
 *
 * @param dia día de la semana. Los valores permitidos son: Lu, Ma, Mi, Ju,
 * Vi, Sa, Do
 * @param hora hora de la llamada en formato de 24 horas
 * @param duracion tiempo que duró la llamada
 * @return costo de la llamada para los parametros dados
 */
public double calcularCostoLlamada(String dia, String hora, int duracion) {
    String[] hh = hora.split(":");
    int h = Integer.parseInt(hh[0]);
    int m = Integer.parseInt(hh[1]);
    double tarifa;
    if (dia.equalsIgnoreCase("Sa") || dia.equalsIgnoreCase("Do")) {
        //Sabados y Domingos
        tarifa = 0.16;
    } else {
        //De Luneas a Viernes
        if (h >= 8 && (h <= 18 && m == 0)) {
            tarifa = 0.45;
        } else {
            tarifa = 0.20;
        }
    }
    DecimalFormat df = new DecimalFormat("########.00");
    return Double.parseDouble(df.format(tarifa * duracion));
}

La captura de datos te la dejo

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 42
Ha disminuido su posición en 18 puestos en Java (en relación al último mes)
Gráfica de Java

Calcular costo llamada

Publicado por jorge (18 intervenciones) el 20/11/2019 19:31:13
Ya el compañero Billy le hizo lo principal que es la función que calcula y retorna lo que debe pagar por la llamada.

Solo falta es capturar y validar los datos que ingrese el usuario.

Usted no indica si es por consola o una aplicación desktop, pero ya eso es facilito, si es por consola puede hacer uso de la java.util.Scanner y valida con DecimalFormat y java.time.format.DateTimeFormatter.

Si es una aplicación desktop o web, le hace dos combobox de solo lectura, donde seleccione los valores del dia y la hora, y en la caja de texto que capture el tiempo de duración le anula los caracteres tipo letra, de manera que solo tome números.

Y mete todo dentro de un ciclo para que se pueda seguir repitiendo las veces que se desee.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 42
Ha disminuido su posición en 18 puestos en Java (en relación al último mes)
Gráfica de Java

Calcular costo llamada

Publicado por jorge (18 intervenciones) el 21/11/2019 00:52:40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Acá lo tiene en consola, pero todo el crédito se lo gana Billy que fue el que desarrolló la función del cálculo del costo de llamada. Espero por lo menos escriba a dar las gracias....
 
package costollamada;
 
import java.util.Scanner;
 
public class CostoLLamada {
 
    public static void main(String[] args) {
      String salir ="";
      do {
 
          System.out.println("Deseas continuar: c = continuar o s = salir  . \n");
          Scanner entradaEscaner = new Scanner (System.in);
          salir = entradaEscaner.nextLine ();
          if (salir.equalsIgnoreCase("s"))
          {
           System.exit(0);
           break;
          }
      // Capturar Dia  
      System.out.println ("Ingresar dia, debe ser: Lu Ma Mi Ju Vi Sa Do . \n");
      String dia = "";
      entradaEscaner = new Scanner (System.in);
      dia = entradaEscaner.nextLine ();
      if (!dia.equalsIgnoreCase("Lu")
          && !dia.equalsIgnoreCase("Ma")
          && !dia.equalsIgnoreCase("Mi")
          && !dia.equalsIgnoreCase("Ju")
          && !dia.equalsIgnoreCase("Vi")
          && !dia.equalsIgnoreCase("Sa")
          && !dia.equalsIgnoreCase("Do"))
      {
        System.out.println("Error: dia debe ser: Lu Ma Mi Ju Vi Sa Do");
        break;
      }
      else
      {
        // Capturar Hora  
        System.out.println ("Ingresar hora, debe ser en formato hora militar: hh:mm de 01:00 - 23:59 . \n");
        String hora = "";
        entradaEscaner = new Scanner (System.in);
        hora = entradaEscaner.nextLine ();
        try
        {
           String[] hh = hora.split(":");
           int h = Integer.parseInt(hh[0]);
           int m = Integer.parseInt(hh[1]);
           if ((h <= 0 || h > 23))
           {
             System.out.println("Error: hora, debe ser en formato hora militar: hh:mm de 01:00 - 23:59");
             break;
           }
           else if ((m < 0 || m > 59))
           {
             System.out.println("Error: minutos, deben estar entre: 00 - 59");
             break;
           }
           else // Capturar duracion Llamada
           {
            System.out.println ("Ingresar duracion, debe ser numero entero . \n");
            String entradaTeclado = "";
            entradaEscaner = new Scanner (System.in);
            entradaTeclado = entradaEscaner.nextLine ();
            try {
                 int numEntero = Integer.parseInt(entradaTeclado);
                 double Respuesta = calcularCostoLlamada(dia, hora, numEntero);
                 System.out.println("El costo de la "
                         + ""
                         + "dfllamada es: " + Respuesta);
            }
            catch (Exception ex)
            {
              System.out.println("Error: duracion no es numerico");
              break;
            }
       }
    }
    catch (Exception ex)
    {
        System.out.println("Error: hora, debe ser en formato: hh:mm");
        break;
    }
 
    }
    } while (salir!="s");
 
 
  }
 
    public static double calcularCostoLlamada(String dia, String hora, int duracion) {
    String[] hh = hora.split(":");
    int h = Integer.parseInt(hh[0]);
    int m = Integer.parseInt(hh[1]);
    double tarifa;
    if (dia.equalsIgnoreCase("Sa") || dia.equalsIgnoreCase("Do")) {
        //Sabados y Domingos
        tarifa = 0.16;
    } else {
        //De Luneas a Viernes
        if (h >= 8 && (h <= 18 && m == 0)) {
            tarifa = 0.45;
        } else {
            tarifa = 0.20;
        }
    }
        return (tarifa * duracion);
    }
 }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar