Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2015, 17:49   #1
ITZver
 
Регистрация: 02.03.2011
Сообщений: 3
По умолчанию Вывести информацию о покупателях, имеющих 10 %-ную скидку в магазине

Помогите переделать на 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;
            }
}
}
Вложения
Тип файла: zip 1.zip (2.4 Кб, 11 просмотров)
ITZver вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести информацию из двух таблиц записать в третью Владимир1989 SQL, базы данных 19 09.02.2013 09:26
как вывести информацию только об 1 объекте kachan Общие вопросы по Java, Java SE, Kotlin 4 28.01.2013 20:20
Вывести в Memo информацию о установленном ПО (на Delphi) hysek Помощь студентам 12 02.05.2012 15:11
Вывести на экран информацию о всех диск windetta35555 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 31.05.2011 20:02
Вывести информацию из типизированного файла в combobox... tacer Помощь студентам 1 04.12.2007 11:46