Esempio n. 1
0
        static void Main(string[] args)
        {
            Hotel hotel = new Hotel(Constants.RoomsAmount);

            Console.WriteLine("Здравствуйте, пожалуйста, введите пароль, чтобы начать работу: ");
            string password = "";

            for (int i = 0; i < 3; i++)
            {
                password = Console.ReadLine();
                if (password == Constants.Password)
                {
                    break;
                }
                Console.WriteLine("Пароль неправильный. У Вас ещё осталось попыток: {0}", 2 - i);
            }
            if (password != Constants.Password)
            {
                return;
            }
            Console.Clear();
            Console.WriteLine("Добро пожаловать, менеджер!");
            DateTime time = new DateTime(2020, 06, 05);

            while (true)
            {
                Console.WriteLine("Сегодня {0:D}", time);
                Console.WriteLine("Что Вы хотите сделать?");
                switch (Console.ReadLine())
                {
                case "0": return;

                case "1":
                    Console.WriteLine("Пожалуйста, введите фамилию и имя клиента:");
                    string name = Console.ReadLine();
                    Console.WriteLine("Также введите его возраст:");
                    try
                    {
                        Tourist tourist = new Tourist(name, Convert.ToInt32(Console.ReadLine()));
                        tourist.Notify += DisplayMessage;
                        string category;
                        int[]  rooms;
                        while (true)
                        {
                            Console.WriteLine("Номер какой категории нужно забронировать?");
                            category = Console.ReadLine();
                            if (category == "Стандарт")
                            {
                                rooms = Constants.StandartRooms;
                                break;
                            }
                            else if (category == "Полулюкс")
                            {
                                rooms = Constants.HalfLuxRooms;
                                break;
                            }
                            else if (category == "Люкс")
                            {
                                rooms = Constants.LuxRooms;
                                break;
                            }
                            else
                            {
                                Console.WriteLine("Категория номера указана неправильно. В отеле есть номера категорий Люкс, Полулюкс и Стандарт.");
                            }
                        }
                        Console.WriteLine("До какого числа нужно забронировать номер? Введите два числа через пробел в формате 'чч мм':");
                        string[] date;
                        while (true)
                        {
                            try
                            {
                                date = Console.ReadLine().Split();
                                break;
                            }
                            catch (ArgumentOutOfRangeException)
                            {
                                Console.WriteLine("Указаны недопустимые значения. Попробуйте ещё раз.");
                                continue;
                            }
                        }
                        int y = 2020;
                        if (time.Month > Convert.ToInt32(date[1]))
                        {
                            y++;
                        }
                        DateTime deadline = new DateTime(y, Convert.ToInt32(date[1]), Convert.ToInt32(date[0]));
                        foreach (int r in rooms)
                        {
                            if (tourist.Book(Convert.ToInt32(deadline.Subtract(time).TotalDays), hotel[r], deadline))
                            {
                                Tourists.WhoBooked.Add(r, tourist);
                                break;
                            }
                        }
                        if (tourist.roomnumber == -1)
                        {
                            Console.WriteLine("К сожалению, сейчас в отеле нет номеров данной категории, которые можно забронировать.");
                        }
                    }
                    catch (HotelException ex)
                    {
                        Console.WriteLine("Ошибка: " + ex.Message + "\n");
                        continue;
                    }
                    break;

                case "2":
                    Console.WriteLine("Пожалуйста, введите фамилию и имя клиента:");
                    string name1 = Console.ReadLine();
                    try
                    {
                        Tourist tourist = null;
                        int[]   rooms;
                        foreach (KeyValuePair <int, Tourist> Pair in Tourists.WhoBooked)
                        {
                            if (Pair.Value.name == name1)
                            {
                                Console.WriteLine("У вас забронирован номер №{0}.", Pair.Key);
                                tourist = Pair.Value;
                                Console.WriteLine("На сколько дней нужно снять номер?");
                                int      days2  = Convert.ToInt32(Console.ReadLine());
                                DateTime date1  = time.AddDays(days2);
                                int      topay1 = days2 * hotel[Pair.Key].price;
                                Console.WriteLine("К оплате: {0}.", topay1);
                                int paid1;
                                while (true)
                                {
                                    paid1 = Convert.ToInt32(Console.ReadLine());
                                    if (paid1 < topay1)
                                    {
                                        Console.WriteLine("Недостаточно средств. К оплате: {0}.", topay1);
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                                tourist.Lease(days2, hotel[Pair.Key], date1);
                                Tourists.WhoBooked.Remove(Pair.Key);
                                break;
                            }
                        }
                        if (tourist == null)
                        {
                            Console.WriteLine("Также введите его возраст:");
                            tourist         = new Tourist(name1, Convert.ToInt32(Console.ReadLine()));
                            tourist.Notify += DisplayMessage;
                            string category;
                            while (true)
                            {
                                Console.WriteLine("Номер какой категории нужно снять?");
                                category = Console.ReadLine();
                                if (category == "Стандарт")
                                {
                                    rooms = Constants.StandartRooms;
                                    break;
                                }
                                else if (category == "Полулюкс")
                                {
                                    rooms = Constants.HalfLuxRooms;
                                    break;
                                }
                                else if (category == "Люкс")
                                {
                                    rooms = Constants.LuxRooms;
                                    break;
                                }
                                else
                                {
                                    Console.WriteLine("Категория номера указана неправильно. В отеле есть номера категорий Люкс, Полулюкс и Стандарт.");
                                }
                            }
                            Console.WriteLine("На сколько дней нужно снять номер?");
                            int      days1 = Convert.ToInt32(Console.ReadLine());
                            DateTime date  = time.AddDays(days1);
                            int      topay = days1 * hotel[rooms[0]].price;
                            Console.WriteLine("К оплате: {0}.", topay);
                            int paid;
                            while (true)
                            {
                                paid = Convert.ToInt32(Console.ReadLine());
                                if (paid < topay)
                                {
                                    Console.WriteLine("Недостаточно средств. К оплате: {0}.", topay);
                                }
                                else
                                {
                                    break;
                                }
                            }
                            if (paid > topay)
                            {
                                Console.WriteLine($"Примечание: Оплачено за {days1} целых дней. Возвращен остаток, равный {paid - topay}.\n");
                            }
                            foreach (int r in rooms)
                            {
                                if (tourist.Lease(days1, hotel[r], date))
                                {
                                    Tourists.WhoLeased.Add(r, tourist);
                                    break;
                                }
                            }
                            if (tourist.roomnumber == -1)
                            {
                                Console.WriteLine("К сожалению, сейчас в отеле нет свободных номеров данной категории.");
                            }
                        }
                    }
                    catch (HotelException ex)
                    {
                        Console.WriteLine("Ошибка: " + ex.Message + "\n");
                        continue;
                    }
                    break;

                case "3":
                    Console.WriteLine("О каком номере Вы хотите получить информацию?");
                    int n = Convert.ToInt32(Console.ReadLine());
                    hotel[n - 1].Info();
                    break;

                case "готово":
                    time = time.AddDays(1);
                    foreach (Room r in hotel)
                    {
                        r.daysofbooking--;
                        r.daysofleasing--;
                    }
                    break;

                case "помощь":
                    Console.WriteLine("Список доступных комманд:");
                    Console.WriteLine("1 - Забронировать номер.");
                    Console.WriteLine("2 - Снять номер.");
                    Console.WriteLine("3 - Получить информацию о номере.");
                    Console.WriteLine("0 - Выход.");
                    Console.WriteLine("готово - Закончить день.");
                    Console.WriteLine("помощь - Список доступных комманд.");
                    break;

                default:
                    Console.WriteLine("Неизвестная комманда. Попробуйте ввести 'помощь', что увидеть список доступных комманд.");
                    break;
                }
            }
        }