Как я могу добавить новую запись на указанную позицию в C++
Привет, ребята! Мне нужна твоя помощь!
вот код, который я написал. Это своего рода база данных, где мы можем хранить имя и номер телефона человека. Я попытался выполнить 4 операции(поиск по имени, поиск по номеру, удаление и добавление записи в определенную позицию). Первые три из них работают, но я изо всех сил пытаюсь исправить случай 4, который в данный момент не работает должным образом.
Что я уже пробовал:
#include<iostream> #include<fstream> #include<string> #include<stdlib.h> using namespace std; class Person { long int tel_number; char name[20]; public: void setdata() { cout << endl << "enter the name and the number\n"; cin >> name >> tel_number; } void getdata() { cout << "Name: " << name << "\nNumber: " << tel_number << endl; } long int ret_num() { return tel_number; } char* ret_name() { return name; } }; int main() { Person p; fstream file; int n = 1; char num_by_name[10]; bool isTrue = true; long int name_by_num; file.open("Person.dat", ios::trunc | ios::in | ios::out | ios::ate); while (n == 1) { p.setdata(); file.write((char*)&p, sizeof(p)); cout << "Wanna enter another person?\n1. Yes\n2. No\n"; cin >> n; } file.seekg(0); cout << "\nAll entries:\n"; while (file.read((char *)&p, sizeof(p))) { p.getdata(); } while (isTrue) { cout << "\n\n\n1.Determine the telephone number of the specified person\n"; cout << "2.Determine the name if telephone number is known\n"; cout << "3.Delete a record\n"; cout << "4.Add a record to a specific position\n"; cout << "5.Exit\n"; cin >> n; file.seekg(0); file.clear(); start: switch (n) { case 1: { //some code } case 2: { //some code } case 3: { //some code } case 4: { cout << "enter the position to which u want to add a record\n"; fstream fin("temp.dat"); fin.seekg(0); fin.clear(); while (fin.read((char*)&p, sizeof(p))) { fin.seekg(0, ios::end); int endposition = fin.tellg(); int b = endposition / sizeof(Person); cin >> b; int position = (b - 1)*sizeof(Person); fin.seekg(position); while (fin.read((char*)&p, sizeof(p))) { p.setdata(); fin.write((char*)&p, sizeof(p)); } cout << endl; } cout << "\nAll entries:\n"; while (fin.read((char*)&p, sizeof(p))) { p.getdata(); } break; } case 5: { exit(0); break; } default: { cout << "plz enter proper value\n"; goto start; break; } } } system("pause"); return 0; }