Пример #1
0
        // поиск перевозчика с самой дешевой стоимостью доставки от точки A до точки B
        public void SearchBestPrice(Carriers carriers, Routes routes, Order order, Transports transports)
        {
            // подсчет найденных перевозчиков
            int carriersCount = 1;

            foreach (Carrier c in carriers.carriersList)
            {
                foreach (int transportID in c.carrierTransportsIdList)
                {
                    foreach (Transport transport in transports.transportsList)
                    {
                        if (transportID == transport.transportID)
                        {
                            orderCost = transport.GetСoefficientCost() * c.distanceABforOrder / 100 * order.volume;
                        }
                    }
                }

                if (c.foundRouteAB)
                {
                    Console.WriteLine($" {carriersCount++}) Перевозчик № {c.carrierID} - стоимость транспортировки {orderCost:#.##}тг");
                }
                if (c.foundRouteAB && orderCost < minCost)
                {
                    minCost = orderCost;
                    carrierIDwithBestCost = c.carrierID;
                }
                c.costABforOrder = orderCost;

                // для получения с/с перевозки заказа у следующего перевозчика приводим вводные данные в исходное состояние
                orderCost = 0;
            }

            Console.WriteLine();
            Console.WriteLine($"Самая низкая стоимость посылки из {order.from} в {order.to} у Перевозчика № {carrierIDwithBestCost} - цена {minCost:#.##}тг");
            Console.WriteLine("\n\n");
        }
        static void Main(string[] args)
        {
            // создаем строку с данными для подключения к БД SQL
            ConnDataBaseSQL db = new ConnDataBaseSQL();

            // создаем базу данных если не существует
            //db.CreareDataBase();

            // создаем основные объекты для работы программы
            //Worker worker = new Worker();
            Employee  employee  = new Employee();
            Employees employees = new Employees();

            Customer  customer  = new Customer();
            Customers customers = new Customers();

            Carrier  carrier  = new Carrier();
            Carriers carriers = new Carriers();

            Transport  transport  = new Transport();
            Transports transports = new Transports();

            Route  route  = new Route();
            Routes routes = new Routes();

            Order  order  = new Order();
            Orders orders = new Orders();
            // 1, 2, ...

            //==== делегаты ==== https://metanit.com/sharp/tutorial/3.13.php

            ObjectsInfo objectsInfo;

            objectsInfo  = employees.Info;
            objectsInfo += carriers.Info;
            objectsInfo += orders.Info;


            //==== события ==== https://metanit.com/sharp/tutorial/3.14.php

            //employees.EmployeeAdded += Show_Message;
            //employees.EmployeesAddedtoDB += Show_Message;

            //customers.CustomerAdded += Show_Message;
            //customers.CustomersAddedtoDB += Show_Message;

            //carriers.CarrierAdded += Show_Message;
            //customers.CustomersAddedtoDB += Show_Message;

            // ==================== создаем необходимые таблицы в БД ====================
            //employees.CreateTable(db);
            //customers.CreateTable(db);
            //carriers.CreateTable(db);
            //transports.CreateTable(db);
            //routes.CreateTable(db);
            // 1, 2, ...

            // ==================== Счетчики объектов ====================
            // установка начального значения для счетчика объектов,
            //чтобы корректно отражать ID вновь созданных объектов в текущей сессии программы
            //employee.SetCountObj(db);
            //customer.SetCountObj(db);
            //carrier.SetCountObj(db);
            //transport.SetCountObj(db);

            // ==================== Создаем объекты ====================
            Employee employee1 = new Employee("Селезнев", "Павел", "Федорович", new DateTime(1981, 01, 08), 810108100011, new DateTime(2010, 01, 23), "менеджер", 180000);
            Employee employee2 = new Employee("Подорогин", "Семен", "Петрович", new DateTime(1992, 08, 25), 920825100021, new DateTime(2010, 01, 23), "экспедитор", 120000);
            Employee employee3 = new Employee("Синицына", "Анна", "Дмитриевна", new DateTime(1994, 03, 18), 940318200031, new DateTime(2010, 01, 23), "техник", 80000);
            Employee employee4 = new Employee("Нестеров", "Павел", "Николаевич", new DateTime(2003, 10, 12), 031012300041, new DateTime(2010, 01, 23), "экспедитор", 180000);

            Customer customer1 = new Customer("Быстров", "Олег", "Васильевич", new DateTime(2001, 01, 01), 010101300051);
            Customer customer2 = new Customer("Хотелов", "Василий", "Генадьевич", new DateTime(2003, 12, 01), 031201300061);
            Customer customer3 = new Customer("Подавайкин", "Иван", "Петрович", new DateTime(2012, 02, 25), 120225300071);
            Customer customer4 = new Customer("Занудов", "Петр", "Алексеевич", new DateTime(2008, 08, 12), 080812300081);
            Customer customer5 = new Customer("Хорошев", "Андрей", "Юрьевич", new DateTime(1985, 03, 21), 850321100091);

            Carrier carrier1 = new Carrier("Скороходов", "Павел", "Васильевич", new DateTime(1985, 01, 01), 850101100051);
            Carrier carrier2 = new Carrier("Тяжеловесов", "Григорий", "Генадьевич", new DateTime(1991, 12, 01), 911201100061);
            Carrier carrier3 = new Carrier("Далеков", "Валентин", "Петрович", new DateTime(1987, 02, 25), 870225100071);
            Carrier carrier4 = new Carrier("Запасов", "Тарас", "Олегович", new DateTime(1985, 05, 15), 850515100093);

            Transport transport1 = new Transport("Volkswagen_Caddy", 815, 3);
            Transport transport2 = new Transport("Газель-Фургон", 1500, 9);
            Transport transport3 = new Transport("Камаз-Автофургон", 10200, 35);

            Order order1 = new Order(1, 100, 0.5, "Алматы", "Костанай", Order.OrderStatuses.newOrder);
            Order order2 = new Order(1, 100, 0.5, "Павлодар", "Костанай", Order.OrderStatuses.newOrder);
            Order order3 = new Order(1, 100, 0.5, "Караганда", "Петропавловск", Order.OrderStatuses.newOrder);
            Order order4 = new Order(1, 100, 0.5, "Алматы", "Караганда", Order.OrderStatuses.newOrder);

            // === создаем матрицу маршрутов и заполняем ее из файла ===
            //routes.FillArray();
            //routes.PrintArray();

            // ==================== Создаем списки объектов ====================

            employees.AddEmployee(employee1);
            employees.AddEmployee(employee2);
            employees.AddEmployee(employee3);
            employees.AddEmployee(employee4);

            customers.AddCustomer(customer1);
            customers.AddCustomer(customer2);
            customers.AddCustomer(customer3);
            customers.AddCustomer(customer4);
            customers.AddCustomer(customer5);

            carriers.AddCarrier(carrier1);
            carriers.AddCarrier(carrier2);
            carriers.AddCarrier(carrier3);
            carriers.AddCarrier(carrier4);

            transports.AddTransport(transport1);
            transports.AddTransport(transport2);
            transports.AddTransport(transport3);

            routes.FillArrayRoutes();
            //routes.PrintArrayRoutes();

            orders.AddOrder(order1);
            orders.AddOrder(order2);
            orders.AddOrder(order3);

            // ==================== Собираем маршрут перевозчику - формируем реальный маршрут ====================

            carrier1.AddRouteToСarrierRouteListByCityNamesAB(db, "Алматы", "Тараз");
            carrier1.AddRouteToСarrierRouteListByCityNamesAB(db, "Тараз", "Шымкент");
            carrier1.AddRouteToСarrierRouteListByCityNamesAB(db, "Шымкент", "Кызылорда");
            carrier1.AddRouteToСarrierRouteListByCityNamesAB(db, "Кызылорда", "Жезказган");
            carrier1.AddRouteToСarrierRouteListByCityNamesAB(db, "Жезказган", "Караганда");
            carrier1.AddRouteToСarrierRouteListByCityNamesAB(db, "Караганда", "Костанай");

            carrier2.AddRouteToСarrierRouteListByCityNamesAB(db, "Алматы", "Караганда");
            carrier2.AddRouteToСarrierRouteListByCityNamesAB(db, "Караганда", "Жезказган");
            carrier2.AddRouteToСarrierRouteListByCityNamesAB(db, "Жезказган", "Нур-Султан");
            carrier2.AddRouteToСarrierRouteListByCityNamesAB(db, "Нур-Султан", "Петропавловск");
            carrier2.AddRouteToСarrierRouteListByCityNamesAB(db, "Петропавловск", "Костанай");

            carrier3.AddRouteToСarrierRouteListByCityNamesAB(db, "Алматы", "Семей");
            carrier3.AddRouteToСarrierRouteListByCityNamesAB(db, "Семей", "Павлодар");
            carrier3.AddRouteToСarrierRouteListByCityNamesAB(db, "Павлодар", "Петропавловск");
            carrier3.AddRouteToСarrierRouteListByCityNamesAB(db, "Петропавловск", "Нур-Султан");
            carrier3.AddRouteToСarrierRouteListByCityNamesAB(db, "Нур-Султан", "Костанай");

            carrier4.AddRouteToСarrierRouteListByCityNamesAB(db, "Алматы", "Усть-Каменогорск");
            carrier4.AddRouteToСarrierRouteListByCityNamesAB(db, "Усть-Каменогорск", "Караганда");
            carrier4.AddRouteToСarrierRouteListByCityNamesAB(db, "Караганда", "Жезказган");
            carrier4.AddRouteToСarrierRouteListByCityNamesAB(db, "Жезказган", "Актобе");
            carrier4.AddRouteToСarrierRouteListByCityNamesAB(db, "Актобе", "Костанай");
            carrier4.AddRouteToСarrierRouteListByCityNamesAB(db, "Костанай", "Актобе");

            // ==================== Закрепляем транспорт за перевозчиком ====================
            carrier1.AddTransportToTransportsList(db, 1);
            carrier2.AddTransportToTransportsList(db, 2);
            carrier3.AddTransportToTransportsList(db, 3);
            carrier4.AddTransportToTransportsList(db, 3);

            // Запись одиночных объектов в таблицу SQL
            //employee1.InsertTable(db);
            //carrier1.InsertTable(db);
            //transport1.InsertTable(db);
            //route1.InsertTable(db);

            // запись коллекции объектов в таблицу SQL
            //employees.InsertTable(db);
            //customers.InsertTable(db);
            //routes.InsertTable(db);
            //transports.InsertTable(db);



            // Вывод информации об объекте
            //employees.Info();
            //customers.Info();
            //carriers.Info();
            //transports.Info();
            //routes.InfoFromSQLtable();
            //routes.InfoFromSQLtable();
            //transports.InfoFromSQLtable();

            ///////////////////////////////////////////////////////////
            //order1.Info();
            //order1.ChangeOrderStatus(Order.OrderStatuses.closeOrder);
            //order1.Info();


            // !!!!!!!!!!!!!! Реализовать алгоритм Дейкстры !!!!!!!!!!!!

            carriers.Info();
            //da.PrintLinkMatrix();
            DijkstraAlgorithm da = new DijkstraAlgorithm(routes, carriers);

            da.Algorithm(order1, routes);


            //========================================================================================

            /*По двум точкам из заказа сделать поиск маршрутов их содержащих, посчитать расстояние и
             * выбрать маршрут с наименьшей дистанцией.*/
            /*Посмотреть машину с максимальной загрузкой, но так чтобы в нее помещалась посылка из заказа*/

            //transports.Info();
            transport1.Loading(800, 1.5);
            transport2.Loading(1200, 4.5);
            transport3.Loading(10000, 34.0);
            //transports.Info();

            //carriers.Info();
            BestCarrier bc = new BestCarrier();

            bc.BestWayandPrice(carriers, routes, order1, transports);
            //bc.BestWayandPrice(carriers, routes, order2, transports);
            //bc.BestWayandPrice(carriers, routes, order3, transports);
            //bc.BestWayandPrice(carriers, routes, order4, transports);

            //========================================================================================

            // ========= Чтение запись объектов в XML =========

            //employees.DOMWriteXML("Employees.xml");
            //Employees xe = new Employees();
            //xe.DOMReadXML("Employees.xml");
            //xe.Info();

            //customers.Info();
            //customers.DOMWriteXML("Customers.xml");
            //Customers xc = new Customers();
            //xc.DOMReadXML("Customers.xml");
            //xc.Info();

            //carriers.DOMWriteXML("Carriers.xml");
            //Carriers xcarriers = new Carriers();
            //xcarriers.DOMReadXML("Carriers.xml");
            //xcarriers.Info();

            // ========= Перегрузка базовых методов =========
            //Console.WriteLine($"Hash code for object {employee.GetType()} : {employee1.GetHashCode()}");
            //Console.WriteLine($"Hash code for object {employee.GetType()} : {employee2.GetHashCode()}");
            //Console.WriteLine($"Hash code for object {employee.GetType()} : {employee3.GetHashCode()}");
            //Console.WriteLine($"Hash code for object {employee.GetType()} : {employee4.GetHashCode()}");

            //Console.WriteLine("----------------------------------------------------------------");
            //Console.WriteLine(employee1.Equals(employee1));
            //Console.WriteLine("----------------------------------------------------------------");
            //Console.WriteLine(employee1.ToString());

            // === сортировки через обобщенные интерфейсы ===

            /*
             * employees.Show();
             * employees.employeesList.Sort();
             * Console.WriteLine("===== сортировка фамилии =====");
             * employees.Show();
             *
             * employees.Show();
             * Console.WriteLine("===== сортировка по имени =====");
             * employees.employeesList.Sort(new Employee.SortByName());
             * employees.Show();
             *
             * employees.Show();
             * Console.WriteLine("===== сортировка по возрасту =====");
             * employees.employeesList.Sort(new Employee.SortByAge());
             * employees.Show();
             */

            // === Вызов методов инфо через делегата ===
            //objectsInfo();

            Console.ReadKey();
        }