链表 C++中的多个节点



编码时遇到多个问题,我想建立一个带有链表的房间预订系统,

我希望用户可以在菜单中看到房间号,当房间号被占用时,房间号将从菜单中删除。

无论如何可以简化代码,我的代码很乱,请帮助谢谢

1.首先我用

struct nodes{
int single_room[5] = {101,102,103,104,105};
int double_room[4] = {201,202,203,204,205};
};

但是当我想将链表与用户输入进行比较时,它出现了错误

void reservation::UpdateReservation(){
int x;
node *current;
current = head;
bool found;
found = false;
cout << "Please enter your room number to update your reservation: 
";
cin >> x;
while ((current != NULL) && (!found))
{
if (current -> single_room == x)
found = true;
else
current = current -> link;
}
while(found)
{
cout <<"The number is exist";
cout << endl;
return found;
cout << value;
}
cout << "The number is not found";
cout << endl;  
}
}

它出现了一个错误 ISO C++禁止在指针和整数之间进行比较。 在我放了一个 for 循环后,对于 single_room[i],但当前的 -> single_room[i] 是空的。

我堆积了很多问题,发现我无法初始化链表,所以我在笔记中一个接一个地初始化值

#include <iostream>
#include <fstream>
#include <windows.h>
#include <string>
using namespace std;
class reservation{
private:
struct node
{
int single_room;
int double_room;
int deluxe_suite;
int president_suite;
int room_number;
string name;
int phone_number;
int date;
int number_of_nights;
int number_of_pax;
int time;
node *link;
}*head;
public:
reservation();
void InitializeValue_single_room(int a);
void InitializeValue_double_room(int b);
void InitializeValue_deluxe_suite(int c);
void InitializeValue_president_suite(int d);
void menu();
void Room_size();
void InsertReservation();
void UpdateReservation();
//      void DeleteReservation();
void DisplayReservation();
~reservation();
};
reservation::reservation()
{
head = NULL;
}
reservation::~reservation()
{
node *q;
if (head == NULL)
{
return;
}
while (head != NULL)
{
q = head->link;
delete head;
head = q;
}
}
void reservation::InitializeValue_single_room(int a)
{
node *newNode;
newNode = new node;
newNode -> single_room = a;
newNode -> link = head;
head = newNode;
}
void reservation::InitializeValue_double_room(int b)
{
node *newNode;
newNode = new node;
newNode -> double_room = b;
newNode -> link = head;
head = newNode;
}
void reservation::InitializeValue_deluxe_suite(int c)
{
node *newNode;
newNode = new node;
newNode -> deluxe_suite= c;
newNode -> link = head;
head = newNode;
}
void reservation::InitializeValue_president_suite(int d)
{
node *newNode;
newNode = new node;
newNode -> president_suite = d;
newNode -> link = head;
head = newNode;
}
void reservation::menu()
{
cout <<"  1. Book a reservation" << endl;
cout <<"  2. Update a reservation" << endl;
cout <<"  3. Delete a resevation" << endl;
cout <<"  4. Display the reservation" << endl;
cout <<"  5. Help" << endl;
cout <<"  6. Exit" << endl << endl;
cout << "Please enter here: ";
}

但是我想打印出 Room_size(( 中的值,它会打印出这个 抱歉没有足够的声誉上传图片,我只是在这里描述,它会出来|01704272||1704272||1704272||1704272|| 1704272||1704272||1704272||1704272||1728736||101||102||103||104||105| 它会打印出我不想要的数字,我只想查看 101,102,103,104,105

void reservation::Room_size()
{
node guest;
node *current, *current1;
current = head;
current1 = head;
cout << "  Single Room: " << endl;
cout << "  ";
while (current != NULL)
{
cout << current -> single_room;
current = current -> link;
if(current != NULL)
cout << "|" << "|";
}
cout << "|" << endl;
cout << "   Double Room: " << endl;
cout << "   ";
while (current1 != NULL)
{
cout << current1 -> double_room;
current1 = current1 -> link;
if(current1 != NULL)
cout << "|" << "|";
}
cout << "|" << endl;
}
void reservation::InsertReservation()
{
node guest;
node *current;
current = head;
bool found;
found = false;
char b;
int c;
bool d = true;
bool f = false;
do{
ofstream file;
file.open("Guest info.txt", ios::out|ios::app);
if(!file)
{
cout << "ERROR: File can't open";
system("pause");
}
cout<<"Please enter your Name: ";
getline(cin,guest.name);
cout << endl;
while(!f){
cout << "Please enter your phone number: +";
cin >> guest.phone_number;
if(guest.phone_number < 10)//|| (cin >> guest.phone_number) < 11)
{
cout << "Wrong input! ";
f = false;
}
else{
f = true;
cin.ignore();
}
cout << endl;       
}
cout << "Please enter the date you want to book: (20/04): ";
cin >> guest.date;
cout << endl;
cout << "Please enter the number of nights you want to stay: ";
cin >> guest.number_of_nights ;
cout << endl;
cout << "Please enter the time you want to check in (24:00 format): ";
cin >> guest.time;
cout << endl;
cout << "Please enter the number of people you have: ";
cin >> guest.number_of_pax;

while(d){
cout << "1.Single Roomn2.Double Room n3.Luxury Suite n4.President Suitenn";
cout << "Please select the room you want: ";
cin >> c;
if(c==1)
{
cout << "   Rooms that are available: " << endl;
cout << "   Single rooms: " << endl;
cout << "   |" << guest.single_room << "|";
cout << endl << endl;
cout << "Please enter the room number you want to book: ";
cin >> guest.room_number;
d = false;
}else if(c==2)
{
cout << "   Rooms that are available: " << endl;
cout << "   Double rooms: " << endl;
cout << "   |" << guest.double_room << "|";
cout << endl << endl;
cout << "Please enter the room number you want to book: ";
cin >> guest.room_number;
d = false;
}else if(c==3)
{
cout << "   Rooms that are available: " << endl;
cout << "   Luxury Suite: " << endl;
cout << "   |" << guest.deluxe_suite << "|";
cout << endl << endl;
cout << "Please enter the room number you want to book: ";
cin >> guest.room_number;
d = false;
}else if (c==4)
{
cout << "   Rooms that are available: " << endl;
cout << "   President Suite" << endl;
cout << "   |" << guest.president_suite << "|";
cout << endl << endl;
cout << "Please enter the room number you want to book: ";
cin >> guest.room_number;
d = false;
}else
{
cout << "Wrong input. Please try again";
d = true;
}
}
int e;
cout << "Press 1 to Save or 2 to cancel:";
cout << endl;
cin >> e;
if(e==1)
{
cout << endl;
file << "Guests info" << endl;
cout << endl;
file << "=================================================="<< endl;
file << endl;
file << "Room Number: " << guest.room_number;
file << endl;
file << "Name: " << guest.name << endl;
file << endl;
file << "Phone Number: " << guest.phone_number << endl;
file << endl;
file << "Date: " << guest.date << endl;
file << endl;
file << "Number of nights: " << guest.number_of_nights << endl;
file << endl;
file << "Time: " << guest.time << endl;
file << endl;
file << "Number of pax: " << guest.number_of_pax << endl;
file << endl;
file << endl;
file << "====================================================" << endl;
file.close();
cout << "Record Saved " << endl;
cout << "======================================================" << endl;
}else
{
cout << "Record was not saved " << endl;
cout << "====================================================" << endl;
cout << endl;
}
/*        while ((current != NULL) && (!found))
{
if (current -> single_room == (guest.room_number))
found = true;
else
current = current -> link;
while(found)
{
cout << "ROOM NUMBER FOUND";
cout << endl;
}   
cout << "NO";
cout << endl;
}*/

cout << "Enter (Y/y) to input another data or enter (N/n) to Exit";
cin >> b;
cout << "======================================================" << 
endl; 
cout << endl;
}while(b == 'y' || b == 'Y');
if(b =='y'|| b=='Y')
{
cin.ignore();
}
}
void reservation::DisplayReservation()
{
node *current;
current = head;
cout << " |";
while (current != NULL)//) && current-> deluxe_suite <400))
{
cout << current -> deluxe_suite;
current = current -> link;
if(current != NULL)
cout << "| "<< "|";
}
cout << "|" << endl;
}
int main()
{
reservation r;
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);
cout <<"================================================" << endl << endl;
cout <<" Welcome to the Hotel Reservation Application" << endl << endl;
cout <<"================================================" << endl;
int a;
cout << "Please wait while the system is analyzing hte datan";
cout << endl;
cout<<"===================================" << endl;
cout <<"            Main Menu   " << endl << endl;
cout << "   Rooms that are available: " << endl;
r.Room_size();
cout << endl << endl;
cout << "===================================" << endl;
r.menu();
cin >> a;
if(a == 1)
{
system("CLS");
cout << "===================================" << endl;
cout << "   BOOK A RESERVATION" << endl;
cout << "===================================" << endl;
cin.ignore();
r.InsertReservation();
}else if(a == 2)
{
system("CLS");
cout << "===================================" << endl;
cout << "   UPDATE YOUR RESERVATION" << endl;
cout << "===================================" << endl;
cin.ignore();
//        r.UpdateReservation();
}else if(a == 4)
{
system("CLS");
cout <<"===================================" << endl;
cout << "   VIEW ALL RESERVATION" << endl;
cout << "===================================" << endl;
cin.ignore();
r.DisplayReservation();
}
return 0;
}

我刚刚运行了你的代码。 正在发生的事情是,您在同一类中拥有单人间,双人间,豪华间和总统套房,具有相同的列表。这不是最好的方法,但这是一条要走的路。

这是我得到的结果

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 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 << "|" << "|";
}

我希望这有所帮助。

有更好的方法来实现这一点,但我相信这是目前最适合您的方法。

相关内容

  • 没有找到相关文章

最新更新