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

ошибка номер...да их много. подскажите что не так. - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
оренбуржец
5 / 5 / 0
Регистрация: 12.12.2009
Сообщений: 56
15.12.2009, 20:14     ошибка номер...да их много. подскажите что не так. #1
дано расчетно-графическое задание: написать программу на языке с++ в среде MS Visual Studio 2008: написать программу, которая будет содержать в себе информацию о продукте флеш-накопителей.(марка продукта, обьем, и количество товара на складе.) по типу меню. я вот набросал что смог, но он выдает кучу, а точнее 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
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
#include <iostream>
#include <iomanip> //Подключаем заголовочный файл для работы с потоковыми манипуляторами 
#include <fstream> //Подключаем заголовчный файл для работы с потоковыми файловыми классами
#include <string.h>//Подключаем заголовочный файл для работы со строками
 
using namespace std;
 
 
const int MAX_NAME_LENGTH = 100; //Максимальная длина марки продукта
const int MAX_Brand_COUNT = 1000; //Максимальное количество марок в массиве
const char* FILE_NAME = "FlashBrand.dat"; //Имя файла для хранения записей о спортсменах
//Заголовочная константная строка, используемая при выводе записей
const char* HEADER = "Index       Producer        Memory    ";
//Разделительная линия
const char* SEPARATING_LINE = "-------------------------------------------------------------------------------";
 
//Перечисление существующих марок
// skNone - марка не указана;
// Apacer
// A-Data_My_Flash
// Kingston 
// QUMO 
enum BrandKind {skNone, Apacer, A_Data_My_Flash, Kingston, QUMO};
 
//Структура, описывающая запись о спортсмене
struct Flashki
{
    char Producer[MAX_NAME_LENGTH + 1];  //марка товара
    int Memory;        //обьем памяти
    int ProductCount;        //Количество товара на складе
};
 
//Вспомогательная функция, осуществляющая преобразование 
//вида товара, содержашегося в параметре Type в строку Str,
//т.е. в название товара, представленное в виде строки
void BrandKindToStr(BrandKind Type, char Str[])
{
    //В зависимости от значения Type
    switch (Type)   
    {
        case Apacer:
            strcpy(Str, "Apacer"); //Копируем в Str название  "Apacer"
            break;
        case A_Data_My_Flash:
            strcpy(Str, "A_Data_My_Flash");  //Копируем в Str название  "A-Data_My_Flash"
            break;
        case Kingston:
            strcpy(Str, "Kingston"); //Копируем в Str название  "Kingston"
            break;
        case QUMO:
            strcpy(Str, "QUMO"); //Копируем в Str название  "QUMO"
            break;
        default:
            strcpy(Str, "unknown"); //Случай, когда задан тип skNone
    }
}
 
//Вспомогательная функция, которая по названию спорта, содержащемся в строке Str,
//возвращает его тип
BrandKind StrToBrandKind(char Str[])
{
    //Переводим строку Str к нижнему регистру
    strlwr(Str);
    //Если строка Str равна "Apacer", то возвращаем Apacer
    if (!strcmp(Str, "Apacer")) 
        return Apacer;
    //Если строка Str равна "A-Data_My_Flash", то возвращаем A-Data_My_Flash
    if (!strcmp(Str, "A-Data_My_Flash"))
        return A_Data_My_Flash;
    //Если строка Str равна "Kingston", то возвращаем Kingston
    if (!strcmp(Str, "Kingston"))
        return Kingston;
    //Если строка Str равна "QUMO", то возвращаем QUMO
    if (!strcmp(Str, "QUMO"))
        return QUMO;
    //Если в строке недопустимое название вида спорта, то возвращаем skNone
    return skNone;
}
 
//Функция, осуществляющая ввод записи о спортсмене с консоли.
//Введенная запись возвращается в параметре Man, передаваемом по ссылке
void InputBrand(Brand& Man)
{
    char Buf[MAX_NAME_LENGTH]; //Вспомогательная строка для ввода данных
    bool IsValidKindOfBrand; //Логическая переменная, определяющая правильно ли введен вид спорта
 
    //Читаем символ перевода строки
    cin.get();
 
    cout << endl;
    cout << "Enter Producer info" << endl;
    //Вводим фамилию
    cout << "Producer    : ";       
    cin.getline(Man.Producer, sizeof Man.Producer);
    //Вводим имя
    cout << "Memory   : ";  
    cin.getline(Man.Memory, sizeof Man.Memory);
    //Читаем символ перевода строки
    cin.get();
    //Цикл с постусловием для повторного ввода строки вида спорта,
    //если она отличная от "Apacer, A-Data_My_Flash, Kingston, or QUMO"
    do
    {
        //Полагаем, что вид товара правильный
        IsValidKindOfBrand = true;      
        cout << "Kind of Brand (Apacer, A-Data_My_Flash, Kingston, or QUMO) : ";
        //Читаем в Buf строку вида товара
        cin.getline(Buf, sizeof Buf);   
        //Преобразовывем введенную строку в переменную типа BrandKind
        Man.KindOfBrand = StrToBrandKind(Buf);
        //Если была введена недопустимая строка
        if (Man.KindOfBrand == skNone)
        {
            //Выдаем сообщение, что строка неправильная
            cout << endl << "Invalid! Enter Apacer, A-Data_My_Flash, Kingston, or QUMO" << endl << endl;
            //Устанавливаем значение лжи для флага правильности строки вида товара
            IsValidKindOfBrand = false;
        }
        //Цикл повторяется до тех пор, пока введенная строка вида спорта не будет правильной
    } while (!IsValidKindOfSport);
    //Вводим количество сыгранных игр
    cout << "Brand count : ";
    cin >> Man.BrandCount;
}
 
//Функция вывода на консоль полей записи (структуры) Man, имеющей индекс Index
double PrintBrand(Brand Man, int Index):
{   char Buf[MAX_NAME_LENGTH]; //Строковая переменная для строкового представления вида спорта
 
    //Выводим индекс в поле максимальной ширины 5
    cout << setw(5) << Index << " ";
    //Выводим марку, объем, количество на складе. Каждое в своем поле максимальной ширины 13
    cout << setw(13) <<  Man.Producer << " " << setw(13) << Man.Memory << " "<< setw(13) << Man.BrandCount << " ";
    //Меняем символ-заполнитель с пробела на 0. Использование заполнителя 0 позволит выдавать даты в формате ДД.ММ.ГГГГ
    cout << setfill('0');
}
 
//Функция, добавляющая запись о продукте Man в конец массива товаров BrandArray, 
//ProductCount - количество записей-элементов в массиве BrandArray
 double AddBrand(Brand BrandArray[], int& ProductCount, Brand Man):
{
    BrandArray[ProductCount++] = Man;
}
 
//Функция, удаляющая в массиве BrandArray запись-элемент с индексом RemovingIndex,
//ProductCount - количество записей-элементов в массиве BrandArray.
//Функция возвращает истину, если RemovingIndex лежит в допустимом диапазоне от 0 до ProductCount-1,
//иначе функция возвращает ложь
bool RemoveBrand(Brand BrandArray[], int& ProductCount, int RemovingIndex):
{
    //Если индекс удаляемого элемента задан неправильно, то возвращаем ложь
    if (RemovingIndex < 0 || RemovingIndex >= ProductCount)
    {
        return false;
    }
    //Данный цикл осуществляет сдвиг элементов 
    // BrandArray[RemovingIndex], BrandArray[RemovingIndex], ..., BrandArray[ProductCount - 1]
    //на один элемент влево и тем самым затирает удаляемый элемент
    for (int i = RemovingIndex; i < ProductCount - 1; i++)
    {
        BrandArray[i] = BrandArray[i + 1];
    }
    //Уменьшаем количество элементов-записей на 1
    ProductCount--;
    //Возвращаем истину
    return true;
}
 
//Функция, осуществляющая поиск и вывод на консоль элементов-записей о товарах массива BrandArray,
//фамилия которых совпадает со строкой KeySurname (ключом для поиска).
//ProductCount - количество записей-элементов в массиве BrandArray.
double SearchAndPrintBrand(Brand BrandArray[], int ProductCount, char KeyProducer[]):
{
    //Переменная для подсчета количества найденных записей, вначале равна 0
    int FoundRecordsCount = 0;
    cout << endl;   
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемся по все элементам массива BrandArray
    for (int i = 0; i < ProductCount; i++)
    {
        //Если фамилия очередного элемента-записи совпадает с KeySurname, то
        if (!strcmp(BrandArray[i].Producer, KeyProducer))
        {   
            //выводим сам элемент
            PrintBrand(SportsmenArray[i], i);       
            //выводим разделительную линию
            cout << SEPARATING_LINE << endl;
            //Увеличиваем на 1 количество найденных записей
            FoundRecordsCount++;
        }
    }
    //Выводим количество найденных записей
    cout << FoundRecordsCount << " records were found." << endl;
}
 
//Функция, осуществляющая сортировку массива спортсменов по не возрастанию количества сыгранных игр.
//SportsmenArray - массив элементов-записей о спортсменах;
//SportsmenCount - количество спорстменов-записей в массиве.
double SortBrandByBrandCount(Brand BrandArray[], int ProductCount):
{
    int MaxIndex;
    Brand Tmp;
 
    for (int i = 0; i < ProductCount - 1; i++)
    {
        MaxIndex = i;       
        for (int j = i + 1; j < ProductCount; j++)
        {
            if (BrandArray[j].ProductCount > BrandArray[MaxIndex].BrandCount)
            {
                MaxIndex = j;
            }
        }
        Tmp = BrandArray[i];
        BrandArray[i] = BrandArray[MaxIndex];
        BrandArray[MaxIndex] = Tmp;
    }
}
 
//Функция, осуществляющая вывод на консоль всех элеменов-записей о товаре,
//содержащихся в массиве BrandArray размера ProductCount
char PrintAllBrand(Brand BrandArray[], int ProductCount):
{   
    cout << endl;
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемя по всем элементам
    for (int i = 0; i < ProductCount; i++)
    {       
        //Выводим очердной элемент-запись
        PrintBrand(BrandArray[i], i);       
        //Выводим разделительную линию
        cout << SEPARATING_LINE << endl;
    }
}
 
//Функция, осуществляющая чтение массива BrandArray и его размера ProductCount
//из бинарного файла с именем ProductCount
char LoadFromFile(Brand BrandArray[], int& ProductCount, const char* FileName):
{
    //Объявлем файловый поток ввода inp, передаем ему имя открываемого файла FileName
    ifstream inp(FileName);
    //Читаем из файла количество элементов в массиве
    inp >> ProductCount;
    //Читаем из файла целиком весь массив
    inp.read((char *)BrandArray, ProductCount * sizeof(BrandArray[0])); 
}
 
//Фуникция, осуществляющая сохранение массива BrandArray и его размера ProductCount
//в бинарный файл FileName
char SaveToFile(Brand BrandArray[], int ProductCount, const char* FileName):
{
    //Объявляем файловый поток вывода out, передаем ему имя открываемого файла FileName
    ofstream out(FileName);
    //Записываем в файл количество спорстменов
    out << ProductCount;
    //Записываем в файл весь массив целиком
    out.write((char *)BrandArray, ProductCount * sizeof(BrandArray[0]));
}
 
//Функция, реализующая главное меню программы. В зависимости от выбора пользователя, 
//осуществляет вызов соответствующих функций.
//Параметры:
//SportsmenArray - массив элементов-записей о спорстменах;
//SportsmenCount - количество элементов в массиве.
char MainMenu(Brand BrandArray[], int& ProductCount):
{
    //Переменная, которая будет хранить номер выбранного пользователем пункта меню
    int UserChoise; 
    //Переменная-запись о товаре
    Brand Man;
    //Переменная для хранения индекса удаляемого элемента
    int RemovingIndex;
    //Массив символов для хранения строки производителя для поиска
    char KeySurname[MAX_NAME_LENGTH];
    //Цикл с постусловием, осуществляющий вывод меню, ввод выбора пользователя и
    //выполнение соответстующих этому выбору действий до тех пор, пока пользователь
    //не выберет выход из программы
    do 
    {
        //Отображаем меню
        cout << endl;
        cout << "          MENU" << endl;
        cout << "=========================" << endl;
        cout << " [1] Add Producer" << endl;
        cout << " [2] Remove Producer" << endl;
        cout << " [3] Search Producer" << endl;
        cout << " [4] Sort Producer" << endl;
        cout << " [5] Show all Producer" << endl;
        cout << " [6] Exit" << endl;
        cout << "=========================" << endl;
        cout << "Your choice : ";
        //Вводим выбранный пользователем пункт меню
        cin >> UserChoise;
 
        //С помощью конструкции выбора анализируем этот выбор
        //и осуществляем соответствующие действия
        switch (UserChoise)
        {
            //Добавление новой записи о товаре в массив
            case 1: 
                InputBrand(Man);
                AddBrand(BrandArray, ProductCount, Man);
                break;
            //Удаление записи о товаре с указанным индексом из массива
            case 2:
                cout << endl << "Enter index of brand to delete : ";
                //Вводим индекс удаляемого элемента-записи
                cin >> RemovingIndex;
                //Удаляем элемент. Если результат удаления ложь, то
                if (!RemoveBrand(BrandArray, ProductCount, RemovingIndex))
                {
                    //Выдаем ошибку
                    cout << endl << "Invalid index! Try again." << endl;
                }
                break;
            //Поиск всех записей о спорстменах, имеющих указанную фамилию
            case 3:
                cout << endl << "Enter Producer for search : ";
                //Вводим символ перевода строки
                cin.get();
                //Вводим фамилию для поиска 
                cin.getline(KeyProducer, sizeof KeyProducer);               
                //Вызываем функцию поиска и вывода найденных элементов
                SearchAndPrintSportsmen(BrandArray, ProductCount, KeyProducer);
                break;
            //Сортировка всех записей о спортсменах в порядке не возрастания 
            //количества сыгранных игр
            case 4:
                SortProducerByProductCount(BrandArray, ProductCount);
                break;
            //Печать всех записей о спортсменах
            case 5:
                PrintAllBrand(BrandArray, ProductCount);
                break;
            //Выход
            case 6:
                cout << "Bye-bye..." << endl;
                break;
            //Ошибка, пользователь выбрал несуществующий пункт меню
            default:
                cout << endl << "Invalid choice! Try again." << endl;
        }
        //цикл выполняется до тех пор, пока пользователь не выберет выход
    } while (UserChoise != 6);
}
 
int main()
{
    //Описание массива записей (структур) о спортсменах
    Brand BrandArray[MAX_Brand_COUNT];
    //Переменная для хранения количества записей в массиве
    int ProductCount = 0;
 
    //Загружаем все записи из файла
    LoadFromFile(BrandArray, ProductCount, FILE_NAME);
    //Выдаем меню и осуществляем операции
    MainMenu(BrandArray, ProductCount); 
    //Перед выходом из программы сохраняем все записи в файл
    SaveToFile(BrandArray, ProductCount, FILE_NAME);
    return 0;
}


Добавлено через 13 минут
извиняюсь не успел подправить свое сообщение. вот тот
код


дано расчетно-графическое задание: написать программу на языке с++ в среде MS Visual Studio 2008: написать программу, которая будет содержать в себе информацию о продукте флеш-накопителей.(марка продукта, обьем, и количество товара на складе.) по типу меню. я вот набросал что смог, но он выдает кучу, а точнее 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
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
#include <iostream>
#include <iomanip> //Подключаем заголовочный файл для работы с потоковыми манипуляторами 
#include <fstream> //Подключаем заголовчный файл для работы с потоковыми файловыми классами
#include <string.h>//Подключаем заголовочный файл для работы со строками
 
using namespace std;
 
 
const int MAX_NAME_LENGTH = 100; //Максимальная длина марки продукта
const int MAX_Brand_COUNT = 1000; //Максимальное количество марок в массиве
const char* FILE_NAME = "FlashBrand.dat"; //Имя файла для хранения записей о товарах
//Заголовочная константная строка, используемая при выводе записей
const char* HEADER = "Index       Producer        Memory    ";
//Разделительная линия
const char* SEPARATING_LINE = "-------------------------------------------------------------------------------";
 
//Перечисление существующих марок
// skNone - марка не указана;
// Apacer
// A-Data_My_Flash
// Kingston 
// QUMO 
enum BrandKind {skNone, Apacer, A_Data_My_Flash, Kingston, QUMO};
 
//Структура, описывающая запись о товаре
struct Flashki
{
    char Producer[MAX_NAME_LENGTH + 1];  //марка товара
    int Memory;        //обьем памяти
    int ProductCount;        //Количество товара на складе
};
 
//Вспомогательная функция, осуществляющая преобразование 
//вида товара, содержашегося в параметре Type в строку Str,
//т.е. в название товара, представленное в виде строки
void BrandKindToStr(BrandKind Type, char Str[])
{
    //В зависимости от значения Type
    switch (Type)   
    {
        case Apacer:
            strcpy(Str, "Apacer"); //Копируем в Str название  "Apacer"
            break;
        case A_Data_My_Flash:
            strcpy(Str, "A_Data_My_Flash");  //Копируем в Str название  "A-Data_My_Flash"
            break;
        case Kingston:
            strcpy(Str, "Kingston"); //Копируем в Str название  "Kingston"
            break;
        case QUMO:
            strcpy(Str, "QUMO"); //Копируем в Str название  "QUMO"
            break;
        default:
            strcpy(Str, "unknown"); //Случай, когда задан тип skNone
    }
}
 
//Вспомогательная функция, которая по названию спорта, содержащемся в строке Str,
//возвращает его тип
BrandKind StrToBrandKind(char Str[])
{
    //Переводим строку Str к нижнему регистру
    strlwr(Str);
    //Если строка Str равна "Apacer", то возвращаем Apacer
    if (!strcmp(Str, "Apacer")) 
        return Apacer;
    //Если строка Str равна "A-Data_My_Flash", то возвращаем A-Data_My_Flash
    if (!strcmp(Str, "A-Data_My_Flash"))
        return A_Data_My_Flash;
    //Если строка Str равна "Kingston", то возвращаем Kingston
    if (!strcmp(Str, "Kingston"))
        return Kingston;
    //Если строка Str равна "QUMO", то возвращаем QUMO
    if (!strcmp(Str, "QUMO"))
        return QUMO;
    //Если в строке недопустимое название вида товара, то возвращаем skNone
    return skNone;
}
 
//Функция, осуществляющая ввод записи о товаре с консоли.
//Введенная запись возвращается в параметре Man, передаваемом по ссылке
void InputBrand(Brand& Man)
{
    char Buf[MAX_NAME_LENGTH]; //Вспомогательная строка для ввода данных
    bool IsValidKindOfBrand; //Логическая переменная, определяющая правильно ли введен вид товара
 
    //Читаем символ перевода строки
    cin.get();
 
    cout << endl;
    cout << "Enter Producer info" << endl;
    //Вводим фамилию
    cout << "Producer    : ";       
    cin.getline(Man.Producer, sizeof Man.Producer);
    //Вводим имя
    cout << "Memory   : ";  
    cin.getline(Man.Memory, sizeof Man.Memory);
    //Читаем символ перевода строки
    cin.get();
    //Цикл с постусловием для повторного ввода строки вида товара,
    //если она отличная от "Apacer, A-Data_My_Flash, Kingston, or QUMO"
    do
    {
        //Полагаем, что вид товара правильный
        IsValidKindOfBrand = true;      
        cout << "Kind of Brand (Apacer, A-Data_My_Flash, Kingston, or QUMO) : ";
        //Читаем в Buf строку вида товара
        cin.getline(Buf, sizeof Buf);   
        //Преобразовывем введенную строку в переменную типа BrandKind
        Man.KindOfBrand = StrToBrandKind(Buf);
        //Если была введена недопустимая строка
        if (Man.KindOfBrand == skNone)
        {
            //Выдаем сообщение, что строка неправильная
            cout << endl << "Invalid! Enter Apacer, A-Data_My_Flash, Kingston, or QUMO" << endl << endl;
            //Устанавливаем значение лжи для флага правильности строки вида товара
            IsValidKindOfBrand = false;
        }
        //Цикл повторяется до тех пор, пока введенная строка вида товара не будет правильной
    } while (!IsValidKindOfBrand);
    //Вводим количество товара на складе
    cout << "Brand count : ";
    cin >> Man.BrandCount;
}
 
//Функция вывода на консоль полей записи (структуры) Man, имеющей индекс Index
double PrintBrand(Brand Man, int Index):
{   char Buf[MAX_NAME_LENGTH]; //Строковая переменная для строкового представления вида товара
 
    //Выводим индекс в поле максимальной ширины 5
    cout << setw(5) << Index << " ";
    //Выводим марку, объем, количество на складе. Каждое в своем поле максимальной ширины 13
    cout << setw(13) <<  Man.Producer << " " << setw(13) << Man.Memory << " "<< setw(13) << Man.BrandCount << " ";
    //Меняем символ-заполнитель с пробела на 0. Использование заполнителя 0 позволит выдавать даты в формате ДД.ММ.ГГГГ
    cout << setfill('0');
}
 
//Функция, добавляющая запись о продукте Man в конец массива товаров BrandArray, 
//ProductCount - количество записей-элементов в массиве BrandArray
 double AddBrand(Brand BrandArray[], int& ProductCount, Brand Man):
{
    BrandArray[ProductCount++] = Man;
}
 
//Функция, удаляющая в массиве BrandArray запись-элемент с индексом RemovingIndex,
//ProductCount - количество записей-элементов в массиве BrandArray.
//Функция возвращает истину, если RemovingIndex лежит в допустимом диапазоне от 0 до ProductCount-1,
//иначе функция возвращает ложь
bool RemoveBrand(Brand BrandArray[], int& ProductCount, int RemovingIndex):
{
    //Если индекс удаляемого элемента задан неправильно, то возвращаем ложь
    if (RemovingIndex < 0 || RemovingIndex >= ProductCount)
    {
        return false;
    }
    //Данный цикл осуществляет сдвиг элементов 
    // BrandArray[RemovingIndex], BrandArray[RemovingIndex], ..., BrandArray[ProductCount - 1]
    //на один элемент влево и тем самым затирает удаляемый элемент
    for (int i = RemovingIndex; i < ProductCount - 1; i++)
    {
        BrandArray[i] = BrandArray[i + 1];
    }
    //Уменьшаем количество элементов-записей на 1
    ProductCount--;
    //Возвращаем истину
    return true;
}
 
//Функция, осуществляющая поиск и вывод на консоль элементов-записей о товарах массива BrandArray,
//фамилия которых совпадает со строкой KeySurname (ключом для поиска).
//ProductCount - количество записей-элементов в массиве BrandArray.
double SearchAndPrintBrand(Brand BrandArray[], int ProductCount, char KeyProducer[]):
{
    //Переменная для подсчета количества найденных записей, вначале равна 0
    int FoundRecordsCount = 0;
    cout << endl;   
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемся по все элементам массива BrandArray
    for (int i = 0; i < ProductCount; i++)
    {
        //Если фамилия очередного элемента-записи совпадает с KeySurname, то
        if (!strcmp(BrandArray[i].Producer, KeyProducer))
        {   
            //выводим сам элемент
            PrintBrand(SportsmenArray[i], i);       
            //выводим разделительную линию
            cout << SEPARATING_LINE << endl;
            //Увеличиваем на 1 количество найденных записей
            FoundRecordsCount++;
        }
    }
    //Выводим количество найденных записей
    cout << FoundRecordsCount << " records were found." << endl;
}
 
//Функция, осуществляющая сортировку массива товаров по не возрастанию количества на складе
//SportsmenArray - массив элементов-записей о товаре;
//ProductCount - количество спорстменов-записей в массиве.
double SortBrandByBrandCount(Brand BrandArray[], int ProductCount):
{
    int MaxIndex;
    Brand Tmp;
 
    for (int i = 0; i < ProductCount - 1; i++)
    {
        MaxIndex = i;       
        for (int j = i + 1; j < ProductCount; j++)
        {
            if (BrandArray[j].ProductCount > BrandArray[MaxIndex].BrandCount)
            {
                MaxIndex = j;
            }
        }
        Tmp = BrandArray[i];
        BrandArray[i] = BrandArray[MaxIndex];
        BrandArray[MaxIndex] = Tmp;
    }
}
 
//Функция, осуществляющая вывод на консоль всех элеменов-записей о товаре,
//содержащихся в массиве BrandArray размера ProductCount
char PrintAllBrand(Brand BrandArray[], int ProductCount):
{   
    cout << endl;
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемя по всем элементам
    for (int i = 0; i < ProductCount; i++)
    {       
        //Выводим очердной элемент-запись
        PrintBrand(BrandArray[i], i);       
        //Выводим разделительную линию
        cout << SEPARATING_LINE << endl;
    }
}
 
//Функция, осуществляющая чтение массива BrandArray и его размера ProductCount
//из бинарного файла с именем ProductCount
char LoadFromFile(Brand BrandArray[], int& ProductCount, const char* FileName):
{
    //Объявлем файловый поток ввода inp, передаем ему имя открываемого файла FileName
    ifstream inp(FileName);
    //Читаем из файла количество элементов в массиве
    inp >> ProductCount;
    //Читаем из файла целиком весь массив
    inp.read((char *)BrandArray, ProductCount * sizeof(BrandArray[0])); 
}
 
//Фуникция, осуществляющая сохранение массива BrandArray и его размера ProductCount
//в бинарный файл FileName
char SaveToFile(Brand BrandArray[], int ProductCount, const char* FileName):
{
    //Объявляем файловый поток вывода out, передаем ему имя открываемого файла FileName
    ofstream out(FileName);
    //Записываем в файл количество спорстменов
    out << ProductCount;
    //Записываем в файл весь массив целиком
    out.write((char *)BrandArray, ProductCount * sizeof(BrandArray[0]));
}
 
//Функция, реализующая главное меню программы. В зависимости от выбора пользователя, 
//осуществляет вызов соответствующих функций.
//Параметры:
//SportsmenArray - массив элементов-записей о спорстменах;
//SportsmenCount - количество элементов в массиве.
char MainMenu(Brand BrandArray[], int& ProductCount):
{
    //Переменная, которая будет хранить номер выбранного пользователем пункта меню
    int UserChoise; 
    //Переменная-запись о товаре
    Brand Man;
    //Переменная для хранения индекса удаляемого элемента
    int RemovingIndex;
    //Массив символов для хранения строки производителя для поиска
    char KeySurname[MAX_NAME_LENGTH];
    //Цикл с постусловием, осуществляющий вывод меню, ввод выбора пользователя и
    //выполнение соответстующих этому выбору действий до тех пор, пока пользователь
    //не выберет выход из программы
    do 
    {
        //Отображаем меню
        cout << endl;
        cout << "          MENU" << endl;
        cout << "=========================" << endl;
        cout << " [1] Add Producer" << endl;
        cout << " [2] Remove Producer" << endl;
        cout << " [3] Search Producer" << endl;
        cout << " [4] Sort Producer" << endl;
        cout << " [5] Show all Producer" << endl;
        cout << " [6] Exit" << endl;
        cout << "=========================" << endl;
        cout << "Your choice : ";
        //Вводим выбранный пользователем пункт меню
        cin >> UserChoise;
 
        //С помощью конструкции выбора анализируем этот выбор
        //и осуществляем соответствующие действия
        switch (UserChoise)
        {
            //Добавление новой записи о товаре в массив
            case 1: 
                InputBrand(Man);
                AddBrand(BrandArray, ProductCount, Man);
                break;
            //Удаление записи о товаре с указанным индексом из массива
            case 2:
                cout << endl << "Enter index of brand to delete : ";
                //Вводим индекс удаляемого элемента-записи
                cin >> RemovingIndex;
                //Удаляем элемент. Если результат удаления ложь, то
                if (!RemoveBrand(BrandArray, ProductCount, RemovingIndex))
                {
                    //Выдаем ошибку
                    cout << endl << "Invalid index! Try again." << endl;
                }
                break;
            //Поиск всех записей о спорстменах, имеющих указанную фамилию
            case 3:
                cout << endl << "Enter Producer for search : ";
                //Вводим символ перевода строки
                cin.get();
                //Вводим фамилию для поиска 
                cin.getline(KeyProducer, sizeof KeyProducer);               
                //Вызываем функцию поиска и вывода найденных элементов
                SearchAndPrintSportsmen(BrandArray, ProductCount, KeyProducer);
                break;
            //Сортировка всех записей о спортсменах в порядке не возрастания 
            //количества сыгранных игр
            case 4:
                SortProducerByProductCount(BrandArray, ProductCount);
                break;
            //Печать всех записей о спортсменах
            case 5:
                PrintAllBrand(BrandArray, ProductCount);
                break;
            //Выход
            case 6:
                cout << "Bye-bye..." << endl;
                break;
            //Ошибка, пользователь выбрал несуществующий пункт меню
            default:
                cout << endl << "Invalid choice! Try again." << endl;
        }
        //цикл выполняется до тех пор, пока пользователь не выберет выход
    } while (UserChoise != 6);
}
 
int main()
{
    //Описание массива записей (структур) о спортсменах
    Brand BrandArray[MAX_Brand_COUNT];
    //Переменная для хранения количества записей в массиве
    int ProductCount = 0;
 
    //Загружаем все записи из файла
    LoadFromFile(BrandArray, ProductCount, FILE_NAME);
    //Выдаем меню и осуществляем операции
    MainMenu(BrandArray, ProductCount); 
    //Перед выходом из программы сохраняем все записи в файл
    SaveToFile(BrandArray, ProductCount, FILE_NAME);
    return 0;
}
что у меня получился.

Добавлено через 1 минуту
если кому это поможет я писал свой код вот по этому
шаблону

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
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
/*
Условие разобранного варианта:
 
Каждая запись представляется собой экземпляр структуры. 
Все записи хранятся в массиве. Функциональность программы должна включать:
•   Добавление записи, введенной с клавиатуры
•   Удаление указанной записи
•   Поиск записей по некоторому критерию
•   Сортировку записей
•   Печать всех записей
•   Сохранение всех записей в файл*
•   Чтение всех записей из файла*
 
Записи о спортсменах. Каждая запись характеризуется фамилией, именем, отчеством,
датой рождения, видом спорта и количеством сыгранных игр.
 
*/
 
//Подключаем заголовочный файл для работы со стандартными потоками cin и cout
#include <iostream>
//Подключаем заголовочный файл для работы с потоковыми манипуляторами 
// (см. Павловская "Программирование на языке высокого уровня", с. 271 )
#include <iomanip>
//Подключаем заголовчный файл для работы с потоковыми файловыми классами
#include <fstream>
//Подключаем заголовочный файл для работы со строками
#include <string.h>
using namespace std;
 
// Константы
const int MAX_NAME_LENGTH = 100; //Максимальная длина фамилии, имени, отчества
const int MAX_SPORTSMEN_COUNT = 1000; //Максимальное количество спортсменов в массиве
const char* FILE_NAME = "sportsmen.dat"; //Имя файла для хранения записей о спортсменах
//Заголовочная константная строка, используемая при выводе записей
const char* HEADER = "Index       Surname          Name    Patronymic Birth date  Sport Games count";
//Разделительная линия
const char* SEPARATING_LINE = "-------------------------------------------------------------------------------";
 
//Перечисление, описывающее вид спорта
// skNone - вид спорта не указан;
// skTennis - теннис,
// skChess - шахматы,
// skSprint - бег
enum SportKind {skNone, skTennis, skChess, skSprint};
 
//Стуктура, описывающая дату
struct Date
{
    unsigned short int Year;  //Год
    unsigned short int Month; //Месяц
    unsigned short int Day;   //День
};
 
//Структура, описывающая запись о спортсмене
struct Sportsman
{
    char Surname[MAX_NAME_LENGTH + 1];    //Фамилия
    char Name[MAX_NAME_LENGTH + 1];       //Имя
    char Patronymic[MAX_NAME_LENGTH + 1]; //Отчество
    Date DateOfBirth;      //Дата рождения
    SportKind KindOfSport; //Вид спорта
    int GamesCount;        //Количество сыгранных игр
};
 
//Вспомогательная функция, осуществляющая преобразование 
//вида спорта, содержашегося в параметре Type в строку Str,
//т.е. в назваие спорта, представленное в виде строки
void SportKindToStr(SportKind Type, char Str[])
{
    //В зависимости от значения Type
    switch (Type)   
    {
        case skTennis:
            strcpy(Str, "tennis"); //Копируем в Str название вида спорта "tennis"
            break;
        case skChess:
            strcpy(Str, "chess");  //Копируем в Str название вида спорта "chess"
            break;
        case skSprint:
            strcpy(Str, "sprint"); //Копируем в Str название вида спорта "sprint"
            break;
        default:
            strcpy(Str, "unknown"); //Случай, когда задан тип skNone
    }
}
 
//Вспомогательная функция, которая по названию спорта, содержащемся в строке Str,
//возвращает его тип
SportKind StrToSportKind(char Str[])
{
    //Переводим строку Str к нижнему регистру
    strlwr(Str);
    //Если строка Str равна "tennis", то возвращаем skTennis
    if (!strcmp(Str, "tennis")) 
        return skTennis;
    //Если строка Str равна "chess", то возвращаем skСhess
    if (!strcmp(Str, "chess"))
        return skChess;
    //Если строка Str равна "sprint", то возвращаем skSprint
    if (!strcmp(Str, "sprint"))
        return skSprint;
    //Если в строке недопустимое название вида спорта, то возвращаем skNone
    return skNone;
}
 
//Функция, осуществляющая ввод записи о спортсмене с консоли.
//Введенная запись возвращается в параметре Man, передаваемом по ссылке
void InputSportsman(Sportsman& Man)
{
    //Про потоковые классы (в частности про объект cin) можно почитать в 
    //Павловской "Программирование на языке высокого уровня" c. 265 - 285
    //В частности про функции get() и getline() стандартного объекта ввода cin можно почитать на с. 273
    // cin.get() - читает один символ с консоли;
    // cin.getline(buf, num) - читает с консоли num-1 или пока не встретится символ перевода строки и 
    //                         помещает их в строку buf. Причем, если встретился символ перевода строки, то
    //                         он тоже помещается в buf
 
    char Buf[MAX_NAME_LENGTH]; //Вспомогательная строка для ввода данных
    bool IsValidKindOfSport; //Логическая переменная, определяющая правильно ли введен вид спорта
 
    //Читаем символ перевода строки
    cin.get();
 
    cout << endl;
    cout << "Enter sportsman info" << endl;
    //Вводим фамилию
    cout << "Surname    : ";        
    cin.getline(Man.Surname, sizeof Man.Surname);
    //Вводим имя
    cout << "Name       : ";    
    cin.getline(Man.Name, sizeof Man.Name);
    //Вводим отчество
    cout << "Patronymic : ";
    cin.getline(Man.Patronymic, sizeof Man.Patronymic);
    //Вводим год рождения
    cout << "Year of birth : ";
    cin >> Man.DateOfBirth.Year;
    //Вводим месяц рождения. 
    // <== Сюда можно добавить цикл с постусловием для проверки корректности ввода номера месяца
    cout << "Month of birth (1-12) : ";
    cin >> Man.DateOfBirth.Month;
    //Вводим день рождения
    // <== Сюда можно добавить цикл с постусловием для проверки корректности ввода дня
    cout << "Day of birth (1-31) : ";
    cin >> Man.DateOfBirth.Day;
 
    // <== Сюда можно добавить корректность вводимой даты, т.е. проверки допустима ли введенная дата
 
    //Читаем символ перевода строки
    cin.get();
    //Цикл с постусловием для повторного ввода строки вида спорта,
    //если она отличная от "tennis", "chess" и "sprint"
    do
    {
        //Полагаем, что вид спорта правильный
        IsValidKindOfSport = true;      
        cout << "Kind of sport (tennis, chess or sprint) : ";
        //Читаем в Buf строку вида спорта
        cin.getline(Buf, sizeof Buf);   
        //Преобразовывем введенную строку в переменную типа SportKind
        Man.KindOfSport = StrToSportKind(Buf);
        //Если была введена недопустимая строка
        if (Man.KindOfSport == skNone)
        {
            //Выдаем сообщение, что строка неправильная
            cout << endl << "Invalid! Enter tennis, chess or sprint" << endl << endl;
            //Устанавливаем значение лжи для флага правильности строки вида спорта
            IsValidKindOfSport = false;
        }
        //Цикл повторяется до тех пор, пока введенная строка вида спорта не будет правильной
    } while (!IsValidKindOfSport);
    //Вводим количество сыгранных игр
    cout << "Games count : ";
    cin >> Man.GamesCount;
}
 
//Функция вывода на консоль полей записи (структуры) Man, имеющей индекс Index
void PrintSportsman(Sportsman Man, int Index)
{
    //В данной функции используются специальные манипуляторы, осуществляющие форматирование
    //выводимых данных. Для их использования необходимо подключить заголовочный файл iomanip.h
    // setw(int) - устанавливает максимальную ширину поля вывода;
    // setfill(char) - устанавливает символ-заполнитель для случая, если выводимые данные занимают не всю ширину 
    //                 поля вывода. По умолчанию символом-заполнителем является пробел
    //Пример. Строка
    //  cout << setfill('+') << setw(5) << 44;
    //выдаст на консоль
    //+++44
    //Подробности см. в Павловской "Программирование на языке высокого уровня" c. 271
 
    char Buf[MAX_NAME_LENGTH]; //Строковая переменная для строкового представления вида спорта
 
    //Выводим индекс в поле максимальной ширины 5
    cout << setw(5) << Index << " ";
    //Выводим фамилию, имя, отчество. Каждое в своем поле максимальной ширины 13
    cout << setw(13) <<  Man.Surname << " " << setw(13) << Man.Name << " "<< setw(13) << Man.Patronymic << " ";
    //Меняем символ-заполнитель с пробела на 0. Использование заполнителя 0 позволит выдавать даты в формате ДД.ММ.ГГГГ
    cout << setfill('0');
    //Выдаем день, месяц и год даты рождение. Каждая компонента даты выводися в своем поле
    cout << setw(2) << Man.DateOfBirth.Day << "." << setw(2) << Man.DateOfBirth.Month << "." << setw(4) << Man.DateOfBirth.Year << " ";
    //Возвращаем пробел в качестве символа-заполнителя
    cout << setfill(' ');
    //Осуществляем перевод вида спорта в строку Buf
    SportKindToStr(Man.KindOfSport, Buf);
    //Выводим строку вида спорта и количество сыгрнанных игр
    cout << setw(6) << Buf << " " << setw(7) << Man.GamesCount << endl;
}
 
//Функция, добавляющая запись о спортсмене Man в конец массива спортсменов SportsmenArray, 
//SportsmenCount - количество записей-элементов в массиве SportsmenArray
void AddSportsman(Sportsman SportsmenArray[], int& SportsmenCount, Sportsman Man)
{
    SportsmenArray[SportsmenCount++] = Man;
}
 
//Функция, удаляющая в массиве SportsmenArray запись-элемент с индексом RemovingIndex,
//SportsmenCount - количество записей-элементов в массиве SportsmenArray.
//Функция возвращает истину, если RemovingIndex лежит в допустимом диапазоне от 0 до SportsmenCount-1,
//иначе функция возвращает ложь
bool RemoveSportsman(Sportsman SportsmenArray[], int& SportsmenCount, int RemovingIndex)
{
    //Если индекс удаляемого элемента задан неправильно, то возвращаем ложь
    if (RemovingIndex < 0 || RemovingIndex >= SportsmenCount)
    {
        return false;
    }
    //Данный цикл осуществляет сдвиг элементов 
    // SportsmenArray[RemovingIndex], SportsmenArray[RemovingIndex], ..., SportsmenArray[SportsmenCount - 1]
    //на один элемент влево и тем самым затирает удаляемый элемент
    for (int i = RemovingIndex; i < SportsmenCount - 1; i++)
    {
        SportsmenArray[i] = SportsmenArray[i + 1];
    }
    //Уменьшаем количество элементов-записей на 1
    SportsmenCount--;
    //Возвращаем истину
    return true;
}
 
//Функция, осуществляющая поиск и вывод на консоль элементов-записей о спортсменах массива SportsmenArray,
//фамилия которых совпадает со строкой KeySurname (ключом для поиска).
//SportsmenCount - количество записей-элементов в массиве SportsmenArray.
void SearchAndPrintSportsmen(Sportsman SportsmenArray[], int SportsmenCount, char KeySurname[])
{
    //Переменная для подсчета количества найденных записей, вначале равна 0
    int FoundRecordsCount = 0;
    cout << endl;   
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемся по все элементам массива SportsmenArray
    for (int i = 0; i < SportsmenCount; i++)
    {
        //Если фамилия очередного элемента-записи совпадает с KeySurname, то
        if (!strcmp(SportsmenArray[i].Surname, KeySurname))
        {   
            //выводим сам элемент
            PrintSportsman(SportsmenArray[i], i);       
            //выводим разделительную линию
            cout << SEPARATING_LINE << endl;
            //Увеличиваем на 1 количество найденных записей
            FoundRecordsCount++;
        }
    }
    //Выводим количество найденных записей
    cout << FoundRecordsCount << " records were found." << endl;
}
 
//Функция, осуществляющая сортировку массива спортсменов по не возрастанию количества сыгранных игр.
//SportsmenArray - массив элементов-записей о спортсменах;
//SportsmenCount - количество спорстменов-записей в массиве.
void SortSportsmenByGamesCount(Sportsman SportsmenArray[], int SportsmenCount)
{
    int MaxIndex;
    Sportsman Tmp;
 
    for (int i = 0; i < SportsmenCount - 1; i++)
    {
        MaxIndex = i;       
        for (int j = i + 1; j < SportsmenCount; j++)
        {
            if (SportsmenArray[j].GamesCount > SportsmenArray[MaxIndex].GamesCount)
            {
                MaxIndex = j;
            }
        }
        Tmp = SportsmenArray[i];
        SportsmenArray[i] = SportsmenArray[MaxIndex];
        SportsmenArray[MaxIndex] = Tmp;
    }
}
 
//Функция, осуществляющая вывод на консоль всех элеменов-записей о спорстменах,
//содержащихся в массиве SportsmenArray размера SportsmenCount
void PrintAllSportsmen(Sportsman SportsmenArray[], int SportsmenCount)
{   
    cout << endl;
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемя по всем элементам
    for (int i = 0; i < SportsmenCount; i++)
    {       
        //Выводим очердной элемент-запись
        PrintSportsman(SportsmenArray[i], i);       
        //Выводим разделительную линию
        cout << SEPARATING_LINE << endl;
    }
}
 
//Функция, осуществляющая чтение массива SportsmenArray и его размера SportsmenCount
//из бинарного файла с именем SportsmenCount
void LoadFromFile(Sportsman SportsmenArray[], int& SportsmenCount, const char* FileName)
{
    //Объявлем файловый поток ввода inp, передаем ему имя открываемого файла FileName
    ifstream inp(FileName);
    //Читаем из файла количество элементов в массиве
    inp >> SportsmenCount;
    //Читаем из файла целиком весь массив
    inp.read((char *)SportsmenArray, SportsmenCount * sizeof(SportsmenArray[0]));   
}
 
//Фуникция, осуществляющая сохранение массива SportsmenArray и его размера SportsmenCount
//в бинарный файл FileName
void SaveToFile(Sportsman SportsmenArray[], int SportsmenCount, const char* FileName)
{
    //Объявляем файловый поток вывода out, передаем ему имя открываемого файла FileName
    ofstream out(FileName);
    //Записываем в файл количество спорстменов
    out << SportsmenCount;
    //Записываем в файл весь массив целиком
    out.write((char *)SportsmenArray, SportsmenCount * sizeof(SportsmenArray[0]));
}
 
//Функция, реализующая главное меню программы. В зависимости от выбора пользователя, 
//осуществляет вызов соответствующих функций.
//Параметры:
//SportsmenArray - массив элементов-записей о спорстменах;
//SportsmenCount - количество элементов в массиве.
void MainMenu(Sportsman SportsmenArray[], int& SportsmenCount)
{
    //Переменная, которая будет хранить номер выбранного пользователем пункта меню
    int UserChoise; 
    //Переменная-запись о спорстмене
    Sportsman Man;
    //Переменная для хранения индекса удаляемого элемента
    int RemovingIndex;
    //Массив символов для хранения строки фамилии для поиска
    char KeySurname[MAX_NAME_LENGTH];
    //Цикл с постусловием, осуществляющий вывод меню, ввод выбора пользователя и
    //выполнение соответстующих этому выбору действий до тех пор, пока пользователь
    //не выберет выход из программы
    do 
    {
        //Отображаем меню
        cout << endl;
        cout << "          MENU" << endl;
        cout << "=========================" << endl;
        cout << " [1] Add sportsman" << endl;
        cout << " [2] Remove sportsman" << endl;
        cout << " [3] Search sportsman" << endl;
        cout << " [4] Sort sportsmen" << endl;
        cout << " [5] Show all sportsmen" << endl;
        cout << " [6] Exit" << endl;
        cout << "=========================" << endl;
        cout << "Your choice : ";
        //Вводим выбранный пользователем пункт меню
        cin >> UserChoise;
 
        //С помощью конструкции выбора анализируем этот выбор
        //и осуществляем соответствующие действия
        switch (UserChoise)
        {
            //Добавление новой записи о спортсмене в массив
            case 1: 
                InputSportsman(Man);
                AddSportsman(SportsmenArray, SportsmenCount, Man);
                break;
            //Удаление записи о спортсмене с указанным индексом из массива
            case 2:
                cout << endl << "Enter index of sportsman to delete : ";
                //Вводим индекс удаляемого элемента-записи
                cin >> RemovingIndex;
                //Удаляем элемент. Если результат удаления ложь, то
                if (!RemoveSportsman(SportsmenArray, SportsmenCount, RemovingIndex))
                {
                    //Выдаем ошибку
                    cout << endl << "Invalid index! Try again." << endl;
                }
                break;
            //Поиск всех записей о спорстменах, имеющих указанную фамилию
            case 3:
                cout << endl << "Enter surname for search : ";
                //Вводим символ перевода строки
                cin.get();
                //Вводим фамилию для поиска 
                cin.getline(KeySurname, sizeof KeySurname);             
                //Вызываем функцию поиска и вывода найденных элементов
                SearchAndPrintSportsmen(SportsmenArray, SportsmenCount, KeySurname);
                break;
            //Сортировка всех записей о спортсменах в порядке не возрастания 
            //количества сыгранных игр
            case 4:
                SortSportsmenByGamesCount(SportsmenArray, SportsmenCount);
                break;
            //Печать всех записей о спортсменах
            case 5:
                PrintAllSportsmen(SportsmenArray, SportsmenCount);
                break;
            //Выход
            case 6:
                cout << "Bye-bye..." << endl;
                break;
            //Ошибка, пользователь выбрал несуществующий пункт меню
            default:
                cout << endl << "Invalid choice! Try again." << endl;
        }
        //цикл выполняется до тех пор, пока пользователь не выберет выход
    } while (UserChoise != 6);
}
 
int main()
{
    //Описание массива записей (структур) о спортсменах
    Sportsman SportsmenArray[MAX_SPORTSMEN_COUNT];
    //Переменная для хранения количества записей в массиве
    int SportsmenCount = 0;
 
    //Загружаем все записи из файла
    LoadFromFile(SportsmenArray, SportsmenCount, FILE_NAME);
    //Выдаем меню и осуществляем операции
    MainMenu(SportsmenArray, SportsmenCount);   
    //Перед выходом из программы сохраняем все записи в файл
    SaveToFile(SportsmenArray, SportsmenCount, FILE_NAME);
    return 0;
}
. надеюсь это облегчит помощь)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2009, 20:14     ошибка номер...да их много. подскажите что не так.
Посмотрите здесь:

C++ подскажите что не так делаю?
Подскажите что не так? C++
Подскажите, что не так? C++
C++ Подскажите что не так ?
Подскажите, что не так C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
оренбуржец
5 / 5 / 0
Регистрация: 12.12.2009
Сообщений: 56
20.12.2009, 21:24  [ТС]     ошибка номер...да их много. подскажите что не так. #2
люди помогите пож. хоть как нибудь. тяжело помочь новичку?
оренбуржец
5 / 5 / 0
Регистрация: 12.12.2009
Сообщений: 56
02.01.2010, 17:20  [ТС]     ошибка номер...да их много. подскажите что не так. #3
ну и вот что получилось после долгих и упорных трудов.
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
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string.h>
using namespace std;
 
// Константы
const int MAX_NAME_LENGTH = 100; //Максимальная длина названия
const int MAX_BRAND_COUNT = 1000; //Максимальное количество товаров в массиве
const char* FILE_NAME = "Brand.dat"; //Имя файла для хранения записей о продукции
//Заголовочная константная строка, используемая при выводе записей
const char* HEADER = "  Index     NameOFbrand       Memory         Kolichestvo na sklade  ";
//Разделительная линия
const char* SEPARATING_LINE = "--------------------------------------------------------------------------------";
 
//Перечисление существующих марок
// bkNone - марка не указана;
// Apacer
// A_Data_My_Flash
// Kingston 
// QUMO 
enum BrandKind {skNone, Apacer, A_Data_My_Flash, Kingston, QUMO};
 
struct Production
{
    char NameBrand[MAX_NAME_LENGTH + 1];    //Название товара
unsigned short  int Memory_max[MAX_NAME_LENGTH + 1];        //объем памяти
 
unsigned short  int Kolichestvo_na_sklade;              //количество на складе
 
};
 
//Вспомогательная функция, осуществляющая преобразование 
//вида спорта, содержашегося в параметре Type в строку Str,
//т.е. в назваие спорта, представленное в виде строки
void BrandKindToStr(BrandKind Type, char Str[])
{
    //В зависимости от значения Type
    switch (Type)   
    {
        case Apacer:
            strcpy(Str, "Apacer"); //Копируем в Str название жанра "Apacer"
            break;
        case A_Data_My_Flash:
            strcpy(Str, "A_Data_My_Flash");  //Копируем в Str название жанра "A_Data_My_Flash"
            break;
        case Kingston:
            strcpy(Str, "Kingston"); //Копируем в Str название жанра "Kingston"
            break;
        case QUMO:
            strcpy(Str, "QUMO"); //Копируем в Str название жанра "QUMO"
        default:
            strcpy(Str, "unknown"); //Случай, когда задан тип bkNone
    }
}
//Вспомогательная функция, которая по названию товара, содержащемся в строке Str,
//возвращает его тип
BrandKind StrToBrandKind(char Str[])
{
    //Переводим строку Str к нижнему регистру
    strlwr(Str);
    //Если строка Str равна "Apacer", то возвращаем Apacer
    if (!strcmp(Str, "Apacer")) 
        return Apacer;
    //Если строка Str равна "A_Data_My_Flash", то возвращаем A_Data_My_Flash
    if (!strcmp(Str, "A_Data_My_Flash"))
        return A_Data_My_Flash;
    //Если строка Str равна "Kingston", то возвращаем Kingston
    if (!strcmp(Str, "Kingston"))
        return Kingston;
    //Если строка Str равна "QUMO", то возвращаем QUMO
    if (!strcmp(Str, "QUMO"))
        return QUMO;
    //Если в строке недопустимое название товара, то возвращаем agNone
    return bkNone;
}
    //Функция, осуществляющая ввод записи о товаре с консоли.
//Введенная запись возвращается в параметре producer, передаваемом по ссылке
void InputTovar(Tovar& producer)
{
    char Buf[MAX_NAME_LENGTH]; //Вспомогательная строка для ввода данных
    bool IsValidKindOfBrand; //Логическая переменная, определяющая правильно ли введен вид товара
    //Читаем символ перевода строки
    cin.get();
  cout << endl;
  cout << "Enter product info:" << endl;
  cout<< "Enter name of brand:";
  cin.getline(producer.NameBrand, sizeof producer.NameBrand);
  cout<<"enter memory:";
  cin.getline(producer.Memory_max, sizeof producer.Memory_max);
  cout<<"enter kolichestvo:";
  cin.getline(producer.Kolichestvo_na_sklade, sizeof producer.Kolichestvo_na_sklade);
    cin.get();
    do
    {   //Полагаем, что вид товара правильный
        IsValidKindOfBrand= true;       
        cout << "Kind of brand (Apacer, A_Data_My_Flash, Kingston, QUMO)";
        //Читаем в Buf строку вида товара
        cin.getline(Buf, sizeof Buf);
        //Преобразовывем введенную строку в переменную типа BrandKind
        producer.KindOfBrand = StrToBrandKind(Buf);
        //Если была введена недопустимая строка
        if (producer.KindOfBrand == bkNone)
        {
            //Выдаем сообщение, что строка неправильная
            cout << endl << "Invalid! Enter Apacer, A_Data_My_Flash, Kingston, QUMO" << endl << endl;
            //Устанавливаем значение лжи для флага правильности строки вида товара
            IsValidKindOfBrand = false;
        }
            //Цикл повторяется до тех пор, пока введенная строка вида товара не будет правильной
    }
 
//Функция вывода на консоль полей записи (структуры) producer, имеющей индекс Index
void PrintTovar(Tovar producer, int Index)
{
        char Buf[MAX_NAME_LENGTH];
    //Строковая переменная для строкового представления вида товара
    //Выводим индекс в поле максимальной ширины 5
    cout << setw(5) << Index << " ";
    //Выводим марку, объем, количество на складе. Каждое в своем поле максимальной ширины 13
    cout << setw(13) <<  producer.NameBrand << " " << setw(13) << producer.Memory_max << " "<< setw(13) << producer.Kolichestvo_na_sklade << " ";
//Функция, добавляющая запись о товаре producer в конец массива товаров BrandArray, 
//BrandCount - количество записей-элементов в массиве BrandArray
    void AddTovar(Tovar BrandArray[], int& BrandCount, Tovar producer)
{
    BrandArray[BrandCount++] = producer;
}
    //Функция, удаляющая в массиве BrandArray запись-элемент с индексом RemovingIndex,
//BrandCount - количество записей-элементов в массиве BrandArray.
//Функция возвращает истину, если RemovingIndex лежит в допустимом диапазоне от 0 до BrandCount-1,
//иначе функция возвращает ложь
bool RemoveTovar(Tovar BrandArray[], int& BrandCount, int RemovingIndex)
{
    //Если индекс удаляемого элемента задан неправильно, то возвращаем ложь
    if (RemovingIndex < 0 || RemovingIndex >= BrandCount)
    {
        return false;
    }
    //Данный цикл осуществляет сдвиг элементов 
    // BrandArray[RemovingIndex], BrandArray[RemovingIndex], ..., BrandArray[BrandCount - 1]
    //на один элемент влево и тем самым затирает удаляемый элемент
    for (int i = RemovingIndex; i < BrandCount - 1; i++)
    {
        BrandArray[i] = BrandArray[i + 1];
    }
    //Уменьшаем количество элементов-записей на 1
    BrandCount--;
    //Возвращаем истину
    return true;
 
//Функция, осуществляющая поиск и вывод на консоль элементов-записей о товаре массива BrandArray,
//фамилия которых совпадает со строкой KeyNameBrand (ключом для поиска).
//BrandCount - количество записей-элементов в массиве BrandArray.
void SearchAndPrintTovar(Tovar BrandArray[], int BrandCount, char KeyNameBrand[])
{
    //Переменная для подсчета количества найденных записей, вначале равна 0
    int FoundRecordsCount = 0;
    cout << endl;   
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемся по все элементам массива SportsmenArray
    for (int i = 0; i < BrandCount; i++)
    {
        //Если название очередного элемента-записи совпадает с KeyNameBrand, то
        if (!strcmp(BrandArray[i].NameBrand, KeyNameBrand))
        {   
            //выводим сам элемент
            PrintTovar(BrandArray[i], i);       
            //выводим разделительную линию
            cout << SEPARATING_LINE << endl;
            //Увеличиваем на 1 количество найденных записей
            FoundRecordsCount++;
        }
    }
        //Выводим количество найденных записей
    cout << FoundRecordsCount << " records were found." << endl;
}
 
//Функция, осуществляющая вывод на консоль всех элеменов-записей о товаре,
//содержащихся в массиве BrandArray размера BrandCount
void PrintAllTovar(Tovar BrandArray[], int BrandCount)
{   
    cout << endl;
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемя по всем элементам
    for (int i = 0; i < BrandCount; i++)
    {       
        //Выводим очердной элемент-запись
        PrintTovar(BrandArray[i], i);       
        //Выводим разделительную линию
        cout << SEPARATING_LINE << endl;
    }
}
//Функция, осуществляющая чтение массива BrandArray и его размера BrandCount
//из бинарного файла с именем BrandCount
void LoadFromFile(Tovar BrandArray[], int& BrandCount, const char* FileName)
{
//Объявлем файловый поток ввода inp, передаем ему имя открываемого файла FileName
    ifstream inp(FileName);
    //Читаем из файла количество элементов в массиве
    inp >>BrandCount;
    //Читаем из файла целиком весь массив
    inp.read((char *)BrandArray, BrandCount * sizeof(BrandArray[0]));
}
void SaveToFile(Tovar BrandArray[], int BrandCount, const char* FileName)
{
    //Объявляем файловый поток вывода out, передаем ему имя открываемого файла FileName
    ofstream out(FileName);
    //Записываем в файл количество товарa
    out << BrandCount;
    //Записываем в файл весь массив целиком
    out.write((char *)BrandArray, BrandCount * sizeof(BrandArray[0]));
}
//Функция, реализующая главное меню программы. В зависимости от выбора пользователя, 
//осуществляет вызов соответствующих функций.
//Параметры:
//BrandArray - массив элементов-записей о товаре;
//BrandCount - количество элементов в массиве.
void MainMenu(Tovar BrandArray[], int& BrandCount)
{
    //Переменная, которая будет хранить номер выбранного пользователем пункта меню
    int UserChoise; 
    //Переменная-запись о спорстмене
    Tovar producer;
    //Переменная для хранения индекса удаляемого элемента
    int RemovingIndex;
    //Массив символов для хранения строки фамилии для поиска
    char KeyNameBrand[MAX_NAME_LENGTH];
    //Цикл с постусловием, осуществляющий вывод меню, ввод выбора пользователя и
    //выполнение соответстующих этому выбору действий до тех пор, пока пользователь
    //не выберет выход из программы
    do 
    {
        //Отображаем меню
        cout << endl;
        cout << "          MENU" << endl;
        cout << "=========================" << endl;
        cout << " [1] Add Brand" << endl;
        cout << " [2] Remove Brand" << endl;
        cout << " [3] Search Brand" << endl;
        cout << " [4] Show all Brands" << endl;
        cout << " [5] Exit" << endl;
        cout << "=========================" << endl;
        cout << "Your choice : ";
        //Вводим выбранный пользователем пункт меню
        cin >> UserChoise;
        //С помощью конструкции выбора анализируем этот выбор
        //и осуществляем соответствующие действия
        switch (UserChoise)
        {
            //Добавление новой записи о спортсмене в массив
            case 1: 
                InputTovar(producer);
                AddTovar(BrandArray, BrandCount, producer);
                break;
                //Удаление записи о спортсмене с указанным индексом из массива
            case 2:
                cout << endl << "Enter index of Brand to delete : ";
                //Вводим индекс удаляемого элемента-записи
                cin >> RemovingIndex;
                //Удаляем элемент. Если результат удаления ложь, то
                if (!RemoveTovar(BrandArray, BrandCount, RemovingIndex))
                {
                    //Выдаем ошибку
                    cout << endl << "Invalid index! Try again." << endl;
                }
                break;
                //Поиск всех записей о спорстменах, имеющих указанную фамилию
            case 3:
                cout << endl << "Enter product name for search : ";
                //Вводим символ перевода строки
                cin.get();
                //Вводим фамилию для поиска 
                cin.getline(KeyNameBrand, sizeof KeyNameBrand);             
                //Вызываем функцию поиска и вывода найденных элементов
                SearchAndPrintTovar(BrandArray, BrandCount, KeyNameBrand);
                break;
                //Печать всех записей о спортсменах
            case 4:
                PrintAllTovar(BrandArray, BrandCount);
                break;
            //Выход
            case 5:
                cout << "Bye-bye..." << endl;
                break;
            //Ошибка, пользователь выбрал несуществующий пункт меню
            default:
                cout << endl << "Invalid choice! Try again." << endl;
        }
        //цикл выполняется до тех пор, пока пользователь не выберет выход
    } while (UserChoise != 5);
}
int main()
{
    //Описание массива записей (структур) о спортсменах
    Tovar BrandArray[MAX_BRAND_COUNT];
    //Переменная для хранения количества записей в массиве
    int BrandCount = 0;
 
    //Загружаем все записи из файла
    LoadFromFile(BrandArray, BrandCount, FILE_NAME);
    //Выдаем меню и осуществляем операции
    MainMenu(BrandArray, BrandCount);   
    //Перед выходом из программы сохраняем все записи в файл
    SaveToFile(BrandArray, BrandCount, FILE_NAME);
    return 0;
}
}
Vladimir_Limaki
1 / 1 / 0
Регистрация: 02.01.2010
Сообщений: 39
02.01.2010, 23:33     ошибка номер...да их много. подскажите что не так. #4
Цитата Сообщение от оренбуржец Посмотреть сообщение
люди помогите пож. хоть как нибудь. тяжело помочь новичку?
у меня не выдает не каких ошибок видимо ты не правильно создаешь проэкт !!
http://cs4232.vkontakte.ru/u7599495/...x_8ab1accd.jpg
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
03.01.2010, 11:13     ошибка номер...да их много. подскажите что не так. #5
Почему InputTovar, PrintTovar, RemoveTovar не имеют закрывающихся скобок и что это за странная скобка после тела мейн?
оренбуржец
5 / 5 / 0
Регистрация: 12.12.2009
Сообщений: 56
03.01.2010, 11:16  [ТС]     ошибка номер...да их много. подскажите что не так. #6
Цитата
Цитата Сообщение от оренбуржец Посмотреть сообщение
дано расчетно-графическое задание: написать программу на языке с++ в среде MS Visual Studio 2008: написать программу, которая будет содержать в себе информацию о продукте флеш-накопителей.(марка продукта, обьем, и количество товара на складе.) по типу меню. я вот набросал что смог, но он выдает кучу, а точнее 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
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
#include <iostream>
#include <iomanip> //Подключаем заголовочный файл для работы с потоковыми манипуляторами 
#include <fstream> //Подключаем заголовчный файл для работы с потоковыми файловыми классами
#include <string.h>//Подключаем заголовочный файл для работы со строками
 
using namespace std;
 
 
const int MAX_NAME_LENGTH = 100; //Максимальная длина марки продукта
const int MAX_Brand_COUNT = 1000; //Максимальное количество марок в массиве
const char* FILE_NAME = "FlashBrand.dat"; //Имя файла для хранения записей о спортсменах
//Заголовочная константная строка, используемая при выводе записей
const char* HEADER = "Index       Producer        Memory    ";
//Разделительная линия
const char* SEPARATING_LINE = "-------------------------------------------------------------------------------";
 
//Перечисление существующих марок
// skNone - марка не указана;
// Apacer
// A-Data_My_Flash
// Kingston 
// QUMO 
enum BrandKind {skNone, Apacer, A_Data_My_Flash, Kingston, QUMO};
 
//Структура, описывающая запись о спортсмене
struct Flashki
{
    char Producer[MAX_NAME_LENGTH + 1];  //марка товара
    int Memory;        //обьем памяти
    int ProductCount;        //Количество товара на складе
};
 
//Вспомогательная функция, осуществляющая преобразование 
//вида товара, содержашегося в параметре Type в строку Str,
//т.е. в название товара, представленное в виде строки
void BrandKindToStr(BrandKind Type, char Str[])
{
    //В зависимости от значения Type
    switch (Type)   
    {
        case Apacer:
            strcpy(Str, "Apacer"); //Копируем в Str название  "Apacer"
            break;
        case A_Data_My_Flash:
            strcpy(Str, "A_Data_My_Flash");  //Копируем в Str название  "A-Data_My_Flash"
            break;
        case Kingston:
            strcpy(Str, "Kingston"); //Копируем в Str название  "Kingston"
            break;
        case QUMO:
            strcpy(Str, "QUMO"); //Копируем в Str название  "QUMO"
            break;
        default:
            strcpy(Str, "unknown"); //Случай, когда задан тип skNone
    }
}
 
//Вспомогательная функция, которая по названию спорта, содержащемся в строке Str,
//возвращает его тип
BrandKind StrToBrandKind(char Str[])
{
    //Переводим строку Str к нижнему регистру
    strlwr(Str);
    //Если строка Str равна "Apacer", то возвращаем Apacer
    if (!strcmp(Str, "Apacer")) 
        return Apacer;
    //Если строка Str равна "A-Data_My_Flash", то возвращаем A-Data_My_Flash
    if (!strcmp(Str, "A-Data_My_Flash"))
        return A_Data_My_Flash;
    //Если строка Str равна "Kingston", то возвращаем Kingston
    if (!strcmp(Str, "Kingston"))
        return Kingston;
    //Если строка Str равна "QUMO", то возвращаем QUMO
    if (!strcmp(Str, "QUMO"))
        return QUMO;
    //Если в строке недопустимое название вида спорта, то возвращаем skNone
    return skNone;
}
 
//Функция, осуществляющая ввод записи о спортсмене с консоли.
//Введенная запись возвращается в параметре Man, передаваемом по ссылке
void InputBrand(Brand& Man)
{
    char Buf[MAX_NAME_LENGTH]; //Вспомогательная строка для ввода данных
    bool IsValidKindOfBrand; //Логическая переменная, определяющая правильно ли введен вид спорта
 
    //Читаем символ перевода строки
    cin.get();
 
    cout << endl;
    cout << "Enter Producer info" << endl;
    //Вводим фамилию
    cout << "Producer    : ";       
    cin.getline(Man.Producer, sizeof Man.Producer);
    //Вводим имя
    cout << "Memory   : ";  
    cin.getline(Man.Memory, sizeof Man.Memory);
    //Читаем символ перевода строки
    cin.get();
    //Цикл с постусловием для повторного ввода строки вида спорта,
    //если она отличная от "Apacer, A-Data_My_Flash, Kingston, or QUMO"
    do
    {
        //Полагаем, что вид товара правильный
        IsValidKindOfBrand = true;      
        cout << "Kind of Brand (Apacer, A-Data_My_Flash, Kingston, or QUMO) : ";
        //Читаем в Buf строку вида товара
        cin.getline(Buf, sizeof Buf);   
        //Преобразовывем введенную строку в переменную типа BrandKind
        Man.KindOfBrand = StrToBrandKind(Buf);
        //Если была введена недопустимая строка
        if (Man.KindOfBrand == skNone)
        {
            //Выдаем сообщение, что строка неправильная
            cout << endl << "Invalid! Enter Apacer, A-Data_My_Flash, Kingston, or QUMO" << endl << endl;
            //Устанавливаем значение лжи для флага правильности строки вида товара
            IsValidKindOfBrand = false;
        }
        //Цикл повторяется до тех пор, пока введенная строка вида спорта не будет правильной
    } while (!IsValidKindOfSport);
    //Вводим количество сыгранных игр
    cout << "Brand count : ";
    cin >> Man.BrandCount;
}
 
//Функция вывода на консоль полей записи (структуры) Man, имеющей индекс Index
double PrintBrand(Brand Man, int Index):
{   char Buf[MAX_NAME_LENGTH]; //Строковая переменная для строкового представления вида спорта
 
    //Выводим индекс в поле максимальной ширины 5
    cout << setw(5) << Index << " ";
    //Выводим марку, объем, количество на складе. Каждое в своем поле максимальной ширины 13
    cout << setw(13) <<  Man.Producer << " " << setw(13) << Man.Memory << " "<< setw(13) << Man.BrandCount << " ";
    //Меняем символ-заполнитель с пробела на 0. Использование заполнителя 0 позволит выдавать даты в формате ДД.ММ.ГГГГ
    cout << setfill('0');
}
 
//Функция, добавляющая запись о продукте Man в конец массива товаров BrandArray, 
//ProductCount - количество записей-элементов в массиве BrandArray
 double AddBrand(Brand BrandArray[], int& ProductCount, Brand Man):
{
    BrandArray[ProductCount++] = Man;
}
 
//Функция, удаляющая в массиве BrandArray запись-элемент с индексом RemovingIndex,
//ProductCount - количество записей-элементов в массиве BrandArray.
//Функция возвращает истину, если RemovingIndex лежит в допустимом диапазоне от 0 до ProductCount-1,
//иначе функция возвращает ложь
bool RemoveBrand(Brand BrandArray[], int& ProductCount, int RemovingIndex):
{
    //Если индекс удаляемого элемента задан неправильно, то возвращаем ложь
    if (RemovingIndex < 0 || RemovingIndex >= ProductCount)
    {
        return false;
    }
    //Данный цикл осуществляет сдвиг элементов 
    // BrandArray[RemovingIndex], BrandArray[RemovingIndex], ..., BrandArray[ProductCount - 1]
    //на один элемент влево и тем самым затирает удаляемый элемент
    for (int i = RemovingIndex; i < ProductCount - 1; i++)
    {
        BrandArray[i] = BrandArray[i + 1];
    }
    //Уменьшаем количество элементов-записей на 1
    ProductCount--;
    //Возвращаем истину
    return true;
}
 
//Функция, осуществляющая поиск и вывод на консоль элементов-записей о товарах массива BrandArray,
//фамилия которых совпадает со строкой KeySurname (ключом для поиска).
//ProductCount - количество записей-элементов в массиве BrandArray.
double SearchAndPrintBrand(Brand BrandArray[], int ProductCount, char KeyProducer[]):
{
    //Переменная для подсчета количества найденных записей, вначале равна 0
    int FoundRecordsCount = 0;
    cout << endl;   
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемся по все элементам массива BrandArray
    for (int i = 0; i < ProductCount; i++)
    {
        //Если фамилия очередного элемента-записи совпадает с KeySurname, то
        if (!strcmp(BrandArray[i].Producer, KeyProducer))
        {   
            //выводим сам элемент
            PrintBrand(SportsmenArray[i], i);       
            //выводим разделительную линию
            cout << SEPARATING_LINE << endl;
            //Увеличиваем на 1 количество найденных записей
            FoundRecordsCount++;
        }
    }
    //Выводим количество найденных записей
    cout << FoundRecordsCount << " records were found." << endl;
}
 
//Функция, осуществляющая сортировку массива спортсменов по не возрастанию количества сыгранных игр.
//SportsmenArray - массив элементов-записей о спортсменах;
//SportsmenCount - количество спорстменов-записей в массиве.
double SortBrandByBrandCount(Brand BrandArray[], int ProductCount):
{
    int MaxIndex;
    Brand Tmp;
 
    for (int i = 0; i < ProductCount - 1; i++)
    {
        MaxIndex = i;       
        for (int j = i + 1; j < ProductCount; j++)
        {
            if (BrandArray[j].ProductCount > BrandArray[MaxIndex].BrandCount)
            {
                MaxIndex = j;
            }
        }
        Tmp = BrandArray[i];
        BrandArray[i] = BrandArray[MaxIndex];
        BrandArray[MaxIndex] = Tmp;
    }
}
 
//Функция, осуществляющая вывод на консоль всех элеменов-записей о товаре,
//содержащихся в массиве BrandArray размера ProductCount
char PrintAllBrand(Brand BrandArray[], int ProductCount):
{   
    cout << endl;
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемя по всем элементам
    for (int i = 0; i < ProductCount; i++)
    {       
        //Выводим очердной элемент-запись
        PrintBrand(BrandArray[i], i);       
        //Выводим разделительную линию
        cout << SEPARATING_LINE << endl;
    }
}
 
//Функция, осуществляющая чтение массива BrandArray и его размера ProductCount
//из бинарного файла с именем ProductCount
char LoadFromFile(Brand BrandArray[], int& ProductCount, const char* FileName):
{
    //Объявлем файловый поток ввода inp, передаем ему имя открываемого файла FileName
    ifstream inp(FileName);
    //Читаем из файла количество элементов в массиве
    inp >> ProductCount;
    //Читаем из файла целиком весь массив
    inp.read((char *)BrandArray, ProductCount * sizeof(BrandArray[0])); 
}
 
//Фуникция, осуществляющая сохранение массива BrandArray и его размера ProductCount
//в бинарный файл FileName
char SaveToFile(Brand BrandArray[], int ProductCount, const char* FileName):
{
    //Объявляем файловый поток вывода out, передаем ему имя открываемого файла FileName
    ofstream out(FileName);
    //Записываем в файл количество спорстменов
    out << ProductCount;
    //Записываем в файл весь массив целиком
    out.write((char *)BrandArray, ProductCount * sizeof(BrandArray[0]));
}
 
//Функция, реализующая главное меню программы. В зависимости от выбора пользователя, 
//осуществляет вызов соответствующих функций.
//Параметры:
//SportsmenArray - массив элементов-записей о спорстменах;
//SportsmenCount - количество элементов в массиве.
char MainMenu(Brand BrandArray[], int& ProductCount):
{
    //Переменная, которая будет хранить номер выбранного пользователем пункта меню
    int UserChoise; 
    //Переменная-запись о товаре
    Brand Man;
    //Переменная для хранения индекса удаляемого элемента
    int RemovingIndex;
    //Массив символов для хранения строки производителя для поиска
    char KeySurname[MAX_NAME_LENGTH];
    //Цикл с постусловием, осуществляющий вывод меню, ввод выбора пользователя и
    //выполнение соответстующих этому выбору действий до тех пор, пока пользователь
    //не выберет выход из программы
    do 
    {
        //Отображаем меню
        cout << endl;
        cout << "          MENU" << endl;
        cout << "=========================" << endl;
        cout << " [1] Add Producer" << endl;
        cout << " [2] Remove Producer" << endl;
        cout << " [3] Search Producer" << endl;
        cout << " [4] Sort Producer" << endl;
        cout << " [5] Show all Producer" << endl;
        cout << " [6] Exit" << endl;
        cout << "=========================" << endl;
        cout << "Your choice : ";
        //Вводим выбранный пользователем пункт меню
        cin >> UserChoise;
 
        //С помощью конструкции выбора анализируем этот выбор
        //и осуществляем соответствующие действия
        switch (UserChoise)
        {
            //Добавление новой записи о товаре в массив
            case 1: 
                InputBrand(Man);
                AddBrand(BrandArray, ProductCount, Man);
                break;
            //Удаление записи о товаре с указанным индексом из массива
            case 2:
                cout << endl << "Enter index of brand to delete : ";
                //Вводим индекс удаляемого элемента-записи
                cin >> RemovingIndex;
                //Удаляем элемент. Если результат удаления ложь, то
                if (!RemoveBrand(BrandArray, ProductCount, RemovingIndex))
                {
                    //Выдаем ошибку
                    cout << endl << "Invalid index! Try again." << endl;
                }
                break;
            //Поиск всех записей о спорстменах, имеющих указанную фамилию
            case 3:
                cout << endl << "Enter Producer for search : ";
                //Вводим символ перевода строки
                cin.get();
                //Вводим фамилию для поиска 
                cin.getline(KeyProducer, sizeof KeyProducer);               
                //Вызываем функцию поиска и вывода найденных элементов
                SearchAndPrintSportsmen(BrandArray, ProductCount, KeyProducer);
                break;
            //Сортировка всех записей о спортсменах в порядке не возрастания 
            //количества сыгранных игр
            case 4:
                SortProducerByProductCount(BrandArray, ProductCount);
                break;
            //Печать всех записей о спортсменах
            case 5:
                PrintAllBrand(BrandArray, ProductCount);
                break;
            //Выход
            case 6:
                cout << "Bye-bye..." << endl;
                break;
            //Ошибка, пользователь выбрал несуществующий пункт меню
            default:
                cout << endl << "Invalid choice! Try again." << endl;
        }
        //цикл выполняется до тех пор, пока пользователь не выберет выход
    } while (UserChoise != 6);
}
 
int main()
{
    //Описание массива записей (структур) о спортсменах
    Brand BrandArray[MAX_Brand_COUNT];
    //Переменная для хранения количества записей в массиве
    int ProductCount = 0;
 
    //Загружаем все записи из файла
    LoadFromFile(BrandArray, ProductCount, FILE_NAME);
    //Выдаем меню и осуществляем операции
    MainMenu(BrandArray, ProductCount); 
    //Перед выходом из программы сохраняем все записи в файл
    SaveToFile(BrandArray, ProductCount, FILE_NAME);
    return 0;
}
Добавлено через 13 минут
извиняюсь не успел подправить свое сообщение. вот тот код что у меня получился.
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
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
дано расчетно-графическое задание: написать программу на языке с++ в среде MS Visual Studio 2008: написать программу, которая будет содержать в себе информацию о продукте флеш-накопителей.(марка продукта, обьем, и количество товара на складе.) по типу меню. я вот набросал что смог, но он выдает кучу, а точнее 45 ошибок, которые вообще то не должны быть. подскажите, кто чем сможет, буду очень рад. если возможно подправьте ошибки в тексте. заранее спасибо всем)
 
 
 
 
[CPP]
#include <iostream>
#include <iomanip> //Подключаем заголовочный файл для работы с потоковыми манипуляторами 
#include <fstream> //Подключаем заголовчный файл для работы с потоковыми файловыми классами
#include <string.h>//Подключаем заголовочный файл для работы со строками
 
using namespace std;
 
 
const int MAX_NAME_LENGTH = 100; //Максимальная длина марки продукта
const int MAX_Brand_COUNT = 1000; //Максимальное количество марок в массиве
const char* FILE_NAME = "FlashBrand.dat"; //Имя файла для хранения записей о товарах
//Заголовочная константная строка, используемая при выводе записей
const char* HEADER = "Index       Producer        Memory    ";
//Разделительная линия
const char* SEPARATING_LINE = "-------------------------------------------------------------------------------";
 
//Перечисление существующих марок
// skNone - марка не указана;
// Apacer
// A-Data_My_Flash
// Kingston 
// QUMO 
enum BrandKind {skNone, Apacer, A_Data_My_Flash, Kingston, QUMO};
 
//Структура, описывающая запись о товаре
struct Flashki
{
    char Producer[MAX_NAME_LENGTH + 1];  //марка товара
    int Memory;        //обьем памяти
    int ProductCount;        //Количество товара на складе
};
 
//Вспомогательная функция, осуществляющая преобразование 
//вида товара, содержашегося в параметре Type в строку Str,
//т.е. в название товара, представленное в виде строки
void BrandKindToStr(BrandKind Type, char Str[])
{
    //В зависимости от значения Type
    switch (Type)   
    {
        case Apacer:
            strcpy(Str, "Apacer"); //Копируем в Str название  "Apacer"
            break;
        case A_Data_My_Flash:
            strcpy(Str, "A_Data_My_Flash");  //Копируем в Str название  "A-Data_My_Flash"
            break;
        case Kingston:
            strcpy(Str, "Kingston"); //Копируем в Str название  "Kingston"
            break;
        case QUMO:
            strcpy(Str, "QUMO"); //Копируем в Str название  "QUMO"
            break;
        default:
            strcpy(Str, "unknown"); //Случай, когда задан тип skNone
    }
}
 
//Вспомогательная функция, которая по названию спорта, содержащемся в строке Str,
//возвращает его тип
BrandKind StrToBrandKind(char Str[])
{
    //Переводим строку Str к нижнему регистру
    strlwr(Str);
    //Если строка Str равна "Apacer", то возвращаем Apacer
    if (!strcmp(Str, "Apacer")) 
        return Apacer;
    //Если строка Str равна "A-Data_My_Flash", то возвращаем A-Data_My_Flash
    if (!strcmp(Str, "A-Data_My_Flash"))
        return A_Data_My_Flash;
    //Если строка Str равна "Kingston", то возвращаем Kingston
    if (!strcmp(Str, "Kingston"))
        return Kingston;
    //Если строка Str равна "QUMO", то возвращаем QUMO
    if (!strcmp(Str, "QUMO"))
        return QUMO;
    //Если в строке недопустимое название вида товара, то возвращаем skNone
    return skNone;
}
 
//Функция, осуществляющая ввод записи о товаре с консоли.
//Введенная запись возвращается в параметре Man, передаваемом по ссылке
void InputBrand(Brand& Man)
{
    char Buf[MAX_NAME_LENGTH]; //Вспомогательная строка для ввода данных
    bool IsValidKindOfBrand; //Логическая переменная, определяющая правильно ли введен вид товара
 
    //Читаем символ перевода строки
    cin.get();
 
    cout << endl;
    cout << "Enter Producer info" << endl;
    //Вводим фамилию
    cout << "Producer    : ";       
    cin.getline(Man.Producer, sizeof Man.Producer);
    //Вводим имя
    cout << "Memory   : ";  
    cin.getline(Man.Memory, sizeof Man.Memory);
    //Читаем символ перевода строки
    cin.get();
    //Цикл с постусловием для повторного ввода строки вида товара,
    //если она отличная от "Apacer, A-Data_My_Flash, Kingston, or QUMO"
    do
    {
        //Полагаем, что вид товара правильный
        IsValidKindOfBrand = true;      
        cout << "Kind of Brand (Apacer, A-Data_My_Flash, Kingston, or QUMO) : ";
        //Читаем в Buf строку вида товара
        cin.getline(Buf, sizeof Buf);   
        //Преобразовывем введенную строку в переменную типа BrandKind
        Man.KindOfBrand = StrToBrandKind(Buf);
        //Если была введена недопустимая строка
        if (Man.KindOfBrand == skNone)
        {
            //Выдаем сообщение, что строка неправильная
            cout << endl << "Invalid! Enter Apacer, A-Data_My_Flash, Kingston, or QUMO" << endl << endl;
            //Устанавливаем значение лжи для флага правильности строки вида товара
            IsValidKindOfBrand = false;
        }
        //Цикл повторяется до тех пор, пока введенная строка вида товара не будет правильной
    } while (!IsValidKindOfBrand);
    //Вводим количество товара на складе
    cout << "Brand count : ";
    cin >> Man.BrandCount;
}
 
//Функция вывода на консоль полей записи (структуры) Man, имеющей индекс Index
double PrintBrand(Brand Man, int Index):
{   char Buf[MAX_NAME_LENGTH]; //Строковая переменная для строкового представления вида товара
 
    //Выводим индекс в поле максимальной ширины 5
    cout << setw(5) << Index << " ";
    //Выводим марку, объем, количество на складе. Каждое в своем поле максимальной ширины 13
    cout << setw(13) <<  Man.Producer << " " << setw(13) << Man.Memory << " "<< setw(13) << Man.BrandCount << " ";
    //Меняем символ-заполнитель с пробела на 0. Использование заполнителя 0 позволит выдавать даты в формате ДД.ММ.ГГГГ
    cout << setfill('0');
}
 
//Функция, добавляющая запись о продукте Man в конец массива товаров BrandArray, 
//ProductCount - количество записей-элементов в массиве BrandArray
 double AddBrand(Brand BrandArray[], int& ProductCount, Brand Man):
{
    BrandArray[ProductCount++] = Man;
}
 
//Функция, удаляющая в массиве BrandArray запись-элемент с индексом RemovingIndex,
//ProductCount - количество записей-элементов в массиве BrandArray.
//Функция возвращает истину, если RemovingIndex лежит в допустимом диапазоне от 0 до ProductCount-1,
//иначе функция возвращает ложь
bool RemoveBrand(Brand BrandArray[], int& ProductCount, int RemovingIndex):
{
    //Если индекс удаляемого элемента задан неправильно, то возвращаем ложь
    if (RemovingIndex < 0 || RemovingIndex >= ProductCount)
    {
        return false;
    }
    //Данный цикл осуществляет сдвиг элементов 
    // BrandArray[RemovingIndex], BrandArray[RemovingIndex], ..., BrandArray[ProductCount - 1]
    //на один элемент влево и тем самым затирает удаляемый элемент
    for (int i = RemovingIndex; i < ProductCount - 1; i++)
    {
        BrandArray[i] = BrandArray[i + 1];
    }
    //Уменьшаем количество элементов-записей на 1
    ProductCount--;
    //Возвращаем истину
    return true;
}
 
//Функция, осуществляющая поиск и вывод на консоль элементов-записей о товарах массива BrandArray,
//фамилия которых совпадает со строкой KeySurname (ключом для поиска).
//ProductCount - количество записей-элементов в массиве BrandArray.
double SearchAndPrintBrand(Brand BrandArray[], int ProductCount, char KeyProducer[]):
{
    //Переменная для подсчета количества найденных записей, вначале равна 0
    int FoundRecordsCount = 0;
    cout << endl;   
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемся по все элементам массива BrandArray
    for (int i = 0; i < ProductCount; i++)
    {
        //Если фамилия очередного элемента-записи совпадает с KeySurname, то
        if (!strcmp(BrandArray[i].Producer, KeyProducer))
        {   
            //выводим сам элемент
            PrintBrand(SportsmenArray[i], i);       
            //выводим разделительную линию
            cout << SEPARATING_LINE << endl;
            //Увеличиваем на 1 количество найденных записей
            FoundRecordsCount++;
        }
    }
    //Выводим количество найденных записей
    cout << FoundRecordsCount << " records were found." << endl;
}
 
//Функция, осуществляющая сортировку массива товаров по не возрастанию количества на складе
//SportsmenArray - массив элементов-записей о товаре;
//ProductCount - количество спорстменов-записей в массиве.
double SortBrandByBrandCount(Brand BrandArray[], int ProductCount):
{
    int MaxIndex;
    Brand Tmp;
 
    for (int i = 0; i < ProductCount - 1; i++)
    {
        MaxIndex = i;       
        for (int j = i + 1; j < ProductCount; j++)
        {
            if (BrandArray[j].ProductCount > BrandArray[MaxIndex].BrandCount)
            {
                MaxIndex = j;
            }
        }
        Tmp = BrandArray[i];
        BrandArray[i] = BrandArray[MaxIndex];
        BrandArray[MaxIndex] = Tmp;
    }
}
 
//Функция, осуществляющая вывод на консоль всех элеменов-записей о товаре,
//содержащихся в массиве BrandArray размера ProductCount
char PrintAllBrand(Brand BrandArray[], int ProductCount):
{   
    cout << endl;
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемя по всем элементам
    for (int i = 0; i < ProductCount; i++)
    {       
        //Выводим очердной элемент-запись
        PrintBrand(BrandArray[i], i);       
        //Выводим разделительную линию
        cout << SEPARATING_LINE << endl;
    }
}
 
//Функция, осуществляющая чтение массива BrandArray и его размера ProductCount
//из бинарного файла с именем ProductCount
char LoadFromFile(Brand BrandArray[], int& ProductCount, const char* FileName):
{
    //Объявлем файловый поток ввода inp, передаем ему имя открываемого файла FileName
    ifstream inp(FileName);
    //Читаем из файла количество элементов в массиве
    inp >> ProductCount;
    //Читаем из файла целиком весь массив
    inp.read((char *)BrandArray, ProductCount * sizeof(BrandArray[0])); 
}
 
//Фуникция, осуществляющая сохранение массива BrandArray и его размера ProductCount
//в бинарный файл FileName
char SaveToFile(Brand BrandArray[], int ProductCount, const char* FileName):
{
    //Объявляем файловый поток вывода out, передаем ему имя открываемого файла FileName
    ofstream out(FileName);
    //Записываем в файл количество спорстменов
    out << ProductCount;
    //Записываем в файл весь массив целиком
    out.write((char *)BrandArray, ProductCount * sizeof(BrandArray[0]));
}
 
//Функция, реализующая главное меню программы. В зависимости от выбора пользователя, 
//осуществляет вызов соответствующих функций.
//Параметры:
//SportsmenArray - массив элементов-записей о спорстменах;
//SportsmenCount - количество элементов в массиве.
char MainMenu(Brand BrandArray[], int& ProductCount):
{
    //Переменная, которая будет хранить номер выбранного пользователем пункта меню
    int UserChoise; 
    //Переменная-запись о товаре
    Brand Man;
    //Переменная для хранения индекса удаляемого элемента
    int RemovingIndex;
    //Массив символов для хранения строки производителя для поиска
    char KeySurname[MAX_NAME_LENGTH];
    //Цикл с постусловием, осуществляющий вывод меню, ввод выбора пользователя и
    //выполнение соответстующих этому выбору действий до тех пор, пока пользователь
    //не выберет выход из программы
    do 
    {
        //Отображаем меню
        cout << endl;
        cout << "          MENU" << endl;
        cout << "=========================" << endl;
        cout << " [1] Add Producer" << endl;
        cout << " [2] Remove Producer" << endl;
        cout << " [3] Search Producer" << endl;
        cout << " [4] Sort Producer" << endl;
        cout << " [5] Show all Producer" << endl;
        cout << " [6] Exit" << endl;
        cout << "=========================" << endl;
        cout << "Your choice : ";
        //Вводим выбранный пользователем пункт меню
        cin >> UserChoise;
 
        //С помощью конструкции выбора анализируем этот выбор
        //и осуществляем соответствующие действия
        switch (UserChoise)
        {
            //Добавление новой записи о товаре в массив
            case 1: 
                InputBrand(Man);
                AddBrand(BrandArray, ProductCount, Man);
                break;
            //Удаление записи о товаре с указанным индексом из массива
            case 2:
                cout << endl << "Enter index of brand to delete : ";
                //Вводим индекс удаляемого элемента-записи
                cin >> RemovingIndex;
                //Удаляем элемент. Если результат удаления ложь, то
                if (!RemoveBrand(BrandArray, ProductCount, RemovingIndex))
                {
                    //Выдаем ошибку
                    cout << endl << "Invalid index! Try again." << endl;
                }
                break;
            //Поиск всех записей о спорстменах, имеющих указанную фамилию
            case 3:
                cout << endl << "Enter Producer for search : ";
                //Вводим символ перевода строки
                cin.get();
                //Вводим фамилию для поиска 
                cin.getline(KeyProducer, sizeof KeyProducer);               
                //Вызываем функцию поиска и вывода найденных элементов
                SearchAndPrintSportsmen(BrandArray, ProductCount, KeyProducer);
                break;
            //Сортировка всех записей о спортсменах в порядке не возрастания 
            //количества сыгранных игр
            case 4:
                SortProducerByProductCount(BrandArray, ProductCount);
                break;
            //Печать всех записей о спортсменах
            case 5:
                PrintAllBrand(BrandArray, ProductCount);
                break;
            //Выход
            case 6:
                cout << "Bye-bye..." << endl;
                break;
            //Ошибка, пользователь выбрал несуществующий пункт меню
            default:
                cout << endl << "Invalid choice! Try again." << endl;
        }
        //цикл выполняется до тех пор, пока пользователь не выберет выход
    } while (UserChoise != 6);
}
 
int main()
{
    //Описание массива записей (структур) о спортсменах
    Brand BrandArray[MAX_Brand_COUNT];
    //Переменная для хранения количества записей в массиве
    int ProductCount = 0;
 
    //Загружаем все записи из файла
    LoadFromFile(BrandArray, ProductCount, FILE_NAME);
    //Выдаем меню и осуществляем операции
    MainMenu(BrandArray, ProductCount); 
    //Перед выходом из программы сохраняем все записи в файл
    SaveToFile(BrandArray, ProductCount, FILE_NAME);
    return 0;
}
[/CPP]

Добавлено через 1 минуту
если кому это поможет я писал свой код вот по этому шаблону. надеюсь это облегчит помощь)
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
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
/*
Условие разобранного варианта:
 
Каждая запись представляется собой экземпляр структуры. 
Все записи хранятся в массиве. Функциональность программы должна включать:
•   Добавление записи, введенной с клавиатуры
•   Удаление указанной записи
•   Поиск записей по некоторому критерию
•   Сортировку записей
•   Печать всех записей
•   Сохранение всех записей в файл*
•   Чтение всех записей из файла*
 
Записи о спортсменах. Каждая запись характеризуется фамилией, именем, отчеством,
датой рождения, видом спорта и количеством сыгранных игр.
 
*/
 
//Подключаем заголовочный файл для работы со стандартными потоками cin и cout
#include <iostream>
//Подключаем заголовочный файл для работы с потоковыми манипуляторами 
// (см. Павловская "Программирование на языке высокого уровня", с. 271 )
#include <iomanip>
//Подключаем заголовчный файл для работы с потоковыми файловыми классами
#include <fstream>
//Подключаем заголовочный файл для работы со строками
#include <string.h>
using namespace std;
 
// Константы
const int MAX_NAME_LENGTH = 100; //Максимальная длина фамилии, имени, отчества
const int MAX_SPORTSMEN_COUNT = 1000; //Максимальное количество спортсменов в массиве
const char* FILE_NAME = "sportsmen.dat"; //Имя файла для хранения записей о спортсменах
//Заголовочная константная строка, используемая при выводе записей
const char* HEADER = "Index       Surname          Name    Patronymic Birth date  Sport Games count";
//Разделительная линия
const char* SEPARATING_LINE = "-------------------------------------------------------------------------------";
 
//Перечисление, описывающее вид спорта
// skNone - вид спорта не указан;
// skTennis - теннис,
// skChess - шахматы,
// skSprint - бег
enum SportKind {skNone, skTennis, skChess, skSprint};
 
//Стуктура, описывающая дату
struct Date
{
    unsigned short int Year;  //Год
    unsigned short int Month; //Месяц
    unsigned short int Day;   //День
};
 
//Структура, описывающая запись о спортсмене
struct Sportsman
{
    char Surname[MAX_NAME_LENGTH + 1];    //Фамилия
    char Name[MAX_NAME_LENGTH + 1];       //Имя
    char Patronymic[MAX_NAME_LENGTH + 1]; //Отчество
    Date DateOfBirth;      //Дата рождения
    SportKind KindOfSport; //Вид спорта
    int GamesCount;        //Количество сыгранных игр
};
 
//Вспомогательная функция, осуществляющая преобразование 
//вида спорта, содержашегося в параметре Type в строку Str,
//т.е. в назваие спорта, представленное в виде строки
void SportKindToStr(SportKind Type, char Str[])
{
    //В зависимости от значения Type
    switch (Type)   
    {
        case skTennis:
            strcpy(Str, "tennis"); //Копируем в Str название вида спорта "tennis"
            break;
        case skChess:
            strcpy(Str, "chess");  //Копируем в Str название вида спорта "chess"
            break;
        case skSprint:
            strcpy(Str, "sprint"); //Копируем в Str название вида спорта "sprint"
            break;
        default:
            strcpy(Str, "unknown"); //Случай, когда задан тип skNone
    }
}
 
//Вспомогательная функция, которая по названию спорта, содержащемся в строке Str,
//возвращает его тип
SportKind StrToSportKind(char Str[])
{
    //Переводим строку Str к нижнему регистру
    strlwr(Str);
    //Если строка Str равна "tennis", то возвращаем skTennis
    if (!strcmp(Str, "tennis")) 
        return skTennis;
    //Если строка Str равна "chess", то возвращаем skСhess
    if (!strcmp(Str, "chess"))
        return skChess;
    //Если строка Str равна "sprint", то возвращаем skSprint
    if (!strcmp(Str, "sprint"))
        return skSprint;
    //Если в строке недопустимое название вида спорта, то возвращаем skNone
    return skNone;
}
 
//Функция, осуществляющая ввод записи о спортсмене с консоли.
//Введенная запись возвращается в параметре Man, передаваемом по ссылке
void InputSportsman(Sportsman& Man)
{
    //Про потоковые классы (в частности про объект cin) можно почитать в 
    //Павловской "Программирование на языке высокого уровня" c. 265 - 285
    //В частности про функции get() и getline() стандартного объекта ввода cin можно почитать на с. 273
    // cin.get() - читает один символ с консоли;
    // cin.getline(buf, num) - читает с консоли num-1 или пока не встретится символ перевода строки и 
    //                         помещает их в строку buf. Причем, если встретился символ перевода строки, то
    //                         он тоже помещается в buf
 
    char Buf[MAX_NAME_LENGTH]; //Вспомогательная строка для ввода данных
    bool IsValidKindOfSport; //Логическая переменная, определяющая правильно ли введен вид спорта
 
    //Читаем символ перевода строки
    cin.get();
 
    cout << endl;
    cout << "Enter sportsman info" << endl;
    //Вводим фамилию
    cout << "Surname    : ";        
    cin.getline(Man.Surname, sizeof Man.Surname);
    //Вводим имя
    cout << "Name       : ";    
    cin.getline(Man.Name, sizeof Man.Name);
    //Вводим отчество
    cout << "Patronymic : ";
    cin.getline(Man.Patronymic, sizeof Man.Patronymic);
    //Вводим год рождения
    cout << "Year of birth : ";
    cin >> Man.DateOfBirth.Year;
    //Вводим месяц рождения. 
    // <== Сюда можно добавить цикл с постусловием для проверки корректности ввода номера месяца
    cout << "Month of birth (1-12) : ";
    cin >> Man.DateOfBirth.Month;
    //Вводим день рождения
    // <== Сюда можно добавить цикл с постусловием для проверки корректности ввода дня
    cout << "Day of birth (1-31) : ";
    cin >> Man.DateOfBirth.Day;
 
    // <== Сюда можно добавить корректность вводимой даты, т.е. проверки допустима ли введенная дата
 
    //Читаем символ перевода строки
    cin.get();
    //Цикл с постусловием для повторного ввода строки вида спорта,
    //если она отличная от "tennis", "chess" и "sprint"
    do
    {
        //Полагаем, что вид спорта правильный
        IsValidKindOfSport = true;      
        cout << "Kind of sport (tennis, chess or sprint) : ";
        //Читаем в Buf строку вида спорта
        cin.getline(Buf, sizeof Buf);   
        //Преобразовывем введенную строку в переменную типа SportKind
        Man.KindOfSport = StrToSportKind(Buf);
        //Если была введена недопустимая строка
        if (Man.KindOfSport == skNone)
        {
            //Выдаем сообщение, что строка неправильная
            cout << endl << "Invalid! Enter tennis, chess or sprint" << endl << endl;
            //Устанавливаем значение лжи для флага правильности строки вида спорта
            IsValidKindOfSport = false;
        }
        //Цикл повторяется до тех пор, пока введенная строка вида спорта не будет правильной
    } while (!IsValidKindOfSport);
    //Вводим количество сыгранных игр
    cout << "Games count : ";
    cin >> Man.GamesCount;
}
 
//Функция вывода на консоль полей записи (структуры) Man, имеющей индекс Index
void PrintSportsman(Sportsman Man, int Index)
{
    //В данной функции используются специальные манипуляторы, осуществляющие форматирование
    //выводимых данных. Для их использования необходимо подключить заголовочный файл iomanip.h
    // setw(int) - устанавливает максимальную ширину поля вывода;
    // setfill(char) - устанавливает символ-заполнитель для случая, если выводимые данные занимают не всю ширину 
    //                 поля вывода. По умолчанию символом-заполнителем является пробел
    //Пример. Строка
    //  cout << setfill('+') << setw(5) << 44;
    //выдаст на консоль
    //+++44
    //Подробности см. в Павловской "Программирование на языке высокого уровня" c. 271
 
    char Buf[MAX_NAME_LENGTH]; //Строковая переменная для строкового представления вида спорта
 
    //Выводим индекс в поле максимальной ширины 5
    cout << setw(5) << Index << " ";
    //Выводим фамилию, имя, отчество. Каждое в своем поле максимальной ширины 13
    cout << setw(13) <<  Man.Surname << " " << setw(13) << Man.Name << " "<< setw(13) << Man.Patronymic << " ";
    //Меняем символ-заполнитель с пробела на 0. Использование заполнителя 0 позволит выдавать даты в формате ДД.ММ.ГГГГ
    cout << setfill('0');
    //Выдаем день, месяц и год даты рождение. Каждая компонента даты выводися в своем поле
    cout << setw(2) << Man.DateOfBirth.Day << "." << setw(2) << Man.DateOfBirth.Month << "." << setw(4) << Man.DateOfBirth.Year << " ";
    //Возвращаем пробел в качестве символа-заполнителя
    cout << setfill(' ');
    //Осуществляем перевод вида спорта в строку Buf
    SportKindToStr(Man.KindOfSport, Buf);
    //Выводим строку вида спорта и количество сыгрнанных игр
    cout << setw(6) << Buf << " " << setw(7) << Man.GamesCount << endl;
}
 
//Функция, добавляющая запись о спортсмене Man в конец массива спортсменов SportsmenArray, 
//SportsmenCount - количество записей-элементов в массиве SportsmenArray
void AddSportsman(Sportsman SportsmenArray[], int& SportsmenCount, Sportsman Man)
{
    SportsmenArray[SportsmenCount++] = Man;
}
 
//Функция, удаляющая в массиве SportsmenArray запись-элемент с индексом RemovingIndex,
//SportsmenCount - количество записей-элементов в массиве SportsmenArray.
//Функция возвращает истину, если RemovingIndex лежит в допустимом диапазоне от 0 до SportsmenCount-1,
//иначе функция возвращает ложь
bool RemoveSportsman(Sportsman SportsmenArray[], int& SportsmenCount, int RemovingIndex)
{
    //Если индекс удаляемого элемента задан неправильно, то возвращаем ложь
    if (RemovingIndex < 0 || RemovingIndex >= SportsmenCount)
    {
        return false;
    }
    //Данный цикл осуществляет сдвиг элементов 
    // SportsmenArray[RemovingIndex], SportsmenArray[RemovingIndex], ..., SportsmenArray[SportsmenCount - 1]
    //на один элемент влево и тем самым затирает удаляемый элемент
    for (int i = RemovingIndex; i < SportsmenCount - 1; i++)
    {
        SportsmenArray[i] = SportsmenArray[i + 1];
    }
    //Уменьшаем количество элементов-записей на 1
    SportsmenCount--;
    //Возвращаем истину
    return true;
}
 
//Функция, осуществляющая поиск и вывод на консоль элементов-записей о спортсменах массива SportsmenArray,
//фамилия которых совпадает со строкой KeySurname (ключом для поиска).
//SportsmenCount - количество записей-элементов в массиве SportsmenArray.
void SearchAndPrintSportsmen(Sportsman SportsmenArray[], int SportsmenCount, char KeySurname[])
{
    //Переменная для подсчета количества найденных записей, вначале равна 0
    int FoundRecordsCount = 0;
    cout << endl;   
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемся по все элементам массива SportsmenArray
    for (int i = 0; i < SportsmenCount; i++)
    {
        //Если фамилия очередного элемента-записи совпадает с KeySurname, то
        if (!strcmp(SportsmenArray[i].Surname, KeySurname))
        {   
            //выводим сам элемент
            PrintSportsman(SportsmenArray[i], i);       
            //выводим разделительную линию
            cout << SEPARATING_LINE << endl;
            //Увеличиваем на 1 количество найденных записей
            FoundRecordsCount++;
        }
    }
    //Выводим количество найденных записей
    cout << FoundRecordsCount << " records were found." << endl;
}
 
//Функция, осуществляющая сортировку массива спортсменов по не возрастанию количества сыгранных игр.
//SportsmenArray - массив элементов-записей о спортсменах;
//SportsmenCount - количество спорстменов-записей в массиве.
void SortSportsmenByGamesCount(Sportsman SportsmenArray[], int SportsmenCount)
{
    int MaxIndex;
    Sportsman Tmp;
 
    for (int i = 0; i < SportsmenCount - 1; i++)
    {
        MaxIndex = i;       
        for (int j = i + 1; j < SportsmenCount; j++)
        {
            if (SportsmenArray[j].GamesCount > SportsmenArray[MaxIndex].GamesCount)
            {
                MaxIndex = j;
            }
        }
        Tmp = SportsmenArray[i];
        SportsmenArray[i] = SportsmenArray[MaxIndex];
        SportsmenArray[MaxIndex] = Tmp;
    }
}
 
//Функция, осуществляющая вывод на консоль всех элеменов-записей о спорстменах,
//содержащихся в массиве SportsmenArray размера SportsmenCount
void PrintAllSportsmen(Sportsman SportsmenArray[], int SportsmenCount)
{   
    cout << endl;
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемя по всем элементам
    for (int i = 0; i < SportsmenCount; i++)
    {       
        //Выводим очердной элемент-запись
        PrintSportsman(SportsmenArray[i], i);       
        //Выводим разделительную линию
        cout << SEPARATING_LINE << endl;
    }
}
 
//Функция, осуществляющая чтение массива SportsmenArray и его размера SportsmenCount
//из бинарного файла с именем SportsmenCount
void LoadFromFile(Sportsman SportsmenArray[], int& SportsmenCount, const char* FileName)
{
    //Объявлем файловый поток ввода inp, передаем ему имя открываемого файла FileName
    ifstream inp(FileName);
    //Читаем из файла количество элементов в массиве
    inp >> SportsmenCount;
    //Читаем из файла целиком весь массив
    inp.read((char *)SportsmenArray, SportsmenCount * sizeof(SportsmenArray[0]));   
}
 
//Фуникция, осуществляющая сохранение массива SportsmenArray и его размера SportsmenCount
//в бинарный файл FileName
void SaveToFile(Sportsman SportsmenArray[], int SportsmenCount, const char* FileName)
{
    //Объявляем файловый поток вывода out, передаем ему имя открываемого файла FileName
    ofstream out(FileName);
    //Записываем в файл количество спорстменов
    out << SportsmenCount;
    //Записываем в файл весь массив целиком
    out.write((char *)SportsmenArray, SportsmenCount * sizeof(SportsmenArray[0]));
}
 
//Функция, реализующая главное меню программы. В зависимости от выбора пользователя, 
//осуществляет вызов соответствующих функций.
//Параметры:
//SportsmenArray - массив элементов-записей о спорстменах;
//SportsmenCount - количество элементов в массиве.
void MainMenu(Sportsman SportsmenArray[], int& SportsmenCount)
{
    //Переменная, которая будет хранить номер выбранного пользователем пункта меню
    int UserChoise; 
    //Переменная-запись о спорстмене
    Sportsman Man;
    //Переменная для хранения индекса удаляемого элемента
    int RemovingIndex;
    //Массив символов для хранения строки фамилии для поиска
    char KeySurname[MAX_NAME_LENGTH];
    //Цикл с постусловием, осуществляющий вывод меню, ввод выбора пользователя и
    //выполнение соответстующих этому выбору действий до тех пор, пока пользователь
    //не выберет выход из программы
    do 
    {
        //Отображаем меню
        cout << endl;
        cout << "          MENU" << endl;
        cout << "=========================" << endl;
        cout << " [1] Add sportsman" << endl;
        cout << " [2] Remove sportsman" << endl;
        cout << " [3] Search sportsman" << endl;
        cout << " [4] Sort sportsmen" << endl;
        cout << " [5] Show all sportsmen" << endl;
        cout << " [6] Exit" << endl;
        cout << "=========================" << endl;
        cout << "Your choice : ";
        //Вводим выбранный пользователем пункт меню
        cin >> UserChoise;
 
        //С помощью конструкции выбора анализируем этот выбор
        //и осуществляем соответствующие действия
        switch (UserChoise)
        {
            //Добавление новой записи о спортсмене в массив
            case 1: 
                InputSportsman(Man);
                AddSportsman(SportsmenArray, SportsmenCount, Man);
                break;
            //Удаление записи о спортсмене с указанным индексом из массива
            case 2:
                cout << endl << "Enter index of sportsman to delete : ";
                //Вводим индекс удаляемого элемента-записи
                cin >> RemovingIndex;
                //Удаляем элемент. Если результат удаления ложь, то
                if (!RemoveSportsman(SportsmenArray, SportsmenCount, RemovingIndex))
                {
                    //Выдаем ошибку
                    cout << endl << "Invalid index! Try again." << endl;
                }
                break;
            //Поиск всех записей о спорстменах, имеющих указанную фамилию
            case 3:
                cout << endl << "Enter surname for search : ";
                //Вводим символ перевода строки
                cin.get();
                //Вводим фамилию для поиска 
                cin.getline(KeySurname, sizeof KeySurname);             
                //Вызываем функцию поиска и вывода найденных элементов
                SearchAndPrintSportsmen(SportsmenArray, SportsmenCount, KeySurname);
                break;
            //Сортировка всех записей о спортсменах в порядке не возрастания 
            //количества сыгранных игр
            case 4:
                SortSportsmenByGamesCount(SportsmenArray, SportsmenCount);
                break;
            //Печать всех записей о спортсменах
            case 5:
                PrintAllSportsmen(SportsmenArray, SportsmenCount);
                break;
            //Выход
            case 6:
                cout << "Bye-bye..." << endl;
                break;
            //Ошибка, пользователь выбрал несуществующий пункт меню
            default:
                cout << endl << "Invalid choice! Try again." << endl;
        }
        //цикл выполняется до тех пор, пока пользователь не выберет выход
    } while (UserChoise != 6);
}
 
int main()
{
    //Описание массива записей (структур) о спортсменах
    Sportsman SportsmenArray[MAX_SPORTSMEN_COUNT];
    //Переменная для хранения количества записей в массиве
    int SportsmenCount = 0;
 
    //Загружаем все записи из файла
    LoadFromFile(SportsmenArray, SportsmenCount, FILE_NAME);
    //Выдаем меню и осуществляем операции
    MainMenu(SportsmenArray, SportsmenCount);   
    //Перед выходом из программы сохраняем все записи в файл
    SaveToFile(SportsmenArray, SportsmenCount, FILE_NAME);
    return 0;
}


товарищ надо создать код по этому образцу. код что я писал указан нижу

Добавлено через 2 минуты
Цитата Сообщение от M128K145 Посмотреть сообщение
Почему InputTovar, PrintTovar, RemoveTovar не имеют закрывающихся скобок и что это за странная скобка после тела мейн?
всмысле закрывающие скобки? обьясните подробнее пож
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
03.01.2010, 11:23     ошибка номер...да их много. подскажите что не так. #7
Цитата Сообщение от оренбуржец Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Функция вывода на консоль полей записи (структуры) producer, имеющей индекс Index
void PrintTovar(Tovar producer, int Index)
{
                char Buf[MAX_NAME_LENGTH];
        //Строковая переменная для строкового представления вида товара
        //Выводим индекс в поле максимальной ширины 5
        cout << setw(5) << Index << " ";
        //Выводим марку, объем, количество на складе. Каждое в своем поле максимальной ширины 13
        cout << setw(13) <<  producer.NameBrand << " " << setw(13) << producer.Memory_max << " "<< setw(13) << producer.Kolichestvo_na_sklade << " ";
//Функция, добавляющая запись о товаре producer в конец массива товаров BrandArray, 
//BrandCount - количество записей-элементов в массиве BrandArray
        void AddTovar(Tovar BrandArray[], int& BrandCount, Tovar producer)
{
        BrandArray[BrandCount++] = producer;
}
Перед void AddTovar нету закрывающей скобки, т.е. '}' И так во всех случаях про которые я написал
оренбуржец
5 / 5 / 0
Регистрация: 12.12.2009
Сообщений: 56
03.01.2010, 11:26  [ТС]     ошибка номер...да их много. подскажите что не так. #8
ок ща попробую исправить)

Добавлено через 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
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
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string.h>
using namespace std;
 
// Константы
const int MAX_NAME_LENGTH = 100; //Максимальная длина названия
const int MAX_BRAND_COUNT = 1000; //Максимальное количество товаров в массиве
const char* FILE_NAME = "Brand.dat"; //Имя файла для хранения записей о продукции
//Заголовочная константная строка, используемая при выводе записей
const char* HEADER = "  Index     NameOFbrand       Memory         Kolichestvo na sklade  ";
//Разделительная линия
const char* SEPARATING_LINE = "--------------------------------------------------------------------------------";
 
//Перечисление существующих марок
// bkNone - марка не указана;
// Apacer
// A_Data_My_Flash
// Kingston 
// QUMO 
enum BrandKind {skNone, Apacer, A_Data_My_Flash, Kingston, QUMO};
 
struct Production
{
    char NameBrand[MAX_NAME_LENGTH + 1];    //Название товара
unsigned short  int Memory_max[MAX_NAME_LENGTH + 1];        //объем памяти
 
unsigned short  int Kolichestvo_na_sklade;              //количество на складе
 
};
 
//Вспомогательная функция, осуществляющая преобразование 
//вида спорта, содержашегося в параметре Type в строку Str,
//т.е. в назваие спорта, представленное в виде строки
void BrandKindToStr(BrandKind Type, char Str[])
{
    //В зависимости от значения Type
    switch (Type)   
    {
        case Apacer:
            strcpy(Str, "Apacer"); //Копируем в Str название жанра "Apacer"
            break;
        case A_Data_My_Flash:
            strcpy(Str, "A_Data_My_Flash");  //Копируем в Str название жанра "A_Data_My_Flash"
            break;
        case Kingston:
            strcpy(Str, "Kingston"); //Копируем в Str название жанра "Kingston"
            break;
        case QUMO:
            strcpy(Str, "QUMO"); //Копируем в Str название жанра "QUMO"
        default:
            strcpy(Str, "unknown"); //Случай, когда задан тип bkNone
    }
}
//Вспомогательная функция, которая по названию товара, содержащемся в строке Str,
//возвращает его тип
BrandKind StrToBrandKind(char Str[])
{
    //Переводим строку Str к нижнему регистру
    strlwr(Str);
    //Если строка Str равна "Apacer", то возвращаем Apacer
    if (!strcmp(Str, "Apacer")) 
        return Apacer;
    //Если строка Str равна "A_Data_My_Flash", то возвращаем A_Data_My_Flash
    if (!strcmp(Str, "A_Data_My_Flash"))
        return A_Data_My_Flash;
    //Если строка Str равна "Kingston", то возвращаем Kingston
    if (!strcmp(Str, "Kingston"))
        return Kingston;
    //Если строка Str равна "QUMO", то возвращаем QUMO
    if (!strcmp(Str, "QUMO"))
        return QUMO;
    //Если в строке недопустимое название товара, то возвращаем agNone
    return bkNone;
}
    //Функция, осуществляющая ввод записи о товаре с консоли.
//Введенная запись возвращается в параметре producer, передаваемом по ссылке
void InputTovar(Tovar& producer)
{
    char Buf[MAX_NAME_LENGTH]; //Вспомогательная строка для ввода данных
    bool IsValidKindOfBrand; //Логическая переменная, определяющая правильно ли введен вид товара
    //Читаем символ перевода строки
    cin.get();
  cout << endl;
  cout << "Enter product info:" << endl;
  cout<< "Enter name of brand:";
  cin.getline(producer.NameBrand, sizeof producer.NameBrand);
  cout<<"enter memory:";
  cin.getline(producer.Memory_max, sizeof producer.Memory_max);
  cout<<"enter kolichestvo:";
  cin.getline(producer.Kolichestvo_na_sklade, sizeof producer.Kolichestvo_na_sklade);
    cin.get();
    do
    {   //Полагаем, что вид товара правильный
        IsValidKindOfBrand= true;       
        cout << "Kind of brand (Apacer, A_Data_My_Flash, Kingston, QUMO)";
        //Читаем в Buf строку вида товара
        cin.getline(Buf, sizeof Buf);
        //Преобразовывем введенную строку в переменную типа BrandKind
        producer.KindOfBrand = StrToBrandKind(Buf);
        //Если была введена недопустимая строка
        if (producer.KindOfBrand == bkNone)
        {
            //Выдаем сообщение, что строка неправильная
            cout << endl << "Invalid! Enter Apacer, A_Data_My_Flash, Kingston, QUMO" << endl << endl;
            //Устанавливаем значение лжи для флага правильности строки вида товара
            IsValidKindOfBrand = false;
        }
            //Цикл повторяется до тех пор, пока введенная строка вида товара не будет правильной
    }
}
//Функция вывода на консоль полей записи (структуры) producer, имеющей индекс Index
void PrintTovar(Tovar producer, int Index)
{
        char Buf[MAX_NAME_LENGTH];
    //Строковая переменная для строкового представления вида товара
    //Выводим индекс в поле максимальной ширины 5
    cout << setw(5) << Index << " ";
    //Выводим марку, объем, количество на складе. Каждое в своем поле максимальной ширины 13
    cout << setw(13) <<  producer.NameBrand << " " << setw(13) << producer.Memory_max << " "<< setw(13) << producer.Kolichestvo_na_sklade << " ";
//Функция, добавляющая запись о товаре producer в конец массива товаров BrandArray, 
//BrandCount - количество записей-элементов в массиве BrandArray
    void AddTovar(Tovar BrandArray[], int& BrandCount, Tovar producer)
{
    BrandArray[BrandCount++] = producer;
    }
}
    //Функция, удаляющая в массиве BrandArray запись-элемент с индексом RemovingIndex,
//BrandCount - количество записей-элементов в массиве BrandArray.
//Функция возвращает истину, если RemovingIndex лежит в допустимом диапазоне от 0 до BrandCount-1,
//иначе функция возвращает ложь
bool RemoveTovar(Tovar BrandArray[], int& BrandCount, int RemovingIndex)
{
    //Если индекс удаляемого элемента задан неправильно, то возвращаем ложь
    if (RemovingIndex < 0 || RemovingIndex >= BrandCount)
    {
        return false;
    }
    //Данный цикл осуществляет сдвиг элементов 
    // BrandArray[RemovingIndex], BrandArray[RemovingIndex], ..., BrandArray[BrandCount - 1]
    //на один элемент влево и тем самым затирает удаляемый элемент
    for (int i = RemovingIndex; i < BrandCount - 1; i++)
    {
        BrandArray[i] = BrandArray[i + 1];
    }
    //Уменьшаем количество элементов-записей на 1
    BrandCount--;
    //Возвращаем истину
    return true;
}
 
//Функция, осуществляющая поиск и вывод на консоль элементов-записей о товаре массива BrandArray,
//фамилия которых совпадает со строкой KeyNameBrand (ключом для поиска).
//BrandCount - количество записей-элементов в массиве BrandArray.
void SearchAndPrintTovar(Tovar BrandArray[], int BrandCount, char KeyNameBrand[])
{
    //Переменная для подсчета количества найденных записей, вначале равна 0
    int FoundRecordsCount = 0;
    cout << endl;   
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемся по все элементам массива SportsmenArray
    for (int i = 0; i < BrandCount; i++)
    {
        //Если название очередного элемента-записи совпадает с KeyNameBrand, то
        if (!strcmp(BrandArray[i].NameBrand, KeyNameBrand))
        {   
            //выводим сам элемент
            PrintTovar(BrandArray[i], i);       
            //выводим разделительную линию
            cout << SEPARATING_LINE << endl;
            //Увеличиваем на 1 количество найденных записей
            FoundRecordsCount++;
        }
    }
        //Выводим количество найденных записей
    cout << FoundRecordsCount << " records were found." << endl;
}
 
//Функция, осуществляющая вывод на консоль всех элеменов-записей о товаре,
//содержащихся в массиве BrandArray размера BrandCount
void PrintAllTovar(Tovar BrandArray[], int BrandCount)
{   
    cout << endl;
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемя по всем элементам
    for (int i = 0; i < BrandCount; i++)
    {       
        //Выводим очердной элемент-запись
        PrintTovar(BrandArray[i], i);       
        //Выводим разделительную линию
        cout << SEPARATING_LINE << endl;
    }
}
//Функция, осуществляющая чтение массива BrandArray и его размера BrandCount
//из бинарного файла с именем BrandCount
void LoadFromFile(Tovar BrandArray[], int& BrandCount, const char* FileName )
{
//Объявлем файловый поток ввода inp, передаем ему имя открываемого файла FileName
    ifstream inp(FileName);
    //Читаем из файла количество элементов в массиве
    inp >>BrandCount;
    //Читаем из файла целиком весь массив
    inp.read((char *)BrandArray, BrandCount * sizeof(BrandArray[0]));
}
void SaveToFile(Tovar BrandArray[], int BrandCount, const char* FileName)
{
    //Объявляем файловый поток вывода out, передаем ему имя открываемого файла FileName
    ofstream out(FileName);
    //Записываем в файл количество товарa
    out << BrandCount;
    //Записываем в файл весь массив целиком
    out.write((char *)BrandArray, BrandCount * sizeof(BrandArray[0]));
}
//Функция, реализующая главное меню программы. В зависимости от выбора пользователя, 
//осуществляет вызов соответствующих функций.
//Параметры:
//BrandArray - массив элементов-записей о товаре;
//BrandCount - количество элементов в массиве.
void MainMenu(Tovar BrandArray[], int& BrandCount)
{
    //Переменная, которая будет хранить номер выбранного пользователем пункта меню
    int UserChoise; 
    //Переменная-запись о спорстмене
    Tovar producer;
    //Переменная для хранения индекса удаляемого элемента
    int RemovingIndex;
    //Массив символов для хранения строки фамилии для поиска
    char KeyNameBrand[MAX_NAME_LENGTH];
    //Цикл с постусловием, осуществляющий вывод меню, ввод выбора пользователя и
    //выполнение соответстующих этому выбору действий до тех пор, пока пользователь
    //не выберет выход из программы
    do 
    {
        //Отображаем меню
        cout << endl;
        cout << "          MENU" << endl;
        cout << "=========================" << endl;
        cout << " [1] Add Brand" << endl;
        cout << " [2] Remove Brand" << endl;
        cout << " [3] Search Brand" << endl;
        cout << " [4] Show all Brands" << endl;
        cout << " [5] Exit" << endl;
        cout << "=========================" << endl;
        cout << "Your choice : ";
        //Вводим выбранный пользователем пункт меню
        cin >> UserChoise;
        //С помощью конструкции выбора анализируем этот выбор
        //и осуществляем соответствующие действия
        switch (UserChoise)
        {
            //Добавление новой записи о спортсмене в массив
            case 1: 
                InputTovar(producer);
                AddTovar(BrandArray, BrandCount, producer);
                break;
                //Удаление записи о спортсмене с указанным индексом из массива
            case 2:
                cout << endl << "Enter index of Brand to delete : ";
                //Вводим индекс удаляемого элемента-записи
                cin >> RemovingIndex;
                //Удаляем элемент. Если результат удаления ложь, то
                if (!RemoveTovar(BrandArray, BrandCount, RemovingIndex))
                {
                    //Выдаем ошибку
                    cout << endl << "Invalid index! Try again." << endl;
                }
                break;
                //Поиск всех записей о спорстменах, имеющих указанную фамилию
            case 3:
                cout << endl << "Enter product name for search : ";
                //Вводим символ перевода строки
                cin.get();
                //Вводим фамилию для поиска 
                cin.getline(KeyNameBrand, sizeof KeyNameBrand);             
                //Вызываем функцию поиска и вывода найденных элементов
                SearchAndPrintTovar(BrandArray, BrandCount, KeyNameBrand);
                break;
                //Печать всех записей о спортсменах
            case 4:
                PrintAllTovar(BrandArray, BrandCount);
                break;
            //Выход
            case 5:
                cout << "Bye-bye..." << endl;
                break;
            //Ошибка, пользователь выбрал несуществующий пункт меню
            default:
                cout << endl << "Invalid choice! Try again." << endl;
        }
        //цикл выполняется до тех пор, пока пользователь не выберет выход
    } while (UserChoise != 5);
}
int main()
{
    //Описание массива записей (структур) о спортсменах
    Tovar BrandArray[MAX_BRAND_COUNT];
    //Переменная для хранения количества записей в массиве
    int BrandCount = 0;
 
    //Загружаем все записи из файла
    LoadFromFile(BrandArray, BrandCount, FILE_NAME);
    //Выдаем меню и осуществляем операции
    MainMenu(BrandArray, BrandCount);   
    //Перед выходом из программы сохраняем все записи в файл
    SaveToFile(BrandArray, BrandCount, FILE_NAME);
    return 0;
}
vet
 Аватар для vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
03.01.2010, 11:32     ошибка номер...да их много. подскажите что не так. #9
Цитата Сообщение от оренбуржец Посмотреть сообщение
все исправил но выдает огромную кучу ошибок.
Вообще то ошибка по сути дела одна:
'Tovar' was not declared in this scope
Tovar эт какая то структура которая нигде нне определена
Возможно Tovar надо заменить на Production?
оренбуржец
5 / 5 / 0
Регистрация: 12.12.2009
Сообщений: 56
03.01.2010, 11:33  [ТС]     ошибка номер...да их много. подскажите что не так. #10
вообще это задумывалось как параметр функции. я все по шаблону делал. выше есть
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
03.01.2010, 11:35     ошибка номер...да их много. подскажите что не так. #11
Вот
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
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string.h>
using namespace std;
 
// Константы
const int MAX_NAME_LENGTH = 100; //Максимальная длина названия
const int MAX_BRAND_COUNT = 1000; //Максимальное количество товаров в массиве
const char* FILE_NAME = "Brand.dat"; //Имя файла для хранения записей о продукции
//Заголовочная константная строка, используемая при выводе записей
const char* HEADER = "  Index     NameOFbrand       Memory         Kolichestvo na sklade  ";
//Разделительная линия
const char* SEPARATING_LINE = "--------------------------------------------------------------------------------";
 
//Перечисление существующих марок
// bkNone - марка не указана;
// Apacer
// A_Data_My_Flash
// Kingston 
// QUMO 
enum BrandKind {skNone, Apacer, A_Data_My_Flash, Kingston, QUMO};
 
struct Tovar
{
    char NameBrand[MAX_NAME_LENGTH + 1];    //Название товара
    unsigned short  int Memory_max/*[MAX_NAME_LENGTH + 1]*/;        //объем памяти
 
    unsigned short  int Kolichestvo_na_sklade;                              //количество на складе
 
};
 
//Вспомогательная функция, осуществляющая преобразование 
//вида спорта, содержашегося в параметре Type в строку Str,
//т.е. в назваие спорта, представленное в виде строки
void BrandKindToStr(BrandKind Type, char Str[])
{
    //В зависимости от значения Type
    switch (Type)   
    {
    case Apacer:
        strcpy(Str, "Apacer"); //Копируем в Str название жанра "Apacer"
        break;
    case A_Data_My_Flash:
        strcpy(Str, "A_Data_My_Flash");  //Копируем в Str название жанра "A_Data_My_Flash"
        break;
    case Kingston:
        strcpy(Str, "Kingston"); //Копируем в Str название жанра "Kingston"
        break;
    case QUMO:
        strcpy(Str, "QUMO"); //Копируем в Str название жанра "QUMO"
    default:
        strcpy(Str, "unknown"); //Случай, когда задан тип bkNone
    }
}
//Вспомогательная функция, которая по названию товара, содержащемся в строке Str,
//возвращает его тип
BrandKind StrToBrandKind(char Str[])
{
    //Переводим строку Str к нижнему регистру
    strlwr(Str);
    //Если строка Str равна "Apacer", то возвращаем Apacer
    if (!strcmp(Str, "Apacer")) 
        return Apacer;
    //Если строка Str равна "A_Data_My_Flash", то возвращаем A_Data_My_Flash
    if (!strcmp(Str, "A_Data_My_Flash"))
        return A_Data_My_Flash;
    //Если строка Str равна "Kingston", то возвращаем Kingston
    if (!strcmp(Str, "Kingston"))
        return Kingston;
    //Если строка Str равна "QUMO", то возвращаем QUMO
    if (!strcmp(Str, "QUMO"))
        return QUMO;
    //Если в строке недопустимое название товара, то возвращаем agNone
    return skNone;
}
//Функция, осуществляющая ввод записи о товаре с консоли.
//Введенная запись возвращается в параметре producer, передаваемом по ссылке
void InputTovar(Tovar& producer)
{
    char Buf[MAX_NAME_LENGTH]; //Вспомогательная строка для ввода данных
    bool IsValidKindOfBrand; //Логическая переменная, определяющая правильно ли введен вид товара
    //Читаем символ перевода строки
    cin.get();
    cout << endl;
    cout << "Enter product info:" << endl;
    cout<< "Enter name of brand:";
    cin.getline(producer.NameBrand, MAX_NAME_LENGTH + 1);
    cout<<"enter memory:";
    cin>>producer.Memory_max;
    //cin.getline(producer.Memory_max, MAX_NAME_LENGTH + 1);
    cout<<"enter kolichestvo:";
    cin>>producer.Kolichestvo_na_sklade;
    //cin.getline(producer.Kolichestvo_na_sklade, sizeof producer.Kolichestvo_na_sklade);
    cin.get();
    do
    {       //Полагаем, что вид товара правильный
        IsValidKindOfBrand= true;               
        cout << "Kind of brand (Apacer, A_Data_My_Flash, Kingston, QUMO)";
        //Читаем в Buf строку вида товара
        cin.getline(Buf, sizeof Buf);
        //Преобразовывем введенную строку в переменную типа BrandKind
        producer.KindOfBrand = StrToBrandKind(Buf);
        //Если была введена недопустимая строка
        if (producer.KindOfBrand == skNone)
        {
            //Выдаем сообщение, что строка неправильная
            cout << endl << "Invalid! Enter Apacer, A_Data_My_Flash, Kingston, QUMO" << endl << endl;
            //Устанавливаем значение лжи для флага правильности строки вида товара
            IsValidKindOfBrand = false;
        }
        //Цикл повторяется до тех пор, пока введенная строка вида товара не будет правильной
    }while
}
//Функция вывода на консоль полей записи (структуры) producer, имеющей индекс Index
void PrintTovar(Tovar producer, int Index)
{
    char Buf[MAX_NAME_LENGTH];
    //Строковая переменная для строкового представления вида товара
    //Выводим индекс в поле максимальной ширины 5
    cout << setw(5) << Index << " ";
    //Выводим марку, объем, количество на складе. Каждое в своем поле максимальной ширины 13
    cout << setw(13) <<  producer.NameBrand << " " << setw(13) << producer.Memory_max << " "<< setw(13) << producer.Kolichestvo_na_sklade << " ";
    //Функция, добавляющая запись о товаре producer в конец массива товаров BrandArray, 
    //BrandCount - количество записей-элементов в массиве BrandArray
}
void AddTovar(Tovar BrandArray[], int& BrandCount, Tovar producer)
{
    BrandArray[BrandCount++] = producer;
}
//Функция, удаляющая в массиве BrandArray запись-элемент с индексом RemovingIndex,
//BrandCount - количество записей-элементов в массиве BrandArray.
//Функция возвращает истину, если RemovingIndex лежит в допустимом диапазоне от 0 до BrandCount-1,
//иначе функция возвращает ложь
bool RemoveTovar(Tovar BrandArray[], int& BrandCount, int RemovingIndex)
{
    //Если индекс удаляемого элемента задан неправильно, то возвращаем ложь
    if (RemovingIndex < 0 || RemovingIndex >= BrandCount)
    {
        return false;
    }
    //Данный цикл осуществляет сдвиг элементов 
    // BrandArray[RemovingIndex], BrandArray[RemovingIndex], ..., BrandArray[BrandCount - 1]
    //на один элемент влево и тем самым затирает удаляемый элемент
    for (int i = RemovingIndex; i < BrandCount - 1; i++)
    {
        BrandArray[i] = BrandArray[i + 1];
    }
    //Уменьшаем количество элементов-записей на 1
    BrandCount--;
    //Возвращаем истину
    return true;
}
 
//Функция, осуществляющая поиск и вывод на консоль элементов-записей о товаре массива BrandArray,
//фамилия которых совпадает со строкой KeyNameBrand (ключом для поиска).
//BrandCount - количество записей-элементов в массиве BrandArray.
void SearchAndPrintTovar(Tovar BrandArray[], int BrandCount, char KeyNameBrand[])
{
    //Переменная для подсчета количества найденных записей, вначале равна 0
    int FoundRecordsCount = 0;
    cout << endl;   
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемся по все элементам массива SportsmenArray
    for (int i = 0; i < BrandCount; i++)
    {
        //Если название очередного элемента-записи совпадает с KeyNameBrand, то
        if (!strcmp(BrandArray[i].NameBrand, KeyNameBrand))
        {       
            //выводим сам элемент
            PrintTovar(BrandArray[i], i);           
            //выводим разделительную линию
            cout << SEPARATING_LINE << endl;
            //Увеличиваем на 1 количество найденных записей
            FoundRecordsCount++;
        }
    }
    //Выводим количество найденных записей
    cout << FoundRecordsCount << " records were found." << endl;
}
 
//Функция, осуществляющая вывод на консоль всех элеменов-записей о товаре,
//содержащихся в массиве BrandArray размера BrandCount
void PrintAllTovar(Tovar BrandArray[], int BrandCount)
{       
    cout << endl;
    //Выводим заголовок
    cout << SEPARATING_LINE << endl;
    cout << HEADER << endl;
    cout << SEPARATING_LINE << endl;
    //Пробегаемя по всем элементам
    for (int i = 0; i < BrandCount; i++)
    {               
        //Выводим очердной элемент-запись
        PrintTovar(BrandArray[i], i);           
        //Выводим разделительную линию
        cout << SEPARATING_LINE << endl;
    }
}
//Функция, осуществляющая чтение массива BrandArray и его размера BrandCount
//из бинарного файла с именем BrandCount
void LoadFromFile(Tovar BrandArray[], int& BrandCount, const char* FileName )
{
    //Объявлем файловый поток ввода inp, передаем ему имя открываемого файла FileName
    ifstream inp(FileName);
    //Читаем из файла количество элементов в массиве
    inp >>BrandCount;
    //Читаем из файла целиком весь массив
    inp.read((char *)BrandArray, BrandCount * sizeof(BrandArray[0]));
}
void SaveToFile(Tovar BrandArray[], int BrandCount, const char* FileName)
{
    //Объявляем файловый поток вывода out, передаем ему имя открываемого файла FileName
    ofstream out(FileName);
    //Записываем в файл количество товарa
    out << BrandCount;
    //Записываем в файл весь массив целиком
    out.write((char *)BrandArray, BrandCount * sizeof(BrandArray[0]));
}
//Функция, реализующая главное меню программы. В зависимости от выбора пользователя, 
//осуществляет вызов соответствующих функций.
//Параметры:
//BrandArray - массив элементов-записей о товаре;
//BrandCount - количество элементов в массиве.
void MainMenu(Tovar BrandArray[], int& BrandCount)
{
    //Переменная, которая будет хранить номер выбранного пользователем пункта меню
    int UserChoise; 
    //Переменная-запись о спорстмене
    Tovar producer;
    //Переменная для хранения индекса удаляемого элемента
    int RemovingIndex;
    //Массив символов для хранения строки фамилии для поиска
    char KeyNameBrand[MAX_NAME_LENGTH];
    //Цикл с постусловием, осуществляющий вывод меню, ввод выбора пользователя и
    //выполнение соответстующих этому выбору действий до тех пор, пока пользователь
    //не выберет выход из программы
    do 
    {
        //Отображаем меню
        cout << endl;
        cout << "          MENU" << endl;
        cout << "=========================" << endl;
        cout << " [1] Add Brand" << endl;
        cout << " [2] Remove Brand" << endl;
        cout << " [3] Search Brand" << endl;
        cout << " [4] Show all Brands" << endl;
        cout << " [5] Exit" << endl;
        cout << "=========================" << endl;
        cout << "Your choice : ";
        //Вводим выбранный пользователем пункт меню
        cin >> UserChoise;
        //С помощью конструкции выбора анализируем этот выбор
        //и осуществляем соответствующие действия
        switch (UserChoise)
        {
            //Добавление новой записи о спортсмене в массив
        case 1: 
            InputTovar(producer);
            AddTovar(BrandArray, BrandCount, producer);
            break;
            //Удаление записи о спортсмене с указанным индексом из массива
        case 2:
            cout << endl << "Enter index of Brand to delete : ";
            //Вводим индекс удаляемого элемента-записи
            cin >> RemovingIndex;
            //Удаляем элемент. Если результат удаления ложь, то
            if (!RemoveTovar(BrandArray, BrandCount, RemovingIndex))
            {
                //Выдаем ошибку
                cout << endl << "Invalid index! Try again." << endl;
            }
            break;
            //Поиск всех записей о спорстменах, имеющих указанную фамилию
        case 3:
            cout << endl << "Enter product name for search : ";
            //Вводим символ перевода строки
            cin.get();
            //Вводим фамилию для поиска 
            cin.getline(KeyNameBrand, sizeof KeyNameBrand);                         
            //Вызываем функцию поиска и вывода найденных элементов
            SearchAndPrintTovar(BrandArray, BrandCount, KeyNameBrand);
            break;
            //Печать всех записей о спортсменах
        case 4:
            PrintAllTovar(BrandArray, BrandCount);
            break;
            //Выход
        case 5:
            cout << "Bye-bye..." << endl;
            break;
            //Ошибка, пользователь выбрал несуществующий пункт меню
        default:
            cout << endl << "Invalid choice! Try again." << endl;
        }
        //цикл выполняется до тех пор, пока пользователь не выберет выход
    } while (UserChoise != 5);
}
int main()
{
    //Описание массива записей (структур) о спортсменах
    Tovar BrandArray[MAX_BRAND_COUNT];
    //Переменная для хранения количества записей в массиве
    int BrandCount = 0;
 
    //Загружаем все записи из файла
    LoadFromFile(BrandArray, BrandCount, FILE_NAME);
    //Выдаем меню и осуществляем операции
    MainMenu(BrandArray, BrandCount);       
    //Перед выходом из программы сохраняем все записи в файл
    SaveToFile(BrandArray, BrandCount, FILE_NAME);
    return 0;
}
Только скажи, что такое KindOfBrand и допиши сам вайл в 113 строке
vet
 Аватар для vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
03.01.2010, 11:39     ошибка номер...да их много. подскажите что не так. #12
и еще, разве можно так записывать while??????
C++
1
2
  //Цикл повторяется до тех пор, пока введенная строка вида товара не будет правильной
        }while
без условия выхода??
в void InputTovar(Tovar& producer)
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
03.01.2010, 11:40     ошибка номер...да их много. подскажите что не так. #13
vet, прочти внимательно
Цитата Сообщение от M128K145 Посмотреть сообщение
и допиши сам вайл в 113 строке
оренбуржец
5 / 5 / 0
Регистрация: 12.12.2009
Сообщений: 56
03.01.2010, 11:41  [ТС]     ошибка номер...да их много. подскажите что не так. #14
это мой косяк)) там ваил дописан)) я ево просто не выделил почему то))) и он будет работать?
vet
 Аватар для vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
03.01.2010, 11:42     ошибка номер...да их много. подскажите что не так. #15
Да, видел комент, но внимательно не прочитал

Добавлено через 34 секунды
Цитата Сообщение от оренбуржец Посмотреть сообщение
там ваил дописан)) я ево просто не выделил почему то))) и он будет работать?
Так как сейчас нет
оренбуржец
5 / 5 / 0
Регистрация: 12.12.2009
Сообщений: 56
03.01.2010, 11:43  [ТС]     ошибка номер...да их много. подскажите что не так. #16
Цитата Сообщение от vet Посмотреть сообщение
Да, видел комент, но внимательно не прочитал

Добавлено через 34 секунды

Так как сейчас нет
всмысле?
vet
 Аватар для vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
03.01.2010, 11:44     ошибка номер...да их много. подскажите что не так. #17
Цитата Сообщение от vet Посмотреть сообщение
и еще, разве можно так записывать while??????
Код C++1
2 //Цикл повторяется до тех пор, пока введенная строка вида товара не будет правильной
}while
без условия выхода??
В таком виде где просто }while
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
03.01.2010, 11:44     ошибка номер...да их много. подскажите что не так. #18
оренбуржец, какое условие у твоего do while?
оренбуржец
5 / 5 / 0
Регистрация: 12.12.2009
Сообщений: 56
03.01.2010, 11:46  [ТС]     ошибка номер...да их много. подскажите что не так. #19
а понятно) щас допишу и сюда вставлю)

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
                 //Выдаем сообщение, что строка неправильная
                        cout << endl << "Invalid! Enter Apacer, A_Data_My_Flash, Kingston, QUMO" << endl << endl;
                        //Устанавливаем значение лжи для флага правильности строки вида товара
                        IsValidKindOfBrand = false;
                }
                //Цикл повторяется до тех пор, пока введенная строка вида товара не будет правильной
        }while(!IsValidKindOfBrand);
вроде так

Добавлено через 30 секунд
при таком ваиле выводит всего 2 ошибки

Добавлено через 12 секунд
1. Error 7 error C2039: 'KindOfBrand' : is not a member of 'Tovar'

Добавлено через 15 секунд
2. аналогичная.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2010, 11:47     ошибка номер...да их много. подскажите что не так.
Еще ссылки по теме:

Подскажите пожалуйста что не так C++
C++ Подскажите что не так?

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

Или воспользуйтесь поиском по форуму:
vet
 Аватар для vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
03.01.2010, 11:47     ошибка номер...да их много. подскажите что не так. #20
Цитата Сообщение от оренбуржец Посмотреть сообщение
'KindOfBrand'
У тебя просто такого вообще нету там есть
C++
1
enum BrandKind
Yandex
Объявления
03.01.2010, 11:47     ошибка номер...да их много. подскажите что не так.
Ответ Создать тему
Опции темы

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