Реализация программы, визуально имитирующую работу "кофейного" аппарата
Функции:
- Прием монет для оплаты, выдача сдачи
- Выбор напитка (из неменее чем 8)
- Настройка параметров напитка (крепость, сахар, температура)
- Анимация приготовления
- "Отдать" напиток
Предусмотрена отмена операции, когда это возможно.
Этап "приготовление" сопровождается шкалой визуально схожей с вендинговым аппаратом
Разработана иерархия классов для напитков 4х типов: Кофе / Сок / Чай / Вода
Пример реализации родительского класса
/// <summary> Базовый класс напитка с набором характеристик </summary>
[XmlInclude(typeof(Water))][XmlInclude(typeof(Tea))][XmlInclude(typeof(Milkshake))]
[XmlInclude(typeof(Juice))][XmlInclude(typeof(Cofee))][XmlInclude(typeof(CofeeSugar))][XmlInclude(typeof(CofeeMilk))]
public class Drink : IDrink, INotifyPropertyChanged
{
/// <summary> Наименование продукта </summary>
public string dName
{
get => _dName;
set
{
if (value == _dName) return;
_dName = value;
OnPropertyChanged();
}
} private string _dName;
/// <summary> Изображение напитка </summary>
public string dPicture { get; set; }
/// <summary> Изображение готового напитка </summary>
public string dPictureFinale { get; set; }
/// <summary> Время до полного приготовления </summary>
public int dCookingTime { get; set; }
/// <summary> Признак возможности регулирования темпиратуры напитка </summary>
public bool dTemperature { get; set; }
/// <summary> Признак необходимости добавления сахара </summary>
public bool dSugar { get; set; }
/// <summary> Признак крепости напитка </summary>
public bool dStrength { get; set; }
/// <summary> Цена напитка </summary>
public int dPrice
{
get => _dPrice;
set
{
if (value == _dPrice) return;
_dPrice = value;
OnPropertyChanged();
}
} private int _dPrice;
/// <summary> Пользовательские настройки темпиратуры </summary>
public int CountTemperature { get; set; }
/// <summary> Минимально допустимая температура </summary>
public int TemperatureMinimum { get; set; }
/// <summary> Максимально доступная температуры </summary>
public int TemperatureMaximum { get; set; }
/// <summary> Пользовательские настройки кол-ва сахара </summary>
public int CountSugar { get; set; }
/// <summary> Максимальное кол-во пакетиков сахара </summary>
public int SugarMaximum { get; set; }
/// <summary> Пользовательские настройки крепости напитка </summary>
public int StrengthDrink { get; set; }
public override string ToString() => $"{dName} - {dPrice:C}";
#region PropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
Пример реализации класса воды (без дополнительных функций приготовления)
[Serializable,XmlInclude(typeof(Drink))]
public class Water : Drink
{
public Water()
{
dName = "Вода";
dPrice = 10;
dCookingTime = 400 * 60;
dStrength = dSugar = false;
dTemperature = false;
}
}
В папке проекта находятся:

Весь код покрыт комментариями, описывающие весь цикл работы программы
Среда разработки : Visual Studio 2019, C# Net.Framework 4.5.2
Телеграм
-