рефераты рефераты
Главная страница > Курсовая работа: Обработка динамических структур  
Курсовая работа: Обработка динамических структур
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Курсовая работа: Обработка динамических структур

tail=cur; //указатель на хвост приравнивается текущему элементу

cur2=(el*)malloc(sizeof(el)); //выделяется память под новый элемент второго списка, выполняются те же действия

cur2->next=NULL;

cur2->pred=tail2;

if((*top2)==NULL) (*top2)=cur2; // *top2 это указатель на указатель

else tail2->next=cur2;

tail2=cur2;

printf("Введите фамилию и инициалы автора:\n"); //ввод информационных полей

scanf("%s",cur->inf.avt);

printf("Введите название книги:\n");

scanf("%s",cur->inf.nazv);

printf("Введите год издания книги:\n");

scanf("%d",&cur->inf.god);

while(cur->inf.god<0)

{

printf("Год издания не может быть отрицательным числом! Введите повторно!\n"); //проверяется, положителен ли год

scanf("%d",&cur->inf.god); //повторный ввод

}

printf("Введите количество экземпляров книги:\n"); //аналогичное с количеством

scanf("%d",&cur->inf.kol);

while(cur->inf.kol<0)

{

printf("Количество книг не может быть отрицательным числом! Введите повторно!\n");

scanf("%d",&cur->inf.kol);

}

cur2->inf=cur->inf; //копировние информационных полей элемента первого списка в элемент второго списка

cur2->inf.kol=0; //количество выданных книг в начале равно 0

printf("Введете еще одну запись?(для выхода напишите no; для продолжения-yes)\n");

scanf("%s",s);

while(strcmp(strlwr(s),"no")!=0&&strcmp(strlwr(s),"yes")!=0) //пока не введён правильный вариант

{

printf("Вы неверно ввели свой выбор, введите, пожалуйста, его еще раз\n");

scanf("%s",s); //повторный ввод

}

}

return top; //возвращение указателя на начало первого списка

}

//-----------------------------------------------------\\

void vivodSp(el *cur) //вывод списка

{

clrscr();

printf("Текущий список:\n");

if(cur==NULL) printf("Перед тем, как выводить список, необходимо его создать!");

else

{

printf("Фамилия автора\tНазвание книги\tГод издания\tКоличество экземпляров\n");

while(cur!=NULL) //печать списка пока не достигнут конец списка, если количество книг больше нуля (нужно для второго списка)

{

if(cur->inf.kol>0) printf(" %s\t\t\t%s\t %d\t\t\t %d\n",cur->inf.avt,cur->inf.nazv,cur->inf.god,cur->inf.kol);

cur=cur->next; //переход к следующему элементу

}

}

getch();

}

//--------------------------------------------------------------\\

void vidacha(el *cur,el *cur2)

{

char iskA[10],iskN[10];

int n=0; //результат поиска

clrscr();

if(cur==NULL) printf("Перед тем, как производить выдачу книг, необходимо создать список!");

else

{

printf("Введите интересующего Вас автора:\n"); //ввод искомого автора и книги

scanf("%s",iskA);

printf("Введите интересующую Вас книгу:\n");

scanf("%s",iskN);

while(cur!=NULL) //пока не конец списка

{

if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur->inf.kol>0) //если элемент содержит сведения о нужной книге и есть свободные в наличии

{

cur->inf.kol--; //уменьшаем количество в первом списке

cur2->inf.kol++; //и увеличиваем во втором

n++; //поиск успешен

printf("Книга выдана на руки!");

break; //конец поиска

}

else if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur->inf.kol==0) //если свободных нет

{

printf("Все книги находятся на руках!");

n++; //поиск успешен

break; //конец поиска

}

cur=cur->next; //переход к следующем элементу

}

if(n==0) printf("Такой книги вообще нет!");

}

getch();

}

//---------------------------------------------------------------------\\

void dobEl(el *cur, el *cur2) //добавление нового элемента

{el *x,*x2;

clrscr();

if(cur==NULL) printf("Перед тем, как добавлять элементы в список, необходимо его создать!");

else

{

while(cur->next!=NULL) cur=cur->next; //поиск конца списка

while(cur2->next!=NULL) cur2=cur2->next; //аналогично со вторым

x=(el*)malloc(sizeof(el)); //выделение памяти под новый элемент

x2=(el*)malloc(sizeof(el)); //аналогичный действия для второго списка

printf("Введите данные на новый элемент:\n"); //ввод информационных полей

printf("Введите фамилию и инициалы автора:\n");

scanf("%s",x->inf.avt);

printf("Введите название книги:\n");

scanf("%s",x->inf.nazv);

printf("Введите год издания книги:\n");

scanf("%d",&x->inf.god);

while(x->inf.god<0)

{

printf("Год издания не может быть отрицательным числом! Введите повторно!\n");

scanf("%d",&x->inf.god);

}

printf("Введите количество экземпляров книги:\n");

scanf("%d",&x->inf.kol);

while(x->inf.kol<0)

{

printf("Количество книг не может быть отрицательным числом! Введите повторно!\n");

scanf("%d",&x->inf.kol);

}

x2->inf=x->inf; //копирование информационных полей

x2->inf.kol=0; //в начале количество выданных книг-0

printf("Новый элемент добавлен!\n");

x->next=NULL; //обнуление указателя на следующий элемент добавляемого элемента

cur->next=x; //последний (пока что последний)элемент списка указывает на следующий элемент (добавляемый)

x->pred=cur; //указатель на предыдущий элемент нового элемента равен последнему

cur=x; //теперь добавленный элемент-последний

x2->next=NULL; //аналогично для второго списка

cur2->next=x2;

x2->pred=cur2;

cur2=x2;

}

}

//---------------------------------------------------------------------\\

void delel(el **top,el **top2) //удаление элементов

{

el *cur=*top,*cur2=*top2; //текущие указатели списков равны указателям на вершины списков

int n=0; //результат поиска

char isk[20]; //фамилия искомого автора

clrscr();

if(cur==NULL) printf("Перед тем, как удалять элементы из списка, создайте его!\n");

else

{

printf("Введите фамилию автора, книги которого должны быть удалены:\n");

scanf("%s",isk); //ввод фамилии искомого автора(он же удаляемый)

while(cur!=NULL) //пока не конец списка

{

if(strcmp(cur->inf.avt,isk)==0) //если фамилия автора у элемента совпадает с введенной

{

n++; //поиск успешен

if(cur==*top) //если удаляемый элемент-вершина

{

*top=(*top)->next; //вершиной становится следующий элемент

cur->next->pred=NULL;и //обнуление указателя новой вершины на предыдущий элемент

free(cur); //освобождение памяти под старую вершину

*top2=(*top2)->next; //по аналогии для второго

cur2->next->pred=NULL;

free(cur2);

}

else if(cur->next==NULL) //если это-последний элемент списка

{

cur->pred->next=NULL; //ссылка предпоследнего элемента на следующий обнуляется

free(cur); //память под старый конец списка освобождается

cur2->pred->next=NULL; //аналогично для второго

free(cur2);

}

else {

cur->next->pred=cur->pred; //ссылка на следующий элемент у предыдущего элемента (относительно удаляемого) приравнивается следующем элементу

cur->pred->next=cur->next; //ссылка на предыдущий элемент у следующего элемента (относительно удаляемого) приравнивается предыдущему элементу

free(cur); //память освобождается

cur2->next->pred=cur2->pred; //то же для второго

cur2->pred->next=cur2->next;

free(cur2);

}

}

cur=cur->next; //переход к следующему элементу

cur2=cur2->next; //аналогично

}

printf("Было удалено %d книг данного автора",n);

}

getch();

}

//---------------------------------------------------------------------\\

void vozvrat(el *cur,el *cur2) //возвращение элемента

{

char iskA[10],iskN[10];

int n=0;

clrscr();

if(cur==NULL) printf("Перед тем, как производить поиск в списке, необходимо его создать!");

else

{

printf("Введите интересующего Вас автора:\n");

scanf("%s",iskA);

printf("Введите интересующую Вас книгу:\n");

scanf("%s",iskN);

while(cur!=NULL)

{

if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur2->inf.kol>0) //если есть книги на руках (кол-во>0)

{

cur->inf.kol++; //увеличивается в первом списке количество

cur2->inf.kol--; //уменьшается во втором

n++;

printf("Книга возвращена!");

break;

}

else if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur2->inf.kol<=0) //если книг на руках нет

{

printf("Все свои книги дома! Чужих нам не надо)))");

Страницы: 1, 2, 3, 4, 5, 6

рефераты
Новости