Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Option 1 (Display Seat Chart): The program calls a function that displays the se

ID: 3822825 • Letter: O

Question

Option 1 (Display Seat Chart): The program calls a function that displays the seat chart from the array seatChart using the format shown in page 1.

Option 2 (Reserve Seat): The program calls a function that prompts users for the seat desired as a string (e.g., 3A, 7D, etc.) and then determines the row number and column number of the array element that needs to be accessed. If the seat is available, it reserves it by assigning ‘X’ to the seat and displays a message stating that the seat was reserved. Otherwise it displays a message stating that the seat is not available.

Option 3 (Cancel Reservation): The program calls a function that prompts users for the seat to be canceled as a string (e.g., 3A, 7D, etc.) and then determines the row number and column number of the array element that needs to be accessed. If the seat is available, the program displays an error message stating that the seat to be canceled has not been initially reserved. Otherwise it makes the seat available and displays a message stating that the seat reservation has been cancelled.

PLEASE USE C++ LANGUAGE!!!!!!!!!!!!

create each option as a sperate function and call them in a switch statement in the main

- the file being used is name chartIn.txt and the information stored in it is:

1         A X C D

2         A B C D

3         A B C D

4         A B C D

5         A X C D

6         A B C D

7         A B C D

8         A B C D

9         A B X D

10     A X X D

thank you

Explanation / Answer

main.cpp

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <stdlib.h>
//#include <windows.h> // this is used for the sleep code in the quit function

using namespace std;

void displayMenu(); // this functions displays the menu of options
void readChart(); // this function's job is to read the file into the arrays
void displayChart(); // this function's job is to display the chart that is created of the arrays
void reserveSeat(); // this function's job is to reserve a seat entered by the user
void cancelReservation(); // this function's job is to cancel a seat entered by the user
void saveChartToFile(); // this functions job is to save the chart into a file
void showStatistics(); // this function's job is to show statistics
void help(); // this function's job is to display a detailed message on how to use the program
void quit(); // this function's job is to display a thank you message and terminates
void displayInvalid(); // this function's job is to display the invalid messegae in case if other numbers than 1-7 entered
void extractSeatNum(int&, int&, string&); // this function's job is to extract the seat number

int choice; // choice number

const int ROWS = 99; // maximum number of rows in the airplan
const int COLS = 8; // maximum number of columns in the airplan
char chart[ROWS][COLS]; //this array is for letters only
int chart2[ROWS]; // this array for the number of rows

int numOfRows; // number of rows in the airplan
int numOfCols; // number of columns in the airplan

ifstream myInputFile; // name of the veriable of the file we import
ofstream myOutputFile; // name of the veriable of the file we export

int main()
{
   myInputFile.open("chartIn.txt");   // to open the file
   readChart(); // read file and store values in the array
   myInputFile.close(); // close the file

   do
   {
       displayMenu();

       switch (choice)
       {
       case 1:
           displayChart();
           break;
       case 2:
           reserveSeat();
           break;
       case 3:
           cancelReservation();
           break;
       case 4:
           saveChartToFile();
           break;
       case 5:
           showStatistics();
           break;
       case 6:
           help();
           break;
       case 7:
           quit();
           break;
       default:
           displayInvalid();
           break;
       }

       cout << endl;   // to give an extra line before the next display

   } while (choice != 7);

   //system("Pause"); note that, this omited because I am using the sleep code inside the quit function
   return 0;
}

void displayMenu()
{
   cout << "----------------------------Menu --------------------------" << endl;
   cout << "1. Display Seat Chart" << endl;
   cout << "2. Reserve Seat" << endl;
   cout << "3. Cancel Reservation" << endl;
   cout << "4. Save Seat Chart to File" << endl;
   cout << "5. Statistics" << endl;
   cout << "6. Help" << endl;
   cout << "7. Quit" << endl;
   cout << "Please Enter You Choice (1-7): ";
   cin >> choice;
   cout << "-----------------------------------------------------------" << endl;
}

