En este post de programación en CPP/C++ vamos a resolver otro ejercicio que dice así:
Realice un programa en C++ sobre un inventario. Una tienda vende pantalones, camisas, sacos y sombreros. Crear una aplicación que permita llevar el inventario actualizado acorde con la compra.
La tienda posee el siguiente inventario:
- 150 pantalones, con un costo de 25.
- 100 camisas con un costo de 1.
- 2 sacos con un costo de 1
- 10 sombreros con un costo de 5
Su programa debe imprimir el inventario actualizado en pantalla y solicitarle al cliente qué desea comprar. Una vez el cliente seleccione, se le solicita la cantidad y se imprime en pantalla el costo total de lo que se está comprando.
Al final, se debe mostrar el inventario actualizado en pantalla y solo se sale de la aplicación si el cliente escoge la opción de salir.
Solución del ejercicio
Para este caso podríamos usar objetos y clases; cada objeto tendría el costo, cantidad y nombre. Pero como es algo de programación básica vamos a usar 3 arreglos en donde estará uno que tendrá todos los nombres, otro con todos los costos y otro con las cantidades.
Luego vamos a recorrerlos, imprimirlos y también imprimir un menú que le pregunta al usuario lo que quiere hacer. Este menú estará dentro de un ciclo while.
Si el usuario elige comprar, vamos a preguntarle el número de artículo que a la vez vamos a tomar como índice para acceder a los arreglos y extraer o modificar los valores.
Arreglos
Comenzamos declarando los arreglos:
// Declaramos tres arreglos, uno por cada columna de la tabla
// Primero los nombres
array<string, 4> articulos = {
"Pantalones",
"Camisas",
"Sacos",
"Sombreros",
};
// Luego los costos
array<double, 4> costos = {
25, 1, 1, 5};
// Finalmente las existencias
array<int, 4> cantidades = {
150, 100, 2, 10}
Todos están en el mismo orden y tienen la misma longitud.
Menú
Ahora es momento de imprimir todos los artículos y solicitar al usuario lo que desea hacer. Entonces el código en C++ queda así:
// Mientras que la elección del usuario no sea "2" que es para salir...
string eleccion = "";
// Hacer el ciclo
while (eleccion != "2")
{
// Imprimir los artículos
cout << "____________" << endl;
for (int i = 0; i < 4; i++)
{
// Imprimir el número para que el usuario pueda seleccionar el artículo
cout << "Número: " << i + 1 << endl;
cout << "Artículo: " << articulos[i] << endl;
cout << "Costo: " << costos[i] << endl;
cout << "Cantidad: " << cantidades[i] << endl;
cout << "____________" << endl;
}
// Imprimir el menú principal
cout << "1. Comprar artículo\n2. Salir\nSeleccione: ";
}
En este caso el ciclo while se va a romper cuando la elección sea 2. Fíjate que en la línea 11 estamos imprimiendo el número de artículo que no es más que el índice que cada artículo tiene dentro del arreglo, pero aumentado en 1.
Comprar artículo
Si el usuario elige comprar, entonces pasa lo siguiente:
// Si elige 1, entonces solicitar número de artículo y cantidad
if (eleccion == "1")
{
int numeroArticulo;
cout << "Ingrese el número de artículo: ";
cin >> numeroArticulo;
// Necesitamos el índice del arreglo, que sería restarle 1 al número que elige el usuario pues los arreglos comienzan a contar en 0
int indice = numeroArticulo - 1;
// Validamos si el número de artículo está entre 0 y 3
if (indice >= 0 && indice <= 3)
{
// Solicitamos cantidad
int cantidad;
cout << "Ingrese la cantidad que compra: ";
cin >> cantidad;
// Validar si la cantidad es correcta
if (cantidad > cantidades[indice])
{
cout << "No hay suficiente existencia" << endl;
}
else
{
// En caso de que sí haya suficiente existencia, extraemos el costo
double costo = costos[indice];
// Sacamos el costo total
double total = costo * cantidad;
// Imprimimos
cout << "========================================" << endl;
cout << "Usted ha comprado " << articulos[indice] << " X " << cantidad << endl;
cout << "Total: " << total << endl;
cout << "GRACIAS POR SU COMPRA" << endl;
cout << "========================================" << endl;
// Y restamos la cantidad en el arreglo
cantidades[indice] = cantidades[indice] - cantidad;
}
}
else
{
// Caso contrario, imprimimos que no es un artículo válido
cout << "Número de artículo " << numeroArticulo << " inválido" << endl;
}
}
Validamos que el número de artículo sea correcto y que las existencias sean suficientes para la compra. Si estas validaciones pasan, entonces pasamos a la línea 23 en donde extraemos el costo, calculamos el total e imprimimos lo que se compró así como el total.
También dentro de la línea 34 estamos restando la existencia de ese artículo.
Poniendo todo junto
El código completo de este ejercicio resuelto de C++ queda así:
/*
https://parzibyte.me/blog
*/
#include <iostream>
#include <array>
using namespace std;
int main()
{
// Declaramos tres arreglos, uno por cada columna de la tabla
// Primero los nombres
array<string, 4> articulos = {
"Pantalones",
"Camisas",
"Sacos",
"Sombreros",
};
// Luego los costos
array<double, 4> costos = {
25, 1, 1, 5};
// Finalmente las existencias
array<int, 4> cantidades = {
150, 100, 2, 10};
// Mientras que la elección del usuario no sea "2" que es para salir...
string eleccion = "";
// Hacer el ciclo
while (eleccion != "2")
{
// Imprimir los artículos
cout << "____________" << endl;
for (int i = 0; i < 4; i++)
{
// Imprimir el número para que el usuario pueda seleccionar el artículo
cout << "Número: " << i + 1 << endl;
cout << "Artículo: " << articulos[i] << endl;
cout << "Costo: " << costos[i] << endl;
cout << "Cantidad: " << cantidades[i] << endl;
cout << "____________" << endl;
}
// Imprimir el menú principal
cout << "1. Comprar artículo\n2. Salir\nSeleccione: ";
// Leer lo que el usuario elija
cin >> eleccion;
// Si elige 1, entonces solicitar número de artículo y cantidad
if (eleccion == "1")
{
int numeroArticulo;
cout << "Ingrese el número de artículo: ";
cin >> numeroArticulo;
// Necesitamos el índice del arreglo, que sería restarle 1 al número que elige el usuario pues los arreglos comienzan a contar en 0
int indice = numeroArticulo - 1;
// Validamos si el número de artículo está entre 0 y 3
if (indice >= 0 && indice <= 3)
{
// Solicitamos cantidad
int cantidad;
cout << "Ingrese la cantidad que compra: ";
cin >> cantidad;
// Validar si la cantidad es correcta
if (cantidad > cantidades[indice])
{
cout << "No hay suficiente existencia" << endl;
}
else
{
// En caso de que sí haya suficiente existencia, extraemos el costo
double costo = costos[indice];
// Sacamos el costo total
double total = costo * cantidad;
// Imprimimos
cout << "========================================" << endl;
cout << "Usted ha comprado " << articulos[indice] << " X " << cantidad << endl;
cout << "Total: " << total << endl;
cout << "GRACIAS POR SU COMPRA" << endl;
cout << "========================================" << endl;
// Y restamos la cantidad en el arreglo
cantidades[indice] = cantidades[indice] - cantidad;
}
}
else
{
// Caso contrario, imprimimos que no es un artículo válido
cout << "Número de artículo " << numeroArticulo << " inválido" << endl;
}
}
}
}
Al ejecutarlo y pasarle datos de entrada de prueba el funcionamiento es correcto:
Te dejo más sobre programación en C++.