b>2. Программная реализация алгоритмаПри создании программы необходимо запустить среду программирования Microsoft Visual C++ 6.0.Для использования MFC AppWizard необходимо выполнить следующие действия: в главном меню выбирается пункт File и подпункт New. В появившемся диалоговом окне нужно перейти на вкладку Project и выбрать MFCAppWizard. Затем в поле Project name нужно указать имя проекта (в данном курсовом проекте имя Crazzyff) и нажать кнопку Ok. Далее появится диалоговое окно первого шага MFC AppWizard Step1. В нём нужно указать тип создаваемого приложения Dialog based и нажать кнопку Next. На следующем шаге MFC AppWizard Step2 флажки на пунктах About box и 3D controls.В следующем окне MFC AppWizard Step3 требуется поставить переключатель на тип проекта MFC Standard и нажать кнопку Next. На четвёртом шаге можно просмотреть создаваемые классы и нажать кнопку Finish. Далее в окне New Project Information нужно нажать кнопку Ok. После этого проект будет создан и появится окно созданного проекта. В этом окне будут присутствовать следующие элементы: кнопки Ok и Cancel и статический текст. С помощью мыши можно изменить размер окна. Также можно переместить статический текст на требуемую позицию.Список модулей проекта:|
FileNames.cpp | Главный модуль программы. В сгенерированный автоматически код добавлена защита от запуска второй копии приложения. | | ArrayTemplate.h ArrayTemplate.cpp | Этот модуль реализует шаблон на динамические массивы со свойствами списка (коллекции). | | FSelectDirForm.h FSelectDirForm.cpp | Реализация формы выбора каталога. (код сгенерирован автоматически). | | FMain.h FMain.cpp | Реализация формы главного окна приложения. Основная часть кода находится здесь. | | |
Описанные (вручную) типы: |
TArray | шаблон на динамический массив со свойствами списка элементов (коллекции) | | TIntArray | динамический массив с элементами int (на основе TArray) | | THandleArray | динамический массив с элементами HANDLE (void *) (на основе TArray) | | TGlobalList | тип-список строк для хранения имен файлов, а также номеров каталогов (в списке каталогов) для каждого имени | | TNameList | тип-список строк для хранения имен файлов-дубликатов (файлов-исключений),а также указателей на массивы номеров каталогов (TIntArray *) для каждого файла-дубликата | | TDirThread | тип-поток для проверки каталогов и подготовки отчета по одноименным файлам | | TNotifyThread | тип-поток для автоматического контроля проверяемых каталогов - при переименовке, добавлении и удалении файлов в данных каталогах (или их подкаталогах) инициирует проверку каталогов с подготовкой отчета | | TVerDirectory | тип-подготавливаемый отчет по одноименным файлам, с набором методов для подготовки отчета. | | | 3. Исходный текст программы приведен в приложении Б4. Функциональные возможности программыПрограмма осуществляет поиск одинаковых документов по имени и размеру. В программе предусмотрена защита от запуска второй копии приложения. При запуске второй копии приложения - она открывает и активизирует главное окно первой копии, и завершает работу. Необходимо отметить, что программа хранит свои параметры (путь к контролируемому каталогу и список исключений) в файле «FileNames.inf» (в каталоге с исполняемым модулем программы). При запуске программы - она считывает параметры из этого файла, при закрытии программы параметры будут сохранены в этот файл. Если при запуске программы этот файл отсутствует - в качестве контролируемого назначается каталог с исполняемым модулем программы, а список исключений пуст. Также нужно сказать о том, что при запуске программы, при условии что одноименных файлов нет - ее главное окно будет скрыто через две секунды после подготовки первого отчета. Это сделано для того, чтобы программу можно было включать в меню автозагрузки Windows, как любую другую фоновую программу (при запуске программы ее главное окно выступает в качестве заставки). 5. Руководство по использованию программыДля запуска курсового проекта необходимо запустить файл Filenames.exe. - Программа предназначена для контроля одноименных файлов на диске в выбранных каталогах. - Загрузочный модуль программы - FileNames.exe . - ОС Windows 9X, Windows NT/2000/XP , требования к машине (ПЭВМ) накладываются операционной системой. При загрузке программа регистрирует значок в System Tray (правый нижний угол экрана), и при закрытии ее главного окна программа остается в памяти. Для закрытия программы надо щелкнуть мышью на значке в в System Tray и во всплывающем меню выбрать «Закрыть программу». Для показа главного окна надо выбрать пункт всплывающего меню «Отчет, настройки программы» (см. рисунок 1). Наглядное изображение программы приведено на рисунке 1: Рисунок 1 - Вид окна программы Для смены контролируемого каталога нажмите кнопку под надписью «проверяемый каталог» (надпись на кнопке-путь к контролируемому каталогу). В появившемся окне (рисунок 2) выберите нужный каталог и нажмите «Ввод» Рисунок 2 - Выбор каталога При двойном щелчке на нужном каталоге окно выбора каталогов тоже закроется. После этого будет произведена проверка (перепроверка) файлов для выбранного каталога (включая его подкаталоги), с подготовкой отчета по одноименным файлам. При операциях добавления(копирования), удаления и переименования файлов в контролируемых каталогах - отчет по одноименным файлам обновляется автоматически, и если обнаруживаются одноименные файлы - будет выполнено оповещение пользователя (главное окно программы будет открыто и выведено на передний план). Надо иметь в виду, что операция проверки выбранного каталога (с подготовкой отчета) может занять некоторое время, и сопровождается миганием надписи «Запущена проверка» в главном окне программы. В главном окне программы также имеется список файлов-исключений, для которых оповещение пользователя не производится. Аналогично списку одноименных файлов, при выборе в списке исключений файла - в списке путей будут отображены пути расположения этого файла, или надпись «ФАЙЛ ОТСУТСТВУЕТ», если файл в контролируемом каталоге отсутствует. Для переноса файла из списка одноименных файлов в список исключений выделите нужную строку в списке одноименных файлов и нажмите кнопку «перенести в список исключений». Для переноса файла из списка исключений в список одноименных файлов выделите нужную строку в списке исключений и нажмите кнопку «перенести в список одноименных файлов». Если данный файл отсутствует в контролируемом каталоге, или присутствует в нем в единственном числе - в соответствующем сообщении вам будет предложено просто удалить данное имя из списка исключений. ЗаключениеВ результате проделанной работы была создана программа, осуществляющая поиск одинаковых документов (по имени, размеру, дате создания). Во время проведения работы были приобретены навыки работы с языком программирования высокого уровня Visual C++. Исходя из того, что программа полностью соответствует заданию курсового проекта, можно сделать вывод, что задание на курсовую работу выполнено в полном объеме.Список использованных источниковМайкл Хаймен, Боб Арнсон. Visual C++: Учеб. Пособие. - М.: Диалектика, 2002. - 289 с.: ил. А. Корера, С. Фрейзер, С. Маклин, Н. Кумар, С. Робинсон, П.Г. Саранг, С. Джентайл. Visual C++. Пособие для разработчиков. Изд-во «Лори», 2003. - 417 с.: ил. Приложение А(ОБЯЗАТЕЛЬНОЕ)Основной алгоритм программыРисунок А.1 - Основной алгоритм программыВышеуказанный алгоритм основной программы реализует защиту от запуска второй копии приложения. Если копия приложения уже запущена (найдены ее окна) - программа активизирует свою предыдущую копию и завершает работу, иначе - стандартное выполнение программы.Рисунок А.2 - Алгоритм проверки регистрации по имени и номеру подкаталогаВышеуказанный алгоритм реализует проверку и регистрацию файла в отчете. Этот метод отчета применяется к каждому найденному файлу в контролируемых каталогах. Рисунок А.3 - Главная функция для проверки каталогов и подготовки отчета Вышеуказанный алгоритм реализует полный механизм проверки контролируемых каталогов и подготовки отчета. В алгоритме предусмотрены механизмы для досрочного завершения проверки по признаку завершения родительского потока, а также перезапуск проверки по признаку изменения файлов (от потока контроля файлов) Рисунок А.4 - Главная функция потока проверки файлов Вышеуказанный алгоритм реализует работу потока проверки файлов. Вызовы методов потока CheckStep и SetLists синхронизируются с главным VCL-потоком программы. Проверка файлов с передачей отчета главному окну программы инициируется взведением события NeverEvent - потоком контроля файлов по факту изменения состава файлов. Также предусмотрен механизм завершения потока - взведением свойства Terminated и события NeverEvent. Приложение Б(ОБЯЗАТЕЛЬНОЕ)Листинги программыФайл проекта FileNames.cpp//---------------------------------------------------------------------------#include <vcl.h>#pragma hdrstop//---------------------------------------------------------------------------USEFORM("FMain.cpp", FForm);USEFORM("FSelectDirForm.cpp", SDForm);//---------------------------------------------------------------------------WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){try{//защита от повторного запускаHWND w=FindWindow("TFForm","Контроль одноименных файлов"),w2=FindWindow("TSDForm","Выбор каталога");if(w) {//при обнаружении запущенной копии приложения - активизирует//ее главное окно и завершает работуif(IsWindowVisible(w)) {if(w2 && IsWindowVisible(w2)) SetForegroundWindow(w2);else SetForegroundWindow(w);}else PostMessage(w,WM_USER+2,0,0);}else{ //иначе - стандартное выполнение программыApplication->Initialize();Application->CreateForm(__classid(TFForm), &FForm);Application->CreateForm(__classid(TSDForm), &SDForm);Application->Run();}}catch (Exception &exception){Application->ShowException(&exception);}catch (...){try{throw Exception("");}catch (Exception &exception){Application->ShowException(&exception);}}return 0;}//---------------------------------------------------------------------------Файл ArrayTemplate.h//---------------------------------------------------------------------------#ifndef ArrayTemplateH#define ArrayTemplateH//---------------------------------------------------------------------------//шаблон на динамический массив со свойствами коллекции(списка элементов)template <class T> class TArray{private:int fCount,fLength; //кол-во элементов,размер массиваT *fItems; //указатель на массивprotected:T __fastcall Get(int Index); //чтение элемента массиваvoid __fastcall Put(int Index, T Item); //запись элемента массиваvoid __fastcall SetCount(int NewCount); //установка fCountpublic:TArray(int aLength); //конструктор~TArray(void); //деструкторvoid __fastcall Insert(int Index,T Item);//вставка элементаvoid __fastcall Delete(int Index); //удаление элементаvoid __fastcall Add(T Item); //добавление элементаvoid __fastcall Clear(void); //удаление всех элементовvoid __fastcall SetLength (int NewLen); //определить размер массиваT& operator[](int Index); //оператор []-доступ к элементуvoid* operator&(void); //оператор & - адрес массива__property T Items[int Index] = {read=Get, write=Put}; //свойство для доступа к элементу__property int Count = {read=fCount, write=SetCount}; //свойство для доступа к кол-ву элементов списка__property int Length = {read=fLength, write=SetLength};//свойство для доступа к размеру массива};template <class T> TArray<T>::TArray(int aLength){fCount=0;fLength=0;SetLength(aLength);}template <class T> TArray<T>::~TArray(void) { SetLength(0); }template <class T> T& TArray<T>::operator[](int Index) { return fItems[Index];}template <class T> void* TArray<T>::operator&(void) {return fItems;}
Страницы: 1, 2, 3, 4
|