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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2014, 12:17   #1
anshelika
 
Регистрация: 03.01.2014
Сообщений: 6
Печаль сортировка/удаление/редактирование бинарного файла

Люди помогите пожалуйста... В бинарном файле у меня находятся сведения о нуждающихся в пособии. Имеются функции создания\откртия файла, добавление в файл, вывод на экран в виде табл, поиск по ФИО... но сортировка, редактирование и удаление не получаются...
Прошу помощи, помогите написать хотя бы одну из этих функций... очень нужно!!!
Это часть кода...
Код:
struct allowance
{
    char MothFIO[255];// ФИО матери
    int ChCount;// Количество детей
    double AllowSize;//Размер пособия
};
 
 
void CreateFile()//создание\открытие файла
{
    std::cout << "Введите путь к файлу - ";
    std::cin.ignore(1, '\n');// игнорирует символ перевода строки после ввода данных???
    char tmp[_MAX_PATH];
    std::cin.getline(tmp, _MAX_PATH);//чтение строки текста
    std::fstream file;
    file.open(tmp, std::ios::in | std::ios::binary);//открыли файл для чтения
    if (file.fail())//если файл не найден
    {
        std::ofstream fl(tmp, std::ofstream::binary);//открыли файл для записи(создали)
        if (fl.fail())//если файл не найден
        {
            std::cout << "Ошибка создания файла!" << std::endl;
            system("pause");
        }
        else
            strcpy(fname, tmp);
        fl.close();
    }
    else
        strcpy(fname, tmp);
    file.close();
}
 
void AddRec()//добавить запись
{
    if (strcmp(fname, "Не выбран") == 0)
    {
        std::cout << "Файл не выбран!" << std::endl;
        system("pause");
        return;
    }
    allowance al;
    std::fstream file;
    file.open(fname, std::ios::out | std::ios::app | std::ios::binary);
    std::cout << "Введите ФИО матери - ";
    //std::cin.ignore(1, '\n');
    std::cin>>al.MothFIO;
    std::cout << "Введите количество детей - ";
    std::cin >> al.ChCount;
    al.AllowSize = al.ChCount * PSIZE;
    std::cout << "Размер пособия - " << al.AllowSize << std::endl;
    file.write((char*)&al, sizeof(allowance));
    file.close();
    std::cout << "Запись успешно добавлена!" << std::endl;
    system("pause");
}
В различных источниках пишут, что нужно создать массив структур, считывать в него все записи из файла... Вот только я не знаю как это правильно написать
anshelika вне форума Ответить с цитированием
Старый 15.05.2014, 15:32   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

1) Дописываешь в своей структуре метод сравнения для сортировки, например по имени:
Код:
bool operator<(const allowance &other) { return strcmp(MothFIO, other.MothFIO); }
2) Открываешь файл для чтения. Получаешь его размер, делишь на sizeof(allowance) - получаешь количество записей в нем.
3) Объявляешь массив:
Код:
std::vector<allowance> data(количество записей);
4) Читаешь все записи в этот массив.
5)
Код:
std::sort(data.begin(), data.end());
- после этого они отсортируются
6) Записываешь обратно в файл из массива, если нужно.
Son Of Pain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализовать вставку в дерево бинарного поиска нового элемента и удаление его. С++ Terin_Carter Помощь студентам 0 09.04.2014 22:28
Удаление записи и редактирование существующей Cyber Общие вопросы C/C++ 3 16.02.2011 16:15
Типизированные файлы.Создание, удаление, редактирование, сортировка записей типизированного файла.Паскаль Студент Шиза Помощь студентам 6 08.12.2007 13:41