void readChart()
{
   int rowNumber;

   myInputFile >> numOfRows >> numOfCols; // this reads the first two numbers on the top of the file we import
                                           // which are the number of rows and number of columns

   while (!myInputFile.eof())
   {
       myInputFile >> rowNumber;
       chart2[rowNumber] = rowNumber; // this reads the numbers of rows and will put it inside the chart2 array

       for (int j = 0; j < numOfCols; j++)
           myInputFile >> chart[rowNumber][j]; // this reads the letters and stores then inside the chart array
   }

}

void displayChart()
{
   for (int i = 0; i < numOfRows; i++) // this indicates the rows
   {
       // this if function is to put spaces between the numbers and the letters A's
       if (chart2[i + 1] >= 10) // since the first line in file indacates the number of rows and columns, then +1 is to start from the next line
           cout << chart2[i + 1] << " ";
       else
           cout << chart2[i + 1] << " ";

       for (int j = 0; j < numOfCols; j++) // this indicates the colums
           cout << chart[i + 1][j] << " ";

       cout << endl;
   }
}

void reserveSeat()
{
   int rowR, colR;
   string seatR;

   cout << "Please enter the desired seat number as (e.g., 3A, 7D, etc.): ";
   cin >> seatR;

   extractSeatNum(rowR, colR, seatR); // this function to extract the seat number

   if (chart[rowR][colR] != 'X') // if the function is not resereved
   {
       chart[rowR][colR] = 'X';
       cout << "Seat " << seatR << " was successfully reserved." << endl;
   }
   else
   {
       cout << "Sorry! seat " << seatR << " is not available. Please choose another seat" << endl;
   }

}


void cancelReservation()
{
   int rowC, colC;
   string seatC;

   cout << "Please enter the seat number you want to cancel (e.g., 3A, 7D, etc.): ";
   cin >> seatC;

   extractSeatNum(rowC, colC, seatC);

   if (chart[rowC][colC] != 'X') // if the seat is not resereved
       cout << "The seat " << seatC << " that you to cancel has not been initially reserved" << endl;
   else
   {
       switch (colC) // assinging the index of the letter to the letter
       {
       case 0:
           chart[rowC][0] = 'A';
           break;
       case 1:
           chart[rowC][1] = 'B';
           break;
       case 2:
           chart[rowC][2] = 'C';
           break;
       case 3:
           chart[rowC][3] = 'D';
           break;
       case 4:
           chart[rowC][4] = 'E';
           break;
       case 5:
           chart[rowC][5] = 'F';
           break;
       case 6:
           chart[rowC][6] = 'G';
           break;
       case 7:
           chart[rowC][7] = 'H';
           break;
       default:
           break;
       }

       cout << "Seat " << seatC << " was successfully canceled." << endl;
   }

}

void saveChartToFile()
{
   string fileName;

   cout << "please name the file with its extention as (e.g., file.txt, chart.txt, etc.): ";
   cin >> fileName;

   myOutputFile.open(fileName); // opens that file

   for (int i = 0; i < numOfRows; i++)
   {
       // this if function is to put spaces between the numbers and the letters A's
       if (chart2[i + 1] >= 10) // again the +1 is becasuse the top line with 0 index in the file, indicates the number of rows and columns
           myOutputFile << chart2[i + 1] << " ";
       else
           myOutputFile << chart2[i + 1] << " ";

       for (int j = 0; j < numOfCols; j++)
           myOutputFile << chart[i + 1][j] << " ";

       myOutputFile << endl;
   }

   cout << endl;
   cout << "File has been saved as " << fileName;

   myOutputFile.close(); // closes the file

}

void showStatistics()
{
   int totalSeatsNum = 0;
   int totalSeatsResereved = 0;
   float totalAvailableSeats = 0;
   int totalWindowSeats = 0;
   int totalAisleSeats = 0;
   float PerOfReserevedSeats;

   char rightWindowSeat; // this is a place holder for the right column

   switch (numOfCols) // this code to store the data for the right column
   {
   case 2:
       rightWindowSeat = 'B';
       break;
   case 3:
       rightWindowSeat = 'C';
       break;
   case 4:
       rightWindowSeat = 'D';
       break;
   case 5:
       rightWindowSeat = 'E';
       break;
   case 6:
       rightWindowSeat = 'F';
       break;
   case 7:
       rightWindowSeat = 'G';
       break;
   case 8:
       rightWindowSeat = 'H';
       break;
   default:
       break;
   }


   for (int i = 0; i < numOfRows; i++)
   {
       for (int j = 0; j < numOfCols; j++)
       {
           totalSeatsNum++;   // to count total num of seats

           if (chart[i + 1][j] == 'X')
               totalSeatsResereved++;   // to count resreved seats
           else
               totalAvailableSeats++;   // to count available seats

           if (chart[i + 1][j] == 'A' || chart[i + 1][j] == rightWindowSeat)
               totalWindowSeats++;   // to count window seats

           if (chart[i + 1][j] != 'A' && chart[i + 1][j] != 'X' && chart[i + 1][j] != rightWindowSeat)
               totalAisleSeats++;   // to count aisle seats

       }
   }

   PerOfReserevedSeats = totalSeatsResereved / totalAvailableSeats * 100.0; // percentage of resereved seats

   cout << "Number of available seats is: " << totalAvailableSeats << endl;
   cout << "Percentage of seats that are reserved: " << PerOfReserevedSeats << "%" << endl;
   cout << "Number of window seats that are available: " << totalWindowSeats << endl;
   cout << "Number of aisle seats that are available: " << totalAisleSeats << endl;

}


void help()
{
   cout << " Press a number between one and seven" << endl;
   cout << "Press 1 to display the seat chart" << endl
       << "Press 2 to to reserve a seat. You need to enter seat number as (e.g., 3A, 7D, etc.) " << endl
       << "Press 3 to to to cancel a seat. You need to enter seat number as (e.g., 3A, 7D, etc.)" << endl
       << "Press 4 to to save the chart into a file. Enter file name with its extention as (e.g., file.txt, chart.txt, etc.)s " << endl
       << "Press 5 to to display the following statistics: Number of available seats, percentage of seats that are reserved, list of window seats that are available, list of aisle seats that are available." << endl
       << "Press 6 to to display help and a detailed message on how to use the program" << endl
       << "Press 7 to quit and terminate the program" << endl;
}

void quit()
{
   cout << "Thank you for using our program";
//   Sleep(5000); // to terminates after 5 seconds of choosing the quit option

}


void displayInvalid()
{
   cout << "Invalid choice. You need to select an option between 1 and 7" << endl;

}


void extractSeatNum(int& row, int& col, string& seat)
{
   string fragment1, fragment2; // two fragmnets in a string such as 7D has 7 and D

   if (seat.length() == 2)
   {
       fragment1 = seat.substr(0, 1); // extract the first fragment such as 7 in 7D
       fragment2 = seat.substr(1, 1); // to extract the second fragment such as D in 7D
   }
   else if (seat.length() == 3)
   {
       fragment1 = seat.substr(0, 2); // extract the first fragment such as 10 in 10A
       fragment2 = seat.substr(2, 1); // to extract the second fragment such as A in 10A
   }
   else
   {
       cout << "invalid seat";

       row = -1;
       col = -1;
   }

   row = atoi(fragment1.c_str()); // this to convert the string numbers to int numbers

   switch (fragment2.at(0)) // this to convert the letter to the index of the columns
   {
   case 'A':
   case 'a':
       col = 0;
       break;
   case 'B':
   case 'b':
       col = 1;
       break;
   case 'C':
   case 'c':
       col = 2;
       break;
   case 'D':
   case 'd':
       col = 3;
       break;
   case 'E':
   case 'e':
       col = 4;
       break;
   case 'F':
   case 'f':
       col = 5;
       break;
   case 'G':
   case 'g':
       col = 6;
       break;
   case 'H':
   case 'h':
       col = 7;
       break;
   default:
       break;
   }

   //cout << "fragments are: " << fragment1 << " and " << fragment2 << endl; // TO TEST THE FUNCTION
   //cout << "This corresponds to Row " << row << " and column " << col << " in the array" << endl; // TO TEST THE FUNCTION

}

chartIn.txt

12 6
1   A B C D E F
2   A B C D E F
3   A B C D E F
4   A B C D E F
5   A B C D E F
6   A B C D E F
7   A B C D E F
8   A B C D E F
9   A B C D E F
10   A B C D E F
11   A B C D E F
12   A B C D E F

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote