Курсовая работа: Обработка динамических структур
n++;
break;
}
cur=cur->next;
cur2=cur2->next;
}
if(n==0) printf("К
сожалению, ни одной такой книги не найдено!\n");
}
getch();
}
//---------------------------------------------------------------------\\
void sort(el
*top) //сортировка
{
int k=1; //вспомогательный элемент, показывает были ли
перестановки или нет
el* cur; //указатель на текущий элемент
book dop; //переменная для временного хранения данных
(используется при сортировке)
clrscr();
if(top==NULL) printf("Перед тем, как сортировать
список, необходимо его создать!");
else
{
while(k!=0) //пока не будет перестановок
{
k=0; //перстановок нет
for(cur=top;cur->next!=NULL;cur=cur->next)
//пока указатель на следующий элемент у текущего не равен NULL
if(strcmp(cur->inf.avt,cur->next->inf.avt)>0)
//если следующий элемент меньше, чем текущий
{
dop=cur->inf; //занесение
в буфер данных текущего элемента
cur->inf=cur->next->inf; //переписывание в текущий данные следующего
cur->next->inf=dop; //переписывание в следующий данные
из буфера
k=1; //перестановки есть
}
}
}
}
//---------------------------------------------------------------------\\
void saveIT(el *cur,el *cur2) //сохранение
в файл
{
FILE *f1,*f2; //файлы
f1=fopen("Base.txt","wb"); //файл для первого списка
f2=fopen("Out.txt","wb"); //для второго
if(f1==NULL||f2==NULL) printf("Чтоё-то
не грузится: глюк)");
else
{
while(cur!=NULL) //пока
не конец списка
{
fwrite(&cur->inf,sizeof(el),1,f1); //запись
данных текущего элемента в файл
fwrite(&cur2->inf,sizeof(el),1,f2);
//то же
cur=cur->next; //переход
к следующему элементу
cur2=cur2->next;
//то же
}
printf("Списки сохранены
успешно!");
fcloseall(); //закрытие файлов
}
getch();
}
//---------------------------------------------------------------------\\
void loadIT(el **top,el **top2)
//чтение файлов
{
el
*cur,*pr,*tail,*tail2,*cur2; //указатели
FILE *f1,*f2; //файлы
clrscr();
*top2=*top=tail=tail2=NULL; //обнуление
ссылок на хвост и вершину
f1=fopen("Base.txt","rb"); //открытие файла Base.txt
f2=fopen("Out.txt","rb"); //открытие файла Out.txt
if(f1==NULL||f2==NULL) printf("Чтоё-то
не грузится: глюк)");//если файлов нет
else
{
while(!feof(f1)) //пока
не конец файла
{
cur=(el*)malloc(sizeof(el)); //выделение памяти под новый элемент (далее текущий)
cur->next=NULL; //обнуление
указателя на следующий элемент текущего элемента
cur->pred=tail;
//присваивание указателя на предыдущий элемент текущего элемента хвосту списка
if((*top)==NULL)
(*top)=cur; //если указатель на начало списка пуст, то
указателем на начало списка становится текущий элемент
else tail->next=cur; //если нет, то указателем на хвост
списка становится текущий элемент
tail=cur; //указатель на хвост становится приравнивается
текущему элементу
cur2=(el*)malloc(sizeof(el)); //аналогично для второго элемента
cur2->next=NULL;
cur2->pred=tail2;
if((*top2)==NULL)
(*top2)=cur2;
else
tail2->next=cur2;
tail2=cur2;
fread(&cur->inf,sizeof(el),1,f1);
//считывание с файла
fread(&cur2->inf,sizeof(el),1,f2);
}
fcloseall(); //закрываем файлы
printf("Списки успешно загружены из
файлов!");
}
getch();
}
//---------------------------------------------------------------------\\
void main() //основная программа
{
int n=0;
el
*top=NULL,*top2=NULL;
while(n!=11)
{
clrscr();
printf("Введите номер пункта для
выполнения:\n");
printf("1.Заполнить список\n");
printf("2.Загрузить списки из файлов\n");
printf("3.Отсортировать текущий список\n");
printf("4.Вывести текущий список\n");
printf("5.Вывести текущий список
выданных на руки книг\n");
printf("6.Добавить новый элемент\n");
printf("7.Удалить из списка книги
заданного автора\n");
printf("8.Выдать книгу на руки\n");
printf("9.Вернуть книгу в библиотеку\n");
printf("10.Сохранить списки в файл\n");
printf("11.Выход из программы\n");
printf("Ваш
выбор:\n");
scanf("%d",&n);
while(n>11||n<1)
{
printf("Такого пункта нет! Введите
повторно:\n");
scanf("%d",&n);
}
if(n==1)
top=vvodSp(&top2);
else if(n==2)
loadIT(&top,&top2);
else if(n==3)
{sort(top); sort(top2);}
else if(n==4)
vivodSp(top);
else if(n==5)
vivodSp(top2);
else if(n==6)
{dobEl(top,top2); sort(top); sort(top2);}
else if(n==7)
delel(&top,&top2);
else if(n==8)
vidacha(top,top2);
else if(n==9)
vozvrat(top,top2);
else if(n==10)
saveIT(top,top2);
}
}
Приложение Б
Результаты работы
программы


|