Member 13581172 Ответов: 1

Программа отображает функцию после разрыва


#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <fstream>
#include<conio.h>
#include<stdio.h>
using namespace std;

void start();
void admin();
void user();
void update();
void display();
void input();
void data();
void header();
void slogan();
int x=15,y=15;
int num1,num2,num3,num4;
int p=x, q=y;
int f,h,k;

ofstream file;
string customer;
ifstream inputFile;

struct Info{
    string Name;
    string idNum;
    string contact;
    Info*link;
}*head, *tail;


int main()
{
    header();
    return 0;
}

void header()
{
    cout<<"\n\t\t****************************************************************************************************\n\n\n";

    cout<<"\n\t\t    ##               ##   ########   ##         #######    #######    ###       ###   ########    ";
    cout<<"\n\t\t     ##             ##    ##         ##        ##         ##     ##   ####     ####   ##          ";
    cout<<"\n\t\t      ##           ##     ##         ##        ##         ##     ##   ## ##   ## ##   ##          ";
	cout<<"\n\t\t       ##    #    ##      #######    ##        ##         ##     ##   ##  ## ##  ##   #######     ";
	cout<<"\n\t\t        ##  ###  ##       ##         ##        ##         ##     ##   ##   ###   ##   ##          ";
	cout<<"\n\t\t         #### ####        ##         ##        ##         ##     ##   ##         ##   ##          ";
	cout<<"\n\t\t          ##   ##         ########   ########   #######    #######    ##         ##   ########    \n";


    cout<<"\n\t\t            ########    #######       ##    ##    ######    ########   ########   ##      ";
    cout<<"\n\t\t               ##      ##     ##      ##    ##   ##    ##      ##      ##         ##      ";
    cout<<"\n\t\t               ##      ##     ##      ##    ##   ##    ##      ##      ##         ##      ";
	cout<<"\n\t\t               ##      ##     ##      ########   ##    ##      ##      #######    ##      ";
	cout<<"\n\t\t               ##      ##     ##      ##    ##   ##    ##      ##      ##         ##      ";
	cout<<"\n\t\t               ##      ##     ##      ##    ##   ##    ##      ##      ##         ##      ";
	cout<<"\n\t\t               ##       #######       ##    ##    ######       ##      ########   ########\n";

    cout<<"\n\t\t  #######    ######    ##         ##   ########    ######    #######     ###     ##   ##    ###### ";
    cout<<"\n\t\t ##         ##    ##   ##         ##   ##         ##    ##   ##    ##    ####    ##   ##   ##    ##";
    cout<<"\n\t\t ##         ##    ##   ##         ##   ##         ##    ##   ##    ##    ## ##   ##   ##   ##    ##";
	cout<<"\n\t\t ##         ##    ##   ##         ##   #######    ##    ##   #######     ##  ##  ##   ##   ##    ##";
	cout<<"\n\t\t ##         ########   ##         ##   ##         ##    ##   ##   ##     ##   ## ##   ##   ########";
	cout<<"\n\t\t ##         ##    ##   ##         ##   ##         ##    ##   ##    ##    ##    ####   ##   ##    ##";
	cout<<"\n\t\t  #######   ##    ##   ########   ##   ##          ######    ##     ##   ##     ###   ##   ##    ##\n\n\n";
	cout<<"\n\t\t****************************************************************************************************\n\n\n\n\n";


system("pause");
start();

}

void start()
{
    int choose;
    system("cls");
    slogan();
    cout<<"\n\n\t\t\tWELCOME \n\n\n";
    cout<<"[1].ADMIN \n\n";
    cout<<"[2].USER \n\n";
    cout<<"[3].EXIT \n\n";
    cout<<"SELECTION : ";

cin>>choose;

    switch(choose)
	{
	    case 1:
		system("cls");
		admin();
		break;

		case 2:
		system("cls");
		user();
		break;

		case 3:
		break;

        default:
        system("cls");
		start();
	}
}

void slogan()
{
    cout<<"\n\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n";
    cout<<"\n\t\t\t\tHOTEL CALIFORNIA\n";
    cout<<"\t\t\t-------------------------------\n";
    cout<<"\t\t\t\tHEAVEN ON EARTH\n\n";
    cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n";
}

void admin()
{
system("cls");
slogan();
cout<<"\n\n\n\t[1].ROOM AVAILABLE\n\n";
cout<<"\t[2].ONLINE VIEW\n\n";
cout<<"\t[3].WALK IN\n\n";
cout<<"\t[4].BACK\n\n";
cout<<"\tSELECTION : ";
cin>>num2;
switch(num2)
	{
	    case 1:
		system("cls");
		k=p+q;
        if (k==0){

        cout << "SORRY OUR ROOMS ARE FULL hRIGHT NOW"<< endl;

        cout << "PLEASE COME BACK LATER"<< endl;
            system("pause");
            system("cls");
            start();


        }
		cout << "Room available " << k << endl;
        cout << "Small: " << p << endl;
        cout << "Large: " << q << endl;


        system("pause");
        admin();


		case 2:
		system("cls");
		display();
		break;

        case 3:
		system("cls");
		input();
		break;

        case 4:
		system("cls");
		start();
		break;

        default:
        system("cls");
		start();
	}
}


void input()
{
cout<<"\n\nPLEASE ENTER YOUR NAME: ";
cin>>std::ws;
  getline( cin, customer );
customer += ".txt";
file.open( customer.c_str() );

system("cls");
slogan();
cout<<"\n\n\t\t\t\tCHOOSE ROOM :\n\n";

	cout<< "[1].LARGE(FOR MORE THAN 3 PEOPLE)********RM200 per night"<<endl;
	cout <<"[2].SMALL(FOR LESS THAN 3 PEOPLE)********RM100 per night"<<endl;
	cout <<"FOR 3 PEOPLE BEST TAKE LARGE"<<endl;


    cout<<"\n\n";
    cin>>num3;
    system("cls");

    if (num3==1){
        q--;
        data();
        system("pause");
        file.close();
        start();
    }else if (num3==2){

        p--;
        data();
        system("pause");
        file.close();
        start();
    } else if (num3!=1 && num3!=2){

    cout << "WRONG INPUT GIVEN" <<endl;
    system("pause");
    system("cls");
    input();

    }

}

void data()
{   int date, month,store,year=2018;

    struct Info*temp;

    head = NULL;
    tail = NULL;

        cout << "HOW MANY NIGHTS WILL YOU BE STAYING?" << endl;
        cin>>f;

        if(f>30 || f<0){

        cout << "NOT ALLOWED" <<endl;
        system("pause");
        system("cls");
        start();

        }

        h=200 * f;
        cout << "\n\nTotal: RM" << h << endl;
        file<< "Total: RM " << h ;
        system ("pause");
        system("cls");

      cout<<"\n\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n";
    cout<<"\n\t\t\t\tFOR THE YEAR 2018\n";
    cout<<"\t\t\t-------------------------------\n";
    cout<<"\n\t\t\t\tONE MONTH=30 DAYS\n\n";
    cout<<"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n";
        cout<<"\t\t\tENTER CHECK IN DATE(1-30)\n\n";
        cin>>date;
        if (date>30 || date<0){


            cout <<"CANNOT COMPREHEND" << endl;
               system("pause");
            start();
        }

        cout << "\t\t\tENTER CHECK IN MONTH(1-12)" <<endl;
        cin>>month;
        if (month>12 || month <0){

            cout <<"CANNOT COMPREHEND" << endl;
             system("pause");
            start();
        }

        file << "CHECK IN ON: " <<date<<"/"<<month<<"/"<<year<<endl;
        store=date+f;
        if(store>30){

            store=store-30;
            month=month+1;

            if (month>12){

                month=month-12;
                year=year+1;
            }
        }
        file <<"CHECK OUT ON: " << store<<"/"<<month<<"/"<<year<<endl;

        Info *a=new Info;
        cout<<"ENTER NAME(SAME AS PREV)"<<endl;
        cin>>std::ws;
        getline(cin, a->Name);
        cout<<"\n";

        a->link=NULL;
        if (head == NULL)
        {
            head = a;
            tail = a;
        }
        else
        {
            tail->link =a;
            tail= a;
        }

        Info *b=new Info;
        cout<<"ENTER IC "<<endl;
        cin>>std::ws;
        getline(cin, b->idNum);
        cout<<"\n";

        b->link=NULL;
        if (head == NULL)
        {
            head = b;
            tail = b;
        }
        else
        {
            tail->link =b;
            tail= b;
        }

        Info *c=new Info;
        cout<<"ENTER PHONE NUMBER "<<endl;
        cin>>std::ws;
        getline(cin, c->contact);
        cout<<"\n\n";

        c->link=NULL;
              if (head == NULL)
        {
            head = c;
            tail = c;
        }
        else
        {
            tail->link =c;
            tail= c;
        }

temp = head;
    while(temp!=NULL)
    {
        file<<"\n"<<temp->Name;
        file<<"\n"<<temp->idNum;
        file<<"\n"<<temp->contact<<" \n\n";
        temp = temp->link;
    }
cout<<"\nDONE\n\n";

}

