Advertisement
Guest User

Untitled

a guest
May 28th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.06 KB | None | 0 0
  1. /*
  2. Предметная область – ресторан.
  3. Реализовать динамическую структуру данных, содержащую следующую информацию:
  4. наименование блюда;
  5. пищевая ценность (калории);
  6. стоимость;
  7. вес в граммах;
  8. принадлежность к десерту, закуске, горячему или др.
  9. Программа должна обеспечивать:
  10. добавление элемента;
  11. удаление элемента;
  12. возможность корректировки данных;
  13. вывод всех данных;
  14. вывод самого «легкого» по калорийности блюда;
  15. сортировку по полю стоимость;
  16. вывод списка блюд, принадлежащих к заданной категории (например, закуски);
  17. расчет себестоимости грамма продукта.
  18. */
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <locale.h>
  22.  
  23. struct list {
  24. int number;
  25. char bludo[25];//название блюда
  26. int value;//пищевая ценность
  27. float price;//стоимость
  28. float weight;//вес в граммах
  29. char vid[25];//принадлежность к десерту , закуске, горячему или др.
  30. struct list *next;//указатель на след элемент
  31. struct list *past;
  32. };
  33. struct list *start , *finish;
  34.  
  35.  
  36. int count;//счетчик количества элементов.
  37.  
  38. void menu();//функция меню
  39. void Add();//функция добавления элемента
  40. void Del();//функция удаления элемента
  41. void korrekt();//функция корректировки данных
  42. void output();//фцункция вывода всех данных
  43. void lightest();//функция вывода самого легкого по каллорийности блюда
  44. void sort_price();//сортировка по полю стоимости
  45. void output_kategor();//функция вывода списка блюд, принадлажщей заданой категории
  46. void calculation();//расчет себестоимости грамма продукта
  47. void save_f(); //Функция сохранения в файл
  48. void load_f(); //Функция загрузки из файла
  49.  
  50. int main()
  51. {
  52. setlocale(LC_ALL, "Russian"); // Русская библиотека.
  53. menu();
  54. return 0;
  55. }
  56.  
  57. void menu()
  58. {
  59. int choice;
  60. puts("|-------------------------------------------------------------------|");
  61. puts("| Вас приветствует программа для управления меню ресторана! |");
  62. puts("|-------------------------------------------------------------------|");
  63. puts("| Выполнил : студент группы АИ-153 ,Хомко Н.А. |");
  64. puts("|-------------------------------------------------------------------|");
  65. puts("| Для выбора команды введите соответствующую цифру и нажмите Enter. |");
  66. puts("|-------------------------------------------------------------------|");
  67.  
  68.  
  69. while (choice != 0) {
  70. puts("| Меню программы: |");
  71. puts("|-------------------------------------------------------------------|");
  72. puts("| 1) Добавление нового блюда; |");
  73. puts("| 2) Удаление старого блюда; |");
  74. puts("| 3) Корректировка данных о блюде; |");
  75. puts("| 4) Вывод данных о всех блюдах; |");
  76. puts("| 5) Вывод самого легкого по каллорийности блюда; |");
  77. puts("| 6) Сортировка по стоимости блюда; |");
  78. puts("| 7) Вывод списка блюд, принадлежащих к заданной категории; |");
  79. puts("| 8) Расчет себестоимости грамма продукта; |");
  80. puts("| 9) Сохранение данных в файл; |");
  81. puts("|10) Загрузка данных из файла; |");
  82. puts("| 0) Выход из программы. |");
  83. puts("|-------------------------------------------------------------------|");
  84.  
  85. printf(" Ваш выбор: ");
  86.  
  87. scanf("%d", &choice);
  88.  
  89. system("cls");
  90.  
  91. switch (choice) {
  92. case 1:
  93. Add();break;
  94. case 2:
  95. Del();break;
  96. case 3:
  97. korrekt();break;
  98. case 4:
  99. output();break;
  100. case 5:
  101. lightest();break;
  102. case 6:
  103. sort_price();break;
  104. case 7:
  105. output_kategor();break;
  106. case 8:
  107. calculation();break;
  108. case 9:
  109. save_f();break;
  110. case 10:
  111. load_f();break;
  112. case 0:break;
  113. default:
  114. puts("Нет такого пункта в меню!");break;
  115. }
  116. }
  117. }
  118. void Add()
  119. {
  120. char cod;
  121. struct list *p, *pred;
  122. pred=NULL;
  123. printf("При вводе используйте нижнее подчеркивание вместо пробела");
  124. do
  125. {
  126. p = (struct list*)malloc(sizeof(struct list));
  127. printf("\nНазвание блюда : ");
  128. scanf("%s",p->bludo);
  129. printf("\nПищевая ценность : ");
  130. scanf("%d",p->value);
  131. printf("\nСтоимость : ");
  132. scanf("%f",p->price);
  133. printf("\nВес(в граммах) : ");
  134. scanf("%f",p->weight);
  135. printf("\nПринадлежность к виду : ");
  136. scanf("s",p->vid);
  137.  
  138. p->past=pred;
  139. if (pred!=NULL)
  140. pred->next=p;
  141. else
  142. start=p;
  143. pred=p;
  144. printf("\n Закончить ввод данных? (y/n) \n");
  145. cod=getch();
  146.  
  147. }
  148. while (cod!='y');
  149. finish=p;
  150. finish->next=NULL;
  151.  
  152. }
  153. void Del()
  154. {
  155. puts("Ожидается...............................................");
  156. }
  157. void korrekt()
  158. {
  159. int correction;
  160. char corrbludo[20];
  161. int corrvalue;
  162. float corrprice;
  163. float corrweight;
  164. char corrvid[20];
  165. int kod;
  166. int i;
  167. struct list *pcor=start;//временная пер-ая кот равна началу
  168. if ( start == NULL ) //проверка наличия списка
  169. printf("Список пуст.\n");
  170. else
  171. {
  172. output(start);//вывод исходных данных
  173.  
  174. printf("Введите название блюда,данные в котором нужно изменить: \n");
  175. scanf("d",&correction);
  176. while ( pcor!=NULL )//пока не пройдем весь список
  177. {
  178. if ( pcor->bludo == correction)
  179. {
  180. i=1;
  181. printf("Выбирете, что Вы хотите изменить: ");
  182. printf("1-Название диска ");
  183. printf("2-Дата выпуска ");
  184. printf("3-Количество композиций");
  185. printf("4-Длительность");
  186. printf("5-Исполнитель");
  187. printf("6-Все данные");
  188. scanf("d",kod);
  189. switch(kod)
  190. {
  191. case 1:
  192. printf("Новое название блюда:\n ");
  193. scanf("%s",&corrbludo);
  194. strcpy ( pcor->bludo,corrbludo );
  195. break;
  196. case 2:
  197. printf("Новая пищевая ценность: \n");
  198. scanf("%d",&corrvalue);
  199. pcor->value=corrvalue;
  200. break;
  201. case 3:
  202. printf("Новая цена:\n ");
  203. scanf("%f",&corrprice);
  204. pcor->price = corrprice;
  205. break;
  206. case 4:
  207. printf("Новый вес:\n ");
  208. scanf("%f",&corrweight);
  209. pcor->weight= corrweight;
  210. break;
  211. case 5:
  212. printf("Новая принадлженость к виду:\n ");
  213. scanf("s",&corrvid);
  214. strcpy ( pcor->vid,corrvid );
  215. break;
  216. case 6:
  217. printf("Новое название блюда:\n ");
  218. scanf("s",&corrbludo);
  219. strcpy ( pcor->bludo,corrbludo );
  220. printf("Новая пищевая ценность: \n");
  221. scanf("d",&corrvalue);
  222. pcor->value=corrvalue;
  223. printf("Новая цена:\n ");
  224. scanf("f",&corrprice);
  225. pcor->price = corrprice;
  226. printf("Новый вес:\n ");
  227. scanf("f",&corrweight);
  228. pcor->weight= corrweight;
  229. printf("Новая принадлежность к виду:\n ");
  230. scanf("s",&corrvid);
  231. strcpy ( pcor->vid,corrvid );
  232. break;
  233. default:
  234. printf("Неверно набрано код. Повторите попытку");
  235. break;
  236. }
  237. break;
  238.  
  239. }
  240. else
  241. pcor = pcor->next; //передвижение по списку
  242.  
  243. }
  244. if(i==1)
  245. printf("Изменения успешно сохранены");
  246. else
  247. printf("Такое название диска не найдено");
  248. pcor=start;
  249. }
  250. }
  251. void output()
  252. {
  253. struct list *p;
  254. int i=0;
  255.  
  256. if(start==NULL)
  257. printf("Список пуст!");
  258. else
  259. {
  260. system("cls");
  261. if (p==start)
  262. {
  263. printf("Название Пищевая ценность Цена Вес(в грммах) Вид\n");
  264. while (p!=NULL)
  265. {
  266. i++;
  267. printf("%-3d \t%-10s %-5d\t %-3f \t\t%-15.2f %-s\n",i,p->bludo,p->value,p->price,p->weight,p->vid);
  268. p=p->next;
  269. }
  270. }
  271. else
  272. if (p==finish)
  273. p=p->past;
  274. }
  275. getch();
  276. }
  277. void lightest()
  278. {
  279. struct list *p;
  280. if(start==NULL)
  281. {
  282. system("cls");
  283. printf("Список пуст!\n");
  284. }
  285. else
  286. {
  287. char bludo1[20];
  288. int i=0;
  289. output(start);
  290. printf("Введите название самого легкого по калорийности блюда, котороое вы хотите найти:");
  291. scanf("s",&bludo1);
  292. struct list* p = start; //указатель на структуру, который равен началу
  293. struct list* min = start;// min - указатель на наименьшый эл-т
  294. int min2 = 0;//=start->year;//min2 пер-ая кот хранит год в найденном элементе
  295.  
  296. do
  297. {
  298. if(strcmp(bludo1, p->bludo) == 0) //сравниваем введенное значение с данным
  299. {
  300. if (min2 == 0)
  301. {
  302. min2 = p->bludo;
  303. min = p;
  304. }
  305. else
  306. {
  307. if(min2 > p->bludo) //сравниваем года
  308. {
  309. min2 = p->bludo;
  310. min = p;
  311. }
  312. }
  313.  
  314. }
  315.  
  316. p=p->next;//передвижение по списку
  317. }
  318. while(p!=NULL);//пока указатель не станей равен нулю
  319. if (min2 != 0)
  320. {
  321. puts("Самый легкое блюдо:\n");
  322. printf("Название Пищевая ценность Цена Вес(в грммах) Вид\n");
  323. i++;
  324. printf("%-3d \t%-10s %-5d\t %-3f \t\t%-15.2f %-s\n",i,p->bludo,p->value,p->price,p->weight,p->vid);
  325. }
  326. else
  327. printf("Не найден!\n");
  328. }
  329. }
  330. void sort_price()
  331. {
  332. if(start==NULL)
  333. {
  334. system("cls");
  335. printf("Список пуст!\n");
  336. }
  337. else
  338. {
  339. int kod;
  340. int p=1;
  341. while(p!=NULL)//пока не пройдем весть список
  342. {
  343. p=0;
  344. struct list* prev=start;//создание указателя на предыд. позицию
  345. struct list* cur=start;// создание указателя на текущ. позицию
  346. struct list* nex=start->next;//создание указателя на след. позицию
  347. while(cur->next!=NULL)
  348. {
  349. if((cur->price)>(nex->price)) //если текущия поз.года больше, чем след. позиция
  350. {
  351. p=1; // выполнена перестановка
  352. cur->next=nex->next;// меняем элементы местами
  353. nex->next=cur;
  354. if(cur==start)
  355. start=nex;
  356. else
  357. prev->next=nex;
  358. prev=nex;
  359. nex=cur->next;
  360. }
  361. else
  362. {
  363. prev=cur;
  364. cur=nex;
  365. nex=nex->next;
  366. }
  367. }
  368. }
  369. printf("Отсортировано, ");
  370. printf("Вывести список? (1-да/0-нет)");
  371. scanf("d",&kod);
  372. system("cls");
  373. switch(kod)
  374. {
  375. case 1: output(start);
  376. break;
  377. case 0: menu();
  378. break;
  379. default: printf("Неверно набрано код. Повторите попытку");
  380. break;
  381. }
  382. }
  383.  
  384. }
  385. void output_kategor()
  386. {
  387. struct list *p = start;
  388. char categor[20];
  389.  
  390. output();
  391. if(start==NULL)
  392. {
  393. system("cls");
  394. printf("Список пуст!\n");
  395. return;
  396. }
  397. else
  398. {
  399.  
  400. printf("Введите категорию блюда, которое вы хотите найти: ");
  401. scanf("%s", categor);
  402.  
  403. puts("\nНайдены следующие заказчики:");
  404.  
  405. while (p != NULL) { // условие окончания обхода
  406. if (strcmp(categor, p->vid)==0) {
  407. printf("%s\n", p->bludo);
  408. }
  409. p = p->next; // переход к следующему узлу
  410. }
  411.  
  412.  
  413. printf("\n");
  414. }
  415.  
  416.  
  417. }
  418. void calculation()
  419. {
  420. puts("Ожидается...............................................");
  421. }
  422. void save_f()
  423. {
  424. struct list *p=start; //указатель на структуру
  425. FILE *list; // указатель на файл
  426. if(start==NULL)
  427. {
  428. system("cls");
  429. printf("Список пуст!\n");
  430. }
  431. else
  432. {
  433. list = fopen( "list.txt","wb" ); //создаем файл
  434. if( list != NULL )
  435. {
  436. while ( p != NULL ) //запись структуры в файл
  437. {
  438. fwrite ( p, sizeof ( list ), 1, list );
  439. p = p->next;
  440. }
  441. printf("Информация успешно сохранена");
  442. fclose ( list );
  443. }
  444. else
  445. printf("\tНе удалось создать файл");
  446. }
  447. }
  448. void load_f()
  449. {
  450. struct list *p,*r; //указатели на структуру
  451. FILE *list; //указатель на файл
  452. r = NULL;
  453. p = start;
  454.  
  455. list = fopen ( "list.txt","rb" ); //открываем файл, режим чтения данных
  456. if ( list!= NULL )
  457. {
  458. do
  459. {
  460. p = (struct list*)malloc(sizeof(struct list)); //выдедение памяти под считываемые данные
  461. fread ( p, sizeof ( list ), 1, list ); //чтение из файла 1 структуры
  462. p->past = NULL;
  463. p->next = NULL;
  464. p->past = r;
  465. if ( r != NULL )
  466. r->next = p;
  467. else
  468. start = p;
  469. r = p;
  470. }
  471. while (!feof(list)); //пока не достигнут конец файла
  472. }
  473. finish = p->past;
  474. finish->next = NULL;
  475. p = finish;
  476. fclose ( list );//закрытие файла
  477. printf("Информация успешно извлечена из файла\n");
  478. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement