Верховный Тюлень
49 / 16 / 3
Регистрация: 29.03.2015
Сообщений: 208
1

Ввод динамической структуры и занесение её в двоичный файл

24.04.2015, 07:56. Показов 3543. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, товарищи-кодеры!
Я попытался написать программу, отвечающую за ввод структуры с клавиатуры(память выделяется динамически) и записи в двоичный файл. Так же нужно осуществить проверку записанного в файл(все ли элементы записались).
А теперь по структуре:
Разработайте программу, которая, используя тип структура, формирует массив данных о
товарах на складе, содержащий следующую информацию: наименование товара, цена.
Затем ищет товар с минимальной ценой и товар с максимальной ценой, выводит
результат. Массив сохранить в двоичный файл.

Вот моё покалеченное творчество:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "stdafx.h"
#include <locale>
#include <iostream>
 
#define ADRESS "warehouse.dat" // Адрес файла, в который записываем структуру 
 
using namespace std; // Подключаем пространство имен STD 
 
struct warehouse // Объявление структуры
{
    char name[50]; // Наименование товара
    int cost; // Цена товара
} *wh;
 
void EnterStruct(int N) // Функция ввода информации 
{
    wh[N]; // Структура
    for (int i = 0; i < N ; i++)
    {
        cout << "Заполняйте данный о" << i + 1 << "-м товаре:" << endl;
        cout << "Название товара:" << endl;
        cin >> wh[i].name;
        cout << "Цена товара:" << endl;
        cin >> wh[i].cost;
        system("cls");
    }
}
 
void WriteStruct(int N, FILE *fp) // Функция записи информации структуры в файл
{
    wh[N]; // Структура
    fwrite(wh, sizeof(wh), N, fp); // Записываем в файл N заданных элементов структуры
}
 
void Assortment(int N) // Функция поиска наибольшей и наименьшей цены.
{
    wh[N];
    int   min = wh[0].cost, max = wh[0].cost; // Определяем начальное значение макс. и мин. цены товара.
    for (int i = 1; i < N; i++)
    {
        if (max < wh[i].cost)
        {
            max = wh[i].cost;
        }
        else if (min > wh[i].cost)
        {
            min = wh[i].cost;
        }
    }
}
 
int main()
{
    FILE *fp; // Указатель на файл
    fp = fopen(ADRESS, "wb+rb"); // Открываем файл для записи + чтения
    system("cls");
    setlocale(LC_ALL, "Russian");
    int N, *size, *max, *min;
    size = new int[N];
    cout << "Введите количество товаров на складе:" << endl;
    cin >> N;
    void EnterStruct(int N);
    void WriteStruct(int N, FILE *fp);
    void Assortment(int N);
    if (fread(wh, sizeof(wh), size, fp) < N) // Если количество элементов, прочитанных в файле меньше, чем количество заданных элементов структуры, то мы выдаем ошибку
    {
        cout << "Ошибка!" << endl;
        return 1;
    }
    fclose(fp);
        cout << "Наибольшая цена:" << max << endl;
    cout << "Наименьшая цена:" << min << endl;
    delete[] size;
    system("pause");
    return 0;
    }

При сборке ругается на:
C++
1
1.      if (fread(wh, sizeof(wh), size, fp) < N)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2015, 07:56
Ответы с готовыми решениями:

Двоичный ввод/вывод в файл
Добрый лень. Программа записывает в файл массив целых чисел. После считывает каждый элемент и если...

Запись динамической структуры в файл.
Доброго времени суток! У меня такой вопрос: Есть динамическая структура типа: массив каждый...

Структуры: сформировать двоичный файл, записав в него всю известную информацию о каждом сотруднике
Известна информация о сотрудниках некоторого предприятия: - фамилия, инициалы; - год рождения; ...

Сформировать двоичный файл из элементов, заданной структуры "Абитуриент"
Помогите найти ошибку! само условие : Сформировать двоичный файл из элементов, заданной в варианте...

1
Модератор
Эксперт С++
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,699
24.04.2015, 08:41 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <locale>
#include <iostream>
// Адрес файла, в который записываем структуру 
const char* ADRESS="warehouse.dat"; 
 
using namespace std; // Подключаем пространство имен STD 
 
struct warehouse // Объявление структуры
{
    char name[50]; // Наименование товара
    int cost; // Цена товара
};
 
void EnterStruct(warehouse* wh,int N) // Функция ввода информации 
{
    for (int i = 0; i < N ; i++)
    {
        cout << "Заполняйте данный о" << i + 1 << "-м товаре:" << endl;
        cout << "Название товара:" << endl;
        cin >> wh[i].name;
        cout << "Цена товара:" << endl;
        cin >> wh[i].cost;
        system("cls");
    }
}
 
void WriteStruct(warehouse* wh,int N, FILE *fp) // Функция записи информации структуры в файл
{
    fwrite(wh, sizeof(wh), N, fp); // Записываем в файл N заданных элементов структуры
}
 
void Assortment(warehouse* wh,int N,int& max,int& min) // Функция поиска наибольшей и наименьшей цены.
{
    min = wh[0].cost, max = wh[0].cost; // Определяем начальное значение макс. и мин. цены товара.
    for (int i = 1; i < N; i++)
    {
        if (max < wh[i].cost)
        {
            max = wh[i].cost;
        }
        else if (min > wh[i].cost)
        {
            min = wh[i].cost;
        }
    }
}
 
int main()
{
    FILE *fp; // Указатель на файл
    fp = fopen(ADRESS, "wb+"); // Открываем файл для чтения
    system("cls");
    setlocale(LC_ALL, "Russian");
    int N, size;
    cout << "Введите количество товаров на складе:" << endl;
    cin >> N;
    size = N;
    warehouse* wh=new warehouse[N];
    EnterStruct(wh,N);
    WriteStruct(wh,N,fp);
    rewind(fp);
    int mx,mn;
    Assortment(wh,N,mx,mn);
    if (fread(wh, sizeof(wh), size, fp) < N) // Если количество элементов, прочитанных в файле меньше, чем количество заданных элементов структуры, то мы выдаем ошибку
    {
        cout << "Ошибка!" << endl;
        system("pause");
        return 1;
    }
    fclose(fp);
    cout << "Наибольшая цена:" << mx << endl;
    cout << "Наименьшая цена:" << mn << endl;
    delete[] wh;
    system("pause");
    return 0;
}
Однако настоятельно советую поменять Сишный ввод вывод файла на fstream:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <locale>
#include <iostream>
#include <fstream>
 
using namespace std; // Подключаем пространство имен STD 
 
struct warehouse // Объявление структуры
{
    char name[50]; // Наименование товара
    int cost; // Цена товара
};
 
void EnterStruct(warehouse* wh,int N) // Функция ввода информации 
{
    for (int i = 0; i < N ; i++)
    {
        cout << "Заполняйте данный о" << i + 1 << "-м товаре:" << endl;
        cout << "Название товара:" << endl;
        cin >> wh[i].name;
        cout << "Цена товара:" << endl;
        cin >> wh[i].cost;
        system("cls");
    }
}
 
void WriteStruct(warehouse* wh,int N, fstream& fp) // Функция записи информации структуры в файл
{
    fp.write((char*)wh, N*sizeof(wh)); // Записываем в файл N заданных элементов структуры
}
 
void Assortment(warehouse* wh,int N,int& max,int& min) // Функция поиска наибольшей и наименьшей цены.
{
    min = wh[0].cost, max = wh[0].cost; // Определяем начальное значение макс. и мин. цены товара.
    for (int i = 1; i < N; i++)
    {
        if (max < wh[i].cost)
        {
            max = wh[i].cost;
        }
        else if (min > wh[i].cost)
        {
            min = wh[i].cost;
        }
    }
}
 
int main()
{
    const char* ADRESS="warehouse.dat";
    fstream fp(ADRESS, ios::in | ios::out | ios::binary); // Указатель на файл
    // Адрес файла, в который записываем структуру 
    if(!fp ) // Открываем файл для чтения
    {
        cout << "Ошибка открытия файла!" << endl;
        system("pause");
        return 1;
    }
    setlocale(LC_ALL, "Russian");
    int N, size;
    cout << "Введите количество товаров на складе:" << endl;
    cin >> N;
    size = N;
    warehouse* wh=new warehouse[N];
    EnterStruct(wh,N);
    WriteStruct(wh,N,fp);
    fp.seekg(0,ios::beg);
    int mx,mn;
    Assortment(wh,N,mx,mn);
    if (!fp.read((char*)wh, N*sizeof(wh)) ) // Если количество элементов, прочитанных в файле меньше, чем количество заданных элементов структуры, то мы выдаем ошибку
    {
        cout << "Ошибка!" << endl;
        system("pause");
        return 1;
    }
    fp.close();
    cout << "Наибольшая цена:" << mx << endl;
    cout << "Наименьшая цена:" << mn << endl;
    delete[] wh;
    system("pause");
    return 0;
}
1
24.04.2015, 08:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2015, 08:41
Помогаю со студенческими работами здесь

Сформировать двоичный файл из элементов, заданной в варианте структуры. Структура "Стадион"
Люди добрые помогите пожалуйста написать программу на С++! Сформировать двоичный файл из...

Сформировать двоичный файл из элементов, заданных в варианте структуры. Структура "Человек"
Сформировать двоичный файл из элементов, заданных в варианте структуры. Структура &quot;Человек&quot;:...

Ввод и вывод структуры в бинарный файл
Всем привет, друзья! Как вообще происходит Ввод и вывод структуры в бинарный файл. Можете...

Возможна ли запись структуры в двоичный файл (не пошаговая)
Было в Билдере: struct OPT { /* бла-бла разных типов */ }; OPT Options; TFileStream *opt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru