예제 #1
0
        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");
            }
        }
예제 #2
0
        // Копирование информации на устройства.
        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();
        }
예제 #3
0
        // Копирование данных(файлов/папок) на устройство.
        public virtual void CopyingDataToTheDevice(WorkPC workPC)
        {
            // Узнаем сколько файлов вмещается на носитель.
            int numberOfFiles = PlacedFiles(workPC.FileSize);

            for (int i = 0; i < numberOfFiles; i++)
            {
                BusyMemory += workPC.FileSize;
                workPC.TotalSizeOfFiles -= workPC.FileSize;

                // Если файлов больше нет.
                if (workPC.TotalSizeOfFiles == 0)
                {
                    return;
                }
            }
        }
예제 #4
0
        // Расчет времени необходимого для копирования.
        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} мин");
        }
예제 #5
0
        // Расчет необходимого количества носителей информации
        // представленных типов для переноса информации.
        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]}");
            }
        }
예제 #6
0
        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();
            }
        }