예제 #1
0
        public static List <Item> ReadItemsFromFile(string path)
        {
            FileInfo     file;
            StreamReader reader;

            file = new FileInfo(path);

            if (!file.Exists)
            {
                throw new Exception("Невозможно открыть файл.");
            }
            reader = new StreamReader(file.OpenRead(), Encoding.Default);

            List <Item> itemList = new List <Item>();

            while (!reader.EndOfStream)
            {
                bool exists = false;

                string itemVendorCode = reader.ReadLine();
                if (itemVendorCode.StartsWith("\n") || itemVendorCode.StartsWith(" ") || itemVendorCode.Length != 6)
                {
                    Console.WriteLine("Некорректно указан артикул.");
                    itemVendorCode = Randomizer.RandomVendorCode();
                }
                string itemName = reader.ReadLine();
                if (itemName.StartsWith("\n") || itemName.StartsWith(" ") || itemName.Length == 0)
                {
                    Console.WriteLine("Некорректно указано имя товара.");
                }

                string itemUnit = reader.ReadLine();
                if (itemUnit.StartsWith("\n") || itemUnit.StartsWith(" ") || itemUnit.Length == 0)
                {
                    Console.WriteLine("Некорректно указана единица измерения товара {0}.", itemName);
                }

                float itemZakupPrice;
                bool  successPrice = float.TryParse(reader.ReadLine(), out itemZakupPrice);
                if (!successPrice)
                {
                    itemZakupPrice = 0;
                    Console.WriteLine("Некорректно указана закупочная цена для товара {0}.", itemName);
                }

                string itemShelfLife = reader.ReadLine();
                if (itemShelfLife.StartsWith("\n") || itemShelfLife.StartsWith(" ") || itemShelfLife.Length == 0)
                {
                    Console.WriteLine("Некорректно указан срок годности товара {0}.", itemName);
                }

                DateTime        itemDateOfManufacturing;
                IFormatProvider culture     = CultureInfo.CreateSpecificCulture("ru-RU");
                bool            successDate = DateTime.TryParse(reader.ReadLine(), culture, DateTimeStyles.AdjustToUniversal, out itemDateOfManufacturing);
                if (!successDate)
                {
                    itemDateOfManufacturing = new DateTime(0);
                    Console.WriteLine("Некорректно указана дата производства для товара {0}.", itemName);
                }

                uint itemCount;
                bool successCount = uint.TryParse(reader.ReadLine(), out itemCount);
                if (!successCount)
                {
                    itemCount = 0;
                    Console.WriteLine("Некорректно указано количество товара {0}.", itemName);
                }

                string manufacturerName = reader.ReadLine();
                if (manufacturerName.StartsWith("\n") || manufacturerName.StartsWith(" ") || manufacturerName.Length == 0)
                {
                    Console.WriteLine("Некорректно указано название производителя.");
                }
                Shop sShop;
                if (Shops.FindShopByManufacturerName(manufacturerName, out sShop))
                {
                    Item sItem = CreateItem(itemVendorCode, itemName, itemUnit, itemZakupPrice, itemShelfLife, itemCount, itemDateOfManufacturing, sShop.Manufacturer);
                    sShop.AddItem(sItem);
                    itemList.Add(sItem);
                    exists = true;
                }

                string manufacturingCountry = reader.ReadLine();
                if (manufacturingCountry.StartsWith("\n") || manufacturingCountry.StartsWith(" ") || manufacturingCountry.Length == 0)
                {
                    Console.WriteLine("Некорректно указана страна производства для производителя {0}.", manufacturerName);
                }

                string manufacturerAddress = reader.ReadLine();
                if (manufacturerAddress.StartsWith("\n") || manufacturerAddress.StartsWith(" ") || manufacturerAddress.Length == 0)
                {
                    Console.WriteLine("Некорректно указан адрес производителя {0}.", manufacturerAddress);
                }

                Phone manufacturerPhone;
                ulong number;
                bool  successNumber = ulong.TryParse(reader.ReadLine(), out number);
                if (!successNumber)
                {
                    number = 0;
                    Console.WriteLine("Некорректно указан номер телефона для производителя {0}", manufacturerName);
                }
                try
                {
                    manufacturerPhone = new Phone(number);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Ошибка в товаре {1}:\n{0}", e.Message, itemName);
                    manufacturerPhone = new Phone(0);
                }
                if (!exists)
                {
                    Manufacturer itemManufacturer = new Manufacturer(manufacturerName, manufacturingCountry, manufacturerAddress, manufacturerPhone);
                    Item         item             = CreateItem(itemVendorCode, itemName, itemUnit, itemZakupPrice, itemShelfLife, itemCount, itemDateOfManufacturing, itemManufacturer);
                    itemList.Add(item);

                    Shop shop = new Shop(itemManufacturer);
                    shop.AddItem(item);
                    Shops.AddShop(shop);
                }
            }
            reader.Close();
            return(itemList);
        }
