Я только что запустил твой код.Происходит то, что у вас есть одноместные, двухместные номера, номера класса люкс и президентский люкс в одном классе с одним и тем же списком.Это не лучший способ, но это путь.
Это результат, который я получил
Rooms that are available:
Single Room:
0||0||0||0||0||0||0||0||0||101||102||103||104||105|
Double Room:
0||0||0||0||0||201||202||203||204||0||0||-805306368||-805306368||-805306368|
Вы инициализировали список как
r.InitializeValue_single_room(105);
r.InitializeValue_single_room(104);
r.InitializeValue_single_room(103);
r.InitializeValue_single_room(102);
r.InitializeValue_single_room(101);
r.InitializeValue_double_room(204);
r.InitializeValue_double_room(203);
r.InitializeValue_double_room(202);
r.InitializeValue_double_room(201);
r.InitializeValue_deluxe_suite(303);
r.InitializeValue_deluxe_suite(302);
r.InitializeValue_deluxe_suite(301);
r.InitializeValue_president_suite(888);
r.InitializeValue_president_suite(666);
Поскольку список является последним в типе «первый вышел», при выполнении итерации по списку в функции Room_size () ваша функция видит следующее в списке. Первые 2 комнаты - это президентские люксы, в которых установлен только атрибут President_suite. Следующие 3 комнатыявляются делюксами, где установлен только атрибут deluxe_suite, следующие 4 комнаты - двойные, где установлен только атрибут double_room, а последние 5 комнат - где установлен атрибут только одной комнаты
Так, когда он печатает отдельные комнаты,первые 9 узлов не имеют установленного атрибута одной комнаты, поэтому он печатает некоторое значение мусора 5 раз, а затем печатает правильный номер одной комнаты и
Аналогично для двойной комнаты он печатает 5 значений мусора изатем печатает правильные числа, а затем еще 5 значений мусора.
, чтобы исправить эту проблему, вам нужно сделать следующееизменения.
1) В определении класса используйте одну переменную для номера комнаты и другую переменную для типа комнаты.2) Установите константы типа комнаты, используя enum
enum room_types={single,double,delux,president_suite}
3) Когда комната инициализируется через InitializeValue _ **, функция должна установить номер комнаты из аргументов в номер комнаты в узле, но должнаустановить атрибут типа комнаты согласно перечислению.например, в функции InitializeValue_single_room
void reservation::InitializeValue_single_room(int a)
{
node *newNode;
newNode = new node;
newNode -> room_number = a;
newNode -> room_type = single;
newNode -> link = head;
head = newNode;
}
4) При вызове функции room_size () при печати типов комнат проверяйте тип комнаты.Пример:
cout << " Single Room: " << endl;
cout << " ";
while (current != NULL)
{
if(current -> room_type !=single){
current = current -> link;
continue;
}
cout << current -> room_number;
current = current -> link;
if(current != NULL)
cout << "|" << "|";
}
Надеюсь, это поможет.
Есть гораздо лучшие способы реализовать это, но я считаю, что сейчас это лучший способ для вас.