Home
Aptitude
Categories


Home » C++ programs

C++ program of Airline Seat Reservation Problem



In this article, we are going to solve a problem based on airline sit reservation with C++ implantation.
Submitted by Radib Kar, on November 30, 2018

Problem statement: Write a program to assign passengers seats in an airplane. Assume a small airplane with seat numbering as follows:

    1 A B C D
    2 A B C D
    3 A B C D
    4 A B C D
    5 A B C D
    6 A B C D
    7 A B C D

The program should display the seat pattern, with an ‘X’ marking the seats already assigned. After displaying the seats available, the program prompts the seat desired, the user types in a seat, and then the display of available seats is updated. This continues until all seats are filled or until the user signals that the program should end. If the user types in a seat that is already assigned, the program should say that the seat is occupied and ask for another choice.

Input Example:

For example, after seats 1A, 2B, and 4C are taken, the display should look like:

    1 X B C D
    2 A X C D
    3 A B C D
    4 A B X D
    5 A B C D
    6 A B C D
    7 A B C D

Solution

The whole problem can be implemented with help of 4 major functions:

  1. getData()
  2. display()
  3. check()
  4. update()

The entire problem is discussed dividing into parts focusing on functional modularity.

1. Initialize a 2-D array to represent the seat matrix

A 2-D character array is used to represent the seat matrix where the first column have the row number of each seat & the rest of the columns have four seat A,B,C,D respectively. Thus it’s a 7X5 2-D array to represent the airplane seat matrix which looks like following:

airline reseravtion system in C++



2. Take user input for seat no

User is requested to input the desired seat no by giving corresponding no of seat. Like a valid seat no is 1A, 3C, 7D and so on, whereas, an invalid seat request can be 6F, 0B so on.

The input is taken by our function getData() which takes user input & returns the string.

3. Check the seat no request (check() )

Our major function for this problem is to check the validity of the seat request & update seat matrix status as per request.

  • Firstly it checks whether the user input is in the range 1A to 7D or not. If user input is out of range a prompt out "invalid request" & continue for further request.
  • Check whether user input is 'N' or not. If it's 'N' then user wants to end the program. Terminate.
  • if seat request is valid but already occupied
    Then prompt a message stating “It’s already occupied”
    This checking can be done by founding the 2-D array row & column index for the corresponding seat.
    Let, row_index=r&column_index=c
    If(seat_matrix[row_index][column_index]==’X’)

    Seat is occupied.
  • ELSE seat request is a valid one and not occupied still
    Update()

4. Update the valid entry

If the request is to update the valid seat we simple change its value to 'X'. It can be done by finding row & column index and updating the value of seat_matrix at that location to 'X'.

5. Special function to check whether all seats are occupied

The program also need to be terminated when all seats are occupied. Thus every time we keep a checking whether all the entry of seat_matrix is 'X' or not.




C++ implementation for Airline Seat Reservation Problem

#include <bits/stdc++.h>
using namespace std;

// to check whether all sits are occupied or not
int allOccupied(char arr[7][5]){ 
	int count=0;
	for(int i=0;i<7;i++){
		for(int j=1;j<5;j++)
		if(arr[i][j]=='X')
			count++;
	}

	if(count==28)
		return 1;
	return 0;
}

//to display the sits
void display(char arr[7][5]){ 
	for(int i=0;i<7;i++){
		for(int j=0;j<5;j++){
			cout<<arr[i][j]<<" ";
		}
		cout<<endl;
	}

	return;
}

//take user data
string getData(){ 
	string p;
	cout<<"enter valid seat no to check(like 1B) or N to end: ";
	cin>>p;
	return p;
}

//update sit status
void update(char arr[7][5],int row,int col){ 
	cout<<"congrats, your seat is valid. Reserved for you\n";
	cout<<"updated seat status..........\n";
	arr[row][col]='X';
}

