Autor Tema: Java Programa Venta de Electrodomesticos solo con arreglos arrays sin ArrayList  (Leído 4729 veces)

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re: Ayuda Con Programa Venta de Elctrodomesticos en Java solo con arreglos
« Respuesta #20 en: 28 de Agosto 2022, 11:54 »
Para eso, tienes dos opciones.

1. La más fácil y por tanto la más recomendable.
Añadir como atributo de Cliente un double donde acumular los importes de sus compras.

Citar
public class Cliente {
   
   private int id;
   private String nombres;
   private String apellidos;
   private String email;
   private int telefono;
   private StringBuilder facturacion; //Simula un histórico de ventas´
   private double totalFacturado;

   public Cliente (int id, String nombres, String apellidos, String email, int telefono) {
      this.id = id;
      this.nombres = nombres;
      this.apellidos = apellidos;
      this.email=email;
      this.telefono = telefono;
      facturacion = new StringBuilder();
      totalFacturado = 0;
   }
Así luego, en su método facturar(), no solo le pasamos la línea para el StringBuilder, si no también el importe de la venta, que ha sido calculado en el main

Citar
   
   /*
    * Añade una nueva línea de facturación
    * al StringBuilder
    */
   public void facturar(String linea, double importe) {
      facturacion.append(linea);
      totalFacturado += importe;
   }

Ahora en el Main, además de pasarle la línea formateada para el StringBuilder, le pasaremos también el importe double para que lo sume a su nuevo atributo:

Citar
               //Y también en la facturación personal del comprador
               comprador.facturar(String.format("Codigo: %s Nombre: %s Unidades compradas: %d Importe: %.2f\n",
                     codigo, solicitado.getNombre(), unidades, facturar), facturar);

2- Un poco más compleja pero que no requiere añadir atributos ni cambiar nada en el main.
Hacer malabarismos con la clase String para detectar y extraer los caracteres que representan los importes, convertirlos a double y sumarlos.
El StringBuilder contiene una serie de líneas de cadenas, cada una con el importe al final de ella.
Pues habrá que separar estas líneas, detectar donde se encuentra el importe, extraerlo para poder convertirlo a double y poder hacer una suma con los importes de todas las líneas.
Todo este proceso lo haríamos en el método mostrarDetalles(), y solo si hay algo facturado.
Citar
   public void mostrarDetalles() {
      System.out.println("ID: " + id);
      System.out.println("Nombre: " + nombres +  " " + apellidos);
      System.out.println("E-Mail: " + email + " Telf: " + telefono);
      System.out.println("\tFACTURACION");
      System.out.println(facturacion.length()==0?"No hay historico de ventas":facturacion.toString());

      //Hacemos una suma del total facturado, si es que hay facturas
      if (facturacion.length() > 0) {
         double total = 0;

         //1-Creamos un arreglo donde cada elemento es una linea del StringBuilder
         String[] lineas = facturacion.toString().split("\n");
         //2-Recorremos cada linea con un bucle
         for (int in = 0; in < lineas.length; in++) {
            //3-Buscamos el último espacio en blanco de cada linea
            int pos = lineas[in].lastIndexOf(" ");
            //4-Tras ese último espacio en blanco, está el importe de la venta, lo extraemos
            String importe = lineas[in].substring(pos+1);
            //5-El importe está escrito con "coma decimal", pero el parseo solo funciona con "punto decimal".
            //Lo reemplazamos
            importe = importe.replace(',' , '.');
            //6-Parseamos a double y lo acumulamos en el total
            total += Double.parseDouble(importe);
         }

         //6-Finalizado el bucle, ya tenemos el total
         System.out.printf("\nEl total de los importes es: %.2f\n", total);
      }

   }

Como ves, serviría para hacer un examen sobre la clase String y el tratamiento de cadenas.  :P
Es enrevesado, pero funciona, si lo ejecutamos veremos que se realiza la suma de importes correctamente.
Citar
ELECTRODOMESTICOS ELECTROHOGAR
       MENU DE OPCIONES
1 = Listar Inventario
2 = Venta
3 = Facturacion
4 = Gestion Inventario
5 = Gestion Clientes
0 = Salir
Elija la opcion: 2

Indique el ID del Cliente
ID: 19034211
Cliente identificado:
[id= 19034211, nombre= Laura, apellidos= Juan, email= lajuanita@hotmail.com, telefono= 3451212]

Indique el CODIGO del electrodoméstico para realizar la venta.
CODIGO: LAV-0090

Detalles del producto:
Clase Lavadora
Marca: Whirlpool
Precio 109.9
Cantidad: 4
Capacidad de Lavado: 18Kg
Ciclos: 8
Velocidad: 1200

Unidades a facturar (MAX=4): 2

Importe a pagar: 246,18
Gracias por su compra

ELECTRODOMESTICOS ELECTROHOGAR
       MENU DE OPCIONES
1 = Listar Inventario
2 = Venta
3 = Facturacion
4 = Gestion Inventario
5 = Gestion Clientes
0 = Salir
Elija la opcion: 2

Indique el ID del Cliente
ID: 19034211
Cliente identificado:
[id= 19034211, nombre= Laura, apellidos= Juan, email= lajuanita@hotmail.com, telefono= 3451212]

Indique el CODIGO del electrodoméstico para realizar la venta.
CODIGO: COC-0350

Detalles del producto:
Clase Cocina
Marca: Miele
Precio: 109.9
Nº de Hornillas: 4
Con Horno
Sistema de Coccion: Induccion

Unidades a facturar (MAX=4): 1

Importe a pagar: 123,09
Gracias por su compra

ELECTRODOMESTICOS ELECTROHOGAR
       MENU DE OPCIONES
1 = Listar Inventario
2 = Venta
3 = Facturacion
4 = Gestion Inventario
5 = Gestion Clientes
0 = Salir
Elija la opcion: 5

      GESTION CLIENTES

1 == Añadir Cliente
2 == Eliminar Cliente
3 == Listar Clientes
0 == Regresar Menu Principal
Opcion: 3

      LISTADO DE CLIENTES

      ***********************
ID: 17183451
Nombre: Roberto Torres
E-Mail: roberto@hotmail.com Telf: 2134121
   FACTURACION
No hay historico de ventas
      ***********************
ID: 19034211
Nombre: Laura Juan
E-Mail: lajuanita@hotmail.com Telf: 3451212
   FACTURACION
Codigo: LAV-0090 Nombre: Renta Max Unidades compradas: 2 Importe: 246,18
Codigo: COC-0350 Nombre: Pyro Master Unidades compradas: 1 Importe: 123,09


El total de los importes es: 369,27

      ***********************

      GESTION CLIENTES

1 == Añadir Cliente
2 == Eliminar Cliente
3 == Listar Clientes
0 == Regresar Menu Principal
Opcion: 0

Regresando a menu principal...

ELECTRODOMESTICOS ELECTROHOGAR
       MENU DE OPCIONES
1 = Listar Inventario
2 = Venta
3 = Facturacion
4 = Gestion Inventario
5 = Gestion Clientes
0 = Salir
Elija la opcion: 0

      FIN DE PROGRAMA
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".