예제 #2
0
        public static Item ReadItemFromConsole()
        {
            string   itemVendorCode          = "";
            string   itemName                = "";
            string   itemUnit                = "";
            float    itemZakupPrice          = 0;
            string   itemShelfLife           = "";
            DateTime itemDateOfManufacturing = new DateTime(0);
            uint     itemCount               = 0;
            string   manufacturerName        = "";
            string   manufacturingCountry    = "";
            string   manufacturerAddress     = "";
            Phone    manufacturerPhone       = new Phone();

            Console.WriteLine("Для отмены ввода и возврата напишите \"назад\".");

            for (int i = 0; i < valuesInput.Length; i++)
            {
                Console.WriteLine(valuesInputStrings[i]);

                switch (valuesInput[i])
                {
                case "itemVendorCode":
                {
                    itemVendorCode = Input;
                    if (itemVendorCode.Length == 0)
                    {
                        itemVendorCode = Randomizer.RandomVendorCode();
                    }
                    while (itemVendorCode.StartsWith("\n") || itemVendorCode.StartsWith(" ") || itemVendorCode.Length != 6)
                    {
                        Console.WriteLine("Некорректно указан артикул. Повторите ввод.");
                        itemVendorCode = Input;
                        if (itemVendorCode.Length == 0)
                        {
                            itemVendorCode = Randomizer.RandomVendorCode();
                        }
                    }
                    break;
                }

                case "itemName":
                {
                    itemName = Input;
                    while (itemName.StartsWith("\n") || itemName.StartsWith(" ") || itemName.Length == 0)
                    {
                        Console.WriteLine("Имя товара не должно начинаться с пробела или быть пустым. Повторите ввод.");
                        itemName = Input;
                    }
                    break;
                }

                case "itemUnit":
                {
                    itemUnit = Input;
                    while (itemUnit.StartsWith("\n") || itemUnit.StartsWith(" ") || itemUnit.Length == 0)
                    {
                        Console.WriteLine("Единица измерения товара не должна начинаться с пробела или быть пустой. Повторите ввод.");
                        itemUnit = Input;
                    }
                    break;
                }

                case "itemZakupPrice":
                {
                    bool successPrice = float.TryParse(Input, out itemZakupPrice);
                    while (!successPrice)
                    {
                        Console.WriteLine("Некорректно указана закупочная цена. Повторите ввод.");
                        successPrice = float.TryParse(Input, out itemZakupPrice);
                    }
                    break;
                }

                case "itemShelfLife":
                {
                    itemShelfLife = Input;
                    while (itemShelfLife.StartsWith("\n") || itemShelfLife.StartsWith(" ") || itemShelfLife.Length == 0)
                    {
                        Console.WriteLine("Некорректно указан срок годности. Повторите ввод.");
                        itemShelfLife = Input;
                    }
                    break;
                }

                case "itemDateOfManufacturing":
                {
                    IFormatProvider culture     = CultureInfo.CreateSpecificCulture("ru-RU");
                    bool            successDate = DateTime.TryParse(Input, culture, DateTimeStyles.AdjustToUniversal, out itemDateOfManufacturing);
                    while (!successDate)
                    {
                        Console.WriteLine("Некорректно указана дата производства. Повторите ввод.");
                        successDate = DateTime.TryParse(Input, culture, DateTimeStyles.AdjustToUniversal, out itemDateOfManufacturing);
                    }
                    break;
                }

                case "itemCount":
                {
                    bool successCount = uint.TryParse(Input, out itemCount);
                    while (!successCount)
                    {
                        Console.WriteLine("Некорректно указано количество товара. Повторите ввод.");
                        successCount = uint.TryParse(Input, out itemCount);
                    }
                    break;
                }

                case "manufacturerName":
                {
                    manufacturerName = Input;
                    while (manufacturerName.StartsWith("\n") || manufacturerName.StartsWith(" ") || manufacturerName.Length == 0)
                    {
                        Console.WriteLine("Некорректно указано название производителя. Повторите ввод.");
                        manufacturerName = Input;
                    }
                    Shop sShop;
                    if (Shops.FindShopByManufacturerName(manufacturerName, out sShop))
                    {
                        Console.WriteLine("Производитель {0} уже есть в базе данных, для продолжения ввода данных производителя напишите \"продолжить\",\n" +
                                          "для подстановки значений из базы данных оставьте поле пустым.", sShop.Manufacturer.Name);
                        string input = Input;
                        if (input.ToUpper() == "ПРОДОЛЖИТЬ")
                        {
                            break;
                        }
                        else
                        {
                            Item sItem = CreateItem(itemVendorCode, itemName, itemUnit, itemZakupPrice, itemShelfLife, itemCount, itemDateOfManufacturing, sShop.Manufacturer);
                            sShop.AddItem(sItem);
                            return(sItem);
                        }
                    }
                    break;
                }

                case "manufacturingCountry":
                {
                    manufacturingCountry = Input;
                    while (manufacturingCountry.StartsWith("\n") || manufacturingCountry.StartsWith(" ") || manufacturingCountry.Length == 0)
                    {
                        Console.WriteLine("Некорректно указана страна производства. Повторите ввод.");
                        manufacturingCountry = Input;
                    }
                    break;
                }

                case "manufacturerAddress":
                {
                    manufacturerAddress = Input;
                    while (manufacturerAddress.StartsWith("\n") || manufacturerAddress.StartsWith(" ") || manufacturerAddress.Length == 0)
                    {
                        Console.WriteLine("Некорректно указан адрес производителя. Повторите ввод.");
                        manufacturerAddress = Input;
                    }
                    break;
                }

                case "manufacturerPhone":
                {
                    ulong number;
                    bool  successNumber = ulong.TryParse(Input, out number);
                    try
                    {
                        manufacturerPhone = new Phone(number);
                        successNumber     = true;
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        successNumber = false;
                    }
                    while (!successNumber)
                    {
                        Console.WriteLine("Некорректно указан номер телефона производителя. Повторите ввод.");
                        successNumber = ulong.TryParse(Input, out number);
                        try
                        {
                            manufacturerPhone = new Phone(number);
                            successNumber     = true;
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                            Console.WriteLine("Повторите ввод.");
                            successNumber = false;
                        }
                    }
                    break;
                }
                }
            }
            Manufacturer itemManufacturer = new Manufacturer(manufacturerName, manufacturingCountry, manufacturerAddress, manufacturerPhone);
            Item         item             = CreateItem(itemVendorCode, itemName, itemUnit, itemZakupPrice, itemShelfLife, itemCount, itemDateOfManufacturing, itemManufacturer);

            Shop shop = new Shop(itemManufacturer);

            shop.AddItem(item);
            Shops.AddShop(shop);

            return(item);
        }