Advertisement
Pohuyumer

LAB 2.7 HEADER

Jun 2nd, 2020
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.36 KB | None | 0 0
  1. /*23. Исходные данные : Имеются следующие данные о товарах обувного магазина :
  2. наименование(ботинки, сапоги, босоножки и т.д.),
  3. тип(мужская, женская или детская),
  4. сезон,
  5. цвет,
  6. размеры,
  7. цена.
  8. Условие поиска : Летняя детская обувь.
  9. Коррекция : Размеры с 10 до 45.*/
  10.  
  11. #include <windows.h>
  12. #include <stdio.h>
  13. #include <conio.h>
  14. #include <locale.h>
  15.  
  16. struct TProduct {     // структура, хранящая сведения об изделии
  17.     char name[31];    // название изделия
  18.     char gender[31];  // тип(мужская, женская или детская) изделия
  19.     char season[31];  // сезон изделия
  20.     char color[31];   // цвет изделия
  21.  
  22.     int size,        // размер изделия
  23.         price;        // количество изделий, имеющееся в наличии
  24. };
  25.  
  26. //создание копии строки, но с символами
  27. //в верхнем регистре в Win1251
  28. char* ANSIUpperCase(char* s, char* S) {
  29.     S = strcpy(S, s);
  30.     char* ch = S;
  31.     while (*ch) {
  32.         if (*ch >= 'a' && *ch <= 'z' || *ch >= 'а' && *ch <= 'я') *ch = *ch - 32;
  33.         if (*ch == 'ё') *ch = 'Ё';
  34.         ch++;
  35.     }
  36.     return S;
  37. }
  38.  
  39. void CreateBinaryFile(int argc, char* argv[]) {             // создание двоичного файла из текстового
  40.  
  41.     if (argc < 3) {                                         // три параметра: путь+имя запущенного файла, текстовый и бинарный файлы
  42.         printf("----------------------------");
  43.         printf("\nМало параметров\nPress any key\n");
  44.         getch();
  45.         return;
  46.     }
  47.  
  48.     FILE* ft = fopen(argv[2], "rt");                        // открытие текстового файла для чтения
  49.     if (ft == NULL) {
  50.         printf("\nError: не удалось открыть файл с исходными данными %s", argv[2]);
  51.         printf("\nPress any key ");
  52.         getch();
  53.         return;
  54.     }
  55.  
  56.     FILE* fb = fopen(argv[1], "wb");                        // открытие бинарного файла для записи с созданием
  57.     if (fb == NULL) {
  58.         fclose(ft);
  59.         printf("\nError: не удалось создать двоичный файл %s", argv[1]);
  60.         printf("\nPress any key");
  61.         getch();
  62.         return;
  63.     }
  64.  
  65.     TProduct Product;                                       // Product является типом Tproduct
  66.     int kol = 0,                                            // количество блоков данных (записей)
  67.         nw = 1;                                             // число записанных элементов
  68.     char s[11];                                             // ch - массив из 10 символов (строка из символов)
  69.  
  70.     while (nw) {
  71.         fscanf(ft, "%31s", Product.name);                   // ввод слова из текстового файла
  72.         if (strcmp(Product.name, "**") == 0 || feof(ft)) break;// признак конца файла - название ** или конец файла
  73.  
  74.         fscanf(ft, "%31s", Product.gender);
  75.         fscanf(ft, "%31s", Product.season);
  76.         fscanf(ft, "%31s", Product.color);
  77.         fscanf(ft, "%s", s); Product.size = atoi(s);        // ввод размера продукта из текстового файла
  78.         fscanf(ft, "%s", s); Product.price = atoi(s);       // ввод цены товара из текстового файла
  79.                                                             // atoi(s) - конвертирует строку s в величину типа int
  80.  
  81.  
  82.         nw = fwrite(&Product, sizeof(Product), 1, fb);      // fwrite - запись блока данных
  83.                                                             /* &Product - указатель на информацию,
  84.                                                             которую необходимо записать в файл */
  85.                                                             // 1 элемент (длиной sizeof(Product)) будет записан
  86.                                                             // размер каждого элемента в байтах
  87.                                                             // fb - бинарный файл, в который записывается информация
  88.         kol++;
  89.     }
  90.     if (nw != 1) printf("Error: Ошибка при записи");
  91.  
  92.     fclose(ft);                                             //закрытие текстового файла для чтения
  93.     fclose(fb);                                             //закрытие бинарного файла
  94.  
  95.     printf("Создан двоичный файл из %d записей по %d байт\n", kol, sizeof(TProduct));
  96.     printf("Press any key to continue");
  97.  
  98.  
  99. }
  100.  
  101. //Условие поиска : Летняя детская обувь.
  102.  
  103. void FindProduct(int argc, char* argv[]) {                  //поиск в двоичном файле
  104.  
  105.     if (argc < 2) {                                         // два параметра: путь + имя запущенного файла и бинарный файл
  106.         printf("Мало параметров\nPress any key");
  107.         return;
  108.     }
  109.  
  110.     FILE* fb = fopen(argv[1], "rb");                        // открытие бинарного файла для чтения
  111.     if (fb == NULL) {
  112.  
  113.         printf("Error: не удалось открыть двоичный файл %s\n", argv[1]);
  114.         printf("Press ENTER");
  115.         return;
  116.     }
  117.  
  118.     TProduct Product;                                       // Product является типом Tproduct
  119.     char SUp[31];
  120.     int  nr = 1,                                            // число считанных элементов
  121.         kol = 0;                                           // количество записей, удовлетворяющим условиям поиска
  122.  
  123.     while (nr) {
  124.  
  125.         nr = fread(&Product, sizeof(Product), 1, fb);
  126.  
  127.         if (nr > 0)
  128.             if (!(strcmp(ANSIUpperCase(Product.name, SUp), "ОБУВЬ")) &&
  129.                 !(strcmp(ANSIUpperCase(Product.gender, SUp), "ДЕТСКАЯ")) &&
  130.                 !(strcmp(ANSIUpperCase(Product.season, SUp), "ЛЕТНЯЯ")))
  131.                {
  132.                printf("Найдена запись  % s % s % s % s % d % d\n", Product.name, Product.gender, Product.season, Product.color, Product.size, Product.price);
  133.                kol++;
  134.                }
  135.     };
  136.  
  137.     if (kol == 0) {
  138.         printf("Не найдено ни одной записи, удовлетворяющей условиям поиска.\n");
  139.     }
  140.     else
  141.         printf("Всего найдено: %d\n", kol);
  142.  
  143.     fclose(fb);                                             //закрытие бинарного файла       
  144.  
  145.     printf("Press any key to continue");
  146. }
  147.  
  148. //Коррекция: Размеры с 10 до 45
  149.  
  150. void CorrectFile(int argc, char* argv[]) {                  //корректировка в двоичном файле
  151.  
  152.     if (argc < 2) {                                         // два параметра: путь + имя запущенного файла и бинарный файл
  153.         printf("Мало параметров\nPress any key");
  154.         getch();
  155.         return;
  156.     }
  157.  
  158.     FILE* fb = fopen(argv[1], "rb+");                       // открытие бинарного файла для записи с изменинием
  159.     if (fb == NULL) {
  160.         printf("Error: не удалось открыть двоичный файл %s\n", argv[1]);
  161.         printf("Press ENTER");
  162.         getch();
  163.         return;
  164.     }
  165.  
  166.     TProduct Product;                                       // Product является типом Tproduct
  167.     int kol = 0,                                            // количество блоков данных (записей)
  168.         nr = 1,                                             // число считанных элементов
  169.         nw = 1,                                             // число записанных элементов
  170.         flag;
  171.  
  172.     nr = fread(&Product, sizeof(Product), 1, fb);           // fread - считывание блока данных
  173.                                                             /* &Product - указатель на информацию,
  174.                                                             которую необходимо считать из файла */
  175.                                                             // 1 элемент (длиной sizeof(Product)) будет считан
  176.                                                             // размер каждого элемента в байтах
  177.                                                             // fb - бинарный файл, в котором находится информация
  178.  
  179.     while (nr == 1 && nw == 1) {
  180.         printf("Считана запись:\n");
  181.         printf("%s %s %s %s %d %d\n\n", Product.name, Product.gender, Product.season, Product.color, Product.size, Product.price);
  182.         flag = 0;
  183.         if (Product.size < 10) { Product.size = 10; flag = 1; }
  184.         if (Product.size > 45) { Product.size = 45; flag = 1; }
  185.    
  186.         if (flag) {
  187.             kol++;
  188.             fseek(fb, 0 - sizeof(Product), SEEK_CUR);       /* становимся перед текущей записью
  189.                                                             и записываем новую информацию */
  190.             nw = fwrite(&Product, sizeof(Product), 1, fb);  // fwrite - запись блока данных
  191.                                                             /* &Product - указатель на информацию,
  192.                                                             которую необходимо записать в файл */
  193.                                                             // 1 элемент (длиной sizeof(Product)) будет записан
  194.                                                             // размер каждого элемента в байтах
  195.                                                             // fb - бинарный файл, в который записывается информация
  196.             fseek(fb, 0, SEEK_CUR);                         /* перемещаем указатель на позицию
  197.                                                             после записи, куда записали новую информацию */
  198.  
  199.             printf("Сделана корректировка:\n");
  200.             printf("%s %s %s %s %d %d\n\n", Product.name, Product.gender, Product.season, Product.color, Product.size, Product.price);
  201.         }
  202.         nr = fread(&Product, sizeof(Product), 1, fb);       // fread - считывание блока данных
  203.                                                             /* &Product - указатель на информацию,
  204.                                                             которую необходимо считать из файла */
  205.                                                             // 1 элемент (длиной sizeof(Product)) будет считан
  206.                                                             // размер каждого элемента в байтах
  207.                                                             // fb - бинарный файл, в котором находится информация
  208.     }
  209.     if (kol == 0)
  210.         printf("Ни одной корректировки\n");
  211.     else
  212.         printf("Всего корректировок: %d\n", kol);
  213.  
  214.     fclose(fb);                                             //закрытие бинарного файла
  215.  
  216.     printf("Press any key to continue");
  217.  
  218. }
  219.  
  220. void  ViewFile(int argc, char* argv[]) {                    // просмотр двоичного файла
  221.  
  222.     if (argc < 2) {                                         // два параметра: путь + имя запущенного файла и бинарный файл
  223.         printf("Мало параметров\nPress any key");
  224.         getch();
  225.         return;
  226.     }
  227.  
  228.     FILE* fb = fopen(argv[1], "rb+");                       // открытие бинарного файла для записи с изменинием
  229.     if (fb == NULL) {
  230.         printf("Error: не удалось открыть двоичный файл %s\n", argv[1]);
  231.         printf("Press ENTER");
  232.         getch();
  233.         return;
  234.     }
  235.  
  236.     TProduct Product;                                       // Product является типом Tproduct
  237.  
  238.     int nr = fread(&Product, sizeof(Product), 1, fb);       // fread - считывание блока данных
  239.                                                             /* &Product - указатель на информацию,
  240.                                                             которую необходимо считать из файла */
  241.                                                             // 1 элемент (длиной sizeof(Product)) будет считан
  242.                                                             // размер каждого элемента в байтах
  243.                                                             // fb - бинарный файл, в котором находится информация
  244.  
  245.     printf("\n====================================================================\n");
  246.     printf("| Название изделия |   Тип   |  Сезон |   Цвет   | Размер |  Цена  |\n====================================================================\n");
  247.     while (nr == 1 || !feof(fb)) {
  248.         printf("| %11s      | %7s | %5s |  %s  |   %2d   |   %d  |\n", Product.name, Product.gender, Product.season, Product.color, Product.size, Product.price);
  249.     printf("====================================================================\n");
  250.  
  251.         nr = fread(&Product, sizeof(Product), 1, fb);       // fread - считывание блока данных
  252.                                                             /* &Product - указатель на информацию,
  253.                                                             которую необходимо считать из файла */
  254.                                                             // 1 элемент (длиной sizeof(Product)) будет считан
  255.                                                             // размер каждого элемента в байтах
  256.                                                             // fb - бинарный файл, в котором находится информация
  257.     }
  258.  
  259.     fclose(fb);                                             //закрытие бинарного файла
  260.  
  261.     printf("Press any key to continue");
  262. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement