Создать структуру и написать функцию, которая записывает в бинарный файл данные о сканере из структуры - C (СИ)
Формулировка задачи:
Сама структура имеет вид:
Структура файла: в первых 4-х байтах размещается значение типа long, определяющее количество сделанных в файл записей; далее без пропусков размещаются записи о сканерах.
Написать функцию, которая извлекает из этого файла данные о сканере в структуру типа scan_info. Обязательный параметр – номер требуемой записи. Функция должна возвращать нулевое значение, если чтение прошло успешно, и 1 – иначе.
Привести примеры программы, создающей файл с данными о сканерах (данные вводятся с клавиатуры) – 6-8 записей и выводящей на дисплей данные о запрошенной записи.
Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
struct scan_info{ char model[25]; // наименование модели int price; // цена double x_size; // горизонтальный размер области сканирования double y_size; // вертикальный размер области сканирования int optr; // оптическое разрешение int grey; // число градаций серого };
Решение задачи: «Создать структуру и написать функцию, которая записывает в бинарный файл данные о сканере из структуры»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <locale.h> #include "f.h" void input(FILE *tf)// создание нового файла { char choice; setlocale(LC_ALL,"RUS"); tf=fopen("C:/file1.dat","wb"); // открытие бинарного файла для записи printf("\n Ввод товаров\n"); do { printf("\n название: "); scanf("%s",&s1.model); printf("\n цена: "); scanf("%d",&s1.price); printf("\n горизонтальный размер области сканирования: "); scanf("%f",&s1.x_size); printf("\n вертикальный размер области сканирования: "); scanf("%f",&s1.y_size); printf("\n оптическое разрешение: "); scanf("%d",&s1.optr); printf("\n число градаций серого: "); scanf("%d",&s1.grey); fwrite(&s1,sizeof(s1),1,tf); // запись в файл одной структуры t1 printf("\n Закончить? y/n \n\n "); choice=getch(); } while (choice != 'y'); fclose(tf); } void print(FILE *tf)//просмотр файла { int i; tf=fopen("C:/file1.dat","rb"); // открытие бинарного файла для чтения i=1; fread(&s1,sizeof(s1),1,tf); // чтение из файла одной структуры t1 while (!feof(tf)) { printf("model %s \n price %d \n x_size %f \n y_size %f \n optr %d \n grey %d \n",s1.model,s1.price,s1.x_size,s1.y_size,s1.optr,s1.grey); fread(&s1,sizeof(s1),1,tf); i++; } getch(); } void app(FILE *tf)//добавление в файл { char ch; setlocale(LC_ALL,"RUS"); tf=fopen("C:/file1.dat","ab"); // открытие бинарного файла для добавления printf("\n Ввод товаров \n"); do { printf("\n название: "); scanf("%s",&s1.model); printf("\n цена: "); scanf("%d",&s1.price); printf("\n горизонтальный размер области сканирования: "); scanf("%f",&s1.x_size); printf("\n вертикальный размер области сканирования: "); scanf("%f",&s1.y_size); printf("\n оптическое разрешение: "); scanf("%d",&s1.optr); printf("\n число градаций серого: "); scanf("%d",&s1.grey); fwrite(&s1,sizeof(s1),1,tf); printf(" Закончить? y/n "); ch=getch(); } while (ch != 'y'); fclose(tf); } int zapros(FILE *tf) { int i,j,k,o; long int l; struct scan_info *s1; struct scan_info *s11; struct scan_info1; tf=fopen("C:/file1.dat", "wt"); printf ("сортировка по цене \n"); for(i = 0 ; i < k-1 ; i++) { for(j = 0 ; j < k - i-1 ; j++) { if(s1[j].price > s1[j+1].price) { s11[i] = s1[j]; s1[j] = s1[j+1] ; s1[j+1] = s11[i]; } } } l=sizeof(s11); fseek(tf,-i,1); // возврат на sizeof(t1) байт назад fwrite(&s1,sizeof(s11),1,tf); // запись изменённой структуры на прежнее место fread(&s11,sizeof(s11),1,tf); // чтение из файла одной структуры t1 printf("model %s \n price %d \n x_size %f \n y_size %f \n optr %d \n grey %d \n",s11->model,s11->price,s11->x_size,s11->y_size,s11->optr,s11->grey); getch(); fclose(tf); return 0; }
Объяснение кода листинга программы
- Объединение (union) используется для объединения нескольких структур данных в одну структуру. Это позволяет экономить место в памяти, так как несколько структур могут быть размещены в одном блоке памяти.
- В данном коде используется структура scan_info, которая содержит поля model, price, x_size, y_size, optr и grey.
- Функция input используется для ввода данных о сканере в бинарный файл. Она открывает файл для записи, запрашивает у пользователя данные о сканере и записывает их в файл.
- Функция print используется для просмотра содержимого файла. Она открывает файл для чтения, считывает данные из файла и выводит их на экран.
- Функция app используется для добавления данных о сканере в бинарный файл. Она открывает файл для добавления, запрашивает у пользователя данные о сканере и записывает их в файл.
- Функция zapros используется для сортировки данных в файле по цене. Она открывает файл для записи, сортирует данные по цене и записывает отсортированные данные обратно в файл.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д