Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129

Выявить наиболее расторопного продавца в магазине

07.04.2020, 20:22. Показов 2029. Ответов 19
Метки c++, с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Имеется следующая задача:
В продуктовом магазине проводится хронометраж работы продавцов. Фиксируется время обслуживания продавцом i-ого покупателя, сколько покупок разного именования сделал этот покупатель, какие это были покупки,штучный товар или весовой. Выявить наиболее расторопного продавца в магазине (считать что на отпуск весового товара продавец тратит в среднем в три раза больше времени, чем на отпуск штучного). Определить среднее время обслуживания каждым продавцом одного покупателя.
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
#include <Windows.h>
#include <conio.h>
#include <clocale>  
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>
#include<vector>
#include <iterator>
#include <algorithm>
#include <conio.h>
 
using namespace std;
int seller_count = 0;
int buyer_count = 0;
 
struct seller
{
    char FIO[25];
    int time; // общее время на обслуживание одним продавццом всех покупателей
    float average_time;
    int number_of_seller;//номер продавца
    int id;
    seller()
    {
        FIO[0] = '\0';
        time = 0;
        average_time = 0;
        number_of_seller = 0;
        id = 0;
    }
 
};
struct buyer
{
    int NumOfGoods;
    int NumOfWeightGoods;
    int NumOfPieceGoods;
    int id;
    buyer()
    {
        NumOfGoods = 0;
        NumOfWeightGoods = 0;
        NumOfPieceGoods = 0;
        id = 0;
    }
 
};
std::ostream& operator<<(std::ostream& stream, seller const& DataSel)
{
    stream.write((char*)&DataSel, sizeof(seller));
    return stream;
}
std::istream& operator>>(std::istream& stream, seller const& DataSel)
{
    stream.read((char*)&DataSel, sizeof(seller));
    return stream;
}
 
std::ostream& operator<<(std::ostream& stream, buyer const& Databuy)
{
    stream.write((char*)&Databuy, sizeof(buyer));
    return stream;
}
std::istream& operator>>(std::istream& stream, buyer const& Databuy)
{
    stream.read((char*)&Databuy, sizeof(buyer));
    return stream;
}
 
void DownloadDataSel(vector<seller>& DataSel, ifstream& rewrite)
{
    seller DataSel1;//буфер для чтения структуры
    rewrite.seekg(0, rewrite.end);
    int length = rewrite.tellg();//размер файла в байтах
    rewrite.seekg(0, rewrite.beg);//переместил курсор в начало списка
 
 
    for (int i = 0; i < length / sizeof(DataSel); i++)
    {
        rewrite >> DataSel1;
        DataSel.push_back(DataSel1);//записываю в вектор
    }
}
 
void UploadDataSel(vector<seller>& DataSel, ofstream& rewrite)
{
    rewrite.seekp(0, ios::beg);
    for (int i = 0; i < DataSel.size(); i++)
    {
        if (DataSel[i].id != 0)
            rewrite << DataSel[i];
    }
}
 
void DownloadDataBuy(vector<buyer>& DataBuy, ifstream& file)
{
    buyer Databuy1;//буфер для чтения структуры
    file.seekg(0, file.end);
    int length = file.tellg();//размер файла в байтах
    file.seekg(0, file.beg);//переместил курсор в начало списка
 
 
    for (int i = 0; i < length / sizeof(buyer); i++)
    {
        file >> Databuy1;
        DataBuy.push_back(Databuy1);//записываю в вектор
    }
}
 
void UploadDataBuy(vector<buyer>& DataBuy, ofstream& file)
{
    file.seekp(0, ios::beg);
    for (int i = 0; i < DataBuy.size(); i++)
    {
        if (DataBuy[i].id != 0)
            file << DataBuy[i];
    }
}
 
void AddDataBuy(vector<buyer>& DataBuy, ifstream& file)
{
    buyer DataBuy1;
    cin.ignore();
    char c = 0;
    system("cls");
    cout << "Введите число товаров >> ";
    cin >> DataBuy1.NumOfGoods;
    cout << "Введите число штучного товара >> ";
    cin >> DataBuy1.NumOfPieceGoods;
    cout << "Введите число весового товара>> ";
    cin >> DataBuy1.NumOfWeightGoods;
    DataBuy1.id=++buyer_count;
    while (DataBuy1.NumOfGoods > (DataBuy1.NumOfPieceGoods + DataBuy1.NumOfWeightGoods))
    {
        cout << "Введите число товаров >> ";
        cin >> DataBuy1.NumOfGoods;
    }
    DataBuy.push_back(DataBuy1);
}
 
void AddDataSel(vector<seller>& DataSel, ifstream& rewrite, vector<buyer>& DataBuy, ifstream& file)
{
    seller DataSel1;
    buyer DataBuy1;
    cin.ignore();
    int c;
    system("cls");
    cout << "FIO >> ";
    gets_s(DataSel1.FIO);
    cout << "Введите время >> ";
    cin >> DataSel1.time;
    DataSel1.number_of_seller++;
    DataSel1.average_time = DataSel1.time / (DataBuy1.NumOfPieceGoods + 3 * DataBuy1.NumOfWeightGoods);
    DataSel1.id = ++seller_count;
    DataSel.push_back(DataSel1);
}
 
void PrintDataSel(seller DataSel)
{
    if (DataSel.id != 0)
    {
        cout << "_______________________________" << endl;
        cout << "FIO: " << DataSel.FIO << endl;
        cout << "Time: " << DataSel.time << endl;
        cout << "Average time: " << DataSel.average_time << endl;
        cout << "Number of seller: " << DataSel.id << endl;
    }
}
void PrintDataBuy(buyer DataBuy)
{
    if (DataBuy.id != 0)
    {
        //cout << "_______________________________" << endl;
        cout << "Num Of Goods: " << DataBuy.NumOfGoods << endl;
        cout << "Num Of Piece Goods: " << DataBuy.NumOfPieceGoods << endl;
        cout << "Num Of Weight Goods: " << DataBuy.NumOfWeightGoods << endl;
    }
}
 
