Разработка программы для создания и работы с двусвязным списком, состоящим из структур. (Структура содержит фамилию и год рождения), страница 4

        LL_PushLast(*list, info);    //добавить новый элемент в конец списка

    }

    puts("\nCompleted\n");

    WaitAnyKey();           //ожидание какой-либо клавиши

}

/*=======================================================================================

* Вывод данных списка на экран

*======================================================================================*/

void OutputList(LL_LinkedList *list)

{

    PersonalData *info = NULL;

    LL_MoveToItem(list, LL_MOVETO_FIRST);

    //заголовок формы

    system("cls");

    puts("*** View list content ***\n\n");

    //-------------------------------------------------------------------------

    if (NULL == list)

    {

        puts("ERROR: wrong entry data");

        WaitAnyKey();

        return;

    }

    //вывод данных

    LL_MoveToItem(list, LL_MOVETO_FIRST);   //переход в начало списка

    do

    {

        info = (PersonalData*)LL_GetData(list);   //получить данные

        if (NULL == info)

        {

            puts("ERROR: Data is empty. You should create list before.");

        }

        else

        {

            printf("%s; %s", info->LastName, asctime(&info->birthDate));

        }

    } while (LL_ERR_OK == LL_MoveToItem(list, LL_MOVETO_NEXT));

    WaitAnyKey();    //ожидание какой-либо клавиши

}

/*=======================================================================================

* Добавление нового элемента в конец списка

*======================================================================================*/

void AddNewItem(LL_LinkedList *list)

{

    PersonalData *info = NULL;

    //заголовок формы

    system("cls");

    puts("*** Add new item at the end of list ***\n\n");

    if (NULL == list)

    {

        puts("ERROR: wrong entry data");

        WaitAnyKey();

        return;

    }

    info = (PersonalData*)malloc(sizeof(PersonalData));  //выделение памяти

    if (InputPersonalData(info))                         //ввод данных пользователем

    {

        if (LL_ERR_OK == LL_PushLast(list, info))

        {

            puts("\nCompleted\n");

        }

        else

        {

            puts("ERROR: cannot to add new data. It's possible you should create list before\n or you have entered wrong values.\n");

        }

    }

    else

    {

        puts("ERROR: cannot to add new data. You have entered incorect values.\n");

    }

    WaitAnyKey();     //ожидание какой-либо клавиши

}

/*=======================================================================================

*  Добавление нового элемента в соответствии с сортировкой списка

*======================================================================================*/

void AddNewItemInSortingOrder(LL_LinkedList *list, LL_SortOreder order)

{

    PersonalData *info = NULL;

    // заголовок формы

    system("cls");

    puts("*** Add new item according to sorting order of list ***\n\n");

    if (NULL == list)

    {

        puts("ERROR: wrong entry data");

        WaitAnyKey();

        return;

    }

    //если список не отсортирован вернуть ошибку. Сначала список должен быть отсортирован

    if (!(LL_SORT_INCREASE == order || LL_SORT_DECREASE == order))

    {

        puts("ERROR: cannot add new item according to sorting order.\nYou should sort list (command 4) before");

        WaitAnyKey();

        return;

    }

    info = (PersonalData*)malloc(sizeof(PersonalData));  //выделение памяти

    if (InputPersonalData(info))                         //ввод данных пользователем

    {

        if (LL_ERR_OK == LL_PushInSortOrder(list, order, info))

        {

            puts("\nCompleted\n");

        }

        else

        {

            puts("ERROR: cannot to add new data. It's possible you should create list before\n or you have entered wrong values.\n");

        }

    }

    else

    {

        puts("ERROR: cannot to add new data. You have entered incorect values.\n");

    }

    WaitAnyKey();      //ожидание какой-либо клавиши

}

/*=======================================================================================

* Сортировать лист в порядке возрастания или убывания (по выбору пользователя)

*======================================================================================*/

void SortList(LL_LinkedList *list, LL_SortOreder *order)

{

    LL_Error err = LL_ERR_OK;

    //заголовок формы

    system("cls");

    puts("*** Sort the list ***\n\n");

    if (NULL == list || NULL == order)

    {

        *order = LL_SORT_NOTSORTED;

        puts("ERROR: wrong entry data");

        WaitAnyKey();

    }

    //выбор пользователем порядка сортировки (1 – по возрастанию; 2 – по убыванию)

    printf("Select sorting order (1 - increase; 2 - decrease): ");

    scanf("%d", order);

    //проверка выбранного порядка (возвратить ошибку, если введены некорректные данные)

    if (!(LL_SORT_INCREASE == *order || LL_SORT_DECREASE == *order))

    {

        *order = LL_SORT_NOTSORTED;

        puts("ERROR: wrong value. You should select between the increase (1) and the decrease (2).");

        WaitAnyKey();

        return;

    }

    //сортировать лист

    if (LL_ERR_OK == (err = LL_SortList(list, *order)))

    {

        puts("\nCompleted\n");

    }

    else

    {

        printf("ERROR: LL_SortList returns error %d", err);

    }

    WaitAnyKey();     //ожидание какой-либо клавиши

    return;

}

/*=======================================================================================

* Введение пользователем данных: фамилия и дата рождения

*=====================================================================================*/

boolean InputPersonalData(PersonalData *info)

{

    int      szBuf = 32;