//Вывести на консоль private static void Display(DoublyLinkedList pList, bool order) { Console.Clear(); if (!pList.IsEmpty) { if (order) { Console.WriteLine("Вывод в прямом порядке:\n"); pList.Display(); } else { Console.WriteLine("Вывод в обратном порядке:\n"); pList.ReverseDisplay(); } Console.WriteLine("\nDone. Press any key"); Console.ReadKey(true); } else { Console.WriteLine("Список пуст"); Console.ReadKey(true); } }
//Записать в файл или считать из файла private static string Wtf(string dir, DoublyLinkedList pList, bool write)//true - пишем, false - читаем { //Не знаю, почему сделал интерфейс в этом методе на английском - захотелось. ConsoleKeyInfo cki; do { Console.Clear(); Console.WriteLine("Working dir is: {0}\n", dir); Console.WriteLine("1. Set working directory (existing)"); /*Можно было бы, конечно написать анализатор (parser), * чтобы создавать папки и подпапки, но задание, вроде, не об этом*/ Console.WriteLine(" or"); Console.WriteLine("2. Enter filename"); Console.WriteLine(" or"); Console.WriteLine("3. Back"); cki = Console.ReadKey(true); string path; string filename; switch (cki.Key) { case ConsoleKey.D1: Console.Write("\nEnter the path to an existing directory: "); dir = Console.ReadLine() + "\\"; break; case ConsoleKey.NumPad1: Console.Write("\nEnter the path to an existing directory: "); dir = Console.ReadLine() + "\\"; break; case ConsoleKey.D2: Console.Write("\nEnter filename: "); filename = Console.ReadLine(); while (filename == "") { Console.Write("Please, enter filename: "); filename = Console.ReadLine(); } if (!filename.EndsWith(".txt")) { filename += ".txt"; } path = dir + filename; if (write) { pList.WriteToFile(path); } else { pList.ReadFromFile(path); } Console.WriteLine("\nDone. Press any key"); Console.ReadKey(true); return(dir); case ConsoleKey.NumPad2: Console.Write("\nEnter filename: "); filename = Console.ReadLine(); while (filename == "") { Console.Write("Please, enter filename: "); filename = Console.ReadLine(); } if (!filename.EndsWith(".txt")) { filename += ".txt"; } path = dir + filename; if (write) { pList.WriteToFile(path); } else { pList.ReadFromFile(path); } Console.WriteLine("\nDone. Press any key"); Console.ReadKey(true); return(dir); } } while ((cki.Key != ConsoleKey.Escape) && (cki.Key != ConsoleKey.D3) && (cki.Key != ConsoleKey.NumPad3)); return(dir); }
//Добавть Person private static void AddPerson(DoublyLinkedList personsList) { Console.Clear(); Console.WriteLine("Добавление по индексу"); ConsoleKeyInfo cki; do { string str; uint ind; do { Console.Write("\nИндекс (от 1 до {0}): ", personsList.Count + 1); str = Console.ReadLine(); while (!uint.TryParse(str, out ind)) //должно быть число { Console.WriteLine("\nНеверный ввод"); Console.Write("Индекс (от 1 до {0}): ", personsList.Count + 1); str = Console.ReadLine(); } } while ((ind < 1) || (ind > personsList.Count + 1)); //от 1 до размер списка+1 Console.Write("Фамилия: "); string ln = Console.ReadLine(); Console.Write("Рост: "); str = Console.ReadLine(); uint h; while (!uint.TryParse(str, out h)) //должно быть число { Console.WriteLine("\nНеверный тип"); Console.Write("Рост: "); str = Console.ReadLine(); } Console.Write("Дата рождения: "); str = Console.ReadLine(); bool correct = false; DateTime bd = new DateTime(1900, 1, 1); while (!correct) { try { bd = Convert.ToDateTime(str); //попытка перевода строки в дату correct = true; } catch (Exception ex) { Console.WriteLine("\n" + ex.Message); Console.Write("Дата рождения: "); str = Console.ReadLine(); } } personsList.InsertByIndex(ln, h, bd, ind); Console.WriteLine("\nСделано. Ещё одного? (y/n)"); do { cki = Console.ReadKey(true); } while ((cki.Key != ConsoleKey.Y) && (cki.Key != ConsoleKey.N)); } while (cki.Key == ConsoleKey.Y); }
static void Main(string[] args) { DoublyLinkedList personsList = new DoublyLinkedList(); ConsoleKeyInfo cki; string dir = ""; do { DrawMenu(); cki = Console.ReadKey(true); switch (cki.Key) { case ConsoleKey.D1: Display(personsList, true); break; case ConsoleKey.NumPad1: Display(personsList, true); break; case ConsoleKey.D2: Display(personsList, false); break; case ConsoleKey.NumPad2: Display(personsList, false); break; case ConsoleKey.D3: AddPerson(personsList); break; case ConsoleKey.NumPad3: AddPerson(personsList); break; case ConsoleKey.D4: DeleteById(personsList); break; case ConsoleKey.NumPad4: DeleteById(personsList); break; case ConsoleKey.D5: DeleteByLastName(personsList); break; case ConsoleKey.NumPad5: DeleteByLastName(personsList); break; case ConsoleKey.D6: Sort(personsList); break; case ConsoleKey.NumPad6: Sort(personsList); break; case ConsoleKey.D7: dir = Wtf(dir, personsList, true); break; case ConsoleKey.NumPad7: dir = Wtf(dir, personsList, true); break; case ConsoleKey.D8: dir = Wtf(dir, personsList, false); break; case ConsoleKey.NumPad8: dir = Wtf(dir, personsList, false); break; } } while ((cki.Key != ConsoleKey.Escape) && (cki.Key != ConsoleKey.D9) && (cki.Key != ConsoleKey.NumPad9)); }