//checking whether user request for 
//his sit no can be processed or not
int check(char arr[7][5],string s){ 
//if user input is not in the range 1A to 7D
if(s[0]>'7' || s[0]<'1' || s[1]>'D' || s[1]<'A'){ 
cout<<"invalid seat no\n"; //invalid sit no
return 0;
}

int row=-1,col=-1;
//find the row no of the user sit
for(int i=0;i<7;i++){
if(arr[i][0]==s[0])
row=i;
}
 //find the column no of user sit
for(int j=0;j<5;j++){
if(arr[row][j]==s[1])
col=j;
}

//check whether sit is already occupied or not.
if(col==-1){
cout<<"Seat is already occupied\n";
return 0;
}
else{
//if it's a valid sit & not occupied, 
//process the requested & update the sit as occupied 
update(arr,row,col);   
}
return 1;
} 


void airline(char arr[7][5]){
	// user can stop process by pressing 'N'
	cout<<"enter N if you are done!\n"; 
	string s;
	// continue if not interrepted by user or 
	//there is valid sit in unoccupied state
	while(true){ 
		s=getData(); //get user input
		//if user input is to stop the process
		if(s[0]=='N') 
			break; // break

		//process the request & check according to
		if(check(arr,s)) 
			display(arr);

		if(allOccupied(arr)){ //if all sits are occupied
			cout<<"sorry, no more seats left!!!!!!!!!!1..."<<endl;
			break; //break
		}
	}
	cout<<"Thanks, that's all"<<endl; //end of program
}

int main()
{
	//2-D array for storing sit number
	char arr[7][5]; 
	for(int i=0;i<7;i++){
		//forst column is row number
		arr[i][0]=i+1+'0';
		for(int j=1;j<5;j++){
			//to represent sit number A,B,C,D respectively
			arr[i][j]='A'+j-1; 
		}
	}
	
	cout<<"initial seat arrangements........\n";
	display(arr);

	airline(arr); //airline function

	return 0;
}



Output

initial seat arrangements........
1 A B C D
2 A B C D
3 A B C D
4 A B C D
5 A B C D
6 A B C D
7 A B C D
enter N if you are done!
enter valid seat no to check(like 1B) or N to end: 2B 
congrats, your seat is valid. Reserved for you  
updated seat status.......... 
1 A B C D
2 A X C D
3 A B C D
4 A B C D
5 A B C D
6 A B C D
7 A B C D
enter valid seat no to check(like 1B) or N to end: 3C 
congrats, your seat is valid. Reserved for you  
updated seat status.......... 
1 A B C D
2 A X C D
3 A B X D
4 A B C D
5 A B C D
6 A B C D
7 A B C D
enter valid seat no to check(like 1B) or N to end: 2B 
Seat is already occupied
enter valid seat no to check(like 1B) or N to end: 7E 
invalid seat no
enter valid seat no to check(like 1B) or N to end: 7C 
congrats, your seat is valid. Reserved for you  
updated seat status.......... 
1 A B C D
2 A X C D
3 A B X D
4 A B C D
5 A B C D
6 A B C D
7 A B X D
enter valid seat no to check(like 1B) or N to end: N  
Thanks, that's all  





Comments and Discussions

Ad: Are you a blogger? Join our Blogging forum.





Languages: » C » C++ » C++ STL » Java » Data Structure » C#.Net » Android » Kotlin » SQL
Web Technologies: » PHP » Python » JavaScript » CSS » Ajax » Node.js » Web programming/HTML
Solved programs: » C » C++ » DS » Java » C#
Aptitude que. & ans.: » C » C++ » Java » DBMS
Interview que. & ans.: » C » Embedded C » Java » SEO » HR
CS Subjects: » CS Basics » O.S. » Networks » DBMS » Embedded Systems » Cloud Computing » Machine learning » CS Organizations » Linux » DOS
More: » Articles » Puzzles » News/Updates

© https://www.includehelp.com some rights reserved.