El municipio de Montería, requiere de sus servicios para sistematizar el proceso de facturación por consumo de energía eléctrica, para ello requiere del registro de los siguientes datos: nomenclatura de la vivienda, kilovatios consumidos al mes, costo básico por kilovatio. El subtotal facturado es el producto entre los kilovatios consumidos y el costo de los mismos, sin embargo, el municipio subsidia en un 8% del subtotal facturado, pero toda aquella vivienda que consuma más de 350 kilovatios al mes, se le sancionará, cobrándoseles al triple el costo de los kilovatios que excedan a los 350 básicos. Implemente una aplicación que de soporte a este requerimiento. Recuerde que es para N número de viviendas.
#include <iostream>
// se incluye la clase Casa para despues llamar a sus metodos
#include "Casa.h"
// se incluye la clase Facturacion para despues llamar a sus metodos
#include "Facturacion.h"
using namespace std;
// método para validar el costo
void validar(Facturacion *obj, int pos)
{
double costo = (obj->getVector(pos)->getKilovatios() * 3);
double descuento = (obj->getVector(pos)->getKilovatios() * obj->getVector(pos)->getCosto()) * 0.08;
// si los kilovatios de la casa de la posicion pos es superior a 350 kilovatios
if (obj->getVector(pos)->getKilovatios() > 350)
{
// entonces se le cobrara el triple al costo
cout << "Se le cobrara el triple al costo por kilovatios" << endl;
cout << "Nuevo costo: $" << costo << endl;
}
else
{
// sino el municipio le dara un subsidio
cout << "El municipio le ha subsidiado un 0.8% al subtotal" << endl;
cout << "Descuento: $" << descuento << endl;
}
}
// método para mostrar el vector
void mostrarVector(Facturacion *obj)
{
// recorremos el vector con el ciclo for
for (int i = 0; i < obj->getTamano(); i++)
{
cout << "Nomenclatura: " << obj->getVector(i)->getNomenclatura() << endl;
cout << "Kilovatios consumidos: " << obj->getVector(i)->getKilovatios() << endl;
cout << "Costo basico: $" << obj->getVector(i)->getCosto() << endl;
validar(obj, i);
cout << "Subtotal: " << obj->getVector(i)->getSubtotal() << endl << endl;
}
}
// método para llenar los datos de la casa
void llenar(Casa *cas)
{
string nom;
int kil, cos;
cout << "Digite nomenclatura de la casa" << endl;
cout << ">> ";
cin >> nom;
cas->setNomenclatura(nom);
cout << "Digite kilovatios consumidos de la casa" << endl;
cout << ">> ";
cin >> kil;
cas->setKilovatios(kil);
cout << "Digite costo basico por kilovatio" << endl;
cout << ">> ";
cin >> cos;
cas->setCosto(cos);
}
int main(void)
{
// se crea un objeto de la clase Facturacion (Instanciación)
Facturacion *obj = new Facturacion();
// se declara un objeto de tipo Casa
Casa *cas;
// pedimos el tamaño del vector
int numeroElementos;
cout << "Digite tamano del Vector" << endl;
cout << ">> ";
cin >> numeroElementos;
// encapsumalos la variable numeroElementos
obj->setTamano(numeroElementos);
// creamos el vector
obj->crearVector();
// recorremos el vector con ciclo for
for (int i = 0; i < obj->getTamano(); i++)
{
// creamos una nueva instancia de tipo Casa
cas = new Casa();
cout << "Llene la informacion de la casa " << i << endl;
// se llena la informacion del objeto cas
llenar(cas);
// guardamos en la posicion i el objeto cas
obj->setVector(i, cas);
}
// calculamos el subtotal
obj->calcularSubtotal();
// mostramos el vector
mostrarVector(obj);
}
#ifndef CASA_H
#define CASA_H
#include <iostream>
using namespace std;
class Casa
{
public:
Casa();
virtual ~Casa();
// se declaran los métodos publicos de la clase
void setNomenclatura(string val);
string getNomenclatura();
void setKilovatios(int val);
int getKilovatios();
void setCosto(int val);
int getCosto();
void setSubtotal(double val);
double getSubtotal();
protected:
private:
// se declaran los atributos privados de la clase
string nomenclatura;
int kilovatios;
int costo;
double subtotal;
};
#endif // CASA_H
#include "Casa.h"
Casa::Casa()
{
// se le asignan valores por defecto en el constructor de la clase a los atributos
nomenclatura = "";
kilovatios = 0;
costo = 0;
subtotal = 0;
}
Casa::~Casa()
{
//dtor
}
// se declaran los métodos Setters y Getters de la clase
void Casa::setNomenclatura(string val)
{
nomenclatura = val;
}
string Casa::getNomenclatura()
{
return nomenclatura;
}
void Casa::setKilovatios(int val)
{
kilovatios = val;
}
int Casa::getKilovatios()
{
return kilovatios;
}
void Casa::setCosto(int val)
{
costo = val;
}
int Casa::getCosto()
{
return costo;
}
void Casa::setSubtotal(double val)
{
subtotal = val;
}
double Casa::getSubtotal()
{
return subtotal;
}
#ifndef FACTURACION_H
#define FACTURACION_H
#include <iostream>
using namespace std;
class Facturacion
{
public:
Facturacion();
virtual ~Facturacion();
// se declaran los métodos publicos de la clase
void crearVector();
void setTamano(int n);
int getTamano();;
void setVector(int pos, Casa *n);
Casa *getVector(int pos);
void subsidioMunicipio(int pos);
void cobroExtraordinario(int pos);
void calcularSubtotal();
protected:
private:
// se declaran los atributos privados de la clase
int tamano;
Casa *vector;
};
#endif // FACTURACION_H
#include "Facturacion.h"
Facturacion::Facturacion()
{
// se le asignan valores por defecto en el constructor de la clase a los atributos
tamano = 0;
vector = NULL;
}
Facturacion::~Facturacion()
{
//dtor
}
// método para crear el vector
void Facturacion::crearVector()
{
vector = new Casa[tamano];
}
// métodos Setters y Getters de los atributos de la clase
void Facturacion::setTamano(int n)
{
tamano = n;
}
int Facturacion::getTamano()
{
return tamano;
}
void Facturacion::setVector(int pos, Casa* n)
{
vector[pos] = *n;
}
Casa *Facturacion::getVector(int pos)
{
// si no entiendes esto, te recomiendo que leas la sección de TEMAS, en programación I, los punteros en C++
return &vector[pos];
}
// método para calcular el subsidio que dara el municipio
void Facturacion::subsidioMunicipio(int pos)
{
// se inicializa una variable de tipo double descuento, y se le asigna el valor de kilovatios por
// el costo de la casa en la posicion pos y se multiplica ese valor por 0.08
double descuento = (getVector(pos)->getKilovatios() * getVector(pos)->getCosto()) * 0.08;
// se inicializa una variable de tipo double resultado, se le asigna el valor de kilovatios consumidos
// por el costo de la casa en la posicion pos y a ese valor se le restara el valor de la variable descuento
double resultado = (getVector(pos)->getKilovatios() * getVector(pos)->getCosto()) - descuento;
// se modifica el subtotal de la posicion pos
getVector(pos)->setSubtotal(resultado);
}
// método para calcular el cobro extraordinario
void Facturacion::cobroExtraordinario(int pos)
{
// se declara una variable de tipo double resultado
double resultado;
// se le asigna el los kilovatios consumidos por el costo de la casa en posicion pos, ese valor se multiplicara por 3
resultado = getVector(pos)->getKilovatios() * (getVector(pos)->getCosto() * 3);
// se modifica el subtotal de la posicion pos
getVector(pos)->setSubtotal(resultado);
}
// método para calcular el subtotal
void Facturacion::calcularSubtotal()
{
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamano(); i++)
{
// si los kilovatios consumidos por la casa en la posicion i es mayor a 350
if (getVector(i)->getKilovatios() > 350)
{
// entonces se le hara un cobro extraordinario a esa casa (se le multiplicara por 3 el costo)
cobroExtraordinario(i);
}
else
{
// sino, entonces se le dara el subsidio del municipio a esa casa
subsidioMunicipio(i);
}
}
}
// se importa paquete JOptionPane para dibujar un cuadro de dialogo en pantalla
// que muestre información o para llenar información
import javax.swing.JOptionPane;
public class Main
{
// método para mostrar el vector
public static void mostrarVector(Facturacion obj)
{
// inicializamos una variable de tipo string llamada datosVector en vacio
String datosVector = "";
// recorremos el vector con el ciclo for
for (int i = 0; i < obj.getTamaño(); i++)
{
// acumulamos en la variable datosVector los datos que haya en cada posicion del vector
datosVector += "Nomenclatura: " + obj.getVector(i).getNomenclatura() + "\n" +
"Kilovatios consumidos: " + obj.getVector(i).getKilovatios() + "\n" +
"Costo basico: $" + obj.getVector(i).getCosto()+ "\n" +
validar(obj, i) + "\n" +
"Subtotal: " + obj.getVector(i).getSubtotal() + "\n\n";
}
JOptionPane.showMessageDialog(null, datosVector);
}
// método para validar el costo
public static String validar(Facturacion obj, int pos)
{
// si los kilovatios de la casa de la posicion pos es superior a 350 kilovatios
if (obj.getVector(pos).getKilovatios() > 350)
{
// entonces se le cobrara el triple al costo
return "Se le cobrara el triple al costo por kilovatios" + "\n" +
"Nuevo costo: $" + (obj.getVector(pos).getKilovatios() * 3);
}
else
{
// sino el municipio le dara un subsidio
return "El municipio le ha subsidiado un 0.8% al subtotal" + "\n" +
"Descuento: $" + (obj.getVector(pos).getKilovatios() * obj.getVector(pos).getCosto()) * 0.08;
}
}
// método para llenar los datos de la casa
public static void llenar(Casa cas)
{
String nom = JOptionPane.showInputDialog("Digite nomenclatura de la casa:");
cas.setNomenclatura(nom);
int kil = Integer.parseInt(JOptionPane.showInputDialog("Digite kilovatios consumidos de la casa:"));
cas.setKilovatios(kil);
int cos = Integer.parseInt(JOptionPane.showInputDialog("Digite costo basico por kilovatio:"));
cas.setCosto(cos);
}
public static void main(String[] args)
{
// se crea un objeto de la clase Facturacion (Instanciación)
Facturacion obj = new Facturacion();
// se declara un objeto de tipo Casa
Casa cas;
// pedimos el tamaño del vector
int numeroElementos = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite tamaño del Vector:"));
// encapsumalos la variable numeroElementos
obj.setTamaño(numeroElementos);
// creamos el vector
obj.crearVector();
// recorremos el vector con ciclo for
for (int i = 0; i < obj.getTamaño(); i++)
{
// creamos una nueva instancia de tipo Casa
cas = new Casa();
JOptionPane.showMessageDialog(null, "Llene la informacion de la casa " + i);
// se llena la informacion del objeto cas
llenar(cas);
// guardamos en la posicion i el objeto cas
obj.setVector(i, cas);
}
// calculamos el subtotal
obj.calcularSubtotal();
// mostramos el vector
mostrarVector(obj);
}
}
public class Casa
{
// se declaran los atributos privados de la clase
private String nomenclatura;
private int kilovatios;
private int costo;
private double subtotal;
public Casa()
{
// se le asignan valores por defecto en el constructor de la clase a los atributos
nomenclatura = "";
kilovatios = 0;
costo = 0;
subtotal = 0;
}
// métodos Setters y Getters de los atributos de la clase
public void setNomenclatura(String val)
{
nomenclatura = val;
}
public String getNomenclatura()
{
return nomenclatura;
}
public void setKilovatios(int val)
{
kilovatios = val;
}
public int getKilovatios()
{
return kilovatios;
}
public void setCosto(int val)
{
costo = val;
}
public int getCosto()
{
return costo;
}
public void setSubtotal(double val)
{
subtotal = val;
}
public double getSubtotal()
{
return subtotal;
}
}
public class Facturacion
{
// se declaran los atributos privados de la clase
private int tamaño;
private Casa [] vector;
public Facturacion()
{
// se le asignan valores por defecto en el constructor de la clase a los atributos
tamaño = 0;
vector = null;
}
// método para crear el vector
public void crearVector()
{
vector = new Casa[tamaño];
}
// métodos Setters y Getters de los atributos de la clase
public void setTamaño(int n)
{
tamaño = n;
}
public int getTamaño()
{
return tamaño;
}
public void setVector(int pos, Casa n)
{
vector[pos] = n;
}
public Casa getVector(int pos)
{
return vector[pos];
}
// método para calcular el subsidio que dara el municipio
public void subsidioMunicipio(int pos)
{
// se inicializa una variable de tipo double descuento, y se le asigna el valor de kilovatios por
// el costo de la casa en la posicion pos y se multiplica ese valor por 0.08
double descuento = (getVector(pos).getKilovatios() * getVector(pos).getCosto()) * 0.08;
// se inicializa una variable de tipo double resultado, se le asigna el valor de kilovatios consumidos
// por el costo de la casa en la posicion pos y a ese valor se le restara el valor de la variable descuento
double resultado = (getVector(pos).getKilovatios() * getVector(pos).getCosto()) - descuento;
// se modifica el subtotal de la posicion pos
getVector(pos).setSubtotal(resultado);
}
// método para calcular el cobro extraordinario
public void cobroExtraordinario(int pos)
{
// se declara una variable de tipo double resultado
double resultado;
// se le asigna el los kilovatios consumidos por el costo de la casa en posicion pos, ese valor se multiplicara por 3
resultado = getVector(pos).getKilovatios() * (getVector(pos).getCosto() * 3);
// se modifica el subtotal de la posicion pos
getVector(pos).setSubtotal(resultado);
}
// método para calcular el subtotal
public void calcularSubtotal()
{
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamaño(); i++)
{
// si los kilovatios consumidos por la casa en la posicion i es mayor a 350
if (getVector(i).getKilovatios() > 350)
{
// entonces se le hara un cobro extraordinario a esa casa (se le multiplicara por 3 el costo)
cobroExtraordinario(i);
}
else
{
// sino, entonces se le dara el subsidio del municipio a esa casa
subsidioMunicipio(i);
}
}
}
}