Реализация программы, визуально имитирующую работу "кофейного" аппарата
Функции:
- Прием монет для оплаты, выдача сдачи
- Выбор напитка (из неменее чем 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
Kap