">
Информатика Программирование
Информация о работе

Тема: Программа Библиотека на двоичном дереве

Описание: Составление программы, которая содержит текущую информацию о книгах в библиотеке. Описание алгоритма. Организация входных и выходных данных. Выбор состава технических и программных средств. Описание логической структуры, технические средства программы.
Предмет: Информатика.
Дисциплина: Программирование.
Тип: Курсовая работа
Дата: 14.08.2012 г.
Язык: Русский
Скачиваний: 38
Поднять уникальность

Похожие работы:

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ НЕФТЕГАЗОВЫЙ УНИВЕРСИТЕТ»
КАФЕДРА АВТОМАТИЗАЦИИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

КУРСОВАЯ РАБОТА
по дисциплине

«Алгоритмические языки и программирование»
Тема: «Программа “Библиотека на двоичном дереве”»

Выполнил:
студент группы
АСОиУ-08-1
Фамилия И. О.

Проверила:
доцент каф. АВТ,
к. п. н. Сенкевич Л.Б.

Тюмень
2012

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ3

НАЗНАЧЕНИЕ И ОБЛАСТЬ ПРИМЕНЕНИЯ4

1 ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ5

1.1 Постановка задачи5

1.2 Описание алгоритма5

1.3 Организация входных и выходных данных6

1.4 Выбор состава технических и программных средств6

2 РАЗРАБОТКА ПРОГРАММЫ7

3 СПЕЦИФИКАЦИЯ ПРОГРАММЫ8

4 ТЕКСТ ПРОГРАММЫ9

5 ОПИСАНИЕ ПРОГРАММЫ13

5.1 Общие сведения13

5.2 Функциональное назначение13

5.3 Описание логической структуры14

5.4 Используемые технические средства15

5.5 Вызов и загрузка15

5.6 Входные данные15

5.7 Выходные данные15

6 ТЕСТИРОВАНИЕ ПРОГРАММЫ16

ЛИТЕРАТУРА18

ВВЕДЕНИЕ

Задание на курсовую работу по дисциплине «Алгоритмические языки и программирование».

Студент группы АСОиУ-08-1 Фамилия И.О.

Специальность «Автоматизированные системы обработки информации и управления».

Тема: «Составить программу, которая содержит текущую информацию о книгах в библиотеке».

Условие задачи:

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

номер УДК;

фамилию и инициалы автора;

название;

год издания;

количество экземпляров данной книги в библиотеке.

Программа должна обеспечивать:

начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева;

добавление данных о книгах, вновь поступивших в библиотеку;

удаление данных о списываемых книгах;

по запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам издания.

НАЗНАЧЕНИЕ И ОБЛАСТЬ ПРИМЕНЕНИЯ

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

1 ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ

1.1 Постановка задачи

Библиотека построена в виде двоичного дерева. Каждая компонента содержит структуру книги с соответствующими данными.

Ключом дерева является год издания книги.

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

номер УДК;

фамилию и инициалы автора;

название;

год издания;

количество экземпляров данной книги в библиотеке.

Программа должна обеспечивать:

начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева;

добавление данных о книгах, вновь поступивших в библиотеку;

по запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам издания.

1.2 Описание алгоритма

Программа состоит из двух частей – логической части, в которой реализованы методы работы с двоичными деревьями, методы поиска книг, удаления и т.д., и графической части – в этой части реализован графический интерфейс пользователя. Работа программы осуществляется путём взаимодействия обеих частей программы.

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

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

1.3 Организация входных и выходных данных

Входными данными для каждого компонента дерева являются:

номер УДК;

фамилию и инициалы автора;

название;

год издания;

количество экземпляров данной книги в библиотеке.

В роли выходных данных выступает дерево, формирующиеся после конечного числа добавления компонент.

1.4 Выбор состава технических и программных средств

Программа разработана на языке программирования C++ в среде программирования C++ Builder 6.0 (Build 10.166).

2 РАЗРАБОТКА ПРОГРАММЫ



Рисунок 2.1 — «Главная форма программы»

При запуске программы пользователь видит главную форму программы (см. рис. 2.1).

Элементы главной формы:

Кнопка “Создать запись” открывает форму создания новых записей (см. рисунок 2.2)

Кнопка “Удалить запись” открывает форму удаления записей (см. рисунок 2.3)

Кнопка “По имени и названию” открывает форму поиска книг по имени автора и названию книги (см. рисунок 2.4)

Кнопка “По названию” открывает форму поиска книг по названию книги (см. рисунок 2.5)

Кнопка “По имени” открывает форму поиска книг по имени автора (см. рисунок 2.6)

Кнопка “По УДК” открывает форму поиска книг по номеру УДК (см. рисунок 2.7)

Кнопка “По году” открывает форму поиска книг по году издания (см. рисунок 2.8)

Кнопка “Вывести все записи” открывает форму, на которой отображаются все книги, информация о которых присутствует в библиотеке (см. рисунок 2.9)



Рисунок 2.2 — «Форма Создание записи»

Элементы формы создания новых записей:

Надпись “Название книги”

Соответствующее надписи поле ввода

Надпись “Имя автора”

Соответствующее надписи поле ввода

Надпись “УДК”

Соответствующее надписи поле ввода

Надпись “Год издания”

Соответствующее надписи поле ввода

Надпись “Количество”

Соответствующее надписи поле ввода

Кнопка “Создать” создаёт в памяти новую запись в дереве с полученными данными



Рисунок 2.3 — «Форма Удаление записи»

Элементы формы удаления записей:

Надпись “Название книги”

Соответствующее надписи поле ввода

Надпись “Имя автора”

Соответствующее надписи поле ввода

Кнопка “Удалить” удаляет запись с указанными данными, если такой книги нет – сообщает об ошибке



Рисунок 2.4 — «Форма Поиск по имени и названию»

Элементы формы поиска книги по названию книги и имени автора:

Надпись “Название книги”

Соответствующее надписи поле ввода

Надпись “Имя автора”

Соответствующее надписи поле ввода

Кнопка “Найти” запускает механизм поиска книг

Поле вывода – в него выводится вся информация по найденной книге



Рисунок 2.5 — «Форма поиск по названию»

Элементы формы поиска книг по названию:

Надпись “Название книги”

Соответствующее надписи поле ввода

Кнопка “Найти” запускает механизм поиска книг

Поле вывода – в него выводится вся информация по найденным книгам



Рисунок 2.6 — «Форма Поиск по имени»

Элементы формы поиска книг по имени автора:

Надпись “Имя автора”

Соответствующее надписи поле ввода

Кнопка “Найти” запускает механизм поиска книг

Поле вывода – в него выводится вся информация по найденным книгам



Рисунок 2.7 — «Форма Поиск по УДК»

Элементы формы поиска книг по номеру УДК:

Надпись “УДК”

Соответствующее надписи поле ввода

Кнопка “Найти” запускает механизм поиска книг

Поле вывода – в него выводится вся информация по найденным книгам



Рисунок 2.8 — «Форма Поиск по году»

Элементы формы поиска книг по году издания:

Надпись “Год издания”

Соответствующее надписи поле ввода

Кнопка “Найти” запускает механизм поиска книг

Поле вывода – в него выводится вся информация по найденным книгам



Рисунок 2.9 — «Форма Все записи»

Элементы формы вывода всех записей о книгах:

Поле вывода – в него выводится вся информация о всех книгах в библиотеке

3 СПЕЦИФИКАЦИЯ ПРОГРАММЫ

Название программы: «Библиотека на бинарном дереве». Состав программы представлен в таб. 3.1.

Таблица 3.1 — «Состав программы» Обозначение Наименование Примечание  project.bpr Файл проекта Связывает все файлы  KursovayaGUI.res Файл ресурсов проекта Хранит все ресурсы проекта в компилированном виде  KursovayaGUI.cpp Файл главной функции проекта Реализует главную функцию проекта, создаёт все формы проекта, обеспечивает функционирование проекта на низком уровне  main.h Заголовочный файл главной формы проекта Содержит описание главной формы проекта  main.cpp Файл реализации главной формы проекта Реализация главной формы
 Create.h Заголовочный файл описания формы создания записи Содержит описание формы создания записи  Create.cpp Файл реализации формы создания записи Реализация формы создания записи  Delete.h Заголовочный файл описания формы удаления записи Содержит описание формы удаления записи  Delete.cpp Файл реализации формы удаления записи Реализация формы удаления записи  Name_Title.h Заголовочный файл описания формы поиска по имени автора и названию книги Содержит описание формы поиска по имени автора и названию книги  Name_Title.cpp Файл реализации формы поиска по имени автора и названию книги Реализация формы поиска по имени автора и названию книги  Title.h Заголовочный файл описания формы поиска по названию книги Содержит описание формы поиска по названию книги  Title.cpp Файл реализации формы поиска по названию книги Реализация формы поиска по названию книги  Name.h Заголовочный файл описания формы поиска по имени автора Содержит описание формы поиска по имени автора  Name.cpp Файл реализации формы поиска по имени автора Реализация формы поиска по имени автора  UDK.h Заголовочный файл описания формы поиска по номеру УДК Содержит описание формы поиска по номеру УДК  UDK.cpp Файл реализации формы поиска по номеру УДК Реализация формы поиска по номеру УДК  year.h Заголовочный файл описания формы поиска по году Содержит описание формы поиска по году  year.cpp Файл реализации формы поиска по году Реализация формы поиска по году  all.h Заголовочный файл описания формы отображения всех записей в библиотеке Содержит описание формы отображения всех записей в библиотеке  all.cpp Файл реализации формы отображения всех записей в библиотеке Реализация формы отображения всех записей в библиотеке  BinTree.h Заголовочный файл описания функций для работы с двоичным деревом, списком и описанием необходимых структур Содержит описание функций для работы с двоичным деревом, списком и описанием необходимых структур  BinTree.cpp Файл реализации функций для работы с двоичным деревом и списком Реализация функций для работы с двоичным деревом и списком  

4 ТЕКСТ ПРОГРАММЫ

В данном разделе приведено содержание только двух файлов – BinTree.h и BinTree.cpp, т.к. в них находится вся логика работы с двоичным деревом – они ядро программы. Остальные же файлы не несут особой информативности и важности.

Содержимое файла BinTree.h:

#ifndef BinTreeH

#define BinTreeH

#include

struct Book { //Структура книги

std::string UDK;

std::string family_in;

std::string title;

int year;

int count;

};

struct BooksBinTree { //Структура двоичного дерева

Book book;

BooksBinTree *left_node;

BooksBinTree *right_node;

};

struct BooksList { //Структура списка

Book book;

BooksList *next;

};

extern BooksBinTree *head; //Корень дерева. Должен быть глобальным, т.к. используется в разных формах

//Функция создания новой записи в дереве

BooksBinTree* insertNewBook(BooksBinTree* head, std::string UDK, std::string family_in, std::string title, int year, int count);

//Функция удаления записи в дереве

BooksBinTree* deleteBook(BooksBinTree* head, std::string family_in, std::string title);

//Функция удаления всего дерева

BooksBinTree* deleteTree(BooksBinTree* head);

//Функция создания новой записи в списке

BooksList* insertInList(BooksList* head, Book book);

//Функция удаления записи в списке

BooksList* deleteFromList(BooksList* head, Book book);

//Функция удаления всего списка

BooksList* deleteList(BooksList* head);

//Функция поиска книги по имени автора и названию

Book findBook(BooksBinTree* head, std::string family_in, std::string title);

//Функция поиска книг по названию

BooksList* findBookByTitle(BooksBinTree* head, std::string title);

//Функция поиска книги по имени автора

BooksList* findBookByFamily(BooksBinTree* head, std::string family_in);

//Функция поиска книги по году издания

BooksList* findBookByYear(BooksBinTree* head, int year);

//Функция поиска книги по номеру УДК

BooksList* findBookByUDK(BooksBinTree* head, std::string UDK);

//Функция возвращающая все записи о книгах

BooksList* allBooks(BooksBinTree* head);

#endif

Содержание файла BinTree.cpp:

#include

BooksBinTree *head;

BooksBinTree* insertNewBook(BooksBinTree* head, std::string UDK, std::string family_in, std::string title, int year, int count) //Функция вставки нового элемента в дерево

{

BooksBinTree *temp = new BooksBinTree();

Book book;

book.UDK = UDK; //Заполняем полученную информацию

book.family_in = family_in;

book.title = title;

book.year = year;

book.count = count;

temp->book = book;

temp->left_node = NULL;

temp->right_node = NULL;

if(!head) //Не пуста ли голова?

{

head = temp;

} else //if(!head)

{

BooksBinTree *temp1 = head;

while((temp1->left_node && temp->book.year < temp1->book.year) || (temp1->right_node && temp->book.year >= temp1->book.year)) //Пока не найдём место для нового члена дерева

{

while(temp1->left_node && temp->book.year < temp1->book.year) //Проверим слева

{

temp1 = temp1->left_node;

}

while(temp1->right_node && temp->book.year >= temp1->book.year) //Проверим справа

{

temp1 = temp1->right_node;

}

}//while((temp1->left_node && temp->book.year < temp1->book.year) || (temp1->right_node && temp->book.year >= temp1->book.year))

if(temp->book.year < temp1->book.year) //Вставить влево?

temp1->left_node = temp;

else temp1->right_node = temp; //Нет вправо

}// else

return head;

}

BooksBinTree* deleteBook(BooksBinTree* head, std::string family_in, std::string title) //Функция удаления элемента из дерева

{

BooksBinTree *temp = head;

BooksBinTree *temp1 = head;

if(temp) //Если есть голова дерева, из которого удаляем

{

if(temp->book.family_in == family_in && temp->book.title == title) //Если удаляемая книга найдена

{

if(head->right_node) //Если есть узел справа от головы

{

temp1 = head->right_node; //Обрабатываем этот узел так, чтобы в самой его левой ветке находилась левая ветка нашей головы

while(temp1->left_node) temp1 = temp1->left_node;

temp1->left_node = head->left_node;

head = head->right_node;

} else if(head->left_node) //Если правой ветки у головы не оказалось, но есть левая

{

head = head->left_node; //Голова становится левой веткой самой себя

} else head = NULL; //Мы имеем вырожденное дерево - есть только голова - обнуляем её

delete temp; //Удаляем книгу

return head; //Возвращаем истину - удалено успешно

}else //if(temp->book.family_in == family_in && temp->book.title == title)

{

if(temp->left_node) //Если ещё не нашли нужную книгу и есть левое поддерево

{

temp->left_node = deleteBook(temp->left_node, family_in, title); //Вызываем себя и говорим, что голова - начало левого поддерева

if(temp->left_node)

{

if(temp->left_node->book.count >=0)

{

head->left_node = temp->left_node;

return head;

}

}else

{

head->left_node = temp->left_node;

return head; //Если рекурсивный вызов вернул истину, то и мы возвращаем истину

}

}

if(temp->right_node) //Если есть правое поддерево

{

temp->right_node = deleteBook(temp->right_node, family_in, title); //Вызываем себя и говорим, что голова - начало правого поддерева

if(temp->right_node)

{

if(temp->right_node->book.count >=0)

{

head->right_node = temp->right_node;

return head;

}

}else

{

head->right_node = temp->right_node;

return head; //Если рекурсивный вызов вернул истину, то и мы возвращаем истину

}

}

temp = new BooksBinTree();

temp->book.count = -1;

return temp; //Иначе - неудача - такой книги не найдено

}

}//if(temp)

temp = new BooksBinTree();

temp->book.count = -1;

return temp;

}//bool deleteBook(BooksBinTree* head, std::string family_in, std::string title)

BooksBinTree* deleteTree(BooksBinTree* head) //Функция удаления всего дерева из памяти

{

if(head) //Если есть вообще дерево

{

if(head->left_node) //Если есть левое поддерево

head->left_node = deleteTree(head->left_node); //Удаляем левое поддерево

if(head->right_node) //Если есть правое поддерево

head->right_node = deleteTree(head->right_node); //Удаляем правое поддерево

delete head; //Удаляем голову

head = NULL; //Инициализируем голову пустым указателем

}

return head; //Возвращаем указатель на ничто

}//BooksBinTree* deleteTree(BooksBinTree* head)

BooksList* insertInList(BooksList *head, Book book) //Вставка элемента в списко букв

{

BooksList *temp = new BooksList();

temp->book = book;

temp->next = NULL;

if(!head)

{

head = temp;

}else if(!head->next)

{

head->next = temp;

}else

{

BooksList *temp1 = head;

while(temp1->next) temp1 = temp1->next;

temp1->next = temp;

}

return head;

}//BooksList* insertInList(BooksList *head, Book book)

BooksList* deleteFromList(BooksList* head, Book book) //Удаление элемента из списка букв

{

if(head)

{

if(head->book.family_in == book.family_in && head->book.title == book.title)

{

if(head->next)

{

BooksList *temp = head->next;

delete head;

head = temp;

} else

{

delete head;

head = NULL;

}

return head;

}else //if(head->book == book)

{

if(head->next)

{

return deleteFromList(head->next, book);

}

}//else

}

return NULL;

}//bool deleteFromList(BooksList* head, Book book)

BooksList* deleteList(BooksList* head) //Функция удаления списка книг из памяти

{

if(head) //Если есть голова

{

if(head->next) //Если есть ещё один символ

head->next = deleteList(head->next); //Вызовем функцию его удаления для начала

delete head; //Удалим голову

head = NULL; //Присвоим её указатель на ничто

}

return head; //Вернём указатель на ничто

}//BooksList* deleteList(BooksList* head)

Book findBook(BooksBinTree* head, std::string family_in, std::string title) //Функция поиска книги по автору и названию

{

if(head)

{

BooksBinTree *temp = head;

if(temp->book.family_in == family_in && temp->book.title == title) //Если такая книга - голова

return temp->book; //Возвращаем головную книгу

if(temp->left_node) //Если не так - проверим левое поддериво

{

Book book = findBook(temp->left_node, family_in, title);

if(book.count >= 0) //Если при вызове самого себя нашли книгу в левом поддереве - возвращаем её

return book;

}

if(temp->right_node) //Если не так - проверим правое поддериво

{

Book book = findBook(temp->right_node, family_in, title);

if(book.count >= 0)

return book; //Если при вызове самого себя нашли книгу в правом поддереве - возвращаем её

}//if(temp->left_node)

}//if(head)

Book book;

book.count = -1;

return book; //Если не нашли книгу - возвращаем пустую книгу с количеством равным -1 - знако того, что книга не найденва

}//Book findBook(BooksBinTree* head, std::string family_in, std::string title)

BooksList* findBookByTitle(BooksBinTree* head, std::string title) //Функция поиска книг по названию

{

BooksList *books = NULL;

if(head)

{

BooksBinTree *temp = head;

if(temp->left_node) //Если не так - проверим левое поддериво

{

BooksList *book = findBookByTitle(temp->left_node, title);

if(book) //Если при вызове самого себя нашли книги в левом поддереве - вставляем их в список

{

books = book; //Вставляем в список список книг, найденных слева

}

}

if(temp->book.title == title) //Если такая книга - голова

{

books = insertInList(books, head->book);

}

if(temp->right_node) //Если не так - проверим правое поддериво

{

BooksList *book = findBookByTitle(temp->right_node, title);

if(book)

{

if(books) //Если при вызове самого себя нашли книги в левом поддереве - вставляем их в список

{

BooksList *temp = book;

BooksList *temp1 = books;

while(temp1->next) temp1 = temp1->next;

temp1->next = temp;

}else

{

books = book; //Вставляем в список головную книгу

} //Если при вызове самого себя нашли книгу в правом поддереве - возвращаем её

}

}//if(temp->left_node)

}//if(head)

return books; //Возвращаем найденные книги

}//BooksList* findBookByTitle(BooksBinTree* head, std::string title)

BooksList* findBookByFamily(BooksBinTree* head, std::string family_in) //Функция поиска книг по Автору

{

BooksList *books = NULL;

if(head)

{

BooksBinTree *temp = head;

if(temp->left_node) //Если не так - проверим левое поддериво

{

BooksList *book = findBookByFamily(temp->left_node, family_in);

if(book) //Если при вызове самого себя нашли книги в левом поддереве - вставляем их в список

{

books = book; //Вставляем в список список книг, найденных слева

}

}

if(temp->book.family_in == family_in) //Если такая книга - голова

{

books = insertInList(books, head->book);

}

if(temp->right_node) //Если не так - проверим правое поддериво

{

BooksList *book = findBookByFamily(temp->right_node, family_in);

if(book)

{

if(books) //Если при вызове самого себя нашли книги в левом поддереве - вставляем их в список

{

BooksList *temp = book;

BooksList *temp1 = books;

while(temp1->next) temp1 = temp1->next;

temp1->next = temp;

}else

{

books = book; //Вставляем в список головную книгу

} //Если при вызове самого себя нашли книгу в правом поддереве - возвращаем её

}

}//if(temp->left_node)

}//if(head)

return books; //Возвращаем найденные книги

}//BooksList* findBookByFamily(BooksBinTree* head, std::string family_in)

BooksList* findBookByYear(BooksBinTree* head, int year) //Функция поиска книг по году издания

{

BooksList *books = NULL;

if(head)

{

if(head->book.year == year)

{

books = insertInList(books, head->book);

if(head->right_node)

{

BooksList *book = findBookByYear(head->right_node, year);

books->next = book;

}

}else //if(head->book.year == year)

{

if(head->book.year < year)

{

if(head->right_node)

{

books = findBookByYear(head->right_node, year);

}

}else //if(head->book.year < year)

{

if(head->left_node)

{

books = findBookByYear(head->left_node, year);

}

}

}

}

return books;

}//BooksList* findBookByYear(BooksBinTree* head, int year)

BooksList* findBookByUDK(BooksBinTree* head, std::string UDK) //Функция поиска книг по УДК

{

BooksList *books = NULL;

if(head)

{

BooksBinTree *temp = head;

if(temp->left_node) //Если не так - проверим левое поддериво

{

BooksList *book = findBookByUDK(temp->left_node, UDK);

if(book) //Если при вызове самого себя нашли книги в левом поддереве - вставляем их в список

{

books = book; //Вставляем в список список книг, найденных слева

}

}

if(temp->book.UDK == UDK) //Если такая книга - голова

{

books = insertInList(books, head->book);

}

if(temp->right_node) //Если не так - проверим правое поддериво

{

BooksList *book = findBookByUDK(temp->right_node, UDK);

if(book)

{

if(books) //Если при вызове самого себя нашли книги в левом поддереве - вставляем их в список

{

BooksList *temp = book;

BooksList *temp1 = books;

while(temp1->next) temp1 = temp1->next;

temp1->next = temp;

}else

{

books = book; //Вставляем в список головную книгу

} //Если при вызове самого себя нашли книгу в правом поддереве - возвращаем её

}

}//if(temp->left_node)

}//if(head)

return books; //Возвращаем найденные книги

}//BooksList* findBookByUDK(BooksBinTree* head, std::string UDK)

BooksList* allBooks(BooksBinTree* head)

{

BooksList *books = NULL;

if(head)

{

if(head->left_node)

{

books = allBooks(head->left_node);

}

books = insertInList(books, head->book);

if(head->right_node)

{

BooksList *temp = allBooks(head->right_node);

BooksList *temp1 = books;

while(temp1->next) temp1 = temp1->next;

temp1->next = temp;

}

}

return books;

}

5 ОПИСАНИЕ ПРОГРАММЫ

5.1 Общие сведения

Название программы: ««Библиотека на бинарном дереве»». Для корректного функционирования программы необходимо использовать её в ОС windows 95 и выше. Программа была разработана в среде программирования C++ Builder 6.0 (Build 10.166) на языке программирования C++.

5.2 Функциональное назначение

Решаемые задачи

обеспечивает начальный ввод книг библиотеки;

формирует новое представление библиотеки в виде двоичного дерева по следующему алгоритму:

ищется узел с наиболее близким годом издания книги;

если год издания новой книги больше, то она добавляется в левую ветвь;

если год издания новой книги меньше, то она добавляется в правую ветвь;

производит вывод списка книг библиотеки.

Производит поиск книг по всем пунктам, составляющим информацию о книге

5.3 Описание логической структуры

Схематично логическая структура представлена на рис. 5.3.1.



Рисунок 5.3.1 — «Схема логической структуры»

5.4 Используемые технические средства

Минимальные системные требования:

Процессор: Intel Pentium 100 Mhz

ОЗУ: необходимое для функционирования ОС

Места на жёстком диске: 200 Кб.

5.5 Вызов и загрузка

Вызов и загрузка программы осуществляются путём открытия исполняемого файла: KursovayaGUI.exe.

5.6 Входные данные

Входными данными для каждого компонента дерева являются:

номер УДК;

фамилию и инициалы автора;

название;

год издания;

количество экземпляров данной книги в библиотеке.

5.7 Выходные данные

В роли выходных данных выступает дерево, формирующиеся после конечного числа добавления компонент.

6 ТЕСТИРОВАНИЕ ПРОГРАММЫ

Снимки экрана работы программы на последнем этапе тестирования представлены на рис. 6.1 – 6.11 соответственно.





Рисунок 6.1 — Ввод первой книги





Рисунок 6.2 — Ввод второй книги





Рисунок 6.3 — Ввод третьей книги



Рисунок 6.4 — Вывод списка книг



Рисунок 6.5 — Поиск книги по имени автора и названию



Рисунок 6.6 — Поиск книг по названию



Рисунок 6.7 — Поиск книг по имени автора





Рисунок 6.8 — Поиск книг по году издания



Рисунок 6.9 — Поиск книг по номеру УДК





Рисунок 6.10 — Удаление книги



Рисунок 6.11 — Вывод списка книг после удаления одной

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

ЛИТЕРАТУРА

Borland C++ Builder. Освой самостоятельно: Кент Рейсдорф, Кен Хендерсон —М.: Бином, 2001 г. — 700 с.

Павловская Т.А., Щупак Ю.А. С/С++. Программирование на языке высокого уровня. Структурное программирование. Практикум. – СПб: Питер, 2007 – 239с

Интернет-ресурсы:

http://эссе.рф - сборник не проиндексированных рефератов. Поиск по рубрикам и теме. Большинство текстов бесплатные. Магазин готовых работ.