- ei – переменная типа int, для обнаружения выполненных операций над списком в функции addkorr();
- d – 20 переменных типа char, для временного хранения при сортировки списка.
3.2 Функции программы
3.2.1 Главная функция программы
Главной функцией программы является main(). В ней реализовано меню.
Для создания меню, используются стандартные функции и операторы:
- while;
- switch;
- case;
- break;
- free.
В main() также описаны прототипы функций:
void create(void); – Прототип функции создать;
void list(spis *) – Прототип функции просмотр;
void add(void) – Прототип функции добавить;
void sortt(void) – Прототип функции сортировка;
void addkorr(void) – Прототип функции корректировки.
spis *head,*tail – указатели на начало и конец списка.
с – переменная типа char, для анализа действий пользователя в меню.
3.2.2 Функция создания списка
void create (void) – функция для ввода списка в структуру данных.
spis *p,*head – указатели на структуру spis. Несет полную информацию о списке.
malloc() – выделение памяти для записи.
getch() – ожидание нажатия клавиши с клавиатуры.
3.2.3 Функция просмотра списка
void list (void) – функция просмотра введенного списка.
spis *p – указатель на структуру spis. Несет полную информацию о списке.
3.2.4 Функция добавления новой структуры в конец списка
void add (void) – функция для добавления в список новой структуры.
spis *p, *pn – указатели на структуру spis. Несет полную информацию о списке.
3.2.5 Функция корректировки
void addback(void) – функция для редактирования и сортировки списка.
spis *p, *pn – указатели на структуру spis. Несет полную информацию о списке.
sort() – функция сортировки
3.2.6. Функция сортировки данных
void sort() – функция сортировки
spis *p, *pn – указатели на структуру spis. Несет полную информацию о списке.
strcpy() – функция копирования нуль-терминированной строки.
3.3 Работа программы
После запуска программы, на экране отображается меню пользователя.
Рис 1 – главное окно программы
Варианты выбора от 1 до 5. Любой неверный ввод возвращает меню без предварительного предупреждения пользователя.
Создание нового списка начинается сразу после нажатия клавиши 1:
Пользователю предлагается вводить издания. Для выхода в конце ввода используется клавиша <esc>.
Рис 2 - функция добавления записей
Функция добавления новой структуры в конец (пункт меню 3) корректировки, не отличается от функции создания списка по выводу сообщений на экран.
Функция просмотра списка вызывается клавишей 2.
Рис 3 – функция просмотра списка
4. Исходный модуль программы
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
struct spis //Описываем структуру
{
char name[20];
int type;
int cena;
struct spis *prev; //Ссылка на предыдущую структуру
struct spis *next; //Ссылка на следующую структуру
};
void create(void); //Описание функций
void list(spis *);
void add(void);
void sortt(void);
void addkorr(void);
struct spis *head,*tail;
main() //Главная функция
{
char c; //Переменная выбора пункта меню
while (1)
{
clrscr();
puts(" 1 - Создать список");
puts(" 2 - Просмотреть список");
puts(" 3 - Добавить в конец списка новую структуру");
puts(" 4 - Коррекция списка с добавлением новой структуры");
puts(" 5 - Выход из программы");
c=getch();
switch(c)
{
case '1':create();break;
case '2':list(head);break;
case '3':add();break;
case '4':addkorr();break;
case '5':return 0;
default : puts("Ошибка ввода. Используйте клавиши 1-5");
}
}
free(head); // Освобождение памяти
}
void create(void) //Функция создания списка
{
clrscr();
//Очистка экрана, описание указателей на структуру
spis *p,*pred;
pred=NULL;
do //цикл создания списка
{
p=(spis *)malloc(sizeof(spis));
//выделение памяти под список, ввод данных
printf("\n\nВведите название издания: "); scanf("%s",&p->name);
printf("Введите 0, если это журнал и 1, если газета: "); scanf("%d",&p->type);
printf("Укажите цену издания: "); scanf("%d",&p->cena);
p->prev=pred; //установка связей
if (pred != NULL)
pred->next=p;
else
head=p;
pred=p;
printf("\n Для выхода нажмите <esc>");
}while (getch()!=27);
tail=p; //ссылка на конец списка
tail->next=NULL;
}
void list(spis *p) // Просмотр списка
{
clrscr();
printf(" -------------------------------------------------------\n");
printf("| Название издания | Журнал=0 Газета=1 | Цена издания |\n");
printf(" -------------------------------------------------------\n");
p=head;
while (p != NULL) //вывод списка, пока p!=NULL
{
printf("\n%20s %8d %18d ",p->name,p->type,p->cena);
p=p->next;
}
printf("\n\nНажмите любую клавишу для выхода в главное меню...");
getch();
}
void add(void) //Добавление нового списка в конец структуры
{
spis *p,*pn; //указатели на структуру, очистка экрана
clrscr();
pn=(spis *)malloc(sizeof(spis)); //выделение памяти для списка, ввод данных
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.