Помогите переделать на ofstream и ifstream. Или почему не считывает и не записывает в этом коде?
В магазине составлен список людей, которым выдана карта постоянного покупателя. Каждая запись этого списка содержит номер карточки, ФИО, предоставляемую скидку. Вывести информацию о покупателях, имеющих 10 %-ную скидку в магазине.
Код:
FILE *fl;
struct sp {
char num[6];
char fio[30];
double sk;
} *mag, two;
char name[20], x[6];
int kol = 0;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
while (1)
{
switch (menu())
{
case 1: nnf(); break;
case 2: newf(); break;
case 3: spisok(); break;
case 4: opf(); break;
case 5: resc(); break;
case 6: resf(); break;
case 7: resc2(); break;
case 8: nkar(); break;
case 9: resc3(); break;
case 10: if (mag != NULL) { delete[]mag; } return 0;
default: "Выберите правильно!";
}
puts("Press any key to continue");
getch();
system("cls");
}
}
int menu() // Меню
{
cout << "Выберите:" << endl;
cout << "1.Ввести имя файла" << endl;
cout << "2.Создать новый файл" << endl;
cout << "3.Ввести данные" << endl;
cout << "4.Прочитать информацию из файла" << endl;
cout << "5.Вывести информацию на экран" << endl;
cout << "6.Записать информацию в файл" << endl;
cout << "7.Вывести отсортированный массив структур" << endl;
cout << "8.Ввести номер карточки покупателя" << endl;
cout << "9.Вывести фамилию покупателя с заданным номером карточки" << endl;
cout << "10.Освобождение памяти. Выход" << endl;
int i;
cin >> i;
return i;
}
void nnf() // Ввести имя файла
{
cout << "Введите имя файла" << endl;
cin >> name;
}
void newf() // Создать новый файл
{
if ((fl = fopen(name, "wb")) == NULL)
{
cout << "Ошибка при создании файла" << endl; exit(1);
}
cout << "OK" << endl;
fclose(fl);
}
void spisok() // Ввести список на экран и в файл
{
if ((fl = fopen(name, "rb+")) == NULL)
{
cout << "Ошибка при создании файла" << endl;
}
cout << "Введите кол-во покупателей:" << " ";
cin >> kol;
mag = new sp[kol];
for (int i = 0; i<kol; i++)
{
cout << "Введите номер карточки покупателя:"; cin >> mag[i].num;
cout << "Введите ФИО покупателя:"; cin >> mag[i].fio;
cout << "Введите размер скидки, предоставляемой покупателю:"; cin >> mag[i].sk;
fwrite(&mag[i], sizeof(sp), 1, fl);
}
fclose(fl);
}
void opf() // прочитать данные из файла
{
cout << "Введите имя файла" << endl;
cin >> name;
if ((fl = fopen(name, "r+")) == NULL)
{
cout << "Ошибка при открытии файла" << endl;
}
kol = 0;
while (1)
{
int nwrt = fread(&two, sizeof(sp), 1, fl);
if (nwrt != 1) break;
mag[kol] = two;
cout << "№ " << mag[kol].num << setw(20) << mag[kol].fio << setw(15) << "Скидка-" << mag[kol].sk << "%" << endl;
kol++;
}
fclose(fl);
}
void resc() // Вывести результат на экран
{
cout << "Информация о покупателях, имеющих 10%-ную скидку:" << endl;
for (int i = 0; i<kol; i++)
if (mag[i].sk == 10)
cout << "№ " << mag[i].num << setw(20) << mag[i].fio << endl;
}
void resf() // Вывести результат в файл
{
char namet[30];
FILE *ft;
cout << "Введите имя файла" << endl;
cin >> namet;
if ((ft = fopen(namet, "w")) == NULL)
{
cout << "Ошибка при создании файла" << endl; exit(1);
}
for (int i = 0; i<kol; i++)
if (mag[i].sk == 10)
{
fprintf(ft, "№% d %s\n", mag[i].num, mag[i].fio);
}
fclose(ft);
}
void s_puz(sp *st, int n) // Сорировка пузырьком по номеру карточки
{
sp tmp;
for (int i = 0; i<n - 1; i++)
for (int j = i; j >= 0; j--)
if (strcmp(st[j].num, st[j + 1].num) == 1)
{
tmp = st[j];
st[j] = st[j + 1];
st[j + 1] = tmp;
}
}
}