Member 13780562 Ответов: 1

Как я могу добавить новую запись на указанную позицию в 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;
}

1 Ответов

Рейтинг:
2

KarstenK

Если вы хотите это сделать, используйте must move (копировать) все элементы, начинающиеся с индекса вставки. Лучше всего начинать с конца или последнего свободного индекса.

Если вам разрешено, вы должны использовать какой-то класс, который предусмотрен для таких задач и облегчает кодирование. Это и есть класс вектор который имеет вставлять функция, которая может вставить объект по нужному индексу. См. предоставленный пример кода.


Member 13780562

но я еще не касался векторов(