Удаление и добавление объектов в динамический массив через функцию?

Есть массив класса Train и поля пункт назначения, время отправления, количество пассажиров и стоимость билета. В одном из пунктов меню дается право ввести пункт назначения, чтобы удалить один из объектов, который удовлетворяет условию(функция Delete) и в другом из пунктов надо добавить поезд по положению в массиве, которое вводится с клавиатуры(функция Аdd). Помогите пожалуйста, в чем проблема, почему эти функции работают некорректно, та которая должа удалять удалять только первое поле первого элемента, вторая вставляет введенный поезд в 0 позицию, а в ту которую необходимо добавляет конструктор...

Собственно сам код:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;

class Train
{
	private:
		string dest; // пункт назначения
		string dep_time; // время отправления
		int pas_number; // количество пассажиров
		int price; // стоимость билета

	public:
		Train(string des, string dep, int numb, int pr )
		{
			dest = des;
			dep_time = dep;
			pas_number = numb;
			price = pr;
		}

		Train()
		{
			dest="---";
			dep_time="---";
			pas_number=0;
			price=0;
		}

		~Train()
		{
			cout << "Уничтожение объекта класса Train" << endl;
		}


		int GetPas()
		{
			return pas_number;
		}
		void SetPas()
		{
			cout << "Количество пассажиров:";
			cin >> pas_number;
		}
		string GetDest()
		{
			return dest;
		}
		void SetDest()
		{
			cout << "Пункт назначения::";
			cin >> dest;
		}
		void SetPrice()
		{
			cout << "Цена билета(в леях):";
			cin >> price;
		}

		int GetPrice()
		{
			return price;
		}
		string GetTime()
		{
			return dep_time;
		}
		void SetTime()
		{
			cout << "Время отправления";
			cin >> dep_time;
		}

		void GetTrain()
		{
			cout << "\nПункт назначения:" << dest
			     << "\nВремя отправления:" << dep_time
			     << "\nКоличество пассажиров:" << pas_number
			     << "\nСтоимость билета:" << price << "лей" << endl;
		}
		void SetTrain()
		{
			SetDest();
			SetTime();
			SetPas();
			SetPrice();
		}

};

void Input(Train train[], int numb_trains)
{
	for( int i=0; i < numb_trains; i++ )
		train[i].SetTrain();
}
void Output(Train train[], int numb_trains)
{
	for( int i=0; i < numb_trains; i++ )
		train[i].GetTrain();
}

void Sort(Train train[],int numb_trains)
{
    Train *temp = new Train;

    for(int i = 0; i < numb_trains ; i++)
        for (int j = i + 1; j < numb_trains; j++)
            if (train[i].GetPas() < train[j].GetPas() )
            {
                *temp = train[i];
                train[i] = train[j];
                train[j] = *temp;
            }
}
void Delete(Train *train, int numb_trains)
{
	string y;
	Train *newarray = new Train[numb_trains - 1];
	cout << "\nВведите время отправления для удаления поезда:"<< endl; cin >> y;

	for(int i=0,j=0 ; i < numb_trains; i++)
	{
		if( train[i].GetDest() == y )
		{
			j++;
			continue;
		}
		else
			newarray[i - j] = train[i];
	}
	--numb_trains;
	delete[] train;
	train = newarray;

}
void Add(Train*& train, int numb_trains)
{
	int i,k,j;
	do
	{
	cout << "Введите позицию с в которую хотите вставить новый поезд:"; cin >> k;
	}while( k < 0 || k > numb_trains );

	Train* newarray = new Train[numb_trains + 1];
	++numb_trains;

	for ( i=0, j=0; i < numb_trains ; i++)
	{
		if( i == k )
		{
			newarray[j].SetTrain();
			j++;
			continue;
		}
		newarray[i] = train[i - j];
	}

	delete []train;
	train = newarray;
}
void ComparePrice(Train *train, int numb_trains)
{
	int x;
	cout << "Введите цену билета:"; cin >> x;

	for( int i=0; i < numb_trains; i++)
	{
		if( train[i].GetPrice() > x )
		{
			cout << "\nПоезд " << i+1 << " имеет цену билета выше " << x << " лей" << endl;
			train[i].GetTrain();
		}
	}
}
int main()
{
	setlocale(LC_ALL,"ru");

int choice,numb_trains=6;
string y;
	Train *train = new Train[numb_trains];
	train[0]={"Chisinau","16:00",24,60};
	train[1]={"Cagul","16:50",56,50};
	train[2]={"Tighina","13:00",20,90};
	train[3]={"Tiraspol","17:00",10,100};
	train[4]={"Edinet","18:00",75,70};
	train[5]={"Dubasari","17:40",45,80};
    do{
	do
	{
	cout << "Главное меню:" << endl;
	cout << "1.Ввод информации о каждом поезде;" << endl;
	cout << "2.Вывод информации о каждом поезде;" << endl;
	cout << "3.Cортировка поездов в порядке убывания по количество пассажиров;" << endl;
	cout << "4.Вывод на экран поездов, для которых известно, что стоимость билета выше x" << endl;
	cout << "5.Добавление нового поезда" << endl;
	cout << "6.Удаление поезда, для которого известен пункт назначения равен y" << endl;
	cout << "7.Выход" << endl;
	cout << "Ваш выбор:" << endl;
	cin >> choice;

	} while( choice < 1 || choice > 7  );

	switch(choice)
	{
		case 1: Input(train,numb_trains); break;
		case 2: Output(train,numb_trains); break;
		case 3: Sort(train,numb_trains); break;
		case 4: ComparePrice(train,numb_trains); break;
		case 5: Add(train,numb_trains); break;
		case 6: Delete(train,numb_trains); break;
		case 7: cout << "Спасибо! Удачи!" << endl; break;
		default: cout << "Ошибка!" << endl;
	}
    }while(choice != 7);
return 0;
}
  • Вопрос задан
  • 275 просмотров
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
void Add(Train*& train, int numb_trains)

numb_trains должен быть ссылкой, а то ты его меняешь в функции, а снаружи всем пофиг.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы