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

Сортировка\редактирование\удаление бинарного файла - C++

Восстановить пароль Регистрация
 
anshelika
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 54
14.05.2014, 23:05     Сортировка\редактирование\удаление бинарного файла #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
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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 23:05     Сортировка\редактирование\удаление бинарного файла
Посмотрите здесь:

C++ Редактирование бинарного файла
Редактирование бинарного файла C++
C++ Удаление записи из бинарного файла
Удаление записи из бинарного файла C++
Ошибка при удаление из бинарного файла C++
C++ Удаление записей из бинарного файла
C++ Редактирование записи бинарного файла
C++ Удаление бинарного файла

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4278 / 3709 / 1246
Регистрация: 14.04.2014
Сообщений: 14,503
14.05.2014, 23:09     Сортировка\редактирование\удаление бинарного файла #2
Тебе нужно создать массив структур allowance, считывать в него все записи и потом уже сортировать и прочее делать.
anshelika
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 54
15.05.2014, 11:13  [ТС]     Сортировка\редактирование\удаление бинарного файла #3
Это по принципу:
C++
1
2
3
4
5
6
 if (strcmp(fname, "Не выбран") == 0)
    {
        std::cout << "Файл не выбран!" << std::endl;
        system("pause");
        return;
    }
Добавлено через 11 минут
ой..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Del()
{
  if (strcmp(fname, "Не выбран") == 0)
    {
        std::cout << "Файл не выбран!" << std::endl;
        system("pause");
        return;
    }
  allowance al[100];
  int i, n=0;
  std::fstream file;
    file.open(fname, std::ios::out  | std::ios::binary);
  for(i=0; !file.eof(); i++)
  {
     file.read((char*)&al[i], sizeof(allowance));
     n++;
  }
  file.close();
  //далее редактирование/удаление/сортировка
 }
я правильно понимаю?

Добавлено через 1 час 40 минут
Функция редактирования такая... правда в конце в файл записывается мусор. в чем может быть причина?
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
void EditRec()//редактировать запись
{
    if (strcmp(fname, "Не выбран") == 0)
    {
        std::cout << "Файл не выбран!" << std::endl;
        system("pause");
        return;
    }
    allowance alnew;
    int i;
    std::cout << "Введите ФИО матери на редактирование - ";
    //std::cin.ignore(1,'\n');
    std::cin>>alnew.MothFIO;
    std::cout << "Введите новое количество детей - ";
    std::cin >> alnew.ChCount;
    alnew.AllowSize = alnew.ChCount * PSIZE;
    allowance tmp[100];
    std::fstream file;
    file.open(fname, std::ios::in | std::ifstream::binary);
    for(i=0; !file.eof(); i++)
    {
        file.read((char*)&tmp[i], sizeof(allowance));
        if (strcmp(tmp[i].MothFIO, alnew.MothFIO) == 0)
            tmp[i] = alnew;
    }
    file.close();
    std::fstream file2;
    file2.open(fname, std::ios::out | std::ifstream::binary);
    for (int j = 0; j < i; j++)
        file2.write((char*)&tmp[j], sizeof(alnew));
    file2.close();
    std::cout << "Запись успешно изменена!" << std::endl;
}
Yandex
Объявления
15.05.2014, 11:13     Сортировка\редактирование\удаление бинарного файла
Ответ Создать тему
Опции темы

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