если еще программа для переключения программы - PullRequest
1 голос
/ 09 октября 2010

// моя программа длинна и имеет ошибку .. я хочу сделать ее простой и удобной для чтения .. как изменить ее в программе переключения ??Помоги мне, пожалуйста!!= (

#include <iostream>

using namespace std;

int main ()
{
    int movie1;
    int movie2;
    int movie3;
    int seats;
    int price;
    int select;
    char response;

    cout<<"______Wellcome to Strawberry Gold Cinema____\n"
        <<"Now you are booking a ticket cinema and please choose your movie... ";
        cout << "\nPress 1 for= Harry Potter \n"
            << "Press 2 for = Iron Man\n"
            <<"Press 3 for = Romeo and Juliet\n";
        cout<<"Enter your choice > ";
        cin>>select;


 if (select ==1 )

 {


     cout<<"The price of the ticket per seat is RM10.00\n"
        <<"Please enter the number of seat ";
        cin>>seats;


        if (seats<=30)

        {
            price = 10 * seats;

            cout<<"The total price is RM"<<price<<endl;
        }

        else if (seats>=30)

        {
            cout<<"The movie is full.\n"
            <<"Would like to choose another movie??\n"
            <<"Section Y or N \n";
            cout<<"Enter your choice = ";
            cin>>response;
        }



        if ( toupper( response ) == 'Y' )
        {
        cout <<"Please choose movie 2 or movie 3\n"
        <<"Enter your choice ";
        cin>>select;




        if (select == 2)
        {
         cout<<"The price of the ticket per seat is RM11.00\n"
           <<"Please enter the number of seat";
        cin>>seats;


        if (seats<=30)

        {
            price = 11 * seats;

            cout<<"The total price is RM"<<price<<endl;
        }

        }
        else if (seats>=30)

        {
            cout<<"The movie is full.\n"
            <<"Would like to choose another movie??\n"
            <<"Section Y or N \n";
            cout<<"Enter your choice = ";
            cin>>response;

        }
            if ( toupper( response ) == 'Y' )


            {
             cout<<"The price of the ticket per seat is RM13.00\n"
             <<"Please enter the number of seat";
            cin>>seats;


        if (seats<=30)

        {
            price = 13 * seats;

            cout<<"The total price is RM"<<price<<endl;
        }

        else if (seats>=30)

        {
            cout<<"The movie is full.\n"
            <<"Next movie in 5 hours...."<<endl;
        }

else
        cout << "Next movie in 5 hours.\n";
        }
        }
        }

//for 2

 if (select ==2 )

 {


     cout<<"The price of the ticket per seat is RM11.00\n"
        <<"Please enter the number of seat";
        cin>>seats;


        if (seats<=30)

        {
            price = 11 * seats;

            cout<<"The total price is RM"<<price<<endl;
        }

        else if (seats>=30)

        {
            cout<<"The movie is full.\n"
            <<"Would like to choose another movie??\n"
            <<"Section Y or N \n";
            cout<<"Enter your choice = ";
            cin>>response;
        }



        if ( toupper( response ) == 'Y' )
        {
        cout <<"Please choose movie 1 or movie 3\n"
        <<"Enter your choice ";
        cin>>select;




        if (select == 2)
        {
         cout<<"The price of the ticket per seat is RM10.00"
           <<"Please enter the number of seat";
        cin>>seats;


        if (seats<=30)

        {
            price = 10 * seats;

            cout<<"The total price is RM"<<price<<endl;
        }

        }
        else if (seats>=30)

        {
            cout<<"The movie is full.\n"
            <<"Would like to choose another movie??\n"
            <<"Section Y or N \n";
            cout<<"Enter your choice = ";
            cin>>response;

        }
            if ( toupper( response ) == 'Y' )


            {
             cout<<"The price of the ticket per seat is RM13.00\n"
             <<"Please enter the number of seat";
            cin>>seats;


        if (seats<=30)

        {
            price = 13 * seats;

            cout<<"The total price is RM"<<price<<endl;
        }

        else if (seats>=30)

        {
            cout<<"The movie is full.\n"
            <<"Next movie in 5 hours...."<<endl;
        }
else
        cout << "Next movie in 5 hours.\n";

        }
        }
        }



//for seat 3

 if (select ==3 )

 {


     cout<<"The price of the ticket per seat is RM13.00\n"
        <<"Please enter the number of seat";
        cin>>seats;


        if (seats<=30)

        {
            price = 13 * seats;

            cout<<"The total price is RM"<<price<<endl;
        }

        else if (seats>=30)

        {
            cout<<"The movie is full.\n"
            <<"Would like to choose another movie??\n"
            <<"Section Y or N \n";
            cout<<"Enter your choice = ";
            cin>>response;
        }



        if ( toupper( response ) == 'Y' )
        {
        cout <<"Please choose movie 1 or movie 2\n"
        <<"Enter your choice ";
        cin>>select;




        if (select == 1)
        {
         cout<<"The price of the ticket per seat is RM10.00\n"
           <<"Please enter the number of seat";
        cin>>seats;


        if (seats<=30)

        {
            price = 10 * seats;

            cout<<"The total price is RM"<<price<<endl;
        }

        }
        else if (seats>=30)

        {
            cout<<"The movie is full.\n"
            <<"Would like to choose another movie??\n"
            <<"Section Y or N \n";
            cout<<"Enter your choice = ";
            cin>>response;

        }
            if ( toupper( response ) == 'Y' )


            {
             cout<<"The price of the ticket per seat is RM12.00\n"
             <<"Please enter the number of seat";
            cin>>seats;


        if (seats<=30)

        {
            price = 12 * seats;

            cout<<"The total price is RM"<<price<<endl;
        }

        else if (seats>=30)

        {
            cout<<"The movie is full.\n"
            <<"Next movie in 5 hours...."<<endl;
        }
         else
        cout << "Next movie in 5 hours.\n";
        }
        }
        }






 return 0;

}

Ответы [ 3 ]

4 голосов
/ 09 октября 2010

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

В этом случае вы можете создать функцию do_movie_specific_stuff(), которая принимает в качестве аргументов данные, которые отличаются между тремя фильмами (если между этими тремя случаями переключения есть что-то другое). Тогда каждый случай в вашем операторе switch - это отдельный оператор: вызов этой функции с правильными аргументами.

1 голос
/ 09 октября 2010

Я бы порекомендовал поместить вашу логику в цикл и разбить ее на функции или, возможно, классы, если вы знакомы. Примерно так (это не скомпилированный / не протестированный полупсевдокод ... просто чтобы дать вам представление):

bool done = false;
do
{
    cout << "Please choose a move (1, 2, or 3)" << endl;
    cin >> movieId;

    double price = getMoviePrice(movieId);
    cout << "The price of the movie is: " + price << endl;

    cout << "How many seats" << endl;
    cin >> seats;

    int availableSeats = getAvailableSeats(movieId);

    // and so on...  If the user indicates they want to quit, just set done to true!

} while (!done)

Если вам нужно отслеживать, какие фильмы пользователь уже пробовал, вы можете это сделать, вам просто нужно где-то отслеживать это и обрабатывать в логике.

0 голосов
/ 09 октября 2010

Код, который вы показали, является хорошим примером с проблемами чисто линейного кода: он просто не работает.

В качестве подсказки: я бы создал три функции для обработки каждого фильма или, что более предпочтительно, создал бы общую функцию для обработки всех фильмов, которая будет получать данные из некоторого класса:

class Movie {
  std::wstring name;
  int seats;
  int soldSeats;
  int pricePerSeat;
};
...