static void Main(string[] args) { User user = new User(); WorkPC workPC = new WorkPC(); try { Menu.Start(user, workPC); } catch (DivideByZeroException e) { Design.Red(); WriteLine("\n [err] " + e.Message); } catch (FormatException e) { Design.Red(); WriteLine("\n [err] " + e.Message); } catch (DownloadMoreThanExistsException e) { Design.Red(); WriteLine("\n [err] " + e.Message); } catch (Exception e) { Design.Red(); WriteLine("\n [err] " + e.Message); } finally { Design.Default(); WriteLine("\n >>> Завершение программы.\n"); } }
// Копирование информации на устройства. public static void CopyingInfo(WorkPC workPC, Storage[] storage) { WriteLine(" До копирования:\n" + workPC); Design.Line(); if (storage.Length == 0) // если нет носителей. { Design.Blue(); WriteLine(" --> Нет носителей на которые можно скопировать информацию."); Design.Default(); return; } else if (FileIsPlaced(workPC.FileSize, storage)) // если файл вмещаеться. { Design.Green(); WriteLine(" >> Копирование."); Design.Default(); } else { Design.Blue(); WriteLine(" --> Файлы не вмещаються на данные носители."); Design.Default(); return; } // Копирование. while (workPC.TotalSizeOfFiles != 0) { foreach (Storage item in storage) { item.CopyingDataToTheDevice(workPC); // После каждого копирования на носитель, нужно скачать // с него записанную информацию: // имитируем скачивание приравниванием к "0". item.BusyMemory = 0; // освободили носитель. // Если все скопировали. if (workPC.TotalSizeOfFiles == 0) { break; } } if (workPC.TotalSizeOfFiles < 0) { throw new DownloadMoreThanExistsException(); } } // Файлов на пк больше нет - значит размер файла можно приравнять к 0. // (P.S. Соответственно на носителе в переменной можно хранить размер одного файла). workPC.FileSize = 0; WriteLine("\n После копирования:\n" + workPC); Design.Line(); }
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]}"); } }