Всем снова привет! Натолкните на мысль в выполнении этого задания:
Разработать архитектуру классов иерархии товаров при разработке
системы управления потоками товаров для дистрибьюторской
компании. Прописать члены классов.
Должны быть предусмотрены разные типы товаров, в том числе:
Бытовая химия;
Продукты питания.
Предусмотреть интерфейсы:
Скоропортящиеся продукты;
Ликеро-водочные продукты и табачные изделия (акцизные
продукты);
Легковоспламеняющиеся товары;
Бьющиеся товары.
Предусмотреть классы управления потоком товаров (пришло,
реализовано, списано, передано).
Я сделал абстрактный класс “Товар”, потом от него унаследовал два абстрактных класса “Продукты” и “Химия”. Написал рализацию 4-х неоходимых интерфейсов, и написал несколько классов (от класса “Продукты” или “Химия”), с реализацией одного или нескольких интерфейсов.
Не пойму как правильно реализовать это:
Предусмотреть классы управления потоком товаров (пришло,
реализовано, списано, передано)
Я это видел. Вот подумал, может сделать какой-то класс с массивом продуктов и методами добавления/удаления, а потом, в зависимости от условий, добавлять или удалять их в классы “Списано”, “Продано”, “Приход” и “Передано”. Только вот не совсем понимаю как это сделать?
Я уточнил, так вот нужно сделать базовый Класс “Товары” с полем Product [] arr и двумя методами добавления/удаления, потом от него унаследовать 4 класса движения товаров. А потом в Мэйне создать экземпляр класса “Приход” и туда добавить разные продукты и так далее. Я вроде бы сделал. Но при выводе на экран вылетает исключение, указывающее на GetEnumerator() и строку в Мэйне с циклом.
Необработанное исключение: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в InterfacesDistribution.Merchandise.GetEnumerator() в e:\Study\C#\Projects\InterfacesDistribution\Merchandise.cs:строка 22
в InterfacesDistribution.Program.Main(String[] args) в e:\Study\C#\Projects\InterfacesDistribution\Program.cs:строка 22
Даже не знаю, что вам скинуть. Я сделал какой-то костыль, но оно вроде работает. Если конечно я правильно понял, что от меня хотят:
public class Merchandise : IEnumerable
{
private Product[] _arr;
public Product this[int pos]
{
get => _arr[pos];
set => _arr[pos] = value;
}
public int Length => _arr.Length;
public IEnumerator GetEnumerator()
{
return _arr.GetEnumerator();
}
public Merchandise(int Length)
{
_arr = new Product[Length];
}
public virtual void AddProduct(Product value)
{
Product[] newArr = new Product[_arr.Length + 1];
newArr[_arr.Length] = value;
for(int i=0;i<_arr.Length;i++)
{
newArr[i] = _arr[i];
}
_arr = newArr;
}
public virtual void DelProduct(int pos)
{
Product[] newArr = new Product[_arr.Length - 1];
for (int i = 0; i < pos; i++)
{
newArr[i] = _arr[i];
}
for (int i = pos; i < newArr.Length; i++)
{
newArr[i] = _arr[i + 1];
}
_arr = newArr;
}
}
class Program
{
static void Main(string[] args)
{
Shampoo a = new Shampoo("Axe", 3, Type.Hypoallergenic, new DateTime(2022, 10, 21), false);
Eggs b = new Eggs("Village", 2, 80, false, new DateTime(2020, 12, 5));
Cigars c = new Cigars("Cohiba", 10, 0, 5);
Receipt products = new Receipt(0);
products.AddProduct(a);
products.AddProduct(b);
products.AddProduct(b);
products.DelProduct(2);
foreach (var item in products)
{
Console.WriteLine(item);
}
}
}