Двунаправленный динамический список

    Дисциплина: Программирование
    Тип работы: Курсовая
    Тема: Двунаправленный динамический список

    Задание
    Реализовать базу данных на основе двунаправленного динамического списка, содержащего фамилию, имя, отчество человека, дату его рождения и знак зодиака по западному
    календарю.
    В программном изделии предусмотреть работу со списком, которая включает в себя:
    Ввод данных;
    Удаление данных из списка;
    Вывод списка на дисплей;
    Сортировку списка по фамилии.
    Написать программное изделие на двух языках программирования:
    Pascal
    Описание алгоритма программы
    со
    структурой данных
    Взаимодействие программы с пользователем должно быть реализовано по следующему алгоритму:
    Выбор из главного меню одной из следующих функций:
    а) Добавить;
    Удалить
    в) П
    росмотреть;
    г) С
    ортировать
    д) Выход.
    После выполнения каждой функции необходимо обеспечить возврат в главное меню и выбор любой другой функции.
    При выборе функции «Выход» работа программы завершается.
    При выборе функции «Добавить», выделяется память для хранения данных, затем пользователю предлагается ввести фамилию, имя, отчество и дату рождения человека, эти данные
    заносятся в память, после чего автоматически определяется знак зодиака по западному календарю и заносится в память.
    При выборе функции «Удалить», проверяется наличие данных в списке. Если список пуст, на дисплей выводится соответствующее сообщение; иначе пользователю предлагается ввести
    фамилию, имя и отчество человека, после чего происходит его поиск в списке. Если данные на
    иначе на дисплей выводится надпись об их отсутствии.
    При выборе функции «Просмотреть», поверяется наличие данных в списке. Если
    иначе выводится таблица, содержащая фамилию, имя, отчество, дату рождения человека и его знак
    зодиака по западному гороскопу.
    При выборе функции «Сортировать», происходит сортировка списка по фамилии. Если в списке встречаются две одинаковые фамилии, тогда сравниваются имена; при совпадении имён
    сравниваются отчества.
    Описание программы
    Для реализации динамического списка в программе применён тип указателей, указывающий на запись ”
    Inform
    ”, содержащую фамилию ”
    ”, имя ”
    name
    ”, отчество ”
    fanem
    ”, день рождения ”
    bethday
    ”, знак зодиака ”
    zodiak
    ” и указатели на следующий ”
    next
    ” и предыдущий ”
    prev
    ” элементы списка.
    С помощью этого типа ”
    Ukazat
    ” описаны переменные: “
    temp
    ” – для хранения указателя на текущий элемент; “
    first
    ” – для хранения указателя на первый элемент в списке; “
    ” – для хранения на последний элемент в списке. Переменная “
    ” используется для выбора процедуры; “
    1”, “
    2”, “
    ” – для вычисления знака зодиака; “
    ” – для проверки условия, при сортировке; “
    ffam
    ”, “
    fname
    ”, “
    ffanem
    ” – для временного хранения фамилии, имени, отчества, при удалении элемента из списка.
    Программа начинает выполняться с присвоения указателю на первый элемент (
    first
    ) значения “
    ”. После этого пользователю предлагается выбрать действие: «1-Добавить», «2-Удалить», «3-Просмотреть», «4-Сортировать», «0-Выход». В зависимости от того, какое действие выберет
    пользователь, начнёт выполняться та или иная процедура, или произойдёт выход из программы. Это реализовано с помощью операции выбора “
    case
    ”.После выполнения некоторой процедуры пользователю вновь предлагается выбрать одно из вышеуказанных действий, пока не будет выбран выход из программы. Это реализовано с помощью
    цикла “
    repeat
    until
    ”.
    Процедура добавления “
    Dobav
    ”.
    Сначала выделяется память под текущий элемент (
    temp
    )), затем в этот элемент записывается фамилия, имя, отчество и дата рождения. По дате рождения вычисляется знак зодиака. Для этого в
    2 записывается число рождения, а в
    1 первые три буквы месяца рождения, затем, путём сравнения этих переменных с числами и частями слов находится соответствующий знак зодиака, и заносится в текущий элемент. После
    ввода информации, проверяется наличие элементов в списке. Если они отсутствуют, то в текущем элементе, указателям на следующий (
    next
    ) и предыдущий (
    prev
    ) элементы присваивается значение “
    ”; а указатель на сам элемент (
    temp
    ) присваивается указателям на первый (
    first
    ) и последний (
    ) элементы в списке. Если список не пустой, то в текущем элементе, указателю на следующий элемент (
    next
    ) присваивается значение “
    ”, а указателю на предыдущий элемент (
    prev
    ) присваивается указатель на последний элемент (
    ) в списке; а указателю на следующий элемент (
    next
    ) последнего элемента в списке и указателю на последний элемент (
    ) присваивается указатель на текущий элемент (
    temp
    После чего процедура добавления завершается.
    Процедура удаления “
    Udal
    ”.
    В этой процедуре сначала проверяется наличие элементов в списке. Если список пуст, то выводится сообщение: «Таблица пуста». Если же список содержит элементы, то пользователю
    предлагается ввести фамилию, имя и отчество удаляемого, записывая их в
    ffam
    fname
    ffanem
    соответственно. После происходит поиск удаляемого элемента в списке. Это реализовано с помощью цикла, который выполняется, пока элемент не найден или не просмотрен весь список.
    Если искомый элемент отсутствует, то выводится сообщение: «Такого нет». Если же искомый элемент найден, то текущий указатель (
    temp
    ) показывает на него, и происходит его удаление.
    Если указатели на первый (
    first
    ) и последний (
    ) элементы не равны, то происходит поиск местонахождения элемента в списке. Если внутри текущего элемента указатель на предыдущий элемент (
    prev
    ) равен
    , тогда указателю на предыдущий элемент (
    prev
    ) внутри следующего за текущим элементом присваивается указатель на предыдущий элемент внутри текущего, а указателю на первый элемент (
    first
    ) в списке присваивается указатель на следующий элемент. Если внутри текущего элемента указатель на следующий элемент (
    next
    ) равен
    , тогда
    указателю на следующий элемент (
    next
    ) внутри предыдущего перед текущим элементом присваивается указатель на следующий элемент внутри текущего, а указателю на последний элемент (
    ) в списке присваивается указатель на предыдущий элемент. Если текущий элемент оказался «внутри» списка, тогда указателю на следующий элемент (
    next
    ) внутри предыдущего перед текущим элементом присваивается указатель на следующий элемент внутри текущего, а указателю на предыдущий элемент (
    prev
    ) внутри следующего за текущим элементом присваивается указатель на предыдущий элемент внутри текущего.
    Если же указатели на первый (
    first
    ) и последний (
    ) элементы равны, то указателю на первый элемент в списке (
    first
    ) присваивается
    После некоторых преобразований внутри списка происходит освобождение памяти текущего элемента (
    dispose
    temp
    )). На этом процедура удаления завершается.
    Процедура просмотра “
    Prosm
    ”.
    Эта процедура выполняет вывод содержимого списка в виде таблицы.
    Сначала на дисплей выводится шапка таблицы, содержащая: «Фамилия Имя Отчество», «Дата рождения» и «Знак зодиака». После вывода шапки проверяется наличие элементов в
    списке.
    Если список содержит элементы, то происходит их построчный вывод. Это реализовано с помощью цикла, который выполняется, ...

    Забрать файл

    Похожие материалы:


ПИШЕМ УНИКАЛЬНЫЕ РАБОТЫ
Заказывайте напрямую у исполнителя!


© 2006-2016 Все права защищены