Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Предметная область – ресторан.
- Реализовать динамическую структуру данных, содержащую следующую информацию:
- наименование блюда;
- пищевая ценность (калории);
- стоимость;
- вес в граммах;
- принадлежность к десерту, закуске, горячему или др.
- Программа должна обеспечивать:
- добавление элемента;
- удаление элемента;
- возможность корректировки данных;
- вывод всех данных;
- вывод самого «легкого» по калорийности блюда;
- сортировку по полю стоимость;
- вывод списка блюд, принадлежащих к заданной категории (например, закуски);
- расчет себестоимости грамма продукта.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- struct list {
- int number;
- char bludo[25];//название блюда
- int value;//пищевая ценность
- float price;//стоимость
- float weight;//вес в граммах
- char vid[25];//принадлежность к десерту , закуске, горячему или др.
- struct list *next;//указатель на след элемент
- struct list *past;
- };
- struct list *start , *finish;
- int count;//счетчик количества элементов.
- void menu();//функция меню
- void Add();//функция добавления элемента
- void Del();//функция удаления элемента
- void korrekt();//функция корректировки данных
- void output();//фцункция вывода всех данных
- void lightest();//функция вывода самого легкого по каллорийности блюда
- void sort_price();//сортировка по полю стоимости
- void output_kategor();//функция вывода списка блюд, принадлажщей заданой категории
- void calculation();//расчет себестоимости грамма продукта
- void save_f(); //Функция сохранения в файл
- void load_f(); //Функция загрузки из файла
- int main()
- {
- setlocale(LC_ALL, "Russian"); // Русская библиотека.
- menu();
- return 0;
- }
- void menu()
- {
- int choice;
- puts("|-------------------------------------------------------------------|");
- puts("| Вас приветствует программа для управления меню ресторана! |");
- puts("|-------------------------------------------------------------------|");
- puts("| Выполнил : студент группы АИ-153 ,Хомко Н.А. |");
- puts("|-------------------------------------------------------------------|");
- puts("| Для выбора команды введите соответствующую цифру и нажмите Enter. |");
- puts("|-------------------------------------------------------------------|");
- while (choice != 0) {
- puts("| Меню программы: |");
- puts("|-------------------------------------------------------------------|");
- puts("| 1) Добавление нового блюда; |");
- puts("| 2) Удаление старого блюда; |");
- puts("| 3) Корректировка данных о блюде; |");
- puts("| 4) Вывод данных о всех блюдах; |");
- puts("| 5) Вывод самого легкого по каллорийности блюда; |");
- puts("| 6) Сортировка по стоимости блюда; |");
- puts("| 7) Вывод списка блюд, принадлежащих к заданной категории; |");
- puts("| 8) Расчет себестоимости грамма продукта; |");
- puts("| 9) Сохранение данных в файл; |");
- puts("|10) Загрузка данных из файла; |");
- puts("| 0) Выход из программы. |");
- puts("|-------------------------------------------------------------------|");
- printf(" Ваш выбор: ");
- scanf("%d", &choice);
- system("cls");
- switch (choice) {
- case 1:
- Add();break;
- case 2:
- Del();break;
- case 3:
- korrekt();break;
- case 4:
- output();break;
- case 5:
- lightest();break;
- case 6:
- sort_price();break;
- case 7:
- output_kategor();break;
- case 8:
- calculation();break;
- case 9:
- save_f();break;
- case 10:
- load_f();break;
- case 0:break;
- default:
- puts("Нет такого пункта в меню!");break;
- }
- }
- }
- void Add()
- {
- char cod;
- struct list *p, *pred;
- pred=NULL;
- printf("При вводе используйте нижнее подчеркивание вместо пробела");
- do
- {
- p = (struct list*)malloc(sizeof(struct list));
- printf("\nНазвание блюда : ");
- scanf("%s",p->bludo);
- printf("\nПищевая ценность : ");
- scanf("%d",p->value);
- printf("\nСтоимость : ");
- scanf("%f",p->price);
- printf("\nВес(в граммах) : ");
- scanf("%f",p->weight);
- printf("\nПринадлежность к виду : ");
- scanf("s",p->vid);
- p->past=pred;
- if (pred!=NULL)
- pred->next=p;
- else
- start=p;
- pred=p;
- printf("\n Закончить ввод данных? (y/n) \n");
- cod=getch();
- }
- while (cod!='y');
- finish=p;
- finish->next=NULL;
- }
- void Del()
- {
- puts("Ожидается...............................................");
- }
- void korrekt()
- {
- int correction;
- char corrbludo[20];
- int corrvalue;
- float corrprice;
- float corrweight;
- char corrvid[20];
- int kod;
- int i;
- struct list *pcor=start;//временная пер-ая кот равна началу
- if ( start == NULL ) //проверка наличия списка
- printf("Список пуст.\n");
- else
- {
- output(start);//вывод исходных данных
- printf("Введите название блюда,данные в котором нужно изменить: \n");
- scanf("d",&correction);
- while ( pcor!=NULL )//пока не пройдем весь список
- {
- if ( pcor->bludo == correction)
- {
- i=1;
- printf("Выбирете, что Вы хотите изменить: ");
- printf("1-Название диска ");
- printf("2-Дата выпуска ");
- printf("3-Количество композиций");
- printf("4-Длительность");
- printf("5-Исполнитель");
- printf("6-Все данные");
- scanf("d",kod);
- switch(kod)
- {
- case 1:
- printf("Новое название блюда:\n ");
- scanf("%s",&corrbludo);
- strcpy ( pcor->bludo,corrbludo );
- break;
- case 2:
- printf("Новая пищевая ценность: \n");
- scanf("%d",&corrvalue);
- pcor->value=corrvalue;
- break;
- case 3:
- printf("Новая цена:\n ");
- scanf("%f",&corrprice);
- pcor->price = corrprice;
- break;
- case 4:
- printf("Новый вес:\n ");
- scanf("%f",&corrweight);
- pcor->weight= corrweight;
- break;
- case 5:
- printf("Новая принадлженость к виду:\n ");
- scanf("s",&corrvid);
- strcpy ( pcor->vid,corrvid );
- break;
- case 6:
- printf("Новое название блюда:\n ");
- scanf("s",&corrbludo);
- strcpy ( pcor->bludo,corrbludo );
- printf("Новая пищевая ценность: \n");
- scanf("d",&corrvalue);
- pcor->value=corrvalue;
- printf("Новая цена:\n ");
- scanf("f",&corrprice);
- pcor->price = corrprice;
- printf("Новый вес:\n ");
- scanf("f",&corrweight);
- pcor->weight= corrweight;
- printf("Новая принадлежность к виду:\n ");
- scanf("s",&corrvid);
- strcpy ( pcor->vid,corrvid );
- break;
- default:
- printf("Неверно набрано код. Повторите попытку");
- break;
- }
- break;
- }
- else
- pcor = pcor->next; //передвижение по списку
- }
- if(i==1)
- printf("Изменения успешно сохранены");
- else
- printf("Такое название диска не найдено");
- pcor=start;
- }
- }
- void output()
- {
- struct list *p;
- int i=0;
- if(start==NULL)
- printf("Список пуст!");
- else
- {
- system("cls");
- if (p==start)
- {
- printf("Название Пищевая ценность Цена Вес(в грммах) Вид\n");
- while (p!=NULL)
- {
- i++;
- printf("%-3d \t%-10s %-5d\t %-3f \t\t%-15.2f %-s\n",i,p->bludo,p->value,p->price,p->weight,p->vid);
- p=p->next;
- }
- }
- else
- if (p==finish)
- p=p->past;
- }
- getch();
- }
- void lightest()
- {
- struct list *p;
- if(start==NULL)
- {
- system("cls");
- printf("Список пуст!\n");
- }
- else
- {
- char bludo1[20];
- int i=0;
- output(start);
- printf("Введите название самого легкого по калорийности блюда, котороое вы хотите найти:");
- scanf("s",&bludo1);
- struct list* p = start; //указатель на структуру, который равен началу
- struct list* min = start;// min - указатель на наименьшый эл-т
- int min2 = 0;//=start->year;//min2 пер-ая кот хранит год в найденном элементе
- do
- {
- if(strcmp(bludo1, p->bludo) == 0) //сравниваем введенное значение с данным
- {
- if (min2 == 0)
- {
- min2 = p->bludo;
- min = p;
- }
- else
- {
- if(min2 > p->bludo) //сравниваем года
- {
- min2 = p->bludo;
- min = p;
- }
- }
- }
- p=p->next;//передвижение по списку
- }
- while(p!=NULL);//пока указатель не станей равен нулю
- if (min2 != 0)
- {
- puts("Самый легкое блюдо:\n");
- printf("Название Пищевая ценность Цена Вес(в грммах) Вид\n");
- i++;
- printf("%-3d \t%-10s %-5d\t %-3f \t\t%-15.2f %-s\n",i,p->bludo,p->value,p->price,p->weight,p->vid);
- }
- else
- printf("Не найден!\n");
- }
- }
- void sort_price()
- {
- if(start==NULL)
- {
- system("cls");
- printf("Список пуст!\n");
- }
- else
- {
- int kod;
- int p=1;
- while(p!=NULL)//пока не пройдем весть список
- {
- p=0;
- struct list* prev=start;//создание указателя на предыд. позицию
- struct list* cur=start;// создание указателя на текущ. позицию
- struct list* nex=start->next;//создание указателя на след. позицию
- while(cur->next!=NULL)
- {
- if((cur->price)>(nex->price)) //если текущия поз.года больше, чем след. позиция
- {
- p=1; // выполнена перестановка
- cur->next=nex->next;// меняем элементы местами
- nex->next=cur;
- if(cur==start)
- start=nex;
- else
- prev->next=nex;
- prev=nex;
- nex=cur->next;
- }
- else
- {
- prev=cur;
- cur=nex;
- nex=nex->next;
- }
- }
- }
- printf("Отсортировано, ");
- printf("Вывести список? (1-да/0-нет)");
- scanf("d",&kod);
- system("cls");
- switch(kod)
- {
- case 1: output(start);
- break;
- case 0: menu();
- break;
- default: printf("Неверно набрано код. Повторите попытку");
- break;
- }
- }
- }
- void output_kategor()
- {
- struct list *p = start;
- char categor[20];
- output();
- if(start==NULL)
- {
- system("cls");
- printf("Список пуст!\n");
- return;
- }
- else
- {
- printf("Введите категорию блюда, которое вы хотите найти: ");
- scanf("%s", categor);
- puts("\nНайдены следующие заказчики:");
- while (p != NULL) { // условие окончания обхода
- if (strcmp(categor, p->vid)==0) {
- printf("%s\n", p->bludo);
- }
- p = p->next; // переход к следующему узлу
- }
- printf("\n");
- }
- }
- void calculation()
- {
- puts("Ожидается...............................................");
- }
- void save_f()
- {
- struct list *p=start; //указатель на структуру
- FILE *list; // указатель на файл
- if(start==NULL)
- {
- system("cls");
- printf("Список пуст!\n");
- }
- else
- {
- list = fopen( "list.txt","wb" ); //создаем файл
- if( list != NULL )
- {
- while ( p != NULL ) //запись структуры в файл
- {
- fwrite ( p, sizeof ( list ), 1, list );
- p = p->next;
- }
- printf("Информация успешно сохранена");
- fclose ( list );
- }
- else
- printf("\tНе удалось создать файл");
- }
- }
- void load_f()
- {
- struct list *p,*r; //указатели на структуру
- FILE *list; //указатель на файл
- r = NULL;
- p = start;
- list = fopen ( "list.txt","rb" ); //открываем файл, режим чтения данных
- if ( list!= NULL )
- {
- do
- {
- p = (struct list*)malloc(sizeof(struct list)); //выдедение памяти под считываемые данные
- fread ( p, sizeof ( list ), 1, list ); //чтение из файла 1 структуры
- p->past = NULL;
- p->next = NULL;
- p->past = r;
- if ( r != NULL )
- r->next = p;
- else
- start = p;
- r = p;
- }
- while (!feof(list)); //пока не достигнут конец файла
- }
- finish = p->past;
- finish->next = NULL;
- p = finish;
- fclose ( list );//закрытие файла
- printf("Информация успешно извлечена из файла\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement