Advertisement
vasylmartyniv

C2S1-Sergiy-Coursework-Edit

Dec 22nd, 2019
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 31.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdbool.h>
  5. #define stringlength 255//Розмір стрічок в символах
  6.  
  7. typedef struct BakeryType {//Створюєм шаблон структури для видів випічки
  8.     int id;
  9.     char* name;
  10. } BakeType;
  11.  
  12. typedef struct Bakerys {//Створюєм шаблон для самої випічки
  13.     int id;
  14.     char* name;
  15.     char* type;
  16.     char* photo;
  17.     float weight;
  18.     int portions;
  19.     float price;
  20.     char* description;
  21. } Bakery;
  22.  
  23. typedef struct Orders {//Створюєм шаблон для замовлення
  24.     int id;
  25.     char* customer;
  26.     int prod;
  27.     int amount;
  28. } Order;
  29.  
  30. //Робимо списки і лічильники елементів в списках для кожної структури
  31. Bakery* bakeryList = NULL;
  32. int bakerylistcounter = 0;
  33. Order* ordersList = NULL;
  34. int orderlistcounter = 0;
  35. BakeType* bakeTypeList = NULL;
  36. int baketypelistcounter = 0;
  37.  
  38. void printBakery(int id) {//Функція для виводу випічки з двома режимами, якщо в неї подати -1 то вона виведе всю випічку,
  39.                         // а якшо додатнє число то вона виведе одну випічку в якої id дорівює цьому числу
  40.  
  41.     if (id == -1) {
  42.         printf("-----------Bakery List-----------\n");
  43.         for (int i = 0; i < bakerylistcounter; i++) {//Проходимось по списку випічки і виводимо поки ітератор меньше лічильника випічки
  44.             printf("\n=====--- %d ---=====", bakeryList[i].id);
  45.             printf("\nName: %s", bakeryList[i].name);
  46.             printf("\nType: %s", bakeryList[i].type);
  47.             printf("\nPhoto link: %s", bakeryList[i].photo);
  48.             printf("\nWeight: %.2f", bakeryList[i].weight);
  49.             printf("\nPortions: %d", bakeryList[i].portions);
  50.             printf("\nPrice: %.2f", bakeryList[i].price);
  51.             printf("\nDescription Link: %s", bakeryList[i].description);
  52.         }
  53.     }
  54.     else {
  55.         for (int i = 0; i < bakerylistcounter; i++) {//Проходимось по списку випічки і виводимо поки ітератор меньше лічильника випічки
  56.             if (bakeryList[i].id == id) {
  57.                 printf("\n=====--- %d ---=====", bakeryList[i].id);
  58.                 printf("\nName: %s", bakeryList[i].name);
  59.                 printf("\nType: %s", bakeryList[i].type);
  60.                 printf("\nPhoto link: %s", bakeryList[i].photo);
  61.                 printf("\nWeight: %.2f", bakeryList[i].weight);
  62.                 printf("\nPortions: %d", bakeryList[i].portions);
  63.                 printf("\nPrice: %.2f", bakeryList[i].price);
  64.                 printf("\nDescription Link: %s", bakeryList[i].description);
  65.                 break;
  66.             }
  67.         }
  68.     }
  69. }
  70.  
  71. int findBakeType(char* str) {//Функція для пошуку типу випічки по назві
  72.     for (int i = 0; i < baketypelistcounter; i++) {//Проходимось по списку типів випічки
  73.         if (strcmp(bakeTypeList[i].name, str) == 0) {//Якщо назва цього типу випічки зпівпадає то вертаємо його id
  74.             return i + 1;
  75.         }
  76.     }
  77.     return 0;//якщо не знайде то повертає 0
  78. }
  79.  
  80. void findBakery() {//Функція пошуку випічки
  81.     int option = 0;
  82.     printf("\nBy which parameter you want to search?");//Виводимо меню
  83.     printf("\n1) Name");
  84.     printf("\n2) Type");
  85.     printf("\n3) Photo link");
  86.     printf("\n4) Weight");
  87.     printf("\n5) Portions");
  88.     printf("\n6) Price");
  89.     printf("\n7) Description Link");
  90.     printf("\nYour choice (Number):");
  91.     scanf("%d", &option);//Зчитуєм відповідь
  92.     int number;//Створюємо змінні різних типів тому що параметри випічки мають різні типи
  93.     float division;
  94.     char* str = malloc(stringlength* sizeof(char));
  95.     switch (option) {//В залежності від відповіді вибираємо по чому шукати
  96.         case 1:
  97.             printf("Enter name:");
  98.             scanf("%s", str);
  99.             printf("-----------Bakery List-----------\n");
  100.             for (int i = 0; i < bakerylistcounter; i++) {//Зчитуємо ввід користувача за яким шукати, проходимось по списку випічки і порівнюємо значення теперішнього елемента з тим що ввів користувач, якщо зходиться виводимо
  101.                 if (strcmp(bakeryList[i].name, str) == 0) {
  102.                     printBakery(bakeryList[i].id);
  103.                 }
  104.             }
  105.             break;
  106.         case 2:
  107.             printf("Enter type:");
  108.             scanf("%s", str);
  109.             printf("-----------Bakery List-----------\n");
  110.             for (int i = 0; i < bakerylistcounter; i++) {//Зчитуємо ввід користувача за яким шукати, проходимось по списку випічки і порівнюємо значення теперішнього елемента з тим що ввів користувач, якщо зходиться виводимо
  111.                 if (strcmp(bakeryList[i].type, str) == 0) {
  112.                     printBakery(bakeryList[i].id);
  113.                 }
  114.             }
  115.             break;
  116.         case 3:
  117.             printf("Enter photo link:");
  118.             scanf("%s", str);
  119.             printf("-----------Bakery List-----------\n");
  120.             for (int i = 0; i < bakerylistcounter; i++) {//Зчитуємо ввід користувача за яким шукати, проходимось по списку випічки і порівнюємо значення теперішнього елемента з тим що ввів користувач, якщо зходиться виводимо
  121.                 if (strcmp(bakeryList[i].photo, str) == 0) {
  122.                     printBakery(bakeryList[i].id);
  123.                 }
  124.             }
  125.             break;
  126.         case 4:
  127.             printf("Enter weight:");
  128.             scanf("%f", &division);
  129.             printf("-----------Bakery List-----------\n");
  130.             for (int i = 0; i < bakerylistcounter; i++) {//Зчитуємо ввід користувача за яким шукати, проходимось по списку випічки і порівнюємо значення теперішнього елемента з тим що ввів користувач, якщо зходиться виводимо
  131.                 if (bakeryList[i].weight == division) {
  132.                     printBakery(bakeryList[i].id);
  133.                 }
  134.             }
  135.             break;
  136.         case 5:
  137.             printf("Enter portions:");
  138.             scanf("%d", &number);
  139.             printf("-----------Bakery List-----------\n");
  140.             for (int i = 0; i < bakerylistcounter; i++) {//Зчитуємо ввід користувача за яким шукати, проходимось по списку випічки і порівнюємо значення теперішнього елемента з тим що ввів користувач, якщо зходиться виводимо
  141.                 if (bakeryList[i].portions == number) {
  142.                     printBakery(bakeryList[i].id);
  143.                 }
  144.             }
  145.             break;
  146.         case 6:
  147.             printf("Enter price:");
  148.             scanf("%f", &division);
  149.             printf("-----------Bakery List-----------\n");
  150.             for (int i = 0; i < bakerylistcounter; i++) {//Зчитуємо ввід користувача за яким шукати, проходимось по списку випічки і порівнюємо значення теперішнього елемента з тим що ввів користувач, якщо зходиться виводимо
  151.                 if (bakeryList[i].price == division) {
  152.                     printBakery(bakeryList[i].id);
  153.                 }
  154.             }
  155.             break;
  156.         case 7:
  157.             printf("Enter description link:");
  158.             scanf("%s", str);
  159.             printf("-----------Bakery List-----------\n");
  160.             for (int i = 0; i < bakerylistcounter; i++) {//Зчитуємо ввід користувача за яким шукати, проходимось по списку випічки і порівнюємо значення теперішнього елемента з тим що ввів користувач, якщо зходиться виводимо
  161.                 if (strcmp(bakeryList[i].description, str) == 0) {
  162.                     printBakery(bakeryList[i].id);
  163.                 }
  164.             }
  165.             break;
  166.         default:
  167.             break;
  168.     }
  169. }
  170.  
  171. BakeType* addBakeType(char* str, bool ask) {//Функція додавання типу випічки з двома режимами, якщо ask=true то воно просить ввести назву нового типу, якщо ні то просто створює новий тип з назвою яку передали в функцію
  172.     baketypelistcounter++;//Збільшуємо лічильник типів
  173.     bakeTypeList = realloc(bakeTypeList, baketypelistcounter * sizeof(BakeType));//Перевиділяємо память списку під нову кількість типів
  174.     BakeType* newBakeType = bakeTypeList + baketypelistcounter - 1;//Створюємо вказівник на останній тип в списку
  175.     newBakeType->name = malloc(stringlength* sizeof(char));//Виділяємо память під нову стрічку назви типу
  176.     if (ask == true) {//перевіряєм режим
  177.         printf("\nEnter name:");
  178.         scanf("%s", newBakeType->name);//зчитуємо стрічку
  179.         newBakeType->id = baketypelistcounter;//присвоюєм id типу(число елементів в списку бо він останній)
  180.         return newBakeType;//повертаємо назад вказівник на новий елемент
  181.     }
  182.     newBakeType->id = baketypelistcounter;//присвоюєм id типу(число елементів в списку бо він останній)
  183.     strcpy(newBakeType->name, str);//копіюємо в назву типу стрічку яку передали в функцію
  184.     return newBakeType;//повертаємо назад вказівник на новий елемент
  185. }
  186.  
  187. void addBakery() {//Функція додавання випічки
  188.     bakerylistcounter++;//Збільшуємо лічильник випічки
  189.     bakeryList = realloc(bakeryList, bakerylistcounter * sizeof(Bakery));//перевиділяємо память
  190.     Bakery* newBakery = bakeryList + bakerylistcounter - 1;//робим вказівник на останній елемент
  191.     newBakery->id = bakerylistcounter;//присвоюєм id випічці
  192.     newBakery->name = malloc(sizeof(char) * stringlength);//виділяємо память під стрічки
  193.     newBakery->photo = malloc(sizeof(char) * stringlength);
  194.     newBakery->type = malloc(sizeof(char) * stringlength);
  195.     newBakery->description = malloc(sizeof(char) * stringlength);
  196.     char* tempname = malloc(stringlength* sizeof(char));//Робимо тимчасову стрічку
  197.  
  198.     printf("\n-----------New Bakery-----------");
  199.     printf("\nName:");
  200.     scanf("%s", newBakery->name);//зчитуєм назву випічки
  201.  
  202.     printf("Type:");
  203.     scanf("%s", tempname);//Зчитуємо тимчасову назву типу випічки
  204.     int typeexists = findBakeType(tempname);//викликаємо пошук типу випічки
  205.     if (typeexists > 0) {
  206.         strcpy(newBakery->type, bakeTypeList[typeexists - 1].name);//якщо тип знайдено то приюємо новій випічці назву цього типу
  207.     }
  208.     else {
  209.         strcpy(newBakery->type, addBakeType(tempname, false)->name);//якщо не знайдено то створюємо новий тип і копіюєм в назву типу нової випічки назву нового типу випічки
  210.     }
  211.  
  212.     float tempfloat;//робимо змінні під різні типи полів випічки
  213.     int tempint;
  214.     printf("Photo link: ");
  215.     scanf("%s", newBakery->photo);//Зчитуємо інші параметри випічки
  216.     printf("Weight:");
  217.     scanf("%f", &tempfloat);
  218.     newBakery->weight = tempfloat;
  219.     printf("Portions:");
  220.     scanf("%d", &tempint);
  221.     newBakery->portions = tempint;
  222.     printf("Price:");
  223.     scanf("%f", &tempfloat);
  224.     newBakery->price = tempfloat;
  225.     printf("Description Link:");
  226.     scanf("%s", newBakery->description);
  227. }
  228.  
  229. void printBakeType() {//Функція виводу типів випічки
  230.     printf("-----------Bakery Type List-----------\n");
  231.     for (int i = 0; i < baketypelistcounter; i++) {//Проходимось по всьому списку типів і виводимо їх id та назву
  232.         printf("\n%d) %s", bakeTypeList[i].id, bakeTypeList[i].name);
  233.     }
  234. }
  235.  
  236. void editBakery() {//Функція редагування випічки
  237.     int id = 0, option = 0;
  238.     printBakery(-1);//Виводимо всю випічку
  239.     printf("\nEnter id of Bakery you want to edit:");
  240.     scanf("%d", &id);//Зчитуємо номер випічки яку треба редагувати
  241.     Bakery* editBakery = NULL;//Робимо вказівник на ніяку випічку
  242.     bool found = false;//Робимо прапорець чи знайдена випічка
  243.     for (int i = 0; i < bakerylistcounter; i++) {//ШУкаємо випічку порівнюючи її номер і той що ми зчитали
  244.         if (bakeryList[i].id == id) {
  245.             editBakery = &bakeryList[i];//Якщо знайшли то присвоємо вказівнику адресу цієї випічки і вказуємо прапорець що знайшли
  246.             found = true;
  247.         }
  248.     }
  249.     if (found == false) {//Якщо не найшли то виводим повідомлення і виходимо з функції
  250.         printf("\nElement doesn`t exist!");
  251.         return;
  252.     }
  253.     printf("\nWhich option you want to edit?");//виводимо меню
  254.     printf("\n1) Name: %s", editBakery->name);
  255.     printf("\n2) Type: %s", editBakery->type);
  256.     printf("\n3) Photo link: %s", editBakery->photo);
  257.     printf("\n4) Weight: %.2f", editBakery->weight);
  258.     printf("\n5) Portions: %d", editBakery->portions);
  259.     printf("\n6) Price: %.2f", editBakery->price);
  260.     printf("\n7) Description Link: %s", editBakery->description);
  261.     printf("\nYour choice (Number):");
  262.     scanf("%d", &option);//Зчитуємо вибір
  263.     printf("Input your value:");
  264.     char* typename = malloc(stringlength* sizeof(char));//Робимо тимчасову змінну під назву типу
  265.     int typeexists;//Робимо змінну під номер типу
  266.     switch (option) {//В залежності від вибору
  267.         case 1:
  268.             scanf("%s", editBakery->name);//Зчитуємо ім'я
  269.             break;
  270.         case 2:
  271.             scanf("%s", typename);//Зчитуємо тип
  272.             typeexists = findBakeType(typename);//Шукаємо тип в списку
  273.             if (typeexists > 0) {//Шукаємо цей тип, якщо він існує то просто міняємо в випічці
  274.                 strcpy(editBakery->type, bakeTypeList[typeexists - 1].name);
  275.             }
  276.             else {//якщо не існує то створюємо і міняємо
  277.                 strcpy(editBakery->type, addBakeType(typename, false)->name);
  278.             }
  279.             break;
  280.         case 3:
  281.             scanf("%s", editBakery->photo);//Зчитуємо фото
  282.             break;
  283.         case 4:
  284.             scanf("%f", &editBakery->weight);//зчитуємо вагу
  285.             break;
  286.         case 5:
  287.             scanf("%d", &editBakery->portions);//зчитуємо порції
  288.             break;
  289.         case 6:
  290.             scanf("%f", &editBakery->price);//зчитуємо ціну
  291.             break;
  292.         case 7:
  293.             scanf("%s", editBakery->description);//зчитуємо опис
  294.             break;
  295.         default:
  296.             break;
  297.     }
  298. }
  299.  
  300. void changeBakeType() {//Функція зміни типу випічки
  301.     int id;
  302.     printBakeType();//Виводимо список типів
  303.     printf("\nEnter id of BakeryType you want to edit:");
  304.     scanf("%d", &id);//Зчитуємо номер типу
  305.     bool found = false;//Робимо прапорець чи знайшли
  306.     for (int i = 0; i < baketypelistcounter; i++) {//Проходимся по списку типів і порівнюємо їхні номери з тим що ввели
  307.         if (bakeTypeList[i].id == id) {
  308.             found = true;//Вказуємо що знайшли
  309.             char* old = malloc(stringlength* sizeof(char));//Виділяємо память під стару назву типу
  310.             strcpy(old, bakeTypeList[i].name);//Копіюємо назву типу в змінну старої назви
  311.             printf("Enter value:");
  312.             scanf("%s", bakeTypeList[i].name);//Зчитуємо нову назву типу
  313.             for (int j = 0; j < bakerylistcounter; j++) {//Проходимось по списку випічки порівнюючи назви типів з назвою старого типу
  314.                 if (strcmp(bakeryList[i].type, old) == 0) {//Якщо змігається то міняємо на нову
  315.                     strcpy(bakeryList[i].type, bakeTypeList[i].name);
  316.                 }
  317.             }
  318.         }
  319.     }
  320.     if (found == false) {//Виводимо повідомлення якщо не знайшли
  321.         printf("Element not found");
  322.     }
  323. }
  324.  
  325. void bakeryTypeRemove(){//Функція для видалення типу випічки
  326.     int id;
  327.     printBakeType();//Виводжимо всі типи
  328.     printf("\nEnter id of BakeryType you want to remove:");
  329.     scanf("%d", &id);//Зчитуємо номер типу випічки
  330.     for (int i = 0; i < baketypelistcounter; i++) {
  331.         if (bakeTypeList[i].id == id) {//ШУкаємо тип порівнюючи номер
  332.             char* old = malloc(stringlength* sizeof(char));//Виділяємо память під назву цього типу випічки
  333.             int oldid;//Змінна під номер цього типу
  334.             strcpy(old, bakeTypeList[i].name);//Копіюємо назву і номер цього типу
  335.             oldid = bakeTypeList[i].id;
  336.  
  337.             for (int k = i; k < baketypelistcounter - 1; k++) {//Проходимось по списку типів випічки дальше за цей тип
  338.                 bakeTypeList[k].name = bakeTypeList[k + 1].name;//Міняємо ім'я на імя наступного в списку
  339.                 bakeTypeList[k].id = bakeTypeList[k + 1].id - 1;//Міняємо номер на номер наступного і зменьшуємо на один
  340.             }
  341.  
  342.             baketypelistcounter--;//Зменшуємо лічильник типів
  343.             bakeTypeList = realloc(bakeTypeList, baketypelistcounter * sizeof(BakeType));//Перевиділяємо память на один тип менше
  344.             for (int j = 0; j < bakerylistcounter; j++) {//Проходимось по списку всієї випічки якщо тип збігається із назвою типу який видалили заміняємо на "Нема типу"
  345.                 if (strcmp(bakeryList[i].type, old) == 0) {
  346.                     strcpy(bakeryList[i].type, "#No type");
  347.                 }
  348.             }
  349.             break;//Виходимо з циклу
  350.         }
  351.     }
  352. }
  353.  
  354. void bakeryRemove() {//Функція для видалення випічки
  355.     int id;
  356.     printBakery(-1);//Виводимо всю випічку
  357.     printf("\nEnter id of Bakery you want to remove:");
  358.     scanf("%d", &id);//Зчитуємо номер випічки для видалення
  359.     for (int i = 0; i < bakerylistcounter; i++) {
  360.         if (bakeryList[i].id == id) {//Шукаємо у списку випічку з цим номером
  361.             for (int k = i; k < bakerylistcounter - 1; k++) {//Проходимось по списку дальше і перепризначаємо випічку і зменшуємо номер випічки
  362.                 bakeryList[k] = bakeryList[k + 1];
  363.                 bakeryList[k].id--;
  364.             }
  365.             bakerylistcounter--;//зменшуємо лічильник випічки
  366.             bakeryList = realloc(bakeryList, bakerylistcounter * sizeof(Bakery));//перевиділяємо память на випічку менше
  367.             break;//Виходимо з циклу
  368.         }
  369.     }
  370. }
  371.  
  372. void printOrders() {//Функція виведення замовлень
  373.     printf("-----------Orders List-----------\n");
  374.     for (int i = 0; i < orderlistcounter; i++) {//Проходимось по списку замовлень
  375.         char* prodname = malloc(stringlength* sizeof(char));//Робимо змінну під назву випічки
  376.         for (int j = 0; j < bakerylistcounter; j++) {//Шукаємо випічку згідно з її номер вказаним в замовленні
  377.             if (bakeryList[j].id == ordersList[i].prod) {
  378.                 prodname = bakeryList[j].name;//Якщо знайшли записуємо назву випічки
  379.             }
  380.         }
  381.         printf("\n=====--- %d ---=====", ordersList[i].id);//Виводимо всі дані замовлення
  382.         printf("\nCustomer: %s", ordersList[i].customer);
  383.         printf("\nProduct: %s", prodname);
  384.         printf("\nAmount: %d", ordersList[i].amount);
  385.     }
  386. }
  387.  
  388. void addOrder() {//Функція додавання замовлення
  389.     orderlistcounter++;//Збільшуємо лічильник замовлень
  390.     ordersList = realloc(ordersList, orderlistcounter * sizeof(Order));//Перевиділяємо память на одне замовлення більше
  391.     Order* newOrder = ordersList + orderlistcounter - 1;//Робимо вказівник на останнє замовлення
  392.     newOrder->customer = malloc(stringlength* sizeof(char));//Робимо змінну під імя замовника
  393.     newOrder->id = orderlistcounter;
  394.     printf("\n-----------New Order-----------");
  395.     printf("\nCustomer:");
  396.     scanf("%s", newOrder->customer);//Зчитуємо імяя замовника
  397.     printBakery(-1);//Виводимо всю випічку
  398.     printf("\nEnter product id:");
  399.     scanf("%d", &newOrder->prod);//Зчитуємо номер випічки
  400.     printf("Enter product amount:");
  401.     scanf("%d", &newOrder->amount);//Зчитуємо кількістт
  402. }
  403.  
  404. void editOrder() {//Функція редагування замовлення
  405.     int id = 0, option = 0;
  406.     printf("\nEnter id of Order you want to edit:");
  407.     scanf("%d", &id);//Зчитуємо номер замовлення для редагування
  408.     Order* editOrder = NULL;//Робимо вказівник на ніяке замовлення
  409.     bool found = false;//Робимо прпорець чи знайшли
  410.     for (int i = 0; i < orderlistcounter; i++) {//Шукаємо замовлення в списку
  411.         if (ordersList[i].id == id) {
  412.             editOrder = &ordersList[i];//присвоюємо вказівник
  413.             found = true;//Вказуємо що знайшли
  414.         }
  415.     }
  416.     if (found == false) {//Якщо не знайшли то виводим повідомлення і виходимо
  417.         printf("\nElement doesn`t exist!");
  418.         return;
  419.     }
  420.     char* prodname = "No bakery";//Робимо тимчасову змінну  під назву випічку
  421.     for (int j = 0; j < bakerylistcounter; j++) {
  422.         if (bakeryList[j].id == editOrder->prod) {//Шукаємо назву випічки в списку випічки
  423.             prodname = bakeryList[j].name;//Присвоюємо тимчасовій змінній назву випічки якщо знайшли
  424.         }
  425.     }
  426.     printf("\nWhich option you want to edit?");//Виводимо меню
  427.     printf("\n1) Customer: %s", editOrder->customer);
  428.     printf("\n2) Product: %s", prodname);
  429.     printf("\n3) Amount: %d", editOrder->amount);
  430.     printf("\nYour choice (Number):");
  431.     scanf("%d", &option);//Зчитуємо вибір
  432.     switch (option) {//В залежності від вибору
  433.         case 1:
  434.             printf("Input your value:");
  435.             scanf("%s", editOrder->customer);//Зчитуємо нове ім'я замовника
  436.             break;
  437.         case 2:
  438.             printf("Input your value (Id of Product):");
  439.             scanf("%d", &editOrder->prod);//Зчитуємо новий номер продукту
  440.             break;
  441.         case 3:
  442.             printf("Input your value:");
  443.             scanf("%d", &editOrder->amount);//Зчитуємо нову кількість
  444.             break;
  445.         default:
  446.             break;
  447.     }
  448. }
  449.  
  450. void orderRemove() {//Функція видалення замовлення
  451.     int id;
  452.     printOrders();//Виводимо всі замовлення
  453.     printf("\nEnter id of Order you want to remove:");
  454.     scanf("%d", &id);//Зчитуємо номер замовлення
  455.     for (int i = 0; i < orderlistcounter; i++) {//Шукаємо його в списку
  456.         if (ordersList[i].id == id) {//якщо знайшли
  457.             for (int k = i; k < orderlistcounter - 1; k++) {//Проходимось далі по списку і переприсвоюємо замовлення і зменшуємо їх номер
  458.                 ordersList[k] = ordersList[k + 1];
  459.                 ordersList[k].id--;
  460.             }
  461.             orderlistcounter--;//ЗМеншуємо лічильник замовлень
  462.             ordersList = realloc(ordersList, orderlistcounter * sizeof(Order));//Перевиділяємо память на одне замовлення менше
  463.             break;//виходимо
  464.         }
  465.     }
  466. }
  467.  
  468. float orderPrice(int index) {//Функція рахування ціни замовлення з жвома режимами якщо index=-1 то просить ввести номер замовлення якщо додатнє то повертає ціну замовлення з цим номером
  469.     if (index == -1) {//Вивід всіх
  470.         int id;
  471.         printOrders();//Виводимо замовлення
  472.         printf("\nEnter id of Order to show its price:");
  473.         scanf("%d", &id);//Зчитуємо номер
  474.         for (int i = 0; i < orderlistcounter; i++) {//ШУкаємо замовлення з цим номером
  475.             if (ordersList[i].id == id) {//якщо знайшли
  476.                 for (int j = 0; j < bakerylistcounter; j++) {//шукаємо випічку з номером вказаним в замовленні
  477.                     if (bakeryList[j].id == ordersList[i].prod) {//якщо знайшли
  478.                         printf("Orders price: %f", bakeryList[j].price * ordersList[i].amount);//Перемножуємо ціну за штуку і кількість і виводимо
  479.                     }
  480.                 }
  481.             }
  482.         }
  483.         return 0;//виходимо
  484.     }
  485.     else {//Вивід конкретного замовлення
  486.         int id = index;
  487.         for (int i = 0; i < orderlistcounter; i++) {//Шукаємо замовлення з цим номером
  488.             if (ordersList[i].id == id) {//Якщо знайшли
  489.                 for (int j = 0; j < bakerylistcounter; j++) {//шукаємо випічку з номером вказаним в замовленні
  490.                     if (bakeryList[j].id == ordersList[i].prod) {//Якщо знайшли
  491.                         return (float)bakeryList[j].price * ordersList[i].amount;//Вертаємо ціну помножену на кількість
  492.                     }
  493.                 }
  494.             }
  495.         }
  496.     }
  497. }
  498.  
  499. void orderTotal() {//Функція для підрахунку загальної ціни
  500.     printf("\n\n-----------Total Price-----------");
  501.     float totalprice = 0;//Робим змінну загальної ціни
  502.     for (int i = 0; i < orderlistcounter; i++) {//Проходимось по списку замовлень
  503.         totalprice += orderPrice(i + 1);//Додаємо до загальної ціни ціну кожного замовлення що рахується за допомогою функції вище
  504.     }
  505.     printf("Total orders price = %.2f", totalprice);//Виводимо ціну
  506. }
  507.  
  508. int main() {
  509.     int cycle = 1;//Робимо змінну для циклу
  510.     while (cycle == 1) {//Поки змінна циклу дорівнює 1 виводимо меню
  511.         int choice = 0;//Робимозмінну для вибору
  512.         printf("\n\n-----------Menu-----------");//виводмо меню
  513.         printf("\n1)Bakery list");
  514.         printf("\n2)Bakery add");
  515.         printf("\n3)Bakery edit");
  516.         printf("\n4)Bakery remove");
  517.         printf("\n5)Bakery find");
  518.         printf("\n");
  519.         printf("\n6)Bakery type list");
  520.         printf("\n7)Bakery type add");
  521.         printf("\n8)Bakery type change");
  522.         printf("\n9)Bakery type remove");
  523.         printf("\n");
  524.         printf("\n10)Order list");
  525.         printf("\n11)Order add");
  526.         printf("\n12)Order change");
  527.         printf("\n13)Order remove");
  528.         printf("\n14)Order price");
  529.         printf("\n15)Total order price");
  530.         printf("\n16)Exit");
  531.  
  532.         printf("\nEnter your choice:");
  533.         scanf("%d", &choice);//Зчитуємо вибір
  534.         switch (choice) {//В залежності від вибору викликаємо відповідну функцію
  535.             case 1:
  536.                 printBakery(-1);
  537.                 break;
  538.             case 2:
  539.                 addBakery();
  540.                 break;
  541.             case 3:
  542.                 editBakery();
  543.                 break;
  544.             case 4:
  545.                 bakeryRemove();
  546.                 break;
  547.             case 5:
  548.                 findBakery();
  549.                 break;
  550.             case 6:
  551.                 printBakeType();
  552.                 break;
  553.             case 7:
  554.                 addBakeType("", true);
  555.                 break;
  556.             case 8:
  557.                 changeBakeType();
  558.                 break;
  559.             case 9:
  560.                 bakeryTypeRemove();
  561.                 break;
  562.             case 10:
  563.                 printOrders();
  564.                 break;
  565.             case 11:
  566.                 addOrder();
  567.                 break;
  568.             case 12:
  569.                 editOrder();
  570.                 break;
  571.             case 13:
  572.                 orderRemove();
  573.                 break;
  574.             case 14:
  575.                 orderPrice(-1);
  576.                 break;
  577.             case 15:
  578.                 orderTotal();
  579.                 break;
  580.             case 16:
  581.                 cycle = 0;//Міняємо змінну циклу
  582.                 break;
  583.             default:
  584.                 break;
  585.         }
  586.     }
  587. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement