Exemple #1
0
 private static void AddDisk(Catalog catalog)
 {
     Console.WriteLine("Добавление дисков");
     // Бесконечно создаем и добавляем в каталог диски, покуда не будет брошен ApplicationException (пользователь введет ctrl+z
     try
     {
         while (true)
         {
             catalog.AddDisk(ReadString("Введите название диска"));
         }
     }
     catch (ApplicationException e)
     {
         Console.WriteLine(e.Message);
     }
 }
Exemple #2
0
        static void Main(string[] args)
        {
            // Создаем пустой каталог
            Catalog catalog = new Catalog();

            int songsPerDisk = 10;

            // Создаем диски
            for (int i = 0; i < 100; i++)
            {
                catalog.AddDisk("Disk " + i);
            }

            // Создаем песни и добавляем их на диски
            // Создаем массив, т.к. если оставить IEnumerable, то получение элемента по индексу каждый раз будет вызывать перечисление
            string[] disks = catalog.EnumerateDisks().OrderBy(s => s).ToArray();
            for (int i = 0; i < disks.Length * songsPerDisk; i++)
            {
                Song song = new Song {
                    Artist = "Artist " + i % 10, Name = "Song " + i
                };
                catalog.AddSong(song, disks[i / songsPerDisk]);
            }

            try
            {
                while (true)
                {
                    try
                    {
                        // Меню
                        string select = SelectItem(new[]
                        {
                            "Добавить диск",
                            "Удалить диск",
                            "Добавить песню",
                            "Удалить песню",
                            "Список дисков",
                            "Содержимое диска",
                            "Содержимое каталога",
                            "Поиск по исполнителю"
                        }, "Главное меню");
                        switch (select)
                        {
                        case "Добавить диск":
                        {
                            Console.WriteLine("Добавление дисков");
                            // Бесконечно создаем и добавляем в каталог диски, покуда не будет брошен ApplicationException (пользователь введет ctrl+z
                            while (true)
                            {
                                catalog.AddDisk(ReadString("Введите название диска"));
                                Console.WriteLine();
                            }
                        }

                        case "Удалить диск":
                        {
                            while (true)
                            {
                                Console.WriteLine("Удаление дисков");
                                string searchDisk = ReadString("Введите регулярное выражение для поиска");
                                Regex  reg        = new Regex(searchDisk, RegexOptions.IgnoreCase);
                                // Перечисляем коллекцию дисков в массив
                                try
                                {
                                    while (true)
                                    {
                                        string[] disks1 = catalog.EnumerateDisks().Where(s => reg.IsMatch(s))
                                                          .OrderBy(s => s).ToArray();
                                        if (disks1.Length == 0)
                                        {
                                            Console.WriteLine("Элементов больше не найдено.\nВыход\n");
                                            break;
                                        }

                                        // SelectItem выводит на консоль коллекцию, и вовзращает выбранный пользователем диск
                                        string selDisk = SelectItem(disks1, "Выберите диск");
                                        catalog.RemoveDisk(selDisk);
                                        Console.WriteLine();
                                    }
                                }
                                catch (ApplicationException e)
                                {
                                    Console.WriteLine(e.Message);
                                }
                                Console.WriteLine();
                            }
                        }

                        case "Добавить песню":
                        {
                            // Бесконечно создаем и добавляем в каталог песни, покуда не будет брошен ApplicationException (пользователь введет ctrl+z
                            while (true)
                            {
                                Console.WriteLine("Добавление песен");
                                string selDisk = SelDisk(catalog);
                                try
                                {
                                    while (true)
                                    {
                                        // Читаем песню из консоли
                                        Song song1 = ReadSong();
                                        // Добавляем на выбранный диск песню
                                        catalog.AddSong(song1, selDisk);
                                        Console.WriteLine();
                                    }
                                }
                                catch (ApplicationException e)
                                {
                                    Console.WriteLine(e.Message);
                                }
                                Console.WriteLine();
                            }
                        }

                        case "Удалить песню":
                            while (true)
                            {
                                try
                                {
                                    Console.WriteLine("Удаление песни. Для выхода в главное меню отмените ввод.");
                                    string selDisk      = SelDisk(catalog);
                                    Song[] diskSongs    = catalog.EnumerateDisk(selDisk).ToArray();
                                    Song   songToRemove = SelectItem(diskSongs, "Выберите песню");

                                    catalog.RemoveSong(songToRemove, selDisk);
                                }
                                catch (ArgumentException e)
                                {
                                    Console.WriteLine(e.Message);
                                }
                                Console.WriteLine();
                            }

                        case "Содержимое каталога":
                        {
                            int count = 0;
                            IEnumerable <string> sortedDisks = catalog.EnumerateDisks().OrderBy(s => s);
                            foreach (string disk in sortedDisks)
                            {
                                Console.WriteLine(disk);
                                IEnumerable <Song> songs = catalog.EnumerateDisk(disk);
                                foreach (Song song in songs)
                                {
                                    if (count >= Console.WindowHeight)
                                    {
                                        Console.WriteLine("Далее -->");
                                        Console.ReadKey(true);
                                        count = 0;
                                    }
                                    Console.WriteLine("\t" + song);
                                    count++;
                                }
                                Console.WriteLine();
                            }
                        }
                        break;

                        case "Содержимое диска":
                        {
                            string selDisk = SelDisk(catalog);
                            Console.WriteLine(selDisk);
                            Print(catalog.EnumerateDisk(selDisk));
                            Console.WriteLine();
                        }

                        break;

                        case "Список дисков":
                            Print(catalog.EnumerateDisks());
                            Console.WriteLine();
                            break;

                        case "Поиск по исполнителю":
                            Console.WriteLine("Поиск по исполнителю");
                            Print(catalog.FindSongs(ReadString("Имя исполнителя (регулярное выражение)"))
                                  .OrderBy(s => s.Name));
                            break;
                        }
                    }
                    catch (ApplicationException e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
            }
            catch (ApplicationException e)
            {
                Console.WriteLine(e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            Console.WriteLine("Нажмите любую клавишу");
            Console.ReadKey(true);
        }