void ShowAllDataSel(vector<seller>& DataSel)
{
 
    if (DataSel.size() >= 1)
        for (int i = 0; i < DataSel.size(); i++)
        {
            PrintDataSel(DataSel[i]);
        }
    cout << endl;
}
void ShowAllDataBuy(vector<buyer>& DataBuy)
{
 
    if (DataBuy.size() >= 1)
        for (int i = 0; i < DataBuy.size(); i++)
        {
            PrintDataBuy(DataBuy[i]);
        }
    cout << endl;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите имя файла" << endl;
    string name;
    cin >> name;
    int menu;
    vector<seller> DataSel;//структурa данных
    vector<buyer>  DataBuy;
    ifstream rewrite;
    ifstream file;
    rewrite.open(name, ios::binary);
    file.open(name, ios::binary);
    ofstream rewrite_in;
    ofstream file_in;
    if (rewrite_in.is_open())
    {
        DownloadDataSel(DataSel, rewrite);
            
    }
    if (file_in.is_open())
    {
        DownloadDataBuy(DataBuy, rewrite);
    }
    if (DataSel.size() > 0)
    {
        seller_count = DataSel[DataSel.size() - 1].id;
    }
    if (DataSel.size() > 0)
    {
        buyer_count = DataSel[DataSel.size() - 1].id;
    }
    rewrite_in.close();
    file_in.close();
    char d = '\0';
    ofstream rewrite_out;
    ofstream file_out;
    rewrite_out.open(name, ios::binary | ios::trunc);
    
    do
    {
        system("cls");
        printf("\nDataSelbase of sellers\n");
        printf("\n1 - Enter DataSel\n");
        printf("\n2 - View DataSel\n");
        printf("\n3 - Exit\n");
        if (d == '3') break;
        cin >> menu;
        switch (menu)
        {
        case 1:
            AddDataBuy(DataBuy, rewrite);
            AddDataSel(DataSel, rewrite, DataBuy, rewrite);
            system("pause");
 
            break;
        case 2:
            ShowAllDataSel(DataSel);
            ShowAllDataBuy(DataBuy);
            system("pause");
            break;
        }
    } while (menu != 3);
    if (!file_out.is_open())
    {
        cout << "Беда!" << endl;
    }
    file_out.open(name, ios::binary | ios::trunc);
    if (!file.is_open())
    {
        cout << "Беда!" << endl;
    }
 
    UploadDataSel(DataSel, rewrite_out);
    UploadDataBuy(DataBuy, file_out);
    rewrite_out.close();
    file_out.close();
    return 0;
}
Начал писать код. Проблема возникла в функции AddDataBuy записываю данные в вектор, после записи, этот вектор передаю в функцию AddDataSel для вычисления среднего времени, но вместо нужных данных передаётся "мусор". Из-за этого получается ошибка, деление на 0. Не могу понять в чем косяк.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.04.2020, 20:22
Ответы с готовыми решениями:

В интернет магазине на битрикс выявить ошибку в компоненте оформление заказа
Найти ошибку в личной доработке системы бонусов в шаблоне компонента &quot;оформление заказа&quot;и помочь с ее возможной реализацией

Определить какие товары продаются в каждом магазине; какие товары продают только в одном магазине
Помогите решить ребус! 1. В трех магазинах продают некоторые виды товаров из имеющегося списка. Определить какие товары продаются в...

Регистрация продавца в Play
Создал бесплатное приложение, выложил всё нормально прошло. Теперь подходить к завершению платное приложение, решил зарегистрировать себя...

19
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.04.2020, 20:28
И где ты его используешь в AddDataSel?
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
07.04.2020, 20:38  [ТС]
Я передаю в AddDataSel, вектор DataBuy, который записал в AddDataBuy
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.04.2020, 20:39
Ну и что? Используешь-то где?
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
07.04.2020, 20:42  [ТС]
Мне,по сути, из него надо взять NumOfPieceGoods и NumOfWeightGoods и высчитать среднее время
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.04.2020, 20:46
C++
1
buyer DataBuy1 = DataBuy.back();
1
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
07.04.2020, 20:49  [ТС]
Спасибо большое
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
08.04.2020, 13:39  [ТС]
Еще возникла проблема с записью данных в файл. Не понимаю, почему не происходит запись,вроде все так сделал.
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
#include <Windows.h>
#include <conio.h>
#include <clocale>  
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>
#include<vector>
#include <iterator>
#include <algorithm>
#include <conio.h>
 
using namespace std;
int seller_count = 0;
int buyer_count = 0;
 
struct seller
{
    char FIO[25];
    int time; // общее время на обслуживание одним продавццом всех покупателей
    float average_time;
    int number_of_seller;//номер продавца
    int id;
    seller()
    {
        FIO[0] = '\0';
        time = 0;
        average_time = 0;
        number_of_seller = 0;
        id = 0;
    }
 
};
struct buyer
{
    int NumOfGoods;
    int NumOfWeightGoods;
    int NumOfPieceGoods;
    int id;
    buyer()
    {
        NumOfGoods = 0;
        NumOfWeightGoods = 0;
        NumOfPieceGoods = 0;
        id = 0;
    }
 
};
std::ostream& operator<<(std::ostream& stream, seller const& DataSel)
{
    stream.write((char*)&DataSel, sizeof(seller));
    return stream;
}
std::istream& operator>>(std::istream& stream, seller const& DataSel)
{
    stream.read((char*)&DataSel, sizeof(seller));
    return stream;
}
 
std::ostream& operator<<(std::ostream& stream, buyer const& Databuy)
{
    stream.write((char*)&Databuy, sizeof(buyer));
    return stream;
}
std::istream& operator>>(std::istream& stream, buyer const& Databuy)
{
    stream.read((char*)&Databuy, sizeof(buyer));
    return stream;
}
 
void DownloadDataSel(vector<seller>& DataSel, ifstream& rewrite)
{
    seller DataSel1;//буфер для чтения структуры
    rewrite.seekg(0, rewrite.end);
    int length = rewrite.tellg();//размер файла в байтах
    rewrite.seekg(0, rewrite.beg);//переместил курсор в начало списка
 
 
    for (int i = 0; i < length / sizeof(DataSel); i++)
    {
        rewrite >> DataSel1;
        DataSel.push_back(DataSel1);//записываю в вектор
    }
}
 
void UploadDataSel(vector<seller>& DataSel, ofstream& rewrite)
{
    rewrite.seekp(0, ios::beg);
    for (int i = 0; i < DataSel.size(); i++)
    {
        if (DataSel[i].id != 0)
            rewrite << DataSel[i];
    }
}
 
void DownloadDataBuy(vector<buyer>& DataBuy, ifstream& file)
{
    buyer Databuy1;//буфер для чтения структуры
    file.seekg(0, file.end);
    int length = file.tellg();//размер файла в байтах
    file.seekg(0, file.beg);//переместил курсор в начало списка
 
 
    for (int i = 0; i < length / sizeof(buyer); i++)
    {
        file >> Databuy1;
        DataBuy.push_back(Databuy1);//записываю в вектор
    }
}
 
void UploadDataBuy(vector<buyer>& DataBuy, ofstream& file)
{
    file.seekp(0, ios::beg);
    for (int i = 0; i < DataBuy.size(); i++)
    {
        if (DataBuy[i].id != 0)
            file << DataBuy[i];
    }
}
 
void AddDataBuy(vector<buyer>& DataBuy, ifstream& file)
{
    buyer DataBuy1;
    cin.ignore();
    char c = 0;
    system("cls");
    cout << "Введите число товаров >> ";
    cin >> DataBuy1.NumOfGoods;
    cout << "Введите число штучного товара >> ";
    cin >> DataBuy1.NumOfPieceGoods;
    cout << "Введите число весового товара>> ";
    cin >> DataBuy1.NumOfWeightGoods;
    DataBuy1.id=++buyer_count;
    while (DataBuy1.NumOfGoods > (DataBuy1.NumOfPieceGoods + DataBuy1.NumOfWeightGoods))
    {
        cout << "Введите число товаров >> ";
        cin >> DataBuy1.NumOfGoods;
    }
    DataBuy.push_back(DataBuy1);
}
 
void AddDataSel(vector<seller>& DataSel, ifstream& rewrite, vector<buyer>& DataBuy, ifstream& file)
{
    seller DataSel1;
    buyer DataBuy1;
    DataBuy1 = DataBuy.back();
    cin.ignore();
    int c;
    system("cls");
    cout << "FIO >> ";
    gets_s(DataSel1.FIO);
    cout << "Введите время >> ";
    cin >> DataSel1.time;
    DataSel1.number_of_seller++;
    DataSel1.average_time = DataSel1.time / (DataBuy1.NumOfPieceGoods + 3 * DataBuy1.NumOfWeightGoods);
    DataSel1.id = ++seller_count;
    DataSel.push_back(DataSel1);
}
 
void PrintDataSel(seller DataSel, buyer DataBuy)
{
    if ((DataSel.id != 0) && (DataBuy.id != 0))
    {
        cout << "_______________________________" << endl;
        cout << "FIO: " << DataSel.FIO << endl;
        cout << "Time: " << DataSel.time << endl;
        cout << "Average time: " << DataSel.average_time << endl;
        cout << "Number of seller: " << DataSel.id << endl;
        cout << "Num Of Goods: " << DataBuy.NumOfGoods << endl;
        cout << "Num Of Piece Goods: " << DataBuy.NumOfPieceGoods << endl;
        cout << "Num Of Weight Goods: " << DataBuy.NumOfWeightGoods << endl;
 
    }
}
void PrintDataBuy(buyer DataBuy)
{
    if (DataBuy.id != 0)
    {
        //cout << "_______________________________" << endl;
        cout << "Num Of Goods: " << DataBuy.NumOfGoods << endl;
        cout << "Num Of Piece Goods: " << DataBuy.NumOfPieceGoods << endl;
        cout << "Num Of Weight Goods: " << DataBuy.NumOfWeightGoods << endl;
    }
}
 
void ShowAllDataSel(vector<seller>& DataSel, vector<buyer>  DataBuy)
{
 
    if (DataSel.size() >= 1)
        for (int i = 0; i < DataSel.size(); i++)
        {
            PrintDataSel(DataSel[i],DataBuy[i]);
        }
    cout << endl;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите имя файла" << endl;
    string name;
    cin >> name;
    int menu;
    vector<seller> DataSel;//структурa данных
    vector<buyer>  DataBuy;
    ifstream rewrite;
    ifstream file;
    rewrite.open(name, ios::binary);
    file.open(name, ios::binary);
    ofstream rewrite_in;
    ofstream file_in;
    if (rewrite_in.is_open())
    {
        DownloadDataSel(DataSel, rewrite);
            
    }
    if (file_in.is_open())
    {
        DownloadDataBuy(DataBuy, rewrite);
    }
    if (DataSel.size() > 0)
    {
        seller_count = DataSel[DataSel.size() - 1].id;
    }
    if (DataSel.size() > 0)
    {
        buyer_count = DataSel[DataSel.size() - 1].id;
    }
    rewrite_in.close();
    file_in.close();
    char d = '\0';
    ofstream rewrite_out;
    ofstream file_out;
    rewrite_out.open(name, ios::binary | ios::trunc);
    
    do
    {
        system("cls");
        printf("\nDataSelbase of sellers\n");
        printf("\n1 - Enter DataSel\n");
        printf("\n2 - View DataSel\n");
        printf("\n3 - Exit\n");
        if (d == '3') break;
        cin >> menu;
        switch (menu)
        {
        case 1:
            AddDataBuy(DataBuy, rewrite);
            AddDataSel(DataSel, rewrite, DataBuy, rewrite);
            system("pause");
 
            break;
        case 2:
            ShowAllDataSel(DataSel, DataBuy);
            //ShowAllDataBuy(DataBuy);
            system("pause");
            break;
        }
    } while (menu != 3);
    if (!file_out.is_open())
    {
        cout << "Беда!" << endl;
    }
    file_out.open(name, ios::binary | ios::trunc);
    if (!file.is_open())
    {
        cout << "Беда!" << endl;
    }
 
    UploadDataSel(DataSel, rewrite_out);
    UploadDataBuy(DataBuy, file_out);
    rewrite_out.close();
    file_out.close();
    return 0;
}
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
08.04.2020, 20:03  [ТС]
Доброго времени суток. Имеется следующая задача:
В продуктовом магазине проводится хронометраж работы продавцов. Фиксируется время обслуживания продавцом i-ого покупателя, сколько покупок разного именования сделал этот покупатель, какие это были покупки,штучный товар или весовой. Выявить наиболее расторопного продавца в магазине (считать что на отпуск весового товара продавец тратит в среднем в три раза больше времени, чем на отпуск штучного). Определить среднее время обслуживания каждым продавцом одного покупателя.
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
#include <Windows.h>
#include <conio.h>
#include <clocale>  
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>
#include<vector>
#include <iterator>
#include <algorithm>
#include <conio.h>
 
using namespace std;
int seller_count = 0;
int buyer_count = 0;
 
struct seller
{
    char FIO[25];
    int time; // общее время на обслуживание одним продавццом всех покупателей
    float average_time;
    int number_of_seller;//номер продавца
    int id;
    seller()
    {
        FIO[0] = '\0';
        time = 0;
        average_time = 0;
        number_of_seller = 0;
        id = 0;
    }
 
};
struct buyer
{
    int NumOfGoods;
    int NumOfWeightGoods;
    int NumOfPieceGoods;
    int id;
    buyer()
    {
        NumOfGoods = 0;
        NumOfWeightGoods = 0;
        NumOfPieceGoods = 0;
        id = 0;
    }
 
};
std::ostream& operator<<(std::ostream& stream, seller const& DataSel)
{
    stream.write((char*)&DataSel, sizeof(seller));
    return stream;
}
std::istream& operator>>(std::istream& stream, seller const& DataSel)
{
    stream.read((char*)&DataSel, sizeof(seller));
    return stream;
}
 
std::ostream& operator<<(std::ostream& stream, buyer const& Databuy)
{
    stream.write((char*)&Databuy, sizeof(buyer));
    return stream;
}
std::istream& operator>>(std::istream& stream, buyer const& Databuy)
{
    stream.read((char*)&Databuy, sizeof(buyer));
    return stream;
}
 
void DownloadDataSel(vector<seller>& DataSel, ifstream& rewrite)
{
    seller DataSel1;//буфер для чтения структуры
    rewrite.seekg(0, rewrite.end);
    int length = rewrite.tellg();//размер файла в байтах
    rewrite.seekg(0, rewrite.beg);//переместил курсор в начало списка
 
 
    for (int i = 0; i < length / sizeof(DataSel); i++)
    {
        rewrite >> DataSel1;
        DataSel.push_back(DataSel1);//записываю в вектор
    }
}
 
void UploadDataSel(vector<seller>& DataSel, ofstream& rewrite)
{
    rewrite.seekp(0, ios::beg);
    for (int i = 0; i < DataSel.size(); i++)
    {
        if (DataSel[i].id != 0)
            rewrite << DataSel[i];
    }
}
 
void DownloadDataBuy(vector<buyer>& DataBuy, ifstream& file)
{
    buyer Databuy1;//буфер для чтения структуры
    file.seekg(0, file.end);
    int length = file.tellg();//размер файла в байтах
    file.seekg(0, file.beg);//переместил курсор в начало списка
 
 
    for (int i = 0; i < length / sizeof(buyer); i++)
    {
        file >> Databuy1;
        DataBuy.push_back(Databuy1);//записываю в вектор
    }
}
 
void UploadDataBuy(vector<buyer>& DataBuy, ofstream& file)
{
    file.seekp(0, ios::beg);
    for (int i = 0; i < DataBuy.size(); i++)
    {
        if (DataBuy[i].id != 0)
            file << DataBuy[i];
    }
}
 
void AddDataBuy(vector<buyer>& DataBuy, ifstream& file)
{
    buyer DataBuy1;
    cin.ignore();
    char c = 0;
    system("cls");
    cout << "Введите число товаров >> ";
    cin >> DataBuy1.NumOfGoods;
    cout << "Введите число штучного товара >> ";
    cin >> DataBuy1.NumOfPieceGoods;
    cout << "Введите число весового товара>> ";
    cin >> DataBuy1.NumOfWeightGoods;
    DataBuy1.id=++buyer_count;
    while (DataBuy1.NumOfGoods > (DataBuy1.NumOfPieceGoods + DataBuy1.NumOfWeightGoods))
    {
        cout << "Введите число товаров >> ";
        cin >> DataBuy1.NumOfGoods;
    }
    DataBuy.push_back(DataBuy1);
}
 
void AddDataSel(vector<seller>& DataSel, ifstream& rewrite, vector<buyer>& DataBuy, ifstream& file)
{
    seller DataSel1;
    buyer DataBuy1;
    DataBuy1 = DataBuy.back();
    cin.ignore();
    int c;
    system("cls");
    cout << "FIO >> ";
    gets_s(DataSel1.FIO);
    cout << "Введите время >> ";
    cin >> DataSel1.time;
    DataSel1.number_of_seller++;
    DataSel1.average_time = DataSel1.time / (DataBuy1.NumOfPieceGoods + 3 * DataBuy1.NumOfWeightGoods);
    DataSel1.id = ++seller_count;
    DataSel.push_back(DataSel1);
}
 
void PrintDataSel(seller DataSel, buyer DataBuy)
{
    if ((DataSel.id != 0) && (DataBuy.id != 0))
    {
        cout << "_______________________________" << endl;
        cout << "FIO: " << DataSel.FIO << endl;
        cout << "Time: " << DataSel.time << endl;
        cout << "Average time: " << DataSel.average_time << endl;
        cout << "Number of seller: " << DataSel.id << endl;
        cout << "Num Of Goods: " << DataBuy.NumOfGoods << endl;
        cout << "Num Of Piece Goods: " << DataBuy.NumOfPieceGoods << endl;
        cout << "Num Of Weight Goods: " << DataBuy.NumOfWeightGoods << endl;
 
    }
}
void PrintDataBuy(buyer DataBuy)
{
    if (DataBuy.id != 0)
    {
        //cout << "_______________________________" << endl;
        cout << "Num Of Goods: " << DataBuy.NumOfGoods << endl;
        cout << "Num Of Piece Goods: " << DataBuy.NumOfPieceGoods << endl;
        cout << "Num Of Weight Goods: " << DataBuy.NumOfWeightGoods << endl;
    }
}
 
void ShowAllDataSel(vector<seller>& DataSel, vector<buyer>  DataBuy)
{
 
    if (DataSel.size() >= 1)
        for (int i = 0; i < DataSel.size(); i++)
        {
            PrintDataSel(DataSel[i],DataBuy[i]);
        }
    cout << endl;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите имя файла" << endl;
    string name;
    cin >> name;
    int menu;
    vector<seller> DataSel;//структурa данных
    vector<buyer>  DataBuy;
    ifstream rewrite;
    ifstream file;
    rewrite.open(name, ios::binary);
    file.open(name, ios::binary);
    ofstream rewrite_in;
    ofstream file_in;
    if (rewrite_in.is_open())
    {
        DownloadDataSel(DataSel, rewrite);
            
    }
    if (file_in.is_open())
    {
        DownloadDataBuy(DataBuy, rewrite);
    }
    if (DataSel.size() > 0)
    {
        seller_count = DataSel[DataSel.size() - 1].id;
    }
    if (DataSel.size() > 0)
    {
        buyer_count = DataSel[DataSel.size() - 1].id;
    }
    rewrite_in.close();
    file_in.close();
    char d = '\0';
    ofstream rewrite_out;
    ofstream file_out;
    rewrite_out.open(name, ios::binary | ios::trunc);
    
    do
    {
        system("cls");
        printf("\nDataSelbase of sellers\n");
        printf("\n1 - Enter DataSel\n");
        printf("\n2 - View DataSel\n");
        printf("\n3 - Exit\n");
        if (d == '3') break;
        cin >> menu;
        switch (menu)
        {
        case 1:
            AddDataBuy(DataBuy, rewrite);
            AddDataSel(DataSel, rewrite, DataBuy, rewrite);
            system("pause");
 
            break;
        case 2:
            ShowAllDataSel(DataSel, DataBuy);
            //ShowAllDataBuy(DataBuy);
            system("pause");
            break;
        }
    } while (menu != 3);
    if (!file_out.is_open())
    {
        cout << "Беда!" << endl;
    }
    file_out.open(name, ios::binary | ios::trunc);
    if (!file.is_open())
    {
        cout << "Беда!" << endl;
    }
 
    UploadDataSel(DataSel, rewrite_out);
    UploadDataBuy(DataBuy, file_out);
    rewrite_out.close();
    file_out.close();
    return 0;
}
Возникла проблема с записью данных в файл. Не понимаю, почему не происходит запись,вроде все так сделал.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
08.04.2020, 20:53
Цитата Сообщение от Ilya44 Посмотреть сообщение
почему не происходит запись,вроде все так сделал
Предоставить такую простыню кода (с использованием нестандартных функций) и не указать конкретно место ошибки - плохая практика. Почему Вы решили, что запись не происходит?

Происходит не полностью. А чего можно было ожидать, открывая один файл двумя потоками на запись? О порядке открытия файлов и проверке успешности открытия вообще молчу.
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
08.04.2020, 21:16  [ТС]
Согласен, проверка успешности открытия не коректна. Я хочу записать данные в 2 разных файла, для реализации дальнейших условий задачи. А решение о том, что запись не происходит было принято, в связи с тем, что при просмотре файла, там отсутствуют какие- либо записи.

Добавлено через 7 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void UploadDataSel(vector<seller>& DataSel, ofstream& rewrite)
{
    rewrite.seekp(0, ios::beg);
    for (int i = 0; i < DataSel.size(); i++)
    {
        if (DataSel[i].id != 0)
            rewrite << DataSel[i];
    }
}
 
void UploadDataBuy(vector<buyer>& DataBuy, ofstream& file)
{
    file.seekp(0, ios::beg);
    for (int i = 0; i < DataBuy.size(); i++)
    {
        if (DataBuy[i].id != 0)
            file << DataBuy[i];
    }
}
Функции в которых происходит запись в файлы
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
08.04.2020, 21:31
Ilya44, тут всё нормально (вроде бы). Просто откройте разные файлы в потоках rewrite_out и file_out. Сейчас там один и тот же открывается. Первая запись проходит, а вторая пишет новые данные поверх старых (файл на момент записи уже отрыт, удаление содержимого не происходит), поэтому и получаем такую кашу.
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
08.04.2020, 22:14  [ТС]
Я кажется понял, что не так. В файл действительно происходит запись, но при открытии файла, он очищается.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
08.04.2020, 22:19
Цитата Сообщение от Ilya44 Посмотреть сообщение
при открытии файла, он очищается
При открытии файла на запись - да. Если явно не указать флаг std::ios_base::app.
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
08.04.2020, 22:26  [ТС]
После моих "гениальных" преобразований, выдает следующую ошибку:
Необработанное исключение по адресу 0x7A0AF2F6 (ucrtbased.dll) в 7я 2файла.exe: Недопустимый параметр был передан функции, для которой недопустимые параметры вызывают неустранимую ошибку.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
08.04.2020, 22:37
Ilya44, новый код покажете?
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
08.04.2020, 22:45  [ТС]
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
#include <Windows.h>
#include <conio.h>
#include <clocale>  
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>
#include<vector>
#include <iterator>
#include <algorithm>
#include <conio.h>
 
using namespace std;
int seller_count = 0;
int buyer_count = 0;
 
struct seller
{
    char FIO[25];
    int time; // общее время на обслуживание одним продавццом всех покупателей
    float average_time;
    int number_of_seller;//номер продавца
    int id;
    seller()
    {
        FIO[0] = '\0';
        time = 0;
        average_time = 0;
        number_of_seller = 0;
        id = 0;
    }
 
};
struct buyer
{
    int NumOfGoods;
    int NumOfWeightGoods;
    int NumOfPieceGoods;
    int id;
    buyer()
    {
        NumOfGoods = 0;
        NumOfWeightGoods = 0;
        NumOfPieceGoods = 0;
        id = 0;
    }
 
};
std::ostream& operator<<(std::ostream& stream, seller const& DataSel)
{
    stream.write((char*)&DataSel, sizeof(seller));
    return stream;
}
std::istream& operator>>(std::istream& stream, seller const& DataSel)
{
    stream.read((char*)&DataSel, sizeof(seller));
    return stream;
}
 
std::ostream& operator<<(std::ostream& stream, buyer const& Databuy)
{
    stream.write((char*)&Databuy, sizeof(buyer));
    return stream;
}
std::istream& operator>>(std::istream& stream, buyer const& Databuy)
{
    stream.read((char*)&Databuy, sizeof(buyer));
    return stream;
}
 
void DownloadDataSel(vector<seller>& DataSel, ifstream& rewrite)
{
    seller DataSel1;//буфер для чтения структуры
    rewrite.seekg(0, rewrite.end);
    int length = rewrite.tellg();//размер файла в байтах
    rewrite.seekg(0, rewrite.beg);//переместил курсор в начало списка
 
 
    for (int i = 0; i < length / sizeof(DataSel); i++)
    {
        rewrite >> DataSel1;
        DataSel.push_back(DataSel1);//записываю в вектор
    }
}
 
void UploadDataSel(vector<seller>& DataSel, ofstream& rewrite_out)
{
    rewrite_out.seekp(0, ios::beg);
    for (int i = 0; i < DataSel.size(); i++)
    {
        if (DataSel[i].id != 0)
            rewrite_out << DataSel[i];
    }
}
 
void DownloadDataBuy(vector<buyer>& DataBuy, ifstream& file)
{
    buyer Databuy1;//буфер для чтения структуры
    file.seekg(0, file.end);
    int length = file.tellg();//размер файла в байтах
    file.seekg(0, file.beg);//переместил курсор в начало списка
 
 
    for (int i = 0; i < length / sizeof(buyer); i++)
    {
        file >> Databuy1;
        DataBuy.push_back(Databuy1);//записываю в вектор
    }
}
 
void UploadDataBuy(vector<buyer>& DataBuy, ofstream& file_out)
{
    file_out.seekp(0, ios::beg);
    for (int i = 0; i < DataBuy.size(); i++)
    {
        if (DataBuy[i].id != 0)
            file_out << DataBuy[i];
    }
}
 
void AddDataBuy(vector<buyer>& DataBuy, ifstream& file)
{
    buyer DataBuy1;
    cin.ignore();
    char c = 0;
    system("cls");
    cout << "Введите число товаров >> ";
    cin >> DataBuy1.NumOfGoods;
    cout << "Введите число штучного товара >> ";
    cin >> DataBuy1.NumOfPieceGoods;
    cout << "Введите число весового товара>> ";
    cin >> DataBuy1.NumOfWeightGoods;
    DataBuy1.id=++buyer_count;
    while (DataBuy1.NumOfGoods > (DataBuy1.NumOfPieceGoods + DataBuy1.NumOfWeightGoods))
    {
        cout << "Введите число товаров >> ";
        cin >> DataBuy1.NumOfGoods;
    }
    DataBuy.push_back(DataBuy1);
}
 
void AddDataSel(vector<seller>& DataSel, ifstream& rewrite, vector<buyer>& DataBuy, ifstream& file)
{
    seller DataSel1;
    buyer DataBuy1;
    DataBuy1 = DataBuy.back();
    cin.ignore();
    int c;
    system("cls");
    cout << "FIO >> ";
    gets_s(DataSel1.FIO);
    cout << "Введите время >> ";
    cin >> DataSel1.time;
    DataSel1.number_of_seller++;
    DataSel1.average_time = DataSel1.time / (DataBuy1.NumOfPieceGoods + 3 * DataBuy1.NumOfWeightGoods);
    DataSel1.id = ++seller_count;
    DataSel.push_back(DataSel1);
}
 
void PrintDataSel(seller DataSel, buyer DataBuy)
{
    if (DataSel.id != 0) 
    {
        cout << "_______________________________" << endl;
        cout << "FIO: " << DataSel.FIO << endl;
        cout << "Time: " << DataSel.time << endl;
        cout << "Average time: " << DataSel.average_time << endl;
        cout << "Number of seller: " << DataSel.id << endl;
        cout << "Num Of Goods: " << DataBuy.NumOfGoods << endl;
        cout << "Num Of Piece Goods: " << DataBuy.NumOfPieceGoods << endl;
        cout << "Num Of Weight Goods: " << DataBuy.NumOfWeightGoods << endl;
 
    }
}
//void PrintDataBuy(buyer DataBuy)
//{
//  if (DataBuy.id != 0)
//  {
//      //cout << "_______________________________" << endl;
//      cout << "Num Of Goods: " << DataBuy.NumOfGoods << endl;
//      cout << "Num Of Piece Goods: " << DataBuy.NumOfPieceGoods << endl;
//      cout << "Num Of Weight Goods: " << DataBuy.NumOfWeightGoods << endl;
//  }
//}
 
void ShowAllDataSel(vector<seller>& DataSel, vector<buyer> DataBuy)
{
 
    if ((DataSel.size() >= 1) &&(DataSel.size() >= 1))
        for (int i = 0; i < DataSel.size(); i++)
        {
            PrintDataSel(DataSel[i], DataBuy[i]);
        }
    cout << endl;
}
 
//void ShowAllDataBuy(vector<buyer> DataBuy)
//{
//  if (DataBuy.size() >= 1)
//      for (int i = 0; i < DataBuy.size(); i++)
//      {
//          PrintDataBuy(DataBuy[i]);
//      }
//  cout << endl;
//}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите имя файла" << endl;
    string name;
    cin >> name;
    int menu;
    vector<seller> DataSel;//структурa данных
    vector<buyer>  DataBuy;
    ifstream rewrite;
    ifstream file;
    rewrite.open(name, ios::binary, ios_base::app);
    file.open(name, ios::binary, ios_base::app);
    ofstream rewrite_in;
    ofstream file_in;
    if (rewrite.is_open())
    {
        DownloadDataSel(DataSel, rewrite);
            
    }
    if (file.is_open())
    {
        DownloadDataBuy(DataBuy, file);
    }
    if (DataSel.size() > 0)
    {
        seller_count = DataSel[DataSel.size() - 1].id;
    }
    if (DataBuy.size() > 0)
    {
        buyer_count = DataBuy[DataBuy.size() - 1].id;
    }
    rewrite.close();
    file.close();
    char d = '\0';
    ofstream rewrite_out;
    rewrite_out.open(name, ios::binary | ios::trunc);
    do
    {
        system("cls");
        printf("\nDataSelbase of sellers\n");
        printf("\n1 - Enter DataSel\n");
        printf("\n2 - View DataSel\n");
        printf("\n3 - Exit\n");
        if (d == '3') break;
        cin >> menu;
        switch (menu)
        {
        case 1:
            AddDataBuy(DataBuy, rewrite);
            AddDataSel(DataSel, rewrite, DataBuy, file);
            system("pause");
 
            break;
        case 2:
            ShowAllDataSel(DataSel,DataBuy);
            system("pause");
            break;
        }
    } while (menu != 3);
    
    UploadDataSel(DataSel, rewrite_out);
    rewrite_out.close();
    ofstream file_out("test.txt");
    file_out.open("1.txt", ios::binary | ios::trunc);
    UploadDataBuy(DataBuy, file_out);
    file_out.close();
    return 0;
}
Добавлено через 3 минуты
C++
1
2
3
4
ofstream file_out("test.txt");
    file_out.open("test.txt", ios::binary | ios::trunc);
    UploadDataBuy(DataBuy, file_out);
    file_out.close();
Тут я создаю файл для записи(не очень уверен в правильности)
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
09.04.2020, 02:20
Цитата Сообщение от Ilya44 Посмотреть сообщение
C++
220
221
rewrite.open(name, ios::binary, ios_base::app);
file.open(name, ios::binary, ios_base::app);
Флаги объедините через поразрядное ИЛИ |, а не через запятую.

Цитата Сообщение от Ilya44 Посмотреть сообщение
C++
272
273
ofstream file_out("test.txt");
file_out.open("1.txt", ios::binary | ios::trunc);
Если в конструктор передается имя файла, то он будет сразу открыт. Из описания open():
If the stream is already associated with a file (i.e., it is already open), calling this function fails.
В open() тут нет необходимости. Добавьте флаги вторым параметром конструктора. Зачем тут ios::trunc, если не секрет? Простое открытие файла для записи уже приведет к полной его перезаписи.
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
09.04.2020, 09:59  [ТС]
Теперь запись в файл происходит корректно.Но если мы открываем файл и просто хотим просмотреть данные, то после их просмотра, в файл опять записывается этот же вектор.Получается, файл нужно очистить, а потом перезаписать. ios::trunс - лишние.
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
10.04.2020, 19:01  [ТС]
Доброго времени суток. Имеется следующий код
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
#include <Windows.h>
#include <conio.h>
#include <clocale>  
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>
#include<vector>
#include <iterator>
#include <algorithm>
#include <conio.h>
 
using namespace std;
int seller_count = 0;
int buyer_count = 0;
 
struct seller
{
    char FIO[25];
    int time; // общее время на обслуживание одним продавццом всех покупателей
    float average_time;
    int number_of_seller;//номер продавца
    int id;
    seller()
    {
        FIO[0] = '\0';
        time = 0;
        average_time = 0;
        number_of_seller = 0;
        id = 0;
    }
 
};
struct buyer
{
    int NumOfGoods;
    int NumOfWeightGoods;
    int NumOfPieceGoods;
    int id;
    buyer()
    {
        NumOfGoods = 0;
        NumOfWeightGoods = 0;
        NumOfPieceGoods = 0;
        id = 0;
    }
 
};
std::ostream& operator<<(std::ostream& stream, seller const& DataSel)
{
    stream.write((char*)&DataSel, sizeof(seller));
    return stream;
}
std::istream& operator>>(std::istream& stream, seller const& DataSel)
{
    stream.read((char*)&DataSel, sizeof(seller));
    return stream;
}
 
std::ostream& operator<<(std::ostream& stream, buyer const& Databuy)
{
    stream.write((char*)&Databuy, sizeof(buyer));
    return stream;
}
std::istream& operator>>(std::istream& stream, buyer const& Databuy)
{
    stream.read((char*)&Databuy, sizeof(buyer));
    return stream;
}
 
void DownloadDataSel(vector<seller>& DataSel, ifstream& rewrite)
{
    seller DataSel1;//буфер для чтения структуры
    rewrite.seekg(0, rewrite.end);
    int length = rewrite.tellg();//размер файла в байтах
    rewrite.seekg(0, rewrite.beg);//переместил курсор в начало списка
 
 
    for (int i = 0; i < length / sizeof(DataSel); i++)
    {
        rewrite >> DataSel1;
        DataSel.push_back(DataSel1);//записываю в вектор
    }
}
 
void UploadDataSel(vector<seller>& DataSel, ofstream& rewrite_out)
{
    rewrite_out.seekp(0, ios::beg);
    for (int i = 0; i < DataSel.size(); i++)
    {
        if (DataSel[i].id != 0)
            rewrite_out << DataSel[i];
    }
}
 
void DownloadDataBuy(vector<buyer>& DataBuy, ifstream& file)
{
    buyer Databuy1;//буфер для чтения структуры
    file.seekg(0, file.end);
    int length = file.tellg();//размер файла в байтах
    file.seekg(0, file.beg);//переместил курсор в начало списка
 
 
    for (int i = 0; i < length / sizeof(buyer); i++)
    {
        file >> Databuy1;
        DataBuy.push_back(Databuy1);//записываю в вектор
    }
}
 
void UploadDataBuy(vector<buyer>& DataBuy, ofstream& file_out)
{
    file_out.seekp(0, ios::beg);
    for (int i = 0; i < DataBuy.size(); i++)
    {
        if (DataBuy[i].id != 0)
            file_out << DataBuy[i];
    }
}
 
void AddDataBuy(vector<buyer>& DataBuy, ifstream& file)
{
    buyer DataBuy1;
    cin.ignore();
    char c = 0;
    system("cls");
    cout << "Введите число товаров >> ";
    cin >> DataBuy1.NumOfGoods;
    cout << "Введите число штучного товара >> ";
    cin >> DataBuy1.NumOfPieceGoods;
    cout << "Введите число весового товара>> ";
    cin >> DataBuy1.NumOfWeightGoods;
    DataBuy1.id=++buyer_count;
    while (DataBuy1.NumOfGoods > (DataBuy1.NumOfPieceGoods + DataBuy1.NumOfWeightGoods))
    {
        cout << "Введите число товаров >> ";
        cin >> DataBuy1.NumOfGoods;
    }
    DataBuy.push_back(DataBuy1);
}
 
void AddDataSel(vector<seller>& DataSel, ifstream& rewrite, vector<buyer>& DataBuy, ifstream& file)
{
    seller DataSel1;
    buyer DataBuy1;
    DataBuy1 = DataBuy.back();
    cin.ignore();
    int c;
    system("cls");
    cout << "FIO >> ";
    gets_s(DataSel1.FIO);
    cout << "Введите время >> ";
    cin >> DataSel1.time;
    DataSel1.number_of_seller++;
    DataSel1.average_time = DataSel1.time / (DataBuy1.NumOfPieceGoods + 3 * DataBuy1.NumOfWeightGoods);
    DataSel1.id = ++seller_count;
    DataSel.push_back(DataSel1);
}
 
void PrintDataSel(seller DataSel, buyer DataBuy)
{
    if (DataSel.id != 0) 
    {
        cout << "_______________________________" << endl;
        cout << "FIO: " << DataSel.FIO << endl;
        cout << "Time: " << DataSel.time << endl;
        cout << "Average time: " << DataSel.average_time << endl;
        cout << "Number of seller: " << DataSel.id << endl;
        cout << "Num Of Goods: " << DataBuy.NumOfGoods << endl;
        cout << "Num Of Piece Goods: " << DataBuy.NumOfPieceGoods << endl;
        cout << "Num Of Weight Goods: " << DataBuy.NumOfWeightGoods << endl;
 
    }
}
//void PrintDataBuy(buyer DataBuy)
//{
//  if (DataBuy.id != 0)
//  {
//      //cout << "_______________________________" << endl;
//      cout << "Num Of Goods: " << DataBuy.NumOfGoods << endl;
//      cout << "Num Of Piece Goods: " << DataBuy.NumOfPieceGoods << endl;
//      cout << "Num Of Weight Goods: " << DataBuy.NumOfWeightGoods << endl;
//  }
//}
 
void ShowAllDataSel(vector<seller>& DataSel, vector<buyer> DataBuy)
{
 
    if ((DataSel.size() >= 1) &&(DataBuy.size() >= 1))
        for (int i = 0; i < DataSel.size(); i++)
        {
            PrintDataSel(DataSel[i], DataBuy[i]);
        }
    cout << endl;
}
 
//void ShowAllDataBuy(vector<buyer> DataBuy)
//{
//  if (DataBuy.size() >= 1)
//      for (int i = 0; i < DataBuy.size(); i++)
//      {
//          PrintDataBuy(DataBuy[i]);
//      }
//  cout << endl;
//}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите имя файла" << endl;
    string name;
    cin >> name;
    int menu;
    vector<seller> DataSel;//структурa данных
    vector<buyer>  DataBuy;
    ifstream rewrite;
    ifstream file("test.txt", ios::binary);
    rewrite.open(name, ios::binary| ios::app);
    ofstream rewrite_in;
    ofstream file_in;
    if (rewrite.is_open())
    {
        DownloadDataSel(DataSel, rewrite);
            
    }
    if (file.is_open())
    {
        DownloadDataBuy(DataBuy, file);
    }
    if (DataSel.size() > 0)
    {
        seller_count = DataSel[DataSel.size() - 1].id;
    }
    if (DataBuy.size() > 0)
    {
        buyer_count = DataBuy[DataBuy.size() - 1].id;
    }
    rewrite.close();
    file.close();
    char d = '\0';
    ofstream rewrite_out;
    rewrite_out.open(name, ios::binary);
    do
    {
        system("cls");
        printf("\nDataSelbase of sellers\n");
        printf("\n1 - Enter DataSel\n");
        printf("\n2 - View DataSel\n");
        printf("\n3 - Exit\n");
        if (d == '3') break;
        cin >> menu;
        switch (menu)
        {
        case 1:
            AddDataBuy(DataBuy, rewrite);
            AddDataSel(DataSel, rewrite, DataBuy, file);
            system("pause");
 
            break;
        case 2:
            ShowAllDataSel(DataSel,DataBuy);
            system("pause");
            break;
        }
    } while (menu != 3);
    
    UploadDataSel(DataSel, rewrite_out);
    rewrite_out.close();
    ofstream file_out("test.txt",ios::binary);
    UploadDataBuy(DataBuy, file_out);
    file_out.close();
    return 0;
}
Проблема заключается в том, что после повторного открытия файла, данные которые записываются в вектор , опять записываются в файл,но старые данные так и остаются в файле. Т.е. в файл записываются одни те же данные. Не могу понять, где нужно очищать файл. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2020, 19:01
Помогаю со студенческими работами здесь

ХП по расчету премии каждого продавца
Добрый день. Есть задание, которое нужно реализовать с помощью хранимой процедура: --Сумму премий каждого продавца. Предположим, что...

Определить наиболее богатые и наиболее бедные месторождения
помогите написать программу на С++ по задаче Известны запасы нефти, в каждом из шести месторождений, а также названия этих месторождений....

Отсортировать слова в строке так, чтобы наиболее короткие из них были в начале строки, а наиболее длинные в конце
Вводится строка, состоящая из слов, разделенных пробелами. Требуется от- сортировать слова в строке так, чтобы наиболее короткие из них...

Как объединить все продажи продавца?
есть база .в запросе &quot;зарплата продавца&quot; нужно объединить одноименные имена продавцов так чтоб значение в поле&quot;выражение&quot; тоже...

Разделение функционала программы на продавца и администратора
Здравствуйте. Нужно написать программу на с++. Функционал программы должен быть разделен на продавца и администратора, администратор может...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. На мобильном - сканируйте QR-код. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru