2.8 Приравнять информационные поля элементов первого списка к информационным полям второго.
2.9 Обнулить поле количества книг.
2.10 Считать значение s.
3. Вернуть указатель на начало первого списка.
Таблица 3.3.1-Локальные идентификаторы функции vvodSp
Идентификатор | Тип | Назначение |
s | char | предназначена для ответа на вопрос: продолжать ли список |
cur, cur2 | el* | указатель на текущие элементы |
tail, tail2 | el* | указатель на хвосты списка |
top | el* | указатель на начало первого списка |
top2 | el* | указатель на начало второго списка |
3.3.2 Описание работы подпрограммы loadIT
Подпрограмма предназначена для считывания данных первого и второго списков из файлов.
Входные параметры функции – указатель на указатель на начало первого и второго списков.
1. Обнулить ссылки на хвосты и вершины обоих списков.
2. Открыть файлы "Base.txt" и "Out.txt" для чтения.
3. В цикле "пока не конец файла" динамически выделять память под указатель на текущий элемент.
3.1 Обнулить указатель на элемент, следующий за текущим.
3.2 Приравнять указатель на конец списка к указателю на предшествующий.
3.3 Если указатель на начало списка пустой, то присвоить ему адрес текущего элемента, текущий элемент становится началом списка.
3.4 Иначе присвоить адрес текущего элемента указателю на следующий за предыдущим.
3.5 Указатель на текущий элемент приравнять к последнему.
3.6 Произвести считывание списков из файлов.
4. Закрыть все файлы.
Таблица 3.3.2-Локальные идентификаторы функции loadIT
Идентификатор | Тип | Назначение |
cur, cur2 | el* | указатели на текущие элементы |
pr | el* | указатель на предыдущий элемент списка |
tail, tail2 | el* | указатель на хвост первого и второго списков |
3.3.3 Описание работы подпрограммы sort
Подпрограмма предназначена для сортировки списков по фамилии автора. Обращение к функции происходит и при добавлении нового элемента в список. Входной параметр функции – указатель на начало первого списка.
1. В цикле "пока не конец списка перейти к последующему элементу".
1.2 Если указатель на следующий элемент поля имени автора меньше текущего, то записать в дополнительную переменную dop адрес информационного поля текущего элемента.
1.3 Присвоить полю текущего элемента адрес поля следующего элемента, то есть переписать в текущий элемент данные последующего.
1.4 Присвоить указателю на следующий элемент поля имени автора адрес вспомогательной переменной.
Таблица 3.3.3-Локальные идентификаторы функции sort
Идентификатор | Тип | Назначение |
k | int | результат обмена (есть/нет) |
cur | el* | указатель на текущий элемент |
dop | book | вспомогательная переменная |
3.3.4 Описание работы подпрограммы vivodSp
Подпрограмма обеспечивает вывод на печать текущего списка. При обращении к ней может вывести содержимое первого или второго списка. Входной параметр – указатель на текущий элемент списка.
В цикле "пока не конец списка", если информационное поле количества книг больше нуля, то распечатать текущий элемент и перейти к следующему.
3.3.5 Описание работы подпрограммы dobEl
Подпрограмма предназначена для добавления нового элемента в списки. Входные параметры – указатели на текущий элемент первого и второго списков.
1. В циклах "пока указатель на последующий элемент первого и второго списков не пустой"
1.2 Выделить динамически память под добавляемые элементы.
1.3 Считать информационные поля добавляемого элемента.
1.4 Приравнять информационные поля элементов первого списка к информационным полям второго.
1.5 Обнулить поле количества книг.
1.6 Для обоих списков обнулить указатель на следующий за добавляемым элемент.
1.7 Приравнять добавленный элемент в первом и втором списках к указателю на последний элемент.
1.8 Присвоить указателю на предыдущий элемент значение последнего элемента.
1.9 Присвоить адрес добавленного элемента последнему.
Таблица 3.3.4-Локальные идентификаторы функции dobEl
Идентификатор | Тип | Назначение |
x, x2 | el | новый элемент |
3.3.6 Описание работы подпрограммы delel
Подпрограмма предназначена для удаления всех записей с введённой фамилией автора. Входные параметры – указатель на указатель на начало первого и второго списков.
1. В цикле "пока не конец файла":
1.1 Если информационное поле автора у элемента совпадает с введённым именем, то рассматриваются три случая.
1.1.1 Если удаляемый элемент стоит в начале списка, то присвоить указателю на начало списка указатель на следующий за ним элемент списка.
1.1.2 Обнулить ссылку на предыдущий элемент следующего элемента, то есть указатель новой вершины на предыдущий элемент.
1.1.3 Проделать аналогичные действия над вторым списком.
1.2.1 Если следующий элемент за текущим равен нулю, то удаляемый элемент находится в конце списка.
1.2.2 Для обоих списков обнулить ссылку предыдущего элемента на следующий.
1.3.1 Если удаляемый элемент находится в середине списка, то присвоить указатель на предыдущий элемент ссылке на предыдущий элемент у следующего элемента.
1.3.2 Приравнять ссылку на следующий элемент к ссылке на следующий элемент у предыдущего элемента.
Таблица 3.3.5-Локальные идентификаторы функции delel
Идентификатор | Тип | Назначение |
cur, cur2 | el* | указатели на текущий элемент списка |
n | int | результат поиска |
isk | char | строка с фамилией автора |
3.3.7 Описание работы подпрограммы vidacha
Подпрограмма предназначена для выдачи книги на руки, то есть для уменьшения количества книг в первом списке и увеличения во втором.
Входные параметры функции – указатели на текущие элементы первого и второго списков.
1. Считать фамилию автора и название книги.
2. В цикле "пока не конец списка"
2.1 Если фамилия автора и название книги совпадает с введёнными и количество книг больше 0, то:
2.1.1 Уменьшить на единицу значение количества в информационном поле первого списка
2.1.2 Увеличить на единицу значение количества в поле второго списка
3. Перейти к следующему элементу
Таблица 3.3.6-Локальные идентификаторы функцииvidacha
Идентификатор | Тип | Назначение |
iskA | char | строка с некоторым автором |
iskN | char | строка с некоторой книгой |
isk | char | записывает результат поиска |
n | int | записывает результат поиска |
3.3.8 Описание работы подпрограммы vozvrat
Подпрограмма обратная функции vidacha. Возвращает указанную книгу автора в библиотеку, то есть уменьшает количество книг во втором списке и увеличения в первом. Входные параметры функции – указатели на текущие элементы первого и второго списков.
1. Считать фамилию автора и название книги.
2. В цикле "пока не конец списка"
2.1 Если фамилия автора и название книги совпадает с введёнными и количество книг больше 0, то:
2.1.1 Уменьшить на единицу значение количества в поле второго списка.
2.1.2 Увеличить на единицу значение количества в поле первого списка.
3. Перейти к следующему элементу.
Таблица 3.3.7-Локальные идентификаторы функцииvozvrat
Идентификатор | Тип | Назначение |
iskA | char | строка с некоторым автором |
iskN | char | строка с некоторой книгой |
isk | char | записывает результат поиска |
n | int | записывает результат поиска |
3.3.9 Описание работы подпрограммы saveIT
Подпрограмма предназначена для записи данных первого и второго списков в файлы. Входные параметры – указатели на текущий элемент первого и второго списков.
1. Открыть файлы для чтения.
2. В цикле "пока не конец списка" произвести запись данных текущего элемента в файл для обоих списков.
3. Перейти к следующему элементу списка.
Таблица 3.3.8-Локальные идентификаторы функцииsaveIT
Идентификатор | Тип | Назначение |
zap, zap2 | book | вспомогательная переменная |
f1, f2 | FILE | переменная связанная с файлами |
3.3.10 Описание работы основной программы
В основной программе происходит обращение к пользовательским функциям. Также основная программа обеспечивает вывод главного меню.
4. Инструкция по пользованию программой
При запуске программы на экране появляется графический интерфейс (главное меню программы). У пользователя появляется выбор в формировании списка: либо загрузить список авторов книг из файла (для чего выбирается пункт меню "2" – "Загрузить списки из файлов"), либо самостоятельно ввести его с клавиатуры (для чего выбирается пункт "1" главного меню). В первом случае должен иметься предварительный надел (заранее составленная база данных, записанная в файл). Во втором случае пользователю будет предложено ввести фамилию и инициалы автора книги, её название, год издания и количество в прокате. При завершении составления одной записи появляется строка, в которой пользователю предлагается заполнить ещё один элемент списка или выйти в главное меню. Для этого пользователь должен ввести соответственно слова "yes" или "no".
После выполнения операций создания списка пользователь может приступить к действиям над составленным списком.
Если пользователь выберет пункт "3" главного меню, то произойдёт сортировка базы данных по именам авторов в алфавитном порядке. В этом можно убедиться при выборе пункта "4", после чего на экран выводится содержимое всей базы данных.