public static void PrintStorage(Storage[] storage) { WriteLine("\n Список всех носителей:\n"); if (storage.Length == 0) { Design.Blue(); WriteLine("\n --> Носителей нет."); Design.Default(); } foreach (Storage item in storage) { item.GettingFullInformationAboutTheDevice(); WriteLine(); } }
public static void AddUserStorage(User user) { ConsoleKeyInfo SymbolKey; WriteLine(" Выберите тип носителя:"); WriteLine(" 1 - Flash"); WriteLine(" 2 - DVD"); WriteLine(" 3 - HDD"); Write("\n Ваш выбор: "); SymbolKey = ReadKey(); WriteLine(); Design.Line(); switch (SymbolKey.Key) { case ConsoleKey.D1: case ConsoleKey.NumPad1: user.AddStorage(new Flash().Add()); break; case ConsoleKey.D2: case ConsoleKey.NumPad2: user.AddStorage(new DVD().Add()); break; case ConsoleKey.D3: case ConsoleKey.NumPad3: user.AddStorage(new HDD().Add()); break; default: Design.Red(); WriteLine("\n [err] Недопустимый тип носителя."); Design.Default(); break; } }
public override Storage Add() { string name; string model; int speedRead; int speedRec; DiskType diskType; int tempType; Write(" Введите название: "); name = ReadLine(); Write(" Введите модель: "); model = ReadLine(); Write(" Введите скорость (чтения): "); speedRead = Convert.ToInt32(ReadLine()); Write(" Введите скорость (записи): "); speedRec = Convert.ToInt32(ReadLine()); do { WriteLine(" Введите тип диска: "); WriteLine(" 1 - 4,7 Gb\n 2 - 9,0 Gb"); Write(" Тип: "); tempType = Convert.ToInt32(ReadLine()); if (tempType < 1 || tempType > 2) { Design.Red(); WriteLine("\n [err] Недопустимый тип диска." + "\n - Повторите ввод!\n"); Design.Default(); } } while (tempType < 1 || tempType > 2); diskType = (DiskType)tempType; return(new DVD(name, model, speedRead, speedRec, diskType)); }
// Расчет времени необходимого для копирования. public static void CopyTime(WorkPC workPC, Storage[] storage) { int recordingTime = 0; int readingTime = 0; int files; int totalSizeOfFiles = workPC.TotalSizeOfFiles; if (storage.Length == 0) // если нет носителей. { Design.Blue(); WriteLine(" --> Время рассчитать невозможно."); WriteLine(" --> Нет носителей на которые можно скопировать информацию."); Design.Default(); return; } else if (!FileIsPlaced(workPC.FileSize, storage)) { Design.Blue(); WriteLine(" --> Файлы не вмещаються на данные носители."); Design.Default(); return; } // Пока не посчитаем время копирования всех файлов. while (totalSizeOfFiles != 0) { foreach (Storage item in storage) { files = item.PlacedFiles(workPC.FileSize); // Если файлов осталось меньше чем вмещаеться на носитель. if ((totalSizeOfFiles / workPC.FileSize) < files) { // то запомним сколько осталось файлов. files = totalSizeOfFiles / workPC.FileSize; } // Если кол-во файлов = 0, // то переходим к следующему носителю. if (files == 0) { continue; } recordingTime += ((workPC.FileSize * files) * 1024) / item.RecordingTime(); readingTime += ((workPC.FileSize * files) * 1024) / item.ReadingTime(); // Отнимаем от общего размера, размер вмещающихся файлов. totalSizeOfFiles = totalSizeOfFiles - (workPC.FileSize * files); if (totalSizeOfFiles == 0) { break; } } if (totalSizeOfFiles < 0) { throw new DownloadMoreThanExistsException(); } } WriteLine($" Время копирования на носители: {recordingTime} мин"); WriteLine($" Время чтения с носителей: {readingTime} мин"); WriteLine(" Общее время копирования на другой пк: " + $"{recordingTime + readingTime} мин"); }
// Расчет необходимого количества носителей информации // представленных типов для переноса информации. public static void NumberOfStorage(WorkPC workPC, Storage[] storage) { int totalSizeOfFiles = workPC.TotalSizeOfFiles; int files; int[] arr = new int[storage.Length]; if (storage.Length == 0) // если нет носителей. { Design.Blue(); WriteLine(" --> Необходимое количество рассчитать невозможно."); WriteLine(" --> Нет носителей на которые можно скопировать информацию."); Design.Default(); return; } else if (!FileIsPlaced(workPC.FileSize, storage)) { Design.Blue(); WriteLine(" --> Файлы не вмещаються на данные носители."); Design.Default(); return; } while (totalSizeOfFiles != 0) { for (int i = 0; i < storage.Length; i++) { // Узнаем кол-во файлов вмещающихся на носитель. files = storage[i].PlacedFiles(workPC.FileSize); // Если файлов осталось меньше чем вмещаеться на носитель. if ((totalSizeOfFiles / workPC.FileSize) < files) { // то запомним сколько осталось файлов. files = totalSizeOfFiles / workPC.FileSize; } // Если кол-во файлов = 0, // то переходим к следующему носителю. if (files == 0) { continue; } // Отнимаем от общего размера, размер вмещающихся файлов. totalSizeOfFiles = totalSizeOfFiles - (workPC.FileSize * files); // Если вмещается больше чем 0 файлов. if (files > 0) { arr[i]++; } if (totalSizeOfFiles == 0) { break; } } if (totalSizeOfFiles < 0) { throw new DownloadMoreThanExistsException(); } } for (int i = 0; i < storage.Length; i++) { WriteLine($" Количество {storage[i].Name}: {arr[i]}"); } }
public static void Start(User user, WorkPC workPC) { ConsoleKeyInfo SymbolKey; // Просим ввести данные о файлах на ПК. Write("\n Введите размер одного файла (на ПК): "); workPC.FileSize = Convert.ToInt32(ReadLine()); Write(" Введите кол-во файлов (на ПК): "); workPC.TotalSizeOfFiles = workPC.FileSize * Convert.ToInt32(ReadLine()); // Запуск меню. while (true) { WriteLine("\n Меню:"); WriteLine(" 1 - Посмотреть данные о файлах на ПК"); WriteLine(" 2 - Посмотреть список носителей"); WriteLine(" 3 - Добавить носитель"); WriteLine(" 4 - Общее количество памяти всех носителей"); WriteLine(" 5 - Копирование информации на носители"); WriteLine(" 6 - Время необходимое для копирования"); WriteLine(" 7 - Необходимое количество носителей"); WriteLine(" 0 - Выход"); Write(" Ваш выбор: "); SymbolKey = ReadKey(); WriteLine(); Design.Line(); switch (SymbolKey.Key) { case ConsoleKey.D1: case ConsoleKey.NumPad1: WriteLine(workPC); break; case ConsoleKey.D2: case ConsoleKey.NumPad2: PrintStorage(user.GetDevices()); break; case ConsoleKey.D3: case ConsoleKey.NumPad3: AddUserStorage(user); break; case ConsoleKey.D4: case ConsoleKey.NumPad4: Calculations.TotalDeviceMemory(user.GetDevices()); break; case ConsoleKey.D5: case ConsoleKey.NumPad5: Calculations.CopyingInfo(workPC, user.GetDevices()); break; case ConsoleKey.D6: case ConsoleKey.NumPad6: Calculations.CopyTime(workPC, user.GetDevices()); break; case ConsoleKey.D7: case ConsoleKey.NumPad7: Calculations.NumberOfStorage(workPC, user.GetDevices()); break; default: break; } if (SymbolKey.Key == ConsoleKey.D0 || SymbolKey.Key == ConsoleKey.Escape || SymbolKey.Key == ConsoleKey.NumPad0) { return; } WriteLine("\n\n Нажмите любую клавишу для продолжения ..."); ReadKey(); Clear(); } }