Лабораторная №14
.docxОдеський національний політехнічний університет
Інститут комп’ютерних систем
Кафедра інформаційних систем
Варіант №1
Лабораторна робота №14
По дисципліні “Алгоритмізація і програмування”
Тема: “ Робота з бінарними файлами на мові програмування С”
Виконав:
Студент гр. АІ-171
Анищенко М.О.
Перевірили:
Глава М.Г.
Одеса 2018
Мета роботи: Набуття практичних навичок у роботі із бінарними файлами даних на мові програмування С.
Завдання: Заводом випускаються N різних вимірювальних приладів, кожний з яких може бути визначений даними з рисунку 14.1.
У процесі виконання роботи створюється перший програмний файл для формування файлу даних з довільним числом записів. Для вибірки з файлу даних створюється інший програмний файл, у якому необхідно передбачити виведення у формі таблиці всіх записів файлу й записів, що відповідають завданню.
Програма здійснює введення-виведення даних, містить функції, що здійснюють вибірку.
Блок-схема:
Код програми:
device.c
typedef struct device
{
char name[20];
char seller[20];
float price;
int number;
} device;
typedef struct item
{
char name[20];
float price;
int garanty;
int device_num;
} item;
lab14input.c
#include<stdio.h>
#include<stdlib.h>
#include"device.h"
int main()
{
FILE *fitem = NULL;
FILE *fdevice = NULL;
fitem = fopen("lab14item.bin", "wb");
fdevice = fopen("lab14device.bin", "wb");
if(fitem == NULL || fdevice == NULL)
{
printf("File error");
return 3;
}
char agr = 'n';
item *current = (item*)malloc(sizeof(item));
device *dev = (device*)malloc(sizeof(device));
do
{
printf("Enter name: ");
scanf("%s", current->name);
printf("Enter price: ");
scanf("%f", ¤t->price);
printf("Enter garanty(month): ");
scanf("%d", ¤t->garanty);
printf("Enter purchased devices number");
scanf("%d", ¤t->device_num);
fwrite(current,sizeof(item), 1, fitem);
for(int i = 0; i < current->device_num; i++)
{
printf("Enter purchased device name: ");
scanf("%s", dev->name);
printf("Enter purchased device seller: ");
scanf("%s", dev->seller);
printf("Enter purchased device price: ");
scanf("%f", &dev->price);
printf("Enter purchased device number: ");
scanf("%d", &dev->number);
fwrite(dev,sizeof(device), 1, fdevice);
}
printf("Do you want to enter one more element?(y/n): ");
scanf("\n%c", &agr);
}while(agr == ‘y’);
free(current);
free(dev);
fclose(fitem);
fclose(fdevice);
return 0;
}
lab14output.c
#include<stdio.h>
#include<stdlib.h>
#include"device.h"
int main()
{
FILE *fitem = NULL;
FILE *fdevice = NULL;
fitem = fopen("lab14item.bin", "rb");
fdevice = fopen("lab14device.bin", "rb");
if(fitem == NULL || fdevice == NULL)
{
printf("File error");
return 3;
}
item *cur = (item*)malloc(sizeof(item));
while (fread(cur, sizeof(item), 1, fitem))
{
printf("Name: %s\n", cur->name);
printf("Price: %f\n", cur->price);
printf("Garanty(month): %d\n\n", cur->garanty);
device *dev = (device*)malloc(sizeof(device));
printf("\n");
for(int i = 0; i < cur->device_num; i++)
{
fread(dev, sizeof(device), 1, fdevice);
printf("Purchased device name: %s\n", dev->name);
printf("Purchased device seller: %s\n", dev->seller);
printf("Purchased device price: %f\n", dev->price);
printf("Enter purchased device number: %d\n\n", dev->number);
}
free(dev);
printf("\n");
}
free(cur);
fclose(fitem);
fclose(fdevice);
printf("All purchased items: \n");
fdevice = fopen("lab14device.bin", "rb");
while(fread(dev, sizeof(device), 1, fdevice))
{
printf("Name: %s\n", dev->name);
printf("Seller: %s\n", dev->seller);
printf("Price: %f\n", dev->price);
printf("Number: %d\n\n", dev->number);
printf("\n");
}
return 0;
}
Приклад виконання:
Назва |
Гарантія |
Ціна |
Додаткові товари |
|||
Назва |
Ціна |
Продавець |
Кількість |
|||
Oil |
12 |
200 |
Salt |
20 |
SaltCorp |
3 |
Pepper |
4 |
PepperCorp |
4 |
|||
Beer |
1 |
100 |
Chips |
40 |
ChipsCorp |
10 |