Организация и практическое применение двусвязных линейных списков. Вариант № 5, страница 2

Возможность удаления выбранных записей из списка становится доступной пользователю лишь после создания нового списка или загрузки ранее сохраненного списка из файла. Переход к функции добавления записей в существующий список осуществляется из главного меню путем нажатия на клавишу <4>. После чего пользователю предлагается ввести наименование товара, который должен быть исключен из списка. (Рис. 1.5)

Если наименование товара заданное критерием поиска присутствует в списке, происходит удаление всей структуры содержащей информацию о данном товаре.  

Рис.1.5 Удаление заданного товара из списка

5. Сохранение в файл. Возможность сохранения списка в файл становится доступной пользователю лишь после создания нового списка или загрузки ранее сохраненного списка из файла.

Переход к функции сохранения  существующего списка осуществляется из главного меню путем нажатия на клавишу <5>. Сохранение происходит в бинарный файл data.txt, который создается  в каталоге, откуда была запущена программа. После вызова функции сохранения из главного меню программы, происходит сохранение в файл. Если сохранение удалось осуществить на экран под пунктами главного меню выводится сообщение «Список успешно сохранен!». (Рис. 1.6).

Предусмотрена также возможность неудачной записи файла. В этом случае выводится сообщение «Ошибка! Не удалось создать/прочитать файл». Следует учитывать то, что файл data.txt записывается каждый раз «поверх» существующего. Возможность задания альтернативного имени файла не предусмотрена.

Рис.1.6 Сохранение в файл

6. Загрузка из файла. Возможность загрузки списка из файла доступна пользователю сразу после запуска программы и вывод на экран пунктов меню. Переход к функции загрузки  ранее сохраненного в файле списка осуществляется из главного меню путем нажатия на клавишу <6>. Загрузка происходит из файла data.txt, который программа ищет в каталоге, из которого она была запущена.

В случае успешной загрузки списка из файла под пунктами меню выводится сообщение «Список успешно загружен!». (Рис. 1.7).

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

Рис. 1.7 Загрузка списка из файла

7. Завершение работы программы. Возможность завершения программы из самой программы осуществима лишь из главного меню путем нажатия на клавишу <0>. Для выхода из программы во время выполнения операций с списком сначала необходимо завершить выполняемую операцию (например заполнить все поля новой записи).

1.2. Механизмы работы основных функций программы.

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

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

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

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

Рассмотрим механизмы работы программы.

Выполнение программы начинается с создания структуры записи item состоящей из трех «полей»: наименование товара – name, массив символов из 20 элементов, цена товара – prc, переменная типа integer, количество товара – col, переменная типа integer.

Помимо этого для организации двусвязного списка к структуре добавлены указатели на предыдущий и последующий элемент списка обозначенные как prev (предыдущий) и next (следующий).

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

Пункты меню, выведенные на экран представляют собой текстовые строки, информирующие пользователя о присвоенных клавишам 0-6 функциях.

При нажатии на соответствующую клавишу осуществляется вызов функции.

Функция создания нового списка (build) – одна из основных функций программы, позволяющая создать и заполнить двусвязный список произвольным количеством записей. Для удобства заполнения списка применен цикл DO…WHILE, в тело которого заключены операторы, осуществляющие вывод на экран наименований «полей» текущей заполняемой структуры и считывание введенных пользователем значений. Цикл повторяется до тех пор пока пользователь не подтвердит завершение работы в режиме создания списка нажатием клавиши <Esc> , после чего функция создания списка завершает свою работу и на экран вновь выводится главное меню программы.

Рассмотрим исходный код функции.

void build(void)

{

  item *p,  *pr;

  pr = NULL;

  do

  {

    p = (item*)malloc(sizeof(item));

    clrscr();

    printf("\nСоздание нового списка\n---------------------------------------------\n");

    printf("Наименование товара : ");

    scanf("%s", &p->name);

    printf("\nЦена за ед. : ");

    scanf("%d", &p->prc);

    printf("\nКоличество: ");

    scanf("%d", &p->col);

    p->prev = pr;

    if (pr != NULL)

      pr->next = p;

    else

      head = p;

    pr = p;

    printf("\n---------------------------------------------\n\nЗакончить ввод <esc>");

  }

  while (getch() != 27);

  tail = p;

  tail->next = NULL;

}

//Заголовок функции

//Инициализация переменных

//Создание нового списка

//Выделение памяти

//Вывод названия операции

//Заполнение элементов новой записи

//name- наименование товара

//prc – цена товара

//col - количество

//Связывание новой записи с предыдущей и последующей.

//Вывод сообщения о завершении

//Выполнение цикла до тех пор пока не будет нажата клавиша <Esc>