printf("Введите название издания: "); scanf("%s",&pn->name);
printf("Введите 0, если это журнал и 1, если газета: "); scanf("%d",&pn->type);
printf("Укажите цену издания: "); scanf("%d",&pn->cena);
p=tail; //переход в конец списка
pn->prev=tail; //установка связей
pn->next=NULL;
p->next=pn;
tail=pn; //новый конец списка
}
void sortt(void) //Сортировка списка
{
spis *p,*pn; //указатели на структуру
int j,x,y; //вспомогательные переменные
char d[20];
do
{
j=1;
p=head; //переходим в начало списка
pn=p;
p=p->next;
while (p!=NULL) //пока p!=NULL
{
if (strcmp(pn->name,p->name)>0) //Если pn>p, сортировка
{
j=0;
strcpy(d,pn->name); //d=p->name нуль-терминированной строки
x=pn->type;
y=pn->cena;
strcpy(pn->name,p->name); //pn=p->name нуль-терминированной строки
pn->type=p->type; //установка связей
pn->cena=p->cena;
strcpy( p->name,d);
p->type=x;
p->cena=y;
}
pn=p; //переход к следующему элементу списка
p=p->next;
}
}while (j==0);
}
void addkorr(void) //Коррекция списка. Вставка новой структуры в список по алфавиту
{
spis *p,*pn; //указатели на структуру
clrscr();
sortt(); //вызов сортировки списка
pn=(spis *)malloc(sizeof(spis)); //выделение памяти для нового списка, ввод данных
printf("Введите название издания: "); scanf("%s",&pn->name);
printf("Введите 0, если это журнал и 1, если газета: "); scanf("%d",&pn->type);
printf("Укажите цену издания: "); scanf("%d",&pn->cena);
int j, ei; //вспомогательные переменные
j=0; ei=0; //установка нулевых значений.
p=head;
do
{
if (strcmp(pn->name,p->name)<=0 && p->prev==NULL && ei==0)
//Если pn<p, это начало списка и ei=0
{
j=1; //Выход с цикла
p->prev=pn;
pn->prev=NULL;
pn->next=p;
head=pn;
ei=1;
}
if (strcmp(pn->name,p->name)<=0 && ei==0)
//Если pn<p, это не начало списка и ei=0
{
j=1; //Выход с цикла
pn->prev=NULL;
pn->next=NULL;
p->prev->next=pn;
pn->prev=p->prev;
pn->next=p;
p->prev=pn;
ei=1;
}
if (p->next==NULL && ei==0)
{
j=1; //Выход с цикла
pn->prev=NULL;
pn->next=NULL;
p->next=pn;
pn->prev=p;
ei=1;
}
p=p->next;
}while (j==0);
printf("\n\nНовый список добавлен. Нажмите любую клавишу для продолжения.");
getch();
}
5. РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ ВЫПОЛНЕНИЯ ЗАДАНИЯ
Для тестирования программы, будет создан список из следующих записей:
- Газета «Pravda», стоимостью 10 руб;
- Журнал «Murzilka», стоимостью 20 руб;
- Газета «Mos.komsomolec», стоимостью 12 руб;
- Журнал «IT-Spec», стоимостью 100 руб;
- Журнал «ComputerBILD», стоимостью 90 руб;
- Газета «Kurs», стоимостью 6 руб.
Рис 4 – Меню программы
Рис
5 – Ввод данных в список
Рис 6 – Просмотр списка
Рис 7 – добавить новую запись в конец списка
Рис 8 – Просмотр не сортированного списка
Рис 9 – Корректировка, добавление нового издания
Рис 10. Посмотреть список
На рисунках видно, что при использовании пункта 4 – Корректировка, новое издание вставляется в список по алфавиту. При каждом использовании пункта 4, список будет предварительно сортироваться.
Заключение
Выполнив курсовую работу, я изучил динамические структуры, которые представляют собой удобное хранилище данных, количество которых может быть заранее неизвестно.
Для меня было удобным использование двусвязных списков в программе, так как исходного кода намного меньше, чем при реализации этой же задачи с использованием простых массивов данных.
Однако, следует отметить, что понять работу динамических списков на первый взгляд очень сложно, а также достаточно сложны алгоритмы работы с структурами. Самым важным моментом при работе с динамическими структурами, являются указатели. Потеряв или ошибочно сделав связь, можно потерять часть списка.
Литература
1. Пахомов Б.И. C/C++ и Borland С++ Builder для начинающих. – СПб.: БХВ-Петергбург, 2007.
2. Уэйт М., Прата С., Мартин Д. Язык Си. Руководство для начинающих / Пер. с англ. – М.: Мир, 1988. – 512 с.
3. Подбельский В. В. Практикум по программированию на языке Си. – М.:ЗАО Издательство БИНОМ, 2004, 576с.
4. http://ru.wikipedia.org/ - электронная энциклопедия
5. http://devoid.com.ua/functions-about/c-functions.html - все для программиста, описание функций.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.