Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Распечатать в порядке,обратно алфавитному,все буквы,которые входят в текст не менее трех раз http://www.cyberforum.ru/cpp-beginners/thread1013429.html
Очень надеюсь,что поможете с написанием программы.
C++ Вывести строку на экран Вот как сделать так, чтобы я когда вводил например: 2223333 222222 2444444 Он бы мне вывел в следующей строке те цифры, в которых цифра "2" Содержится больше двух раз. Пробую делать через макросы,... http://www.cyberforum.ru/cpp-beginners/thread1013423.html
Напишите функцию, которая по заданному натуральному числу определяет его первую и последнюю цифры C++
Задание: Напишите функцию, которая по заданному натуральному числу определяет его первую и последнюю цифры. Протестируйте функцию для десятичных чисел из некоторого диапазона от n до m. Может кто,...
Найти самое длинное слово в строке C++
В общем, нужно найти в строке самое длинное слово и вывести его, не создавая при этом новых строк. Всё находит, выводит, но после этого почему-то вылетает. Поняла только, что это происходит из-за...
C++ Расшифровка информации http://www.cyberforum.ru/cpp-beginners/thread1013385.html
Мне на кое каком форуме один чел сказал так: Оптоволоконная линия связи сама по себе неплохо защищена. Вы попробуйте внедриться в середину оптоволоконного кабеля, где могут проходить сотни волокон,...
C++ Символьный массив, перестановка символов в символьном массиве Задание таково: даны два числа n, t (n-количество символов, t-количество секунд). Далее вводится строка, содержащая символы "G" и "B" (G-девочка, B-мальчик). Каждую секунду, если сразу после мальчика... подробнее

Показать сообщение отдельно
Google313
Заблокирован

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

20.11.2013, 18:49. Просмотров 320. Ответов 0
Метки (Все метки)

Добрый день. Помогите пожалуйста, вроде код правильный, а результата никакого не выводит. В чём ошибка?
Вариант 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;
}
0
Вложения
Тип файла: txt note (2).txt (1.2 Кб, 6 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru