7-110 Máquina expendedora (30 puntos)

En la máquina expendedora simple como se muestra en la figura, hay 10 productos en el estante 1 y 2, que están numerados del 1 al 10 en orden, marcados con precio y nombre, y cada número corresponde a un botón operable para seleccionar productos. Si el usuario compra los productos en el estante, los productos se sacarán automáticamente del casillero y se enviarán al estante para garantizar que haya productos en el estante. Los usuarios pueden invertir más monedas a la vez y pueden elegir una variedad de productos, y la máquina expendedora puede producir los productos a la vez y obtener el cambio.
Inserte la descripción de la imagen aquí

El método de operación para que los usuarios compren bienes es:

(1) Inserte monedas desde la "entrada de monedas" e inserte varias monedas o billetes en secuencia. Las monedas pueden soportar 1 yuan (billetes, monedas), 2 yuanes (billetes), 5 yuanes (billetes), 10 yuanes (billetes). Cuando se coloca una moneda, el controlador primero verificará la moneda para identificar el valor de la moneda y contará el valor total de la moneda, que se muestra en la pantalla del controlador, lo que solicita al usuario que confirme que se colocó la moneda;

(2) El usuario confirma que la moneda ha sido colocada, y luego puede seleccionar el producto, simplemente presione el botón numérico en el exterior del producto correspondiente con su dedo. Cada vez que se selecciona un producto, el controlador de la máquina expendedora determinará si la moneda es suficiente para comprar. Si la moneda es suficiente, contará automáticamente el artículo de acuerdo con el número de serie y calculará el valor de la moneda requerida, e indicará el saldo. Si el dinero es insuficiente, el controlador indicará "Dinero insuficiente". El usuario puede cancelar la compra y todas las monedas depositadas serán devueltas al usuario.

Formato de entrada:
primero ingrese la secuencia del valor de la moneda, terminando en -1 , y luego ingrese varios números de compra de productos básicos en secuencia, terminando en -1 .

Formato de
salida : envíe la cantidad total de monedas y recupere el cambio, así como el nombre y la cantidad de los bienes adquiridos.

Inserte la descripción de la imagen aquí

Idea de la pregunta:
Examine principalmente el uso de la estructura.

#include<iostream>
#include<string>
using namespace std;

bool find(int a[], int len, int x);
struct Commodity {
    
    
	int num;
	string name;
	int price;
	int amount;
};
Commodity commodity[11] = {
    
     {
    
    }, {
    
    1,"Table-water", 1,0}, {
    
    2,"Table-water", 1,0},
							{
    
    3,"Table-water", 1,0},{
    
    4,"Coca-Cola", 2,0},
							{
    
    5,"Milk", 2,0},{
    
    6,"Beer", 3,0},
							{
    
    7,"Orange-Juice", 3,0},{
    
    8,"Sprite", 3,0},
							{
    
    9,"Oolong-Tea", 4,0},{
    
    10,"Green-Tea", 4,0} };

int main()
{
    
    
	int k = 0;
	int obj[100], sum1 = 0, sum2 = 0;
	int x;
	cin >> x;
	while (x != -1)
	{
    
    
		if (x == 1 || x == 2 || x == 5 || x == 10)
			sum1 += x;
		else
		{
    
    
			continue;
		}
		cin >> x;
	}
	int y;
	cin >> y;
	while (y != -1)
	{
    
    
		if (y >= 1 && y <= 10)
		{
    
    
			sum2 += commodity[y].price;
			if (!find(obj, k, y))	//关键这句,防止准备输出的数组出现重复商品
				obj[k++] = y;
			commodity[y].amount++;
		}
		else
		{
    
    
			continue;
		}
		cin >> y;
	}

	if (sum1 >= sum2)
	{
    
    
		printf("Total:%dyuan,change:%dyuan\n", sum1, sum1 - sum2);
		for (int i = 0; i < k; i++)
		{
    
    
			cout << commodity[obj[i]].name << ":" << commodity[obj[i]].amount << ";";
		}

	}
	else if(sum1 < sum2)
		cout << "Insufficient money" << endl;

	return 0;
}
bool find(int a[], int len, int x)
{
    
    
	for (int i = 0; i < len; i++)
	{
    
    
		if (a[i] == x)
			return true;
	}

	return false;
}

Supongo que te gusta

Origin blog.csdn.net/xdg15294969271/article/details/113914033
Recomendado
Clasificación