Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1,2,3,6 ,курсач (Жека) / Лаба 2 прога.docx
Скачиваний:
18
Добавлен:
09.02.2015
Размер:
70.57 Кб
Скачать

Код программы на языке c

#include "stdafx.h"

#include "stdio.h"

#include <conio.h>

#include <stdlib.h>

#include <tchar.h>

#include <string.h>

#include <locale>

typedef struct games

{

char name[12]; //Название продукта

int year; //Дата выхода

int rating;//Рейтинг

}MS;

typedef struct list

{

MS info;

struct list* next;

}SP;

SP* enter(SP*); //ввод данных

void Output(SP*,char*); //вывод данных

SP *confirming(SP*);

SP *Sort(SP*);

SP *NewSort(SP*,int,int);

SP *Add(SP*);

SP *Del(SP*);

void Output_2(SP*);

SP *Free(SP*);

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_CTYPE, "russian");

SP*h1=NULL,*rez=NULL;

int pm,pm2;

char c=NULL,ch=NULL;

do

{

system("cls");

puts("******************MAIN MENU*********************");

puts("1 - Ввод данных\n");

puts("2 - Вывод списка\n");

puts("3 - Формирование нового списка\n");

puts("4 - Добавление элемента в список \n");

puts("5 - Удаление элемента из списка\n");

puts("6 - Сортировка\n");

puts("7 - Вывод слева и справа от заданного элемента\n");

puts("0 - Выход из программы \n");

fflush(stdin);

scanf("%d",&pm);

switch(pm)

{

case 1:

if(h1==NULL)

{

while(h1!=NULL)

h1=Free(h1);

while(ch!='y')

{

h1=enter(h1);

puts("\n Закончить ввод данных? (y/n)?\n");

ch=getch();

}

}

else

puts("Вы уже вводили данные!Используйте пункты добавление элементов\n");

getch();

break;

case 2:

if(h1!=NULL)

Output(h1,"Список:");

else

puts("Список пуст\n");

getch();

break;

case 3:

if(h1!=NULL)

{

while(rez!=NULL)

rez=Free(rez);

rez=confirming(h1);

if(rez!=NULL)

Output(rez,"Результат обработки:");

else

puts("В списке нет элементов с заданным условием \n");

getch();

}

else

puts("Обработка невозможна - список пуст.\n");

getch();

break;

case 4:

if(h1!=NULL)

h1=Add(h1);

else

puts("Добавление элементов невозможно т.к. список пуст\n");

getch();

break;

case 5:

if (h1!=NULL)

h1=Del(h1);

else

puts("Удаление невозможно.список пуст.\n");

getch();

break;

case 6:

if (h1!=NULL)

h1=Sort(h1);

else

puts("Сортировка невозможно ,список пуст.\n");

getch();

break;

case 7:

if (h1!=NULL)

Output_2(h1);

else

puts("Список пуст \n");

getch();

break;

case 0:

puts("Выполнение программы завершено");

c='y';

break;

default:

puts("Ошибка ввода пункта меню");

getch();

break;

}

}

while(c!='y');

return 0;

}

//***************************************************************************//

SP *enter(SP* head)

{

SP *p=NULL;

fflush(stdin);

p=(SP*)malloc(sizeof(SP));

puts("Введите название продукта");

gets(p->info.name);

puts("Введите дату выхода продукта");

scanf("%d",&(p->info.year));

puts("Введите рейтинг продукта");

scanf("%d",&(p->info.rating));

p->next=head;

head=p;

return head;

}

//****************************************************************************//

void Output(SP *h1,char *s)

{

puts(s);

puts(" Название Дата выхода Рейтинг");

while(h1!=NULL)

{

printf("");

puts(h1->info.name);

printf(" %d %d",h1->info.year,h1->info.rating);

printf("/n");

fflush(stdin);

h1=h1->next;

}

}

//***********************************************************************//

SP* confirming(SP *h1)

{

int d;

SP* p=NULL,*h2=NULL, *p1=NULL,*p2=NULL;

puts("Введите рейтинг продукта");

scanf("%d",&d);

h2=h1;

while(h2!=NULL)

{

if((h2->info.rating)>d)

{

p=(SP*)malloc(sizeof(SP));

if(h2==h1)

{

p->info=h2->info;

p1=p;

p2=p;

}

else

{

p->info=h2->info;

if(p1==NULL)

{

p1=p;

p2=p;

}

else

{

p1->next=p;

p1=p;

}

}

}

if(h2->next==NULL)

p1->next=NULL;

h2=h2->next;

}

puts("Обработка завершена");

return p2;

}

SP *Sort(SP*h1)

{

int pm2=0,pm3=0,pm4=0;

int z=0;

puts("Выберите тип сортировки");

puts("1-сортировка по году");

puts("2-сортировка по рейтингу");

puts("3-Выход в главное в меню");

scanf("%d",&pm2);

do

{

switch(pm2)

{

case 1:

puts("Выберите тип сортировки");

puts("1-сортировка по убыванию");

puts("2-сортировка по возрастанию");

puts("3-Выход в над-меню");

scanf("%d",&pm3);

switch(pm3)

{

case 1:

h1=NewSort(h1,1,1);

z=1;

break;

case 2:

h1=NewSort(h1,1,2);

z=1;

break;

case 3:

break;

default:

puts("Вы ошиблись с выбором пункта меню,введите еще раз!");

getch();

break;

}

break;

case 2:

puts("Выберите тип сортировки");

puts("1-сортировка по убыванию");

puts("2-сортировка по возрастанию");

puts("3-Выход в под-меню");

getch();

scanf("%d",&pm4);

switch(pm4)

{

case 1:

h1=NewSort(h1,2,1);

z=1;

break;

case 2:

h1=NewSort(h1,2,2);

z=1;

break;

case 3:

break;

default:

puts("Вы ошиблись с выбором пункта меню,введите еще раз!");

getch();

break;

}

case 3:

break;

default:

puts("Вы ошиблись с выбором пункта меню,введите еще раз!");

getch();

break;

}

}

while (z==0);

return h1;

}

//********************************************************************************//

SP* NewSort(SP*h1,int place,int s)

{

SP *p=NULL,*p1=NULL,*p2=NULL,*p3=NULL,*p4=NULL,*p5=NULL;

int z=0;

p=h1;

p1=p->next;

if (p->next!=NULL)

{

if(p->next->next!=NULL)

{

while(p!=NULL);

{

if (p==h1)

{

p3=p;

p1=p->next;

p2=p1;

}

while(p1!=NULL)

{

if ((((p1->info.year>p->info.year && s==1)||(p1->info.year<p->info.year && s==2))&&place==1)||(((p1->info.rating>p1->info.rating&&s==1)||((p1->info.rating<p->info.rating&&s==2)))&&place==2))

{

p5=p2;

p4=p->next;

p3->next=p1;

p->next=p1->next;

if(p2!=p1)

{

p2->next=p;

p2=p1;

}

else

p2->next=p;

if(p1!=p4)

p1->next=p4;

else

p1->next=p;

p=p3->next;

if(p!=p3->next);

else

{

p=p2;

p3=p;

}

p2=p5->next;

}

else

{

p2=p1;

p1=p1->next;

}

}

if(z==0)

h1=p;

p3=p;

p=p->next;

if(p!=NULL)

if(p->next!=NULL)

p1=p->next;

else

p1=p->next;

else

p1=p;

z=1;

p2=p1;

}

}

else

{

if(p1->info.year>p->info.year)

{

p1->next=p;

p->next=NULL;

p=p1;

h1=p;

}

}

}

else

puts("В списке только один элемент");

puts("Сортировка завершена");

getch();

return h1;

}

//****************************************************************************************///

SP *Add(SP *h1)

{

SP *p1=NULL,*p=NULL;

int pm2=0;

int d=0,k=0;

p=h1;

p1=enter(p1);

puts("Куда необходимо добавить элемент?");

puts("1 - В начало");

puts("2 - В конец");

puts("3 - После заданного");

scanf("%d",&pm2);

switch(pm2)

{

case 1:

p1->next=h1;

h1=p1;

break;

case 2:

while((p->next)!=NULL)

p=p->next;

p->next=p1;

p1->next=NULL;

break;

case 3:

puts("Задайте элемент,после которого нужно добавить информацию");

scanf("%d",&d);

for(k=1;p->next!=NULL;k++)

p=p->next;

if(d<=k)

{

if(d<k)

{

p1->next=p->next;

p->next=p1;

}

else

{

p->next=p1;

p1->next=NULL;

}

}

else

printf("После %d добавление невозможно, т.к. в списке меньше элементов./n",d);

break;

default:

puts("Ошибка ввода пункта меню");

getch();

break;

}

puts("Операция добавление успешно завершена");

getch();

return h1;

}

//**************************************************************************************//

SP *Del(SP *h1)

{

SP *p=NULL,*p1=NULL;

int d=0,k;

p=h1;

puts("Введите номер элемента ,который нужно удалить. \n");

scanf("%d",&d);

for (k=1;k<(d-1);k++);

p=p->next;

if (d<=k)

{

if(d<(k-1))

{

p1=p->next;

p->next=p->next->next;

}

else

{

if(d!=1)

{

p1=p->next;

p->next=p->next->next;

}

else

{

h1=p->next;

p1=p;

if(h1==NULL)

puts("Список пуст");

}

}

free(p1);

}

else

printf("Удалить %d элемент нельзя - в списке %d элементов.\n",d,k);

free(p);

puts("Операция удаление успешно завершена");

return h1;

}

//*************************************************************************************//

void Output_2(SP *h1)

{

SP *p=NULL,*p1=NULL,*h2=NULL,*p2=NULL;

int d,s,k,z;

h2=h1;

for (k=1;h1->next!=NULL;k++)

h1=h1->next;

for(s=0;s<k;s++)

{

p=(SP*)malloc(sizeof(SP));

if(s==0)

{

p->info=h2->info;

p1=p;

p2=p;

}

else

{

p->info=h2->info;

p1->next=p;

p1=p;

}

if(s==(k-1))

p->next=NULL;

h2=h2->next;

}

p1=NULL;

puts("Вывести слева и справа от какого элемента?\n");

scanf("%d",&d);

if (d<=k)

{

for(z=1;z<(d-1);z++)

p2=p2->next;

if(d<k)

{

if(d==1)

{

p1=p2->next;

p1->next=NULL;

Output(p1,"Элемента слева нет");

}

else

{

p1=p2;

p1->next=p2->next->next;

Output(p1,"");

}

}

else

{

if(d==1) // если элемент единстенный и d=1

puts("Отсутствуют элементы справа и слева");

else

{

p1=p2;

p->next=NULL;

Output(p,"Элементов слева нет");

}

}

}

else

printf("В списке %d элементов \n",k);

getch();

while(p!=NULL)

p=Free(p);

}

SP *Free(SP *h1)

{

SP* temp=h1;

while(temp!=NULL)

{

temp=h1->next;

free(h1);

h1=temp;

}

return NULL;

}

Соседние файлы в папке 1,2,3,6 ,курсач (Жека)