Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*23. Исходные данные : Имеются следующие данные о товарах обувного магазина :
- наименование(ботинки, сапоги, босоножки и т.д.),
- тип(мужская, женская или детская),
- сезон,
- цвет,
- размеры,
- цена.
- Условие поиска : Летняя детская обувь.
- Коррекция : Размеры с 10 до 45.*/
- #include <windows.h>
- #include <stdio.h>
- #include <conio.h>
- #include <locale.h>
- struct TProduct { // структура, хранящая сведения об изделии
- char name[31]; // название изделия
- char gender[31]; // тип(мужская, женская или детская) изделия
- char season[31]; // сезон изделия
- char color[31]; // цвет изделия
- int size, // размер изделия
- price; // количество изделий, имеющееся в наличии
- };
- //создание копии строки, но с символами
- //в верхнем регистре в Win1251
- char* ANSIUpperCase(char* s, char* S) {
- S = strcpy(S, s);
- char* ch = S;
- while (*ch) {
- if (*ch >= 'a' && *ch <= 'z' || *ch >= 'а' && *ch <= 'я') *ch = *ch - 32;
- if (*ch == 'ё') *ch = 'Ё';
- ch++;
- }
- return S;
- }
- void CreateBinaryFile(int argc, char* argv[]) { // создание двоичного файла из текстового
- if (argc < 3) { // три параметра: путь+имя запущенного файла, текстовый и бинарный файлы
- printf("----------------------------");
- printf("\nМало параметров\nPress any key\n");
- getch();
- return;
- }
- FILE* ft = fopen(argv[2], "rt"); // открытие текстового файла для чтения
- if (ft == NULL) {
- printf("\nError: не удалось открыть файл с исходными данными %s", argv[2]);
- printf("\nPress any key ");
- getch();
- return;
- }
- FILE* fb = fopen(argv[1], "wb"); // открытие бинарного файла для записи с созданием
- if (fb == NULL) {
- fclose(ft);
- printf("\nError: не удалось создать двоичный файл %s", argv[1]);
- printf("\nPress any key");
- getch();
- return;
- }
- TProduct Product; // Product является типом Tproduct
- int kol = 0, // количество блоков данных (записей)
- nw = 1; // число записанных элементов
- char s[11]; // ch - массив из 10 символов (строка из символов)
- while (nw) {
- fscanf(ft, "%31s", Product.name); // ввод слова из текстового файла
- if (strcmp(Product.name, "**") == 0 || feof(ft)) break;// признак конца файла - название ** или конец файла
- fscanf(ft, "%31s", Product.gender);
- fscanf(ft, "%31s", Product.season);
- fscanf(ft, "%31s", Product.color);
- fscanf(ft, "%s", s); Product.size = atoi(s); // ввод размера продукта из текстового файла
- fscanf(ft, "%s", s); Product.price = atoi(s); // ввод цены товара из текстового файла
- // atoi(s) - конвертирует строку s в величину типа int
- nw = fwrite(&Product, sizeof(Product), 1, fb); // fwrite - запись блока данных
- /* &Product - указатель на информацию,
- которую необходимо записать в файл */
- // 1 элемент (длиной sizeof(Product)) будет записан
- // размер каждого элемента в байтах
- // fb - бинарный файл, в который записывается информация
- kol++;
- }
- if (nw != 1) printf("Error: Ошибка при записи");
- fclose(ft); //закрытие текстового файла для чтения
- fclose(fb); //закрытие бинарного файла
- printf("Создан двоичный файл из %d записей по %d байт\n", kol, sizeof(TProduct));
- printf("Press any key to continue");
- }
- //Условие поиска : Летняя детская обувь.
- void FindProduct(int argc, char* argv[]) { //поиск в двоичном файле
- if (argc < 2) { // два параметра: путь + имя запущенного файла и бинарный файл
- printf("Мало параметров\nPress any key");
- return;
- }
- FILE* fb = fopen(argv[1], "rb"); // открытие бинарного файла для чтения
- if (fb == NULL) {
- printf("Error: не удалось открыть двоичный файл %s\n", argv[1]);
- printf("Press ENTER");
- return;
- }
- TProduct Product; // Product является типом Tproduct
- char SUp[31];
- int nr = 1, // число считанных элементов
- kol = 0; // количество записей, удовлетворяющим условиям поиска
- while (nr) {
- nr = fread(&Product, sizeof(Product), 1, fb);
- if (nr > 0)
- if (!(strcmp(ANSIUpperCase(Product.name, SUp), "ОБУВЬ")) &&
- !(strcmp(ANSIUpperCase(Product.gender, SUp), "ДЕТСКАЯ")) &&
- !(strcmp(ANSIUpperCase(Product.season, SUp), "ЛЕТНЯЯ")))
- {
- printf("Найдена запись % s % s % s % s % d % d\n", Product.name, Product.gender, Product.season, Product.color, Product.size, Product.price);
- kol++;
- }
- };
- if (kol == 0) {
- printf("Не найдено ни одной записи, удовлетворяющей условиям поиска.\n");
- }
- else
- printf("Всего найдено: %d\n", kol);
- fclose(fb); //закрытие бинарного файла
- printf("Press any key to continue");
- }
- //Коррекция: Размеры с 10 до 45
- void CorrectFile(int argc, char* argv[]) { //корректировка в двоичном файле
- if (argc < 2) { // два параметра: путь + имя запущенного файла и бинарный файл
- printf("Мало параметров\nPress any key");
- getch();
- return;
- }
- FILE* fb = fopen(argv[1], "rb+"); // открытие бинарного файла для записи с изменинием
- if (fb == NULL) {
- printf("Error: не удалось открыть двоичный файл %s\n", argv[1]);
- printf("Press ENTER");
- getch();
- return;
- }
- TProduct Product; // Product является типом Tproduct
- int kol = 0, // количество блоков данных (записей)
- nr = 1, // число считанных элементов
- nw = 1, // число записанных элементов
- flag;
- nr = fread(&Product, sizeof(Product), 1, fb); // fread - считывание блока данных
- /* &Product - указатель на информацию,
- которую необходимо считать из файла */
- // 1 элемент (длиной sizeof(Product)) будет считан
- // размер каждого элемента в байтах
- // fb - бинарный файл, в котором находится информация
- while (nr == 1 && nw == 1) {
- printf("Считана запись:\n");
- printf("%s %s %s %s %d %d\n\n", Product.name, Product.gender, Product.season, Product.color, Product.size, Product.price);
- flag = 0;
- if (Product.size < 10) { Product.size = 10; flag = 1; }
- if (Product.size > 45) { Product.size = 45; flag = 1; }
- if (flag) {
- kol++;
- fseek(fb, 0 - sizeof(Product), SEEK_CUR); /* становимся перед текущей записью
- и записываем новую информацию */
- nw = fwrite(&Product, sizeof(Product), 1, fb); // fwrite - запись блока данных
- /* &Product - указатель на информацию,
- которую необходимо записать в файл */
- // 1 элемент (длиной sizeof(Product)) будет записан
- // размер каждого элемента в байтах
- // fb - бинарный файл, в который записывается информация
- fseek(fb, 0, SEEK_CUR); /* перемещаем указатель на позицию
- после записи, куда записали новую информацию */
- printf("Сделана корректировка:\n");
- printf("%s %s %s %s %d %d\n\n", Product.name, Product.gender, Product.season, Product.color, Product.size, Product.price);
- }
- nr = fread(&Product, sizeof(Product), 1, fb); // fread - считывание блока данных
- /* &Product - указатель на информацию,
- которую необходимо считать из файла */
- // 1 элемент (длиной sizeof(Product)) будет считан
- // размер каждого элемента в байтах
- // fb - бинарный файл, в котором находится информация
- }
- if (kol == 0)
- printf("Ни одной корректировки\n");
- else
- printf("Всего корректировок: %d\n", kol);
- fclose(fb); //закрытие бинарного файла
- printf("Press any key to continue");
- }
- void ViewFile(int argc, char* argv[]) { // просмотр двоичного файла
- if (argc < 2) { // два параметра: путь + имя запущенного файла и бинарный файл
- printf("Мало параметров\nPress any key");
- getch();
- return;
- }
- FILE* fb = fopen(argv[1], "rb+"); // открытие бинарного файла для записи с изменинием
- if (fb == NULL) {
- printf("Error: не удалось открыть двоичный файл %s\n", argv[1]);
- printf("Press ENTER");
- getch();
- return;
- }
- TProduct Product; // Product является типом Tproduct
- int nr = fread(&Product, sizeof(Product), 1, fb); // fread - считывание блока данных
- /* &Product - указатель на информацию,
- которую необходимо считать из файла */
- // 1 элемент (длиной sizeof(Product)) будет считан
- // размер каждого элемента в байтах
- // fb - бинарный файл, в котором находится информация
- printf("\n====================================================================\n");
- printf("| Название изделия | Тип | Сезон | Цвет | Размер | Цена |\n====================================================================\n");
- while (nr == 1 || !feof(fb)) {
- printf("| %11s | %7s | %5s | %s | %2d | %d |\n", Product.name, Product.gender, Product.season, Product.color, Product.size, Product.price);
- printf("====================================================================\n");
- nr = fread(&Product, sizeof(Product), 1, fb); // fread - считывание блока данных
- /* &Product - указатель на информацию,
- которую необходимо считать из файла */
- // 1 элемент (длиной sizeof(Product)) будет считан
- // размер каждого элемента в байтах
- // fb - бинарный файл, в котором находится информация
- }
- fclose(fb); //закрытие бинарного файла
- printf("Press any key to continue");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement