コード例 #1
0
ファイル: Date.cs プロジェクト: ostrikovbestu/Lab7
        // Добавим перегрузку конструктора, чтобы он мог работать и со структурой.
        public Date(DateStruct date)
        {
            // Воспользуемся собственным исключением, будем выбрасывать его, если условие верное.
            // Будем проверять не орицательна ли дата.
            // Месяц в данном случае можно не проверять, т.к он жестко задан, с помощью Enum
            if (date.Year < 0 ||
                date.Day <= 0 || date.Day > 31)
            {
                // Будем выбрасывать пользовательское исключение.
                // Поскольку конструктор перегружен, то можно указать причину исключения.
                throw new DateException("!!ОШИБКА!!Год или день задан неверно.");
            }

            // Также проверим время.
            if (date.Hour < 0 || date.Hour >= 24)
            {
                throw new DateException("!!ОШИБКА!Неверно указан час.");
            }
            if (date.Minute < 0 || date.Minute >= 60)
            {
                throw new DateException("!!ОШИБКА!Неверно указаны минуты.");
            }

            Hour   = date.Hour;
            Minute = date.Minute;
            Day    = date.Day;
            Year   = date.Year;
            Month  = date.Month.ToString();
        }
コード例 #2
0
 // Добавим перегрузку конструктора, чтобы он мог работать и со структурой.
 public Date(DateStruct date)
 {
     Hour   = date.Hour;
     Minute = date.Minute;
     Day    = date.Day;
     Year   = date.Year;
     Month  = date.Month.ToString();
 }
コード例 #3
0
        static void Test2()
        {
            // Создадим несколько объектов структуры даты и заполним ее.
            DateStruct date1 = new DateStruct()
            {
                Day    = 12,
                Hour   = 10,
                Minute = 12,
                Month  = Months.December,
                Year   = 2020
            };

            DateStruct date2 = new DateStruct()
            {
                Day    = 14,
                Hour   = 11,
                Minute = 33,
                Month  = Months.May,
                Year   = 2020
            };

            DateStruct date3 = new DateStruct()
            {
                Day    = 23,
                Hour   = 6,
                Minute = 44,
                Month  = Months.April,
                Year   = 2021
            };

            DateStruct date4 = new DateStruct()
            {
                Day    = 11,
                Hour   = 15,
                Minute = 17,
                Month  = Months.March,
                Year   = 2021
            };

            // Создадим несколько объектов
            ConsignmentNote minskGorElCN = new ConsignmentNote(new Date(date1), new MinskEnergyEstablishment());

            minskGorElCN.GoodsPricePair.Add("Счетчик \"Заря\"", 1543.23);
            minskGorElCN.GoodsPricePair.Add("Счетчик \"M23\"", 2543.23);
            minskGorElCN.GoodsPricePair.Add("Счетчик \"Электрон\"", 543.23);

            ConsignmentNote minskGorElCN2 = new ConsignmentNote(new Date(date2), new MinskEnergyEstablishment());

            minskGorElCN2.GoodsPricePair.Add("Счетчик \"Вега-123\"", 15233.23);
            minskGorElCN2.GoodsPricePair.Add("Счетчик \"M99\"", 25423.23);
            minskGorElCN2.GoodsPricePair.Add("Счетчик \"NewWave\"", 5143.23);

            ConsignmentNote minskGorElCN3 = new ConsignmentNote(new Date(date3), new MinskEnergyEstablishment());

            minskGorElCN3.GoodsPricePair.Add("Мультиметр \"Тестер-92\"", 133.23);
            minskGorElCN3.GoodsPricePair.Add("Галогенная лампа \"ГЛ-23\"", 423.23);
            minskGorElCN3.GoodsPricePair.Add("Провод 100м \"12-12\"", 5143.23);

            ConsignmentNote minskGorElCN4 = new ConsignmentNote(new Date(date4), new MinskEnergyEstablishment());

            minskGorElCN4.Check = null; // Чека нет.
            minskGorElCN4.GoodsPricePair.Add("Набор инструментов \"Электрик\"", 133.23);
            minskGorElCN4.GoodsPricePair.Add("Щипцы \"ЩС-13\"", 423.23);
            minskGorElCN4.GoodsPricePair.Add("Сварочный аппарат \"12-12\"", 5143.23);

            ConsignmentNote minskGorElCN5 = new ConsignmentNote(new Date(date3), new MinskEnergyEstablishment());

            minskGorElCN5.Check = null; // Чека нет.
            minskGorElCN5.GoodsPricePair.Add("Мультиметр \"Тестер-92\"", 133.23);
            minskGorElCN5.GoodsPricePair.Add("Галогенная лампа \"ГЛ-23\"", 423.23);
            minskGorElCN5.GoodsPricePair.Add("Провод 100м \"12-12\"", 5143.23);

            // Заполним контейнер объектами.
            Accounting accounting = new Accounting();

            accounting.Documents.Add(minskGorElCN);
            accounting.Documents.Add(minskGorElCN2);
            accounting.Documents.Add(minskGorElCN3);
            accounting.Documents.Add(minskGorElCN4);
            accounting.Documents.Add(minskGorElCN5);

            // Напечатаем на консоль.
            accounting.PrintDocuments();

            // Передадим классу контроллеру, класс контейнер.
            AccountingController accountingController = new AccountingController(accounting);
            // Протестируем методы по заданию.
            string findName = "Мультиметр \"Тестер-92\"";
            var    res      = accountingController.CalculateFinallyCost(findName);

            Console.WriteLine($"Суммарная стоимость {findName} = {res}");
            Console.WriteLine($"Количество чеков для накладных = {accountingController.CalculateCheckCount()}");
            // Возьмем интервал год, и напечатаем НЕ меньше ДВУХ дат.
            accountingController.PrintTwoDocs(DateTime.ParseExact("2020-12-12",
                                                                  "yyyy-MM-dd",
                                                                  System.Globalization.CultureInfo.InvariantCulture),
                                              DateTime.ParseExact("2020-01-12",
                                                                  "yyyy-MM-dd",
                                                                  System.Globalization.CultureInfo.InvariantCulture));
        }
コード例 #4
0
        // Метод для тестирования.
        static void Test()
        {
            // Создадим несколько объектов структуры даты и заполним ее.
            DateStruct date1 = new DateStruct()
            {
                Day    = 12,
                Hour   = 10,
                Minute = 12,
                Month  = Months.December,
                Year   = 2020
            };

            DateStruct date2 = new DateStruct()
            {
                Day    = 9,
                Hour   = 11,
                Minute = 33,
                Month  = Months.May,
                Year   = 2020
            };

            /**
             * Построим следующую иерархию.
             * Класс ДОКУМЕНТ сделаем абстрактным, который будет описывать
             * свойства присущие документам. Он будет родителем для классов
             * НАКЛАДНАЯ, КВИТАНЦИЯ т.к эти классы являются документами.
             * Класс ЧЕК является запечатанным классом, можем только использовать его.
             * В нем будет хранится общая стоимость услуг/товаров из классов НАКЛАДНАЯ КВИТАНЦИЯ
             *
             * Класс ДАТА, будет запечатанным классом, который нельзя наследовать,
             * будет хранить в себе время и дату, которое зададим для его объектов.
             * Также перегрузим для него все методы object. Для него создаим интерфейс
             * который будет определелять члены класса для класса ДАТА.
             *
             * Класс ОРГАНИЗАЦИЯ, сделаем абстрактным.
             * Будем наследовать его для каждого нового класса придуманной организации.
             *
             */

            /**
             * Можно воспользоваться полиморфизмом, и передавать потомков класса Organization
             * вторым параметром. Создадим две организации, МинскГорЭлектро и продуктовый магазин.
             */
            // Создадим тестовые объекты. Квитанции и накладной.
            // Поскольку добавили перегрузку конструктора для работы со структурой
            // передадим в дату структуру.
            Receipt minskGorElRec = new Receipt(new Date(date1), new MinskEnergyEstablishment());

            // Заполним словарь услуга-стоимость
            minskGorElRec.ServicePricePair.Add("Электричество", 1230);
            minskGorElRec.ServicePricePair.Add("Отопление", 3434);
            minskGorElRec.ServicePricePair.Add("Газ", 124);
            minskGorElRec.ServicePricePair.Add("ЖКХ", 534);
            minskGorElRec.CalculateFinalPrice(); // Посчитаем общую стоимость услуг и занесем в чек

            ConsignmentNote minskGorElCN = new ConsignmentNote(new Date(date2), new MinskEnergyEstablishment());

            // Заполним словарь товар-стоимость
            minskGorElCN.GoodsPricePair.Add("Счетчик \"Заря\"", 1543.23);
            minskGorElCN.GoodsPricePair.Add("Счетчик \"M23\"", 2543.23);
            minskGorElCN.GoodsPricePair.Add("Счетчик \"Электрон\"", 543.23);
            minskGorElCN.CalculateFinalPrice();
            Console.WriteLine(new MinskEnergyEstablishment().GetFullInfo() + "\n\n");
            ///////////////////////////////////////////////////////////////////////////
            // Создадим тестовые объекты. Квитанции и накладной.
            Receipt freshMarketRec = new Receipt(new Date(5, 32, 15, 2020, "December"), new FreshMarket());

            // Заполним словарь услуга-стоимость
            freshMarketRec.ServicePricePair.Add("Доставка продуктов", 34230);
            freshMarketRec.ServicePricePair.Add("Накладные расходы", 342334);
            freshMarketRec.ServicePricePair.Add("Логистика", 1234124);
            freshMarketRec.ServicePricePair.Add("Уборка", 53434);
            freshMarketRec.CalculateFinalPrice(); // Посчитаем общую стоимость услуг и занесем в чек

            ConsignmentNote freshMarketCN = new ConsignmentNote(new Date(5, 32, 15, 2020, "December"), new FreshMarket());

            // Заполним словарь товар-стоимость
            freshMarketCN.GoodsPricePair.Add("Фрукты", 154334.23);
            freshMarketCN.GoodsPricePair.Add("Вода", 2543343.23);
            freshMarketCN.GoodsPricePair.Add("Овощи", 54433.23);
            freshMarketCN.CalculateFinalPrice();
            Console.WriteLine(new FreshMarket().GetFullInfo() + "\n");
            // Выведем для продуктового магазина список накладной.
            foreach (var good in freshMarketCN.GoodsPricePair)
            {
                Console.WriteLine($"Наименование товара: {good.Key} | Цена: {good.Value}");
            }
            Console.WriteLine("\n\n");

            // Создаем список из документов разных организаций.
            List <Document> documents = new List <Document>()
            {
                minskGorElRec,
                minskGorElCN,
                freshMarketRec,
                freshMarketCN
            };
            // Создаем объект принтер.
            Printer printer = new Printer();

            // Последовательно перебираем все объекты и вызываем их перегрузку tostring
            foreach (var doc in documents)
            {
                printer.IAmPrinting(doc);
            }
        }
コード例 #5
0
ファイル: ProgramPartTwo.cs プロジェクト: ostrikovbestu/Lab7
        static void Test2()
        {
            // Создадим несколько объектов структуры даты и заполним ее.
            DateStruct date1 = new DateStruct()
            {
                Day    = 11,
                Hour   = 23,
                Minute = 59,
                Month  = Months.December,
                Year   = 2020
            };

            DateStruct date2 = new DateStruct()
            {
                Day    = 14,
                Hour   = 11,
                Minute = 33,
                Month  = Months.May,
                Year   = 2020
            };

            DateStruct date3 = new DateStruct()
            {
                Day    = 23,
                Hour   = 6,
                Minute = 44,
                Month  = Months.April,
                Year   = 2021
            };

            DateStruct date4 = new DateStruct()
            {
                Day    = 11,
                Hour   = 15,
                Minute = 17,
                Month  = Months.March,
                Year   = 2021
            };

            // Создадим несколько объектов
            ConsignmentNote minskGorElCN = new ConsignmentNote(new Date(date1),
                                                               new MinskEnergyEstablishment());

            minskGorElCN.GoodsPricePair.Add("Счетчик \"Заря\"", 1543.23);
            minskGorElCN.GoodsPricePair.Add("Счетчик \"M23\"", 2543.23);
            minskGorElCN.GoodsPricePair.Add("Счетчик \"Электрон\"", 543.23);

            ConsignmentNote minskGorElCN2 = new ConsignmentNote(new Date(date2),
                                                                new MinskEnergyEstablishment());

            minskGorElCN2.GoodsPricePair.Add("Счетчик \"Вега-123\"", 15233.23);
            minskGorElCN2.GoodsPricePair.Add("Счетчик \"M99\"", 25423.23);
            minskGorElCN2.GoodsPricePair.Add("Счетчик \"NewWave\"", 5143.23);

            ConsignmentNote minskGorElCN3 = new ConsignmentNote(new Date(date3),
                                                                new MinskEnergyEstablishment());

            minskGorElCN3.GoodsPricePair.Add("Мультиметр \"Тестер-92\"", 133.23);
            minskGorElCN3.GoodsPricePair.Add("Галогенная лампа \"ГЛ-23\"", 423.23);
            minskGorElCN3.GoodsPricePair.Add("Провод 100м \"12-12\"", 5143.23);

            ConsignmentNote minskGorElCN4 = new ConsignmentNote(new Date(date4),
                                                                new MinskEnergyEstablishment());

            minskGorElCN4.Check = null; // Чека нет.
            minskGorElCN4.GoodsPricePair.Add("Набор инструментов \"Электрик\"", 133.23);
            minskGorElCN4.GoodsPricePair.Add("Щипцы \"ЩС-13\"", 423.23);
            minskGorElCN4.GoodsPricePair.Add("Сварочный аппарат \"12-12\"", 5143.23);

            ConsignmentNote minskGorElCN5 = new ConsignmentNote(new Date(date3),
                                                                new MinskEnergyEstablishment());

            minskGorElCN5.Check = null; // Чека нет.
            minskGorElCN5.GoodsPricePair.Add("Мультиметр \"Тестер-92\"", 133.23);
            minskGorElCN5.GoodsPricePair.Add("Галогенная лампа \"ГЛ-23\"", 423.23);
            minskGorElCN5.GoodsPricePair.Add("Провод 100м \"12-12\"", 5143.23);

            // Заполним контейнер объектами.
            Accounting accounting = new Accounting();

            accounting.Documents.Add(minskGorElCN);
            accounting.Documents.Add(minskGorElCN2);
            accounting.Documents.Add(minskGorElCN3);
            accounting.Documents.Add(minskGorElCN4);
            accounting.Documents.Add(minskGorElCN5);

            /**
             * Вызовем assert.
             *
             * Проверяем утверждение, что количество объектов, должно быть больше 0
             * если объектов больше 0 условие верное и срабатывать не будет, сработает только в
             * том случае если утверждение ЛОЖНО, а именно, когда объектов 0,
             * ЧТобы вызвать этот assert, нужно заккоментировать три строки 186, 187, 188
             */
            System.Diagnostics.Debug.Assert(minskGorElCN5.GoodsPricePair.Count > 0,
                                            "Список товаров в накладной не может быть пуст!");

            // Если условие верное
            if (accounting.Documents.Count == 0)
            {
                // выбрасываем исключение
                throw new EmptyObjectsException();
            }
            // Напечатаем на консоль информацию об объектах
            accounting.PrintDocuments();

            // Передадим классу контроллеру, класс контейнер.
            AccountingController accountingController = new AccountingController(accounting);
            // Протестируем методы по заданию.
            string findName = "Мультиметр \"Тестер-92\"";
            var    res      = accountingController.CalculateFinallyCost(findName);

            Console.WriteLine($"Суммарная стоимость {findName} = {res}");
            Console.WriteLine($"Количество чеков для накладных = {accountingController.CalculateCheckCount()}");
            // Возьмем интервал год, и напечатаем НЕ меньше ДВУХ дат.
            accountingController.PrintTwoDocs(DateTime.ParseExact("2020-12-12",
                                                                  "yyyy-MM-dd",
                                                                  System.Globalization.CultureInfo.InvariantCulture),
                                              DateTime.ParseExact("2020-01-12",
                                                                  "yyyy-MM-dd",
                                                                  System.Globalization.CultureInfo.InvariantCulture));
        }