void user(){
system("cls");
slogan();

cout<<"\n\n\n\t[1].REGISTER\n\n";
cout<<"\t[2].UPDATE\n\n";
cout<<"\t[3].BACK\n\n";
//cout<<"\t[4].EXIT\n\n";

cout<<"\tSELECTION : ";
cin>>num4;
switch(num4)
	{
        case 1:
		system("cls");
		cout << "Room available " << p+q << endl;
        cout << "Small: " << p << endl;
        cout << "Large: " << q << endl;
        system("pause");
        system("cls");
        input();

	    case 2:
		system("cls");
        update();
        break;

		case 3:
		system("cls");
		start();
		break;

        //case 4:
        //exit;
		break;

        default:
        system("cls");
		start();
	}

}

void display()
{
slogan();

    cout<<"\n\nENTER YOUR NAME : ";
    cin>>customer;
inputFile.open((customer+".txt").c_str());

   if (inputFile)
   {

       getline(inputFile, customer);

       while (inputFile)
       {

          cout << customer << endl;

          getline(inputFile, customer);
       }


       inputFile.close();
       system("pause");
        admin();
   }
   else
   {
      cout << "NO DATA\n";
      system("pause");
      admin();
   }

}

void update()
{
slogan();
cout<<"\n\n[1] UPDATE BOOKING\n";
cout<<"\n\n[2] CANCEL BOOKING\n";
cout<<"\n\n[3] EXIT PROGRAM\n";
cout<<"\n\nCHOOSE: ";
cin>>num1;
system("cls");
switch(num1)
{

case 1:

    cout<<"\n\n\t\t\t---   UPDATE   ---\n\n";
    cout<<"\n\n\tENTER YOUR NAME TO CHECK IF DATA EXIST : ";
    cin>>std::ws;
    //inputFile.open((customer+".txt").c_str());
  getline( std::cin, customer );

  if(inputFile){

    system("cls");
    input();
    break;
}   else

    {
    cout<< "\n\n\t!NO DATA!" <<endl;
    system("pause");
    user();

}


case 2:
    cout<<"\n\n\t\t\t---   CANCEL BOOKING ONLINE   ---\n\n";
    cout<<"\n\n\tENTER YOUR NAME : ";
    cin>>customer;
    inputFile.open((customer+".txt").c_str());
  getline( inputFile, customer );

  if(inputFile){

    remove((customer + ".txt").c_str());
	cout<<"\n\n\tBOOKING CANCEL";
	cout<<"\n\n\tINFO DELETED\n\n";
    cout<<"\n\n\tBYE BYE\n\n";
    system("pause");
    start();
    break;
}   else

    {
    cout<< "\n\n\t!NO DATA!" <<endl;
    system("pause");
    start();

}


    default:
        system("cls");
		start();


}
}


Что я уже пробовал:

Поэтому мне было поручено разработать программу, которая представляет собой базовую систему управления гостиницами на языке C++. Кодирование выше-это то, что я сделал до сих пор, и хотя я доволен, есть проблема в функции start(). Для случая[3] предполагается, что он прерывается и выходит из программы. Однако вместо этого он отображает другую функцию-update().

Я попытался удалить обновление (), и выход из программы прошел успешно, однако мне все еще нужна эта функция. В моей программе есть две функции, admin() и user (), которые вызывают функцию input(). Поскольку моя программа имеет две функции запроса пользователя (пользователь вводит входные данные), но использует одну и ту же функцию, в которой фактически запрашиваются данные (data ()), я подумал о создании другой функции для запроса данных(например, data1()). Однако это не работает. Пожалуйста помочь.

PIEBALDconsult

Не глядя на это слишком глубоко, моя первая реакция заключается в том, что вы, вероятно, не хотите рекурсии, которую вы создали.

Rick York

Это беспорядок рекурсии. Я не думаю, что это может сработать так, как вы этого хотите. Следовать по пути исполнения - в некоторых случаях админ призывает начать, начните называет себя админ, входные звонки, начинаются звонки пользователя и вызовов, и вокруг и вокруг. Вам нужно создать резервную копию и начать с основного цикла, который вызывает возвращаемые функции, и продолжать этот цикл до тех пор, пока не будет выбран выход. Это действительно довольно просто, так что не стоит излишне усложнять его.

1 Ответов

Рейтинг:
0

KarstenK

Ваш код выглядит нормально, но если что-то пойдет не так, вы должны отладить его в одношаговом режиме. Некоторое протоколирование выполнения функции - это всегда хорошая идея.

Я предполагаю, что ваш ввод для выбора целого числа работает не так, как ожидалось. Сделать вывод выбрать ВАР.

cout<<"SELECTED OPTION : " << choose;

При работе с кодами возврата можно было бы достичь лучшего потока программы.