
Сообщение от
mster-doc
Вот написал функцию удаления, правда она пока что удаляет все записи.
Тут без вектора не обойтись. Создаётся вектор структур и временная структура. Вводится номер записи, которую нужно удалить. Открывается файл для чтения. Читаются, по очереди, структуры из файла во временную структуру, потом структура помещается в вектор. Когда считывается нужная для удаления, она в вектор не помещается, но запоминается её номер. Дальше нужно менять номера структур, которые будут помещаться в вектор. Следующей считанной структуре, перед помещением в вектор, присваивается номер уделённой, он увеличивается и т.д. Потом открывается файл для чтения с тем же именем, и туда записывается вектор структур.
Добавлено через 2 минуты

Сообщение от
mster-doc
Не, ну просто тут как выяснилось если опять решить добавлять аккаунты, их порядковый номер опять начинается с 1
Если использовать второй код из 37 поста, то у всех структур будут неповторяющиеся номера, идущие подряд.
Добавлено через 8 минут
Функцию подсчёта нужно так переписать (на случай, что файла ещё нет, а выбрано добавление записи):
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| int c_r()
{
ifstream fails("credit.dat", ios::binary);
if (fails.is_open())
{
fails.seekg(0, ios::end);
int size = fails.tellg(); // size - размер файла в байтах
fails.close();
int n = size / sizeof(clientData); // количество структур в файле
return n;
}
return 0;
} |
|
Добавлено через 8 минут
И везде, где есть открытие файла для чтения, сделать обработку ошибки открытия. Например:
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
| void find()
{
clientData client;
fstream fails;
fails.open("credit.dat", ios::in | ios::binary);
if (!fails.is_open()) cout << "The file does not exist!" << endl;
else
{
cout << "\n Enter account number: ";
int t;
cin >> t;
cout << setw(10) << "Account" << setw(10) << "Surname" << setw(10) << "Name" << setw(10) << "Ballance" << endl;
while(fails)
{
fails.read((char*)&client, sizeof(clientData));
if (client.accNum ==t)
{
cout << setw(10) << client.accNum << setw(10) << client.Sur << setw(10) << client.Name << setw(10) << client.balance << endl;
break;
}
}
fails.close();
}
} |
|
Добавлено через 6 минут
И обработку ошибки ввода неверного номера аккаунта... И т.д., и т.п. ...