Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ Бобби.docx
Скачиваний:
3
Добавлен:
17.09.2019
Размер:
2.15 Mб
Скачать

4 Реализация

4.1 Программно-аппаратные ресурсы ПК

Для стабильного функционирования и полноценного использования программы требуется компьютер не ниже описанной конфигурации:

- процессор: AMD Athlon 3200+ или Intel Pentium 4;

- объем ОЗУ: 512 мегабайт;

- видеокарта: NVidia GeForce 6600 или Radeon X1300;

- свободное место на диске: 2 мегабайт;

- операционная система: Windows XP или выше;

- установленный .NET Framework версии 3.5 или выше;

- клавиатура, мышь.

На компьютере пользователя должно стоят разрешение экрана не ниже 800 пикселей по ширине и не ниже 600 пикселей по высоте.

4.2 Описание модулей программы

Любое приложение на языке C#, разрабатываемое в среде проектирования VisualStudio.NET, реализуется как отдельный проект. Приложение на языке С# может состоять из нескольких модулей. Каждый модуль C# может содержать код нескольких классов (при создании приложения в среде Visual Studio.NET каждый класс C# автоматически помещается в отдельный модуль - файл с расширением .cs). Среда Visual Studio 2010 позволяет создавать частичные классы (partial class), когда один класс содержится в нескольких файлах. Соединение всех частей класса выполняется на этапе компиляции.

В языке C# используются пространства имен (Namespaces), которые позволяют именовать группу данных, таких как классы, переменные и/или методы. В языке C# все библиотеки классов подключаются как пространства имен.

При разработке программного продукта были использованы следующие пространства имен, поставляемые BCL (Basic Class Library), стандартной библиотекой классов платформы «.NET Framework»:

- пространство имён System, которое включает в себя примитивные типы языка C#, а также обеспечивает необходимым набором инструментов для работы с консолью, математическими функциями, и базовыми классами для атрибутов, исключений и массивов;

- пространство имён System.Collection, которое определяет множество общих контейнеров или коллекций, используемых в программировании – такие как список, очередь, стек и некоторые другие;

- пространство имён System.ComponentModel, обеспечивающее возможность реализовывать поведение компонентов в режимах run-time и design-time;

- пространство имён System.Data, представляющее архитектуру ADO.NET, являющуюся набором программных компонентов, которые могут быть использованы для доступа к данным и для обслуживания данных;

- пространство имён System.Drawing, предоставляющее доступ к GDI+, включая поддержку для 2D растровой и векторной графики, изображений, печати и работы с текстом;

- пространство имён System.IO, позволяющее осуществлять считывание и запись в различные потоки, такие как файлы и другие потоки данных. Также обеспечивает взаимодействие с файловой системой;

- пространство имён System.Reflection, обеспечивающее объектное представление типов, методов и свойств (полей);

- пространство имён System.Resources, позволяющее управлять различными ресурсами в приложении, используемых, в частности, для интернационализации приложения на разных языках;

- пространство имён System.Windows.Forms, содержащее классы для создания приложений Windows, которые позволяют наиболее эффективно использовать расширенные возможности пользовательского интерфейса, доступные в операционной системе Microsoft Windows.

При создании проекта в Visual Studio 2010 на языке C# было также создано пространство имен под названием BuffProgramm, в состав которого входят следующие созданные модули, соответствующие классам: BuffON.cs, Calculating.cs, DrawMiniature.cs, Extention.cs. Также в состав пространства имён BuffProgramm входит класс Program.cs, который определяет главную точку входа для приложения (см. следующий подраздел).

4.3 Описание иерархии классов

Так как язык C# является объектно-ориентированным языком программирования, он обладает свойством инкапсуляции - одним из важнейших принципов объектно-ориентированного программирования. Инкапсуляция – это механизм программирования, объединяющий вместе код и данные, которыми он манипулирует, исключая как вмешательство извне, так и неправильное использование данных.

Основной единицей инкапсуляции в C# является класс, который определяет форму объекта. Он описывает данные, а также код, который будет им оперировать. В C# описание класса служит для построения объектов, которые являются экземплярами класса. Следовательно, класс представляет собой ряд схематических описаний способа построения объекта.

Еще одним важным принципом ООП является наследование, поскольку оно допускает создание иерархических классификаций. Благодаря наследованию можно создать общий класс, в котором определяются характерные особенности, присущие множеству связанных элементов. От этого класса могут затем наследовать другие, более конкретные классы, добавляя в него свои индивидуальные особенности.

В ходе разработки программы, помимо стандартных классов, поставляемых библиотекой .NET Framework, были созданы собственные классы: BuffON.cs, Calculating.cs, DrawMiniature.cs, и Extention.cs.

Класс BuffON.cs содержит код главной формы программы с расположенными на ней различными компонентами. Этот модуль содержит код, созданный автоматически конструктором форм Windows и процедуру освобождения всех используемых ресурсов проекта. Также класс содержит множество процедур и функций для работы с буфером обмена, работы с формой и её компонентами, отображения списка скопированных файлов и др. (подробнее см. подраздел 4.4). В этом же модуле осуществляется связь с остальными классами, путём вызова определенных методов.

Класс Calculating.cs содержит несколько методов для подсчета объема памяти, занимаемой скопированными в программу файлами и каждым файлом в отдельности (подробнее см. подраздел 4.4).

Класс DrawMiniature.cs предоставляет метод public static void DrawingFile (PictureBox Box, Bitmap pict), который используется для прорисовки системной иконки выбранного файла (подробнее см. подраздел 4.4).

Класс Extention.cs содержит массивы расширений необходимых для сортировки файлов по различным спискам в зависимости от их формата (аудиофайлы, видеофайлы, файлы изображений и документы), а также метод самой сортировки (подробнее см. подраздел 4.4).

Ознакомится со схемой связи вышеперечисленных классов и их иерархией можно в Приложении Б.

4.4 Описание процедур и функций

В языке C#, как и в языке Object Pascal, важной составной частью программирования является использование подпрограмм - специальным образом оформленных и логически законченных блоков инструкций. Подпрограммы обычно состоят из одного или нескольких операторов, и могут быть использованы неограниченное число раз в различных частях программы.

В Object Pascal все подпрограммы делятся на процедуры и функции. Первые выполняются без возврата какого-либо результата, вторые – обязательно должны возвращать значение. Однако в C# не существует такого разделения. Вместо процедур и функций используются методы, которые либо могут возвращать значение определенного типа данных, либо нет.

Любой метод состоит из модификатора доступа, возвращаемого типа, имени, списка параметров и тела. Модификатор доступа определяет те части программы, из которых данный метод может быть вызван. Указывать модификатор доступа не обязательно, в этом случае метод оказывается закрытым в пределах того класса, в котором он объявляется. Возвращаемый тип обозначает тип данных, возвращаемый методом. Если метод не возвращает значения, то в качестве возвращаемого для него следует указывать тип void. В качестве имени метода может служить любой допустимый идентификатор, не приводящий к конфликтам в текущей области объявлений. Список параметров – это последовательность пар, состоящих из типа и идентификатора и разделенных запятыми. Параметры представляют собой переменные, получающие значение аргументов, передаваемых методу при его вызове. Если у метода отсутствуют параметры, то список оказывается пустым.

При разработке данной программы, как упоминалось в подразделе 4.2, было создано четыре класса, каждый из которых реализован посредством различных методов. Класс BuffON содержит следующие методы:

- void SetLocations() – устанавливает координаты расположений и ширину некоторых компонентов программы, которые, в зависимости от действий, будут меняться;

- void InDaList(string[] files) – получает в качестве параметра массив имен файлов и затем заносит его в главный список файлов, после чего этот массив освобождается;

- void LabelVisible(bool f1, bool f2, bool f3) – устанавливает значения видимости для меток информации о файле или файлах в зависимости от полученных параметров;

- void listViewAll_ItemChecked (object sender, ItemCheckedEventArgs e) – обработчик события для всех компонентов класса ListView (listViewAll, listViewAudio, listViewVideo, listViewImage и listViewText), представляющие из себя списки, в которых будут отображаться скопированные файлы. При установке галочки напротив имени файла отмечает данный файл, который после будет использоваться для перемещения;

- void tabControl1_Selecting(object sender, TabControlCancelEventArgs e) – обработчик события для компонента TabControl1, который при нажатии на одну из вкладок делает активным тот список, который находится на текущей вкладке. В этом же методе осуществляется связь с классом Extention путём вызова одного из его методов, который сортирует весь список файлов по спискам основных форматов, исходя из расширений файлов;

- void listViewAll_DragEnter(object sender, DragEventArgs e) – обработчик события для всех списков, устанавливающий всевозможные результаты перетаскивания на эти компоненты (Drag & Drop);

- void listViewAll_DragDrop(object sender, DragEventArgs e) – получает список файлов, которые были перемещены на форму из других окон, и занесение файлов в главный список;

- void listViewAll_ItemDrag(object sender, ItemDragEventArgs e) – проверяет какие файлы были отмечены для копирования, а какие для перемещения и выполняет перетаскивание файлов из окна программы в другие окна системы, выполняя соответствующие действия с файлами;

- void listViewAll_ItemActivate(object sender, EventArgs e) – открывает выбранный в одном из списков файл с помощью программы по умолчанию;

- void pathLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) – обрабатывает событие для компонента LinkLabel, которое открывает директорию выбранного файла при нажатии на компонент;

- void Form1_Move(object sender, EventArgs e) – обрабатывает события, связанные с перемещением формы, позволяя пристыковывать окно к границам экрана, без дальнейшего их перемещения за пределы рабочей области экрана;

- void Form1_Resize(object sender, EventArgs e) – позволяет скрывать форму;

- void notifyIcon1_DoubleClick(object sender, EventArgs e) – позволяет показать окно при двойном клике на иконку программы, размещенную в системном трее;

- void notifyIcon1_MouseClick(object sender, MouseEventArgs e) – при одиночном клике на иконку программы, размещенную в трее, переносит окно на передний план;

- void выходToolStripMenuItem_Click(object sender, EventArgs e) – обработчик события для пункта «Выход» контекстного меню, при нажатии на которое происходит завершение работы приложения;

- void открытьBuffONToolStripMenuItem_Click(object sender, EventArgs e) - обработчик события для пункта «Открыть» контекстного меню, при нажатии на которое происходит отображение или сокрытие формы;

- void выделитьВсёToolStripButton_Click(object sender, EventArgs e) – обработчик для кнопки «Выделить всё», размещенной на панели инструментов. Выделяет все элементы списка файлов и заносит их в буфер обмена для дальнейшего использования, а также вычисляет и отображает объем памяти, занимаемый этими файлами, используя функции класса Calculating;

- void ListsClear() – очищает все списки файлов;

- void ClearAll() – очищает всё информацию о файлах и буфер обмена;

- void очисткаToolStripButton_Click(object sender, EventArgs e) – обработчик для кнопки «Очистка», расположенной на панели инструментов, вызывающей методы очистки списков и буфера обмена;

- void справкаToolStripButton1_Click(object sender, EventArgs e) – обработчик для кнопки «Справка», расположенной на панели инструментов, вызывающей файл справки;

- void toolStripMenuItem2_Click(object sender, EventArgs e) – обработчик для кнопки «Настройка», расположенной на панели инструментов. Позволяет задавать свойство окна быть поверх всех окон или нет;

- void toolStripMenuItem2_Click(object sender, EventArgs e) – обработчик для кнопки «Удалить», расположенной на панели инструментов. Позволяет удалить из списка выделенные файлы;

- void ClipboardIn() – заносит список файлов в буфер обмена;

- void ShowInfo(int selCount) – показывает информацию о файлах, в зависимости от их количества. Если файл один, то выводиться имя файла, его расположение на диске, занимаемый объем в памяти и системная иконка, которая рисуется в методе класса DrawMiniature. Если файлов несколько, то выводится лишь количество выделенных файлов и занимаемый ими объем в памяти;

- void listViewAll_MouseUp(object sender, MouseEventArgs e) – определяет количество выделенных файлов и вызывает метод ShowInfo(int selCount);

- void listViewAll_MouseDown(object sender, MouseEventArgs e) – обработчик событий для компонентов-списков. При нажатии на кнопку мышки происходит сброс всей информации о файлах и очистка буфера. Это нужно для того, чтобы не было ошибочной информации о выделенном файле или всех файлах в целом;

- void IsExist() – проверяет каждый элемент в списке файлов на существование его на диске. Если такого файла не существует, то файл удаляется из списка;

- void timer1_Tick(object sender, EventArgs e) – обработчик для таймера, который периодически проверяет буфер на наличие скопированных файлов. Если файлы найдены, то они проверяются на уникальность и заносятся в список;

- void timer2_Tick(object sender, EventArgs e) – обработчик для второго таймера, который периодически заносит файлы в буфер обмена;

- void Delete() – функция удаления выделенного файла из списка;

- void listViewAll_KeyDown(object sender, KeyEventArgs e) – обработчик нажатия клавиш для списка файлов. Если нажата клавиша Delete, то удаляются выделенные файлы из списка;

- void listViewAll_KeyUp(object sender, KeyEventArgs e) – при отпускании какой-либо клавиши происходит пересчет выделенных файлов и повторяется помещение выделенных файлов в буфер обмена;

- void pathLink_MouseHover(object sender, EventArgs e) – показывает всплывающую подсказку для компонента LinkLabel, отвечающего за отображение пути к файлу;

- void fileName_MouseHover(object sender, EventArgs e) - показывает всплывающую подсказку для компонента Label, отвечающего за отображение имени файла;

- void fileSize_MouseHover(object sender, EventArgs e) - показывает всплывающую подсказку для компонента Label, отвечающего за отображение количества объема в памяти, занимаемого выделенными файлами.

Класс Calculating содержит статические методы:

- public static long GetSizeOfDirectory(string x) – открытый статический метод, подсчитывающий объем какого-либо файла. Если же в качестве параметра передается имя каталога, то вызывается метод public static long CountFiles(string path);

- public static long CountFiles(string path) – рекурсивный метод, подсчитывающий объем директории, занимаемый в памяти. Вызывает себя до тех пор, пока не дойдет до последнего файла в директории;

- public static string ToByte(long size) – статический метод, который переводит из байт в кило-, мега-, гига- или терабайты, в зависимости от объема файла. Это необходимо для более точного и понятного отображения информации о файле (файлах).

Класс DrawMiniature содержит единственный метод public static void DrawingFile(PictureBox Box, Bitmap pict), который рисует, в зависимости от типа файла, его системную иконку, либо изображение, которое в нём хранится (для файлов изображений).

Класс Extention также содержит всего один метод public void getDataIntoListView(ListView listViewFrom, ListView listViewIn, int Index), который сортирует файлы из главного списка, по остальным спискам, ориентируясь по расширениям файлов.

Ознакомиться с программным кодом всех методов можно в Приложении А.

4.5 Описание интерфейса программы

Программа обладает простым логичным и приятным графическим интерфейсом, вполне понятным для пользователя любой категории, что немало важно. Программа компактна и удобна в использовании. На рисунке 4.1 изображено главное окно программы.

Рисунок 4.1 – Главное окно программы:

1 – строка заголовка; 2 – кнопка «Свернуть»; 3 – кнопка «Закрыть»; 4 – поле списка файлов; 5 – полосы прокрутки; 6 – панель инструментов; 7 – панель вкладок; 8 – пометка о перемещении; 9 – строка файла; 10 – иконка файла; 11 – строка расположения файла; 12 – строка имени файла; 13 – строка размера файла; 14 – строка количества файлов.

В процессе разработки программы первоначальный эскиз графического интерфейса изменялся и совершенствовался (см. подраздел 3.2). Во-первых, панель инструментов, которая должна была располагаться под полем списка файлов, находится над ним. Это изменение было необходимо для удобства использования программы, т.к. пользователю, привыкшему к программам с панелью элементов, расположенной сверху рабочей области окна, было бы не привычно в ней работать.

Во-вторых, слегка изменился набор инструментов для работы со списком файлов, расположенный на панели инструментов (рисунок 4.2).

Рисунок 4.2 – Панель инструментов:

1 – кнопка «Выделить все элементы»; 2 – количество выделенных файлов; 3 – кнопка «Удалить отмеченное»; 4 – кнопка «Очистить список»; 5 – кнопка «Настройка»; 6 – кнопка «Справка».

Кнопка «Выделить все элементы» позволяет выделить все элементы, находящиеся в данный момент в списке. Число справа от кнопки будет информировать пользователя о количестве выделенных файлов.

Кнопка «Удалить отмеченное» удаляет из списка все выделенные до этого элементы.

Кнопка «Очистить список» очищает все списки, расположенные на всех вкладках.

Кнопка «Настройка» позволяет настроить пользователю режим отображения окна программы: поверх всех окон, либо в обычном режиме.

Кнопка «Справка» запустит для пользователя файл справки, в котором изложена вся необходимая информация о том, как пользоваться данный продуктом.

В-третьих, была вычеркнута идея мини-окна с информацией о выделенном файле. Вместо этого под списком файлов расположен информационный блок, состоящий из нескольких элементов: системной иконки файла, расположения файла (путь), имени файла, размера файла и общего количества файлов.

Системная иконка файла может отображаться или не отображаться в зависимости от типа данных выделенного элемента в списке и от количества выделенных файлов. Если выделенный элемент в списке – файл, то будет показана его системная иконка (или миниатюрное изображение, если это файл изображений), если же этот элемент каталог (папка), то иконка отображаться не будет. Также иконка не будет отображаться, если не выделено ни одного файла, или же наоборот - выделено больше одного файла.

В расположении файла указывается место расположения файла на диске в формате Диск:\директория1\директория2\...\директорияN. Если же выделено больше одного или ни одного элемента в списке, то поле расположения файла отображаться не будет. Расположение файла является ссылкой, т.е. по ней можно перейти к каталогу, содержащему этот файл, простым нажатием левой кнопки мыши по тексту ссылки.

В имени файла указывается имя файла, состоящее из имени файла и расширения (если это файл). Если выделенный элемент в списке это папка, то отображаться поле имени файла не будет. Вместо этого останется поле расположения, которое, по сути, является именем выбранного каталога.

Поле размера файла отображает объем занимаемой памяти файла или каталога. Это поле отображается лишь тогда и только тогда, когда выбран один или больше элементов, причем при выборе нескольких элементов в списке будет указываться суммарный объем занимаемой памяти этих файлов или каталогов.

Поле количества всех файлов отображается всегда и показывает суммарное количество всех файлов, которые находятся в главном списке.

В-четвертых, появилась панель вкладок основных форматов, которой не было на момент разработки интерфейса. Это позволяет сгруппировать файлы по формату, т.е. на вкладке А («Аудио») будет отображаться список тех файлов, у которых расширение входит в список аудиоформатов (.mp3, .wav, .ogg и т.д.). На вкладке В («Видео») будет отображаться список видеофайлов (.mp4, .avi, .3gp и т.д.). Вкладка И («Изображения») выберет из главного списка лишь изображения (.jpeg, .png, .bmp, .ico и т.д.). И наконец вкладка Д («Документы») выдаст список файлов-документов (.txt, .doc, .pdf и т.д.).

Чтобы добавить файл в список для дальнейшего копирования, достаточно выделить его, нажав левой кнопкой мышки на соответствующем элементе в списке файлов. Для дальнейшего перемещения файла необходимо поставить галочку рядом с полным именем файла в списке.

Для прокрутки содержимого списка используются соответствующие полосы прокрутки, расположенные снизу и слева от списка, и появляющиеся, когда строки названий элементов или список всех элементов выходят за пределы видимости.

Кнопки «Свернуть» и «Закрыть» соответственно сворачивает окно в трей и закрывает окно.