/// <summary> /// Fragt die effektive Anzahl von Münzen im Automaten ab. /// </summary> /// <returns></returns> public QuantityCoins GetQuantityCoins() { var quantityCoins = new QuantityCoins(); foreach (var oneContainer in containers) { for (int i = 1; i < oneContainer.CountCoins(); i++) { quantityCoins.AddCoinValue(oneContainer.GetCoinsValue()); } } return(quantityCoins); }
/// <summary> /// Gibt das Rückgeld dem Kunden heraus /// </summary> /// <param name="outputValue">Betrag, welcher ausbezahlt werden muss</param> /// <returns>Die Anzahl von den verschiedenen Münzen, welche ausgegeben werden müssen</returns> public QuantityCoins GetChange(int outputValue) { var outputCoins = new QuantityCoins(); while (outputValue >= 100000) { if (containers[12].CountCoins() > 0) { outputCoins.AddCoinValue(100000); containers[12].RemoveCoin(); if (containers[12].GetMinPercentFlling()) { AlertCoinMinimun(100000); } outputValue -= 100000; } else { break; } } while (outputValue >= 20000) { if (containers[11].CountCoins() > 0) { outputCoins.AddCoinValue(20000); containers[11].RemoveCoin(); if (containers[11].GetMinPercentFlling()) { AlertCoinMinimun(20000); } outputValue -= 20000; } else { break; } } while (outputValue >= 10000) { if (containers[10].CountCoins() > 0) { outputCoins.AddCoinValue(10000); containers[10].RemoveCoin(); if (containers[10].GetMinPercentFlling()) { AlertCoinMinimun(10000); } outputValue -= 10000; } else { break; } } while (outputValue >= 5000) { if (containers[9].CountCoins() > 0) { outputCoins.AddCoinValue(5000); containers[9].RemoveCoin(); if (containers[9].GetMinPercentFlling()) { AlertCoinMinimun(5000); } outputValue -= 5000; } else { break; } } while (outputValue >= 2000) { if (containers[8].CountCoins() > 0) { outputCoins.AddCoinValue(2000); containers[8].RemoveCoin(); if (containers[8].GetMinPercentFlling()) { AlertCoinMinimun(2000); } outputValue -= 2000; } else { break; } } while (outputValue >= 1000) { if (containers[7].CountCoins() > 0) { outputCoins.AddCoinValue(1000); containers[7].RemoveCoin(); if (containers[7].GetMinPercentFlling()) { AlertCoinMinimun(1000); } outputValue -= 1000; } else { break; } } while (outputValue >= 500) { if (containers[6].CountCoins() > 0) { outputCoins.AddCoinValue(500); containers[6].RemoveCoin(); if (containers[6].GetMinPercentFlling()) { AlertCoinMinimun(500); } outputValue -= 500; } else { break; } } while (outputValue >= 200) { if (containers[5].CountCoins() >= 1) { outputCoins.AddCoinValue(200); containers[5].RemoveCoin(); if (containers[5].GetMinPercentFlling()) { AlertCoinMinimun(200); } outputValue -= 200; } else { break; } } while (outputValue >= 100) { if (containers[4].CountCoins() >= 1) { outputCoins.AddCoinValue(100); containers[4].RemoveCoin(); if (containers[4].GetMinPercentFlling()) { AlertCoinMinimun(100); } outputValue -= 100; } else { break; } } while (outputValue >= 50) { if (containers[3].CountCoins() >= 1) { if (outputValue < 100) { var isOddNumber = false; try { var dividedOutput = outputValue / 2; } catch (Exception) { isOddNumber = true; } if (!isOddNumber) { if (containers[0].CountCoins() <= 0) { break; } } } outputCoins.AddCoinValue(50); containers[3].RemoveCoin(); if (containers[3].GetMinPercentFlling()) { AlertCoinMinimun(50); } outputValue -= 50; } else { break; } } while (outputValue >= 20) { if (containers[2].CountCoins() >= 1) { outputCoins.AddCoinValue(20); if (containers[2].GetMinPercentFlling()) { AlertCoinMinimun(20); } containers[2].RemoveCoin(); outputValue -= 20; } else { break; } } while (outputValue >= 10) { if (containers[1].CountCoins() >= 1) { outputCoins.AddCoinValue(10); containers[1].RemoveCoin(); if (containers[1].GetMinPercentFlling()) { AlertCoinMinimun(10); } outputValue -= 10; } else { break; } } while (outputValue >= 5) { if (containers[0].CountCoins() >= 1) { outputCoins.AddCoinValue(5); containers[0].RemoveCoin(); if (containers[0].GetMinPercentFlling()) { AlertCoinMinimun(5); } outputValue -= 5; } else { throw new Exception("Es kann leider kein Rückgeld gegeben werden, da die entsprechenden Münzen nicht vorhanden sind. Geben Sie Abbruch ein und Sie erhalten ihr Geld zurück"); } } insertCoins = new List <Coin>(); insertValue = 0; return(outputCoins); }