Лабораторная работа №9. Классы и объекты
В данном проекте требуется разработать программу, ведущую учёт заказов в магазине.
Каждый класс помещаются в отдельном файле и должны иметь открытые (
public
) методы печати с заголовкомpublic override string ToString()
Слово
override
требуется для того, чтобы объект класса можно было печать с помощью обычныхWrite
иWriteLine
. В реализации следует печатать информацию о всех полях.Не забывайте о комментариях.
[
1.5 балла
] Реализацию проекта следует начать с классаCustomer
(Покупатель) с тремя атрибутами: имя (string), адрес (string), скидка (double). Атрибуты реализуются свойствами (property), которые соответствуют закрытым (private) полям.Замечание. Описание свойств можно посмотреть по ссылке. Если в свойстве не требуется дополнительных проверок или действий, а реализуется только свойство на чтение, можно воспользоваться автоматическими свойствами.
Конструкторы указанных классов должны инициализировать значения всех полей из своих параметров. Они должны быть открытыми (
public
). В конструкторе класса Customer следует реализовать проверку двух условий: имя - не пустая строка и скидка принадлежит отрезку [0,1]. Для проверки используем или Debug.Assert или бросаем исключение типа ArgumentOutOfRangeException (для имени - ArgumentException)В основной программе должны создаваться несколько объектов каждого класса (параметры конструкторов могут задаваться непосредственно в коде, без взаимодействия с пользователем).
Определите класс
Product
(Товар). Для них потребуется определить закрытые (private
) поля, соответствующие названию (string) и цене (decimal), и соответствующие им открытые (public
) свойства на чтение.
Для класса продукта заведите списокList
из трёх объектов разных продуктов. В цикле распечатайте его содержимое[
2.5 балла
] Создать классProductDatabase
(база данных товаров), хранящий ассоциативный массив («словарь») с информацией о товарах, доступ к которым осуществляется по строковому коду (строки вида ‘X634’):Dictionary<string, Product>
.В конструкторе класса должен создаваться пустой словарь.
В классе должен присутствовать метод добавления товара:
public void AddProduct(Product product)
Он должен генерировать случайную строку-ключ вида
X123
и добавлять по этому ключу данный продукт в словарь. Генерировать случайную строку следует в цикле до тех пор, пока не получится строка, отсутствующая в словаре. Случайную латинскую букву можно получать, к примеру, так:var c = (char)((int)'A' + random.Next(26));
Заполнение словаря следует выполнять непосредственно в коде основной программы.
Добавить перегрузку метода
продемонстрировать использованиеpublic void AddProduct(IEnumerable<Product> products)
[
3 балла
] Определить классOrderLine
с полями количество (int) и продукт (Product), свойствами на чтения для них, конструктором для инициализации полей и методомToString
. Добавьте открытый метод TotalPrice(decimal discount), который возвращает стоимость товара с учётом скидки.Создать и распечатать в коде основной программы несколько объектов класса
OrderLine
.[
3.5 балла
] Определить классOrder
с полями номер заказа (int), клиент (Customer), скидка (decimal), общая стоимость (decimal) и строки заказа (List<OrderLIne>). Определить конструктор, который принимает номер заказа и объект класса Customer. Добавить метод AddOrderLine(Product product, int quantity)- [
4 балла
] Реализовать следующую логику основной программы:- Создаётся и заполняется база данных товаров (ассоциативный массив).
- В консоли вводятся данные по конкретному покупателю, создаётся соответствующий объект.
- Создаётся заказ для введённого ранее покупателя с номером 10001. Устанавливается скидка на заказ в соответствии со скидкой покупателя.
- В цикле формируются необходимое количество строк заказа: вводятся коды товаров и количества их единиц.
- Полная информация о заказе сохраняется в файле с заданным именем (метод
Print
).