Форум программистов, компьютерный форум CyberForum.ru

Написать программу, в которой на основе разработанных функций осуществляется запись в двоичный файл - C++

Восстановить пароль Регистрация
 
Google313
Заблокирован
20.11.2013, 18:49     Написать программу, в которой на основе разработанных функций осуществляется запись в двоичный файл #1
Добрый день. Помогите пожалуйста, вроде код правильный, а результата никакого не выводит. В чём ошибка?
Вариант 34
Для хранения данных о ноутбуках описать структуру вида, описанного в варианте 30. Написать функцию, которая читает данные о ноутбуках из файла note.txt
в структуру приведенного вида. Написать функцию, которая записывает содержимое структуры в конец бинарного файла. Структура бинарного файла: первые два байта — целое
число записей в файле; далее записи в формате структуры NOTEBOOK. Написать программу, в которой на основе разработанных функций осуществляется запись в двоичный файл
данных только о тех ноутбуках, диагональ дисплея которых больше одиннадцати дюймов.
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
*/
 
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <Windows.h>
#include <stdio.h>
 
#define FNTBK_BLK 50
#define NTBK_BLK 36
 
using namespace std;
 
struct FNTBK
{
    char model[21];                      // наименование, пробелы допускаются
    unsigned short int price;          // цена 
    unsigned short int weight;          // масса в граммах
    unsigned short int size_x;          // длина в мм
    unsigned short int size_y;          // ширина в мм
    unsigned short int size_z;          // высота в мм
    unsigned short int diagonal;      // размер диагонали в миллиметрах
    unsigned short int refresh_rate;  // частота регенерации дисплея
    unsigned short int rsltn_width;      // разрешающая способность по длине в пикселах 
    unsigned short int rsltn_height;  // разрешающая способность по ширине в пикселах
    unsigned short int cpu_frequency; // частота CPU в МГц
    unsigned short int ram_capacity;  // объем памяти RAM в Мб    
    unsigned short int vga_capacity;  // обьем видеопамяти в Мб    
    unsigned short int hdd_capacity;  // объем HDD в Мб
};
 
struct NTBK
{
    char model[21];                 // наименование
    unsigned short int price;     // цена
    unsigned short int weight;     // вес
    unsigned short int size_x;     // длина в мм
    unsigned short int size_y;     // ширина в мм
    unsigned short int size_z;     // высота в мм
    unsigned short int diagonal; // размер диагонали в миллиметрах
};
 
void GetFromBaseFile(const char *pch, NTBK& ntbk, const unsigned int npos, bool& bErr)
{
    fstream File;
    File.open(pch, ios::in | ios::binary);
    if(File.is_open()){
        unsigned int size;
        File.read((char *)(&size), 4);
        if(npos >= size){
            cerr << "Запись под номером " << npos << " в файле " << pch << " не существует!" << endl;
            bErr = true;
            return;
        }
        else{
            FNTBK fntbk;
            File.seekp(4 + npos * FNTBK_BLK, ios::beg);
            File.read((char *)(&fntbk), FNTBK_BLK);
            strcpy_s(ntbk.model, 21, fntbk.model);
            ntbk.price = fntbk.price;
            ntbk.weight = fntbk.weight;
            ntbk.size_x = fntbk.size_x;
            ntbk.size_y = fntbk.size_y;
            ntbk.size_z = fntbk.size_z;
            ntbk.diagonal = fntbk.diagonal;
            bErr = false;
        }
    }
    else{
        cerr << "Не удалось открыть файл " << pch << "!" << endl;
        bErr = true;
    }    
}
 
void GetFromFile(const char *pch, NTBK& ntbk, const unsigned int npos, bool& bErr)
{
    fstream File;
    File.open(pch, ios::in | ios::binary);
    if(File.is_open()){
        unsigned int size;
        File.read((char *)(&size), 4);
        if(npos >= size){
            cerr << "Ошибка! Запись под номером " << npos << " в файле " << pch << " не существует!" << endl;
            bErr = true;
            return;
        }
        else{
            File.seekp(4 + npos * NTBK_BLK, ios::beg);
            File.read((char *)(&ntbk), NTBK_BLK);
            bErr = false;
        }
    }
    else{
        cerr << "Ошибка! Не удалось открыть файл " << pch << "!" << endl;
        bErr = true;
    }    
}
 
void disp(const NTBK& ntbk)
{
    cout << "****************************" << endl;    
    cout << "model: " << ntbk.model << endl;
    cout << "price: " << ntbk.price << endl;
    cout << "weight: " << ntbk.weight << endl;
    cout << "size_x: " << ntbk.size_x << endl;
    cout << "size_y: " << ntbk.size_y << endl;
    cout << "size_z: " << ntbk.size_z << endl;
    cout << "diagonal: " << ntbk.diagonal << endl;
    cout << "****************************" << endl;
}
 
void WriteToFile(const char *pch, const NTBK& ntbk, const unsigned int npos)
{
    fstream File;
    File.open(pch, ios::in | ios::out | ios::binary);
    if(File.is_open()){
        unsigned int size;
        File.read((char *)(&size), 4);
        if(npos >= size){
            int offset = npos - size;
            size = npos + 1;
            File.seekp(0, ios::beg);
            File.write((char *)(&size), 4);
            if(offset){
                int blks = offset * NTBK_BLK;
                char *buf = new char[blks];
                File.seekp(0, ios::end);
                File.write((char *)buf, blks);
                delete[] buf;
            }
 
            File.seekp(0, ios::end);
            File.write((char *)(&ntbk), NTBK_BLK);
        }
        else{
            File.seekp(0, ios::end);
            File.write((char *)(&ntbk), NTBK_BLK);
        }        
    }
    else{
        File.close();
        File.clear();
        File.open(pch, ios::out | ios::binary);
        unsigned int size = npos + 1;
        File.write((char *)(&size), 4);
        if(npos){
            int blks = npos * NTBK_BLK;
            char *buf = new char[blks];
            File.seekp(0, ios::end);
            File.write((char *)buf, blks);
            delete[] buf;
        }
 
        File.seekp(0, ios::end);
        File.write((char *)(&ntbk), NTBK_BLK);
    }    
}
 
void GetFromConsole(NTBK& ntbk, unsigned int& npos, bool& bErr)
{
    cout << "Введите значение позиции (unsigned int): ";
    cin >> npos;
    if(cin.fail()){
        cerr << "Ошибка! Ввод значение позиции завершился неудачно! Операция ввода отменена!" << endl;
        bErr = true;
        return;
    }
 
    cout << "Введите название модели (char[21]): ";
    cin.sync();
    cin.getline(ntbk.model, 21, '\n');
    if(cin.fail()){
        cerr << "Ошибка! Ввод названия модели завершился неудачно! Операция ввода отменена!" << endl;
        bErr = true;
        return;
    }
 
    cout << "Введите значение цены ноутбука (unsigned short int): ";
    cin >> ntbk.price;
    if(cin.fail()){
        cerr << "Ошибка! Ввод значения цены ноутбука завершился неудачно! Операция ввода отменена!" << endl;
        bErr = true;
        return;
    }
 
    cout << "Введите значение массы ноутбука в граммах (unsigned short int): ";
    cin >> ntbk.weight;
    if(cin.fail()){
        cerr << "Ошибка! Ввод значения массы ноутбука завершился неудачно! Операция ввода отменена!" << endl;
        bErr = true;
        return;
    }
 
    cout << "Введите значение длины ноутбука в миллиметрах (unsigned short int): ";
    cin >> ntbk.size_x;
    if(cin.fail()){
        cerr << "Ошибка! Ввод значения длины ноутбука завершился неудачно! Операция ввода отменена!" << endl;
        bErr = true;
        return;
    }
 
    cout << "Введите значение ширины ноутбука в миллиметрах (unsigned short int): ";
    cin >> ntbk.size_y;
    if(cin.fail()){
        cerr << "Ошибка! Ввод значение ширины ноутбука завершился неудачно! Операция ввода отменена!" << endl;
        bErr = true;
        return;
    }
 
    cout << "Введите значение высоты ноутбука в миллиметрах (unsigned short int): ";
    cin >> ntbk.size_z;
    if(cin.fail()){
        cerr << "Ошибка! Ввод значения высоты ноутбука завершился неудачно! Операция ввода отменена!" << endl;
        bErr = true;
        return;
    }
 
    cout << "Введите значение частоты процессора ноутбука в МГц (unsigned short int): ";
    cin >> ntbk.diagonal;
    if(cin.fail()){
        cerr << "Ошибка! Ввод значения частоты процессора ноутбука завершился неудачно! Операция ввода отменена!" << endl;
        bErr = true;
        return;
    }
 
    bErr = false;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
        fstream File;
    string base_file, file;
    base_file = "notebook.dat";
    file = "ntbk.dat";
 
    File.open(file.c_str(), ios::in);
    if(File.is_open()){
        File.close();
        remove(file.c_str());
    }
    else
        File.close();
 
    unsigned int size;
    File.open(base_file.c_str(), ios::in);
    if(File.is_open()){
        File.read((char *)(&size), 4);
        File.close();
    }
    else{
        cerr << "Ошибка! Не удалось открыть файл " << base_file << "!" << endl;
        return 1;
    }
 
    NTBK *buf = new NTBK[size];
    unsigned int cnt = 0;
    bool bErr;
    NTBK ntbk;
    for(int i = 0; i < size; ++i){
        GetFromBaseFile(base_file.c_str(), ntbk, i, bErr);
 
        if(ntbk.diagonal > 279){
            strcpy_s(buf[cnt].model, 21, ntbk.model);
            buf[cnt].price = ntbk.price;
            buf[cnt].weight = ntbk.weight;
            buf[cnt].size_x = ntbk.size_x;
            buf[cnt].size_y = ntbk.size_y;
            buf[cnt].size_z = ntbk.size_z;
            buf[cnt].diagonal = ntbk.diagonal;
            ++cnt;
        }
    }
 
    for(int i = 0; i < cnt; ++i)
        disp(buf[i]);    
 
    return 0;
}
Вложения
Тип файла: txt note (2).txt (1.2 Кб, 6 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2013, 18:49     Написать программу, в которой на основе разработанных функций осуществляется запись в двоичный файл
Посмотрите здесь:

C++ разработать программу, в которой осуществляется ввод списка записей
C++ Запись в файл из разных функций
C++ Запись в двоичный файл
написать программу (считывание из файла и запись в файл) си ++ C++
Двоичный файл. Написать функцию, которая возвращает наибольшее отрицательное число C++
Программа из книги, в которой осуществляется вызов двух функций не работает C++
Написать программу, в которой вычисляются выражения f и g в виде функций, передав им действительные параметры C++
Структура student, не осуществляется запись в файл C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 16:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru