Advertisement
Qellex

lab 8 - v2

Jun 24th, 2022 (edited)
492
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.00 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <windows.h>
  6. #include <math.h>
  7. typedef struct {
  8.     char name[20]; // наименование продукта
  9.     int count; // количество продуктов
  10.     int preis; // цена продукта
  11. }Product;
  12. // добавка продукта
  13. void add(Product* pr) {
  14.     printf("\nВведите наименование продукта: ");
  15.     scanf("%19s", pr->name);
  16.     printf("Количество продуктов: ");
  17.     scanf("%d", &pr->count);
  18.     printf("И цену: ");
  19.     scanf("%d", &pr->preis);
  20.     printf("\nВаш продукт успешно добавлен.\n");
  21. }
  22. // удаление продукта
  23. void del(Product* pr, int count) {
  24.     int n;
  25.     printf("\nВведите номер продукта, который хотите удалить из списка: ");
  26.     scanf("%d", &n);
  27.     n--;
  28.     while (n < 0 || n > count) {
  29.         printf("\nТакого номера нет, введите существующий: ");
  30.         scanf("%d", &n);
  31.         n--;
  32.     }
  33.     pr[n] = pr[count];
  34. }
  35. // таблица продукта
  36. void table(Product* pr, int count) {
  37.     printf("\n\n\nСписок продуктов:\n");
  38.     printf("Наименование\tКол-во\tЦена\n");
  39.     for (int i = 0; i < count; i++) {
  40.         printf("%s\t\t%d\t%d\n", pr[i].name, pr[i].count, pr[i].preis);
  41.     }
  42. }
  43. // по указанной начальной подстроке названия
  44. void search_name(Product* pr, int count) {
  45.     boolean f = true;
  46.     char name[20];
  47.     printf("Введите наименования продукта: ");
  48.     scanf("%19s", &name);
  49.     printf("\nСписок продуктов:\n");
  50.     for (int i = 0; i < count; i++) {
  51.         if (strcmp(name, pr[i].name) == 0) {
  52.             printf("%s\t\t%d\t%d\n", pr[i].name, pr[i].count, pr[i].preis);
  53.             f = false;
  54.         }
  55.     }
  56.     if (f)
  57.         printf("Список подходящих продуктов пуст.");
  58. }
  59. // по заданному диапазону цен
  60. void search_preis(Product* pr, int count) {
  61.     int max, min;
  62.     do{
  63.         printf("Введите диапазон цен, для поиска продуктов: ");
  64.         scanf("%d%d", &min, &max);
  65.         if (min > max) {
  66.             int x = min;
  67.             min = max;
  68.             max = x;
  69.         }
  70.     }while(max < 0 || min < 0);
  71.     boolean f = true;
  72.     printf("\nСписок продуктов:\n");
  73.     for (int i = 0; i < count; i++) {
  74.         if (pr[i].preis >= min && pr[i].preis <= max) {
  75.             printf("%s\t\t%d\t%d\n", pr[i].name, pr[i].count, pr[i].preis);
  76.             f = false;
  77.         }
  78.     }
  79.     if (f)
  80.         printf("Список подходящих продуктов пуст.");
  81. }
  82.  
  83. int menu(int count) {
  84.     int use;
  85.     printf("\n\n\t\tМеню\n");
  86.     printf("1. Вывод списка на экран.\n");
  87.     printf("2. Добавить продукт в список.\n");
  88.     printf("3. Удалить продукт из списка.\n");
  89.     printf("4. Поиск по названию.\n");
  90.     printf("5. Поиск по заданному диапазону цен.\n");
  91.     printf("6. Для выхода из системы.\n");
  92.     if (count == 1) {
  93.         printf("Ваш список пуст добавьте в него продукт.\n");
  94.         return 2;
  95.     }
  96.     else {
  97.         do {
  98.             printf("Введите цифру пункта, который вы желаете выполнить.\n");
  99.             scanf("%d", &use);
  100.         } while (use < 1 || use > 6);
  101.         return use;
  102.     }
  103. }
  104. void main() {
  105.     system("chcp 1251");
  106.     int count = 1;
  107.     Product* pr;
  108.     pr = (Product*)malloc(sizeof(Product) * count);
  109.     while (count != -1) {
  110.         int i = menu(count);
  111.         switch (i)
  112.         {
  113.         case 1:
  114.             table(pr, count - 1);
  115.             break;
  116.         case 2:
  117.             add(&pr[count - 1]);
  118.             count++;
  119.             pr = (Product*)realloc((void*)pr, sizeof(Product) * count);
  120.             break;
  121.         case 3:
  122.             del(pr, count - 2);
  123.             count--;
  124.             pr = (Product*)realloc((void*)pr, sizeof(Product) * count);
  125.             break;
  126.         case 4:
  127.             search_name(pr, count);
  128.             break;
  129.         case 5:
  130.             search_preis(pr, count);
  131.             break;
  132.         default:
  133.             count = -1;
  134.             break;
  135.         }
  136.     }
  137.     system("pause");
  138. }
  139.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement