Разработка самообучающегося словаря

Автор работы: Пользователь скрыл имя, 22 Июня 2014 в 18:15, курсовая работа

Краткое описание

Особую роль в интерпретаторе на Prolog играют конкретные запросы к базам знаний, на которые система логического программирования генерирует ответы «истина» и «ложь». Для обобщённых запросов с переменными в качестве аргументов созданная система на Prolog выводит конкретные данные в подтверждение истинности обобщённых сведений и правил вывода.
Теоретической основой Prolog является раздел символьной логики, называемый исчислением предикатов. Исчисление предикатов и логический вывод являются базой Prolog. В отличие от процедурных языков Prolog можно рассматривать как язык описаний. Используемый в Prolog подход состоит в описании известных фактов и отношений, касающихся данной задачи. Решение на Prolog следует из составленного описания.

Содержание

ВВЕДЕНИЕ 5
1 АНАЛИЗ СОСТОЯНИЯ ВОПРОСА 7
1.1 Общие сведения о реестре 7
1.2 Описание разделов реестра 7
2 ПОСТАНОВКА ЗАДАЧИ 10
3 ПРОЕКТИРОВАНИЕ ПО 11
3.1 Интерфейс программы 11
3.1 Структура программы 11
4 РЕАЛИЗАЦИЯ ПО 13
4.1 Описание интерфейса программы 13
4.2 Использование переменных и функций 14
5 ТЕСТИРОВАНИЕ ПО 19
5.1 Функциональное тестирование 19
5.2 Полное тестирование 23
ВЫВОДЫ 25
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 26
ПРИЛОЖЕНИЕ A 27

Прикрепленные файлы: 1 файл

ПЗ.doc

— 355.50 Кб (Скачать документ)

 

СОДЕРЖАНИЕ

ПРИЛОЖЕНИЕ В 46

 

 

 

 

 

 

 

 

 

 

ВВЕДЕНИЕ

 

Курсовой проект на тему “Разработка самообучающегося словаря” был разработан на языке программирования Visual Prolog.

Prolog — это логический язык  программирования для символических, нечисловых вычислений. Он особенно хорошо приспособлен для решения проблем, которые касаются объектов и отношений между объектами.

ПРОЛОГ может использоваться при разработке экспертных систем, а также для следующих задач:

– доказательства теорем и вывода решений в задачах;

– дифференцировании, интегрировании и т. д.;

– разработки упрощенных версий систем ИИ;

–создания естественно-языковых интерфейсов для существующих программ;

– перевода текстов с одного языка на другой, в том числе – с одного языка программирования на другой;

– создания базы данных.

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

Особую роль в интерпретаторе на Prolog играют конкретные запросы к базам знаний, на которые система логического программирования генерирует ответы «истина» и «ложь». Для обобщённых запросов с переменными в качестве аргументов созданная система на Prolog выводит конкретные данные в подтверждение истинности обобщённых сведений и правил вывода.

Теоретической основой Prolog является раздел символьной логики, называемый исчислением предикатов. Исчисление предикатов и логический вывод являются базой Prolog. В отличие от процедурных языков Prolog можно рассматривать как язык описаний. Используемый в Prolog подход состоит в описании известных фактов и отношений, касающихся данной задачи. Решение на Prolog следует из составленного описания.

В настоящее время применяются около 50 версий Prolog. К наиболее популярным относят Turbo Prolog и Visual Prolog.

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

 

2 ПОСТАНОВКА ЗАДАЧИ

Целью данного курсового проекта является разработка приложения «Самообучающийся словарь». Данный программный продукт должен быть разработан в среде Visual Prolog.

Программа должна включать в себя:

  1. Вывод содержимого файла на экран;
  2. Просмотр отдельных предложений БД;
  3. Добавление слов в БД с переводом;
  4. Редактирование отдельных предложений БД;
  5. Удаление отдельных предложений БД.

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

  • Скорость выполнения программы;
  • Возможность внесения коррективов в программу в процессе эксплуатации;
  • Надежность работы программы и защищенность от программных сбоев;

Prolog идеально подходит для наших нужд. Он является одним из самых быстрых языков программирования уже на протяжении многих лет.

 

3 ПРОЕКТИРОВАНИЕ ПО

3.1 Интерфейс программы

Интерфейс программы будет иметь вид, изображенный на рисунке 3.2.


 

 

 

 

 

 

 

 

Рисунок 3.2 – Интерфейс программы

 

Область 1 содержит пункты меню для работы с реестром такие, как обновление реестра, который синхронизируется с реестром Windows, создание, переименование и удаление раздела и записи, поиска раздела и записи, редактирования записи.

Область 2 содержит «кусты» (разделы реестра с подразделами).

Область 3 содержит название полей.

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

3.1 Структура программы

Для разработки программного продукта, воспользуемся Microsoft Visual Studio 2010 Ultimate.

Структура базируется на шаблоне Win32 визуальной среды Visual Studio 2010.

На рисунке 3.1 изображена структура программы:

 

 

 

 


 

 

 

 

 

 

 

 

Рисунок 3.1 – Cтруктура программы

Функция WinMain вызывается системой как начальная точка входа, для базирующейся на Win32, прикладной программы.

Синтаксис функции WinMain:

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow). Внутри функции WinMain требуется создать структуру класса окна типа WNDCLASSEX. Эта структура содержит информацию об окне, такую как используемые в приложении значки, цвет фона окна, отображаемое в заголовке окна название, имя функции процедуры окна и т.д.

Оконная процедура WndProc (Window Procedure) служит для обработки сообщений в каждой программе. Вызов оконной процедуры расположен в основном цикле программы и выполняется при каждой итерации цикла.

Синтаксис оконной процедуры:

LRESULT CALLBACK WindowProcedure (HWND hwnd, UNIT message, WPARAM wParam, LPARAM lParam).

BOOL CALLBACK DialogProcedureRename() – вызываемая функция, осуществляющая переименование по нажатию на соответствующий пункт меню.

BOOL CALLBACK DialogProcedureFind() – вызываемая функция, осуществляющая поиск по нажатию на соответствующий пункт меню.

Bool OpenKey() – функция, открывающая соответствующий ключ реестра.

Bool ShowSubKeys() - функция, показывающая подключи реестра.

Bool ShowValues() - функция, показывающая значение записей реестра.

Bool CreateValue() – функция, создающая запись в реестре.

Bool FindRegistry() – функция, ищущая ключ в соответствующем регистре.

4 РЕАЛИЗАЦИЯ ПО

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

Программа написана на C++ и работает под управлением операционных систем типа Windows. Для успешной работы программы достаточно иметь исполняемый модуль RegEdit.exe

Программа не требует никаких исходных данных.

Исполняемый файл занимает 33 Кбайт на диске.

На рисунке 4.1 представлено главное окно программы.

 

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

Опишем каждый элемент главного окна.

Пункт меню «Файл» содержит два подпункта, выполняющих обновление реестра и выход из программы. Для этого используются функции ID_FILE_REFRESH и ID_FILE_EXIT соответственно. При обновлении реестр синхронизируется с реестром Windows.

Чтобы создать новый раздел (пункт меню «Раздел»), используется функция ID_KEY_NEW. Для чтобы переименовать раздел, используется функция ID_KEY_RENAME. Для удаления раздела существует функция ID_KEY_DELETE.

Рассмотрим пункт меню «Запись». Для создания раздела, строки и записи типа DWORD используются функции ID_KEY_NEW, ID_VALUE_NEW_STRING, ID_VALUE_NEW_DWORD соответственно.

Для изменения значения записи используется функция ID_VALUE_MODIFY, для переименования – ID_VALUE_RENAME, для удаления – ID_VALUE_DELETE.

При нажатии на пункт меню «Найти» появляется окно поиска раздела и записи (функции IDC_KEY и IDC_VALUE). Для поиска раздела или записи есть функция ID_FIND_FIND, для поиска следующего значения – ID_FIND_FINDNEXT.

4.2 Использование  переменных и функций

Основная часть программы состоит из одного файла – main.cpp. Данный файл содержит в себе различные переменные (таблица 4.2)

Таблица 4.2 – Описание глобальных переменных

№ переменной

Тип переменной

Имя переменной

Описание переменной

1

HINSTANCE

hInst

Указывает адресное пространство, в котором запустилось приложение

2

HWND

hTV, hLV

Указатели на TreeView и ListView соответственно

3

HTREEITEM

tiRoot

Указатель на элемент TreeView

4

Char

szTitleName

Переменная, содержащая название программы

5

Char

szClassName

Переменная, содержащая имя основого класса программы


 

В таблице 4.3 показаны используемые библиотеки.

Таблица 4.3 – Используемые библиотеки

№ библиотеки

Название библиотеки

Описание библиотеки

1

windows.h

Библиотека содержит определение основных констант, макросов, функций операционной системы Windows

2

commctrl.h

Библиотека, используемая для определения дополнительных визуальных стилей

3

resource.h

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


 

 

WINAPI WinMain - глобальная функция – начальная точка входа в программу.

В программе она описывается следующим образом:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)

{

hInst = hInstance;

HWND hwnd;

MSG msg;

WNDCLASSEX wc; //Структура, в которой описывается информация об wc.hInstance = hInstance;        // окне

wc.lpszClassName = szClassName;

wc.lpfnWndProc = WindowProcedure;

wc.style = CS_DBLCLKS;

wc.cbSize = sizeof(WNDCLASSEX);

wc.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON));

….

    hwnd = CreateWindowEx(0, szClassName, szTitleName;}

Следующая функция создает окно, в которой будет располагаться информация по каждому разделу и подразделу системного реестра.

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{switch(msg)

{case WM_CREATE:

{hTV = CreateWindowEx(0, WC_TREEVIEW, TEXT("Tree View"),

WS_VISIBLE|WS_CHILD|WS_BORDER|TVS_HASLINES|TVS_HASBUTTONS,

0, 0, 0, 0, hwnd, NULL, hInst, NULL);

hLV = CreateWindow(WC_LISTVIEW, NULL,

WS_VISIBLE|WS_CHILD|LVS_REPORT|WS_HSCROLL,   

0, 0, 0, 0, hwnd, NULL, hInst, NULL);

LVCOLUMN lvc;

lvc.mask = LVCF_TEXT|LVCF_WIDTH;

lvc.pszText = "Название";

lvc.cx = 150;

SendMessage(hLV, LVM_INSERTCOLUMN, 0, (LPARAM)&lvc);

lvc.pszText = "Тип";

lvc.cx = 120;           SendMessage(hLV, LVM_INSERTCOLUMN, 1, (LPARAM)&lvc);   lvc.pszText = "Информация";

lvc.cx = 400;

SendMessage(hLV, LVM_INSERTCOLUMN, 2, (LPARAM)&lvc);}

При нажатии на пункт меню «Переименовать» у пользователя есть возможность дать разделу другое имя. Реализация данной процедуры:

BOOL CALLBACK DialogProcedureRename(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)

{static HWND editName;

  switch(msg)

 {case WM_INITDIALOG:

{editName = GetDlgItem(hDlg, IDC_NAME);

if(isRename)

{SetWindowText(editName, gszName);

if(isRename == 2)

{SetWindowText(hDlg, "Редактирование  данных");

SetWindowText(GetDlgItem(hDlg, IDC_LABEL), "Значение:");}}

else SetWindowText(hDlg, "Создание  раздела");

SetFocus(editName);

break;}

case WM_COMMAND:

{

switch(LOWORD(wParam))

{

case IDOK:

{

else MessageBox(hDlg, "Заполните  поле", szTitleName, MB_ICONINFORMATION);}

Для поиска раздела либо записи в программе реализована следующая процедура:

BOOL CALLBACK DialogProcedureFind(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)

{

static HWND editFind, radioKey, radioValue;

static bool isKey;

static HTREEITEM tiSelected;

static char szFind[MAX_KEY_LENGTH];

    switch(msg)

    {

case WM_INITDIALOG:

{

}

case WM_COMMAND:

{

switch(LOWORD(wParam))

            {

case IDOK:

{…}

Если поиск не принес никаких результатов, то выводится соответствующее окно. Данная процедура осуществляется следующим образом:

{…

MessageBox(hDlg, "Ничего не найдено", szTitleName, MB_ICONINFORMATION);

if(isFindNext)

{

EndDialog(hDlg, 0);

return true;

}

Для открытия соответствующего ключа реестра была реализована следующая функция:

bool OpenKey(HTREEITEM ti, DWORD dwType)

{

char szPath[MAX_PATH_LENGTH] = "";

char szTemp[MAX_PATH_LENGTH];

TV_ITEM tvi;

tvi.mask = TVIF_TEXT;

tvi.pszText = szTemp;

tvi.cchTextMax = MAX_KEY_LENGTH;

HTREEITEM tiTempB, tiTemp = ti;

 

while(!(tiRoot == (tiTempB = TreeView_GetParent(hTV, tiTemp))))

{

tvi.hItem = tiTemp;

TreeView_GetItem(hTV, &tvi);

strcat_s(szTemp, "\\");

strcat_s(szTemp, szPath);

strcpy_s(szPath, szTemp);

tiTemp = tiTempB;

}

Для создания записи в реестре реализована следующая функция:

bool CreateValue(HWND hwnd, DWORD dwType)

{

HTREEITEM tiSelected;

 

tiSelected = TreeView_GetSelection(hTV);

if(tiSelected == tiRoot)

{

MessageBox(hwnd, "Нельзя создать  запись в корневом разделе", szTitleName, MB_ICONWARNING);

return false;

}

strcpy_s(gszName, "");

isRename = false;

DialogBox(hInst, MAKEINTRESOURCE(IDD_RENAME), hwnd, DialogProcedureRename);

…}

Если введенная запись уже существует, то выводится окно, описанное процедурой: 

{…MessageBox(hwnd, "Запись с таким именем уже существует", szTitleName, MB_ICONERROR);…}

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

 

5 ТЕСТИРОВАНИЕ ПО

5.1 Функциональное тестирование

Перед запуском приложения, необходимо убедиться, что версия операционной системы – Windows. Т.к. реестр присутствует только на данной операционной системе.

Для тестирования приложения, был использован ПК со следующими характеристиками:

    • Операционная система: Microsoft Windows 7;
    • Тип системы: 64-разрядная операционная система;
    • Оперативная память: 2 ГБ;
    • Процессор: Celeron Dual-Core T3100 @ 1.9 GHz;
    • Жесткий диск: SATA 320 ГБ;

Все параметры подходят, приступим к тестированию.

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

Запускаем программу от имени администратора, на экране появляется окно (рисунок 5.1):

 

Рисунок 5.1 – Приложение «Редактор реестра»

 

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

Информация о работе Разработка самообучающегося словаря