2010-10-09 7 views
1

// mon programme à long et avoir une erreur..je veux le rendre simple et facile à lire..comment changer dans le programme de commutation ?? aidez-moi s'il vous plaît !! = (si autre programme pour changer de programme

#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; 

} 
+5

Si vous arrêtez montrant les deux mauvais films et ne montre que Iron Man, vous couperez les 2/3 du code. –

+0

@ James McNellis, Mais ... J'aime Harry potter .. :) – liaK

+1

Sur une note plus sérieuse, vous devez faire attention à vos opérations d'entrée. L'extraction d'un flux peut échouer et vous devez vérifier et gérer les échecs. Par exemple, si un utilisateur entre "hello" pour son choix de film ("hello" n'est pas un entier valide), la variable 'select' restera non initialisée et l'état d'échec sur le flux sera défini. Vous pouvez tester l'état du flux pour voir si l'extraction a réussi en utilisant 'if (! Cin) {/ * handle error * /}'. Vous devrez également appeler 'cin.clear()' pour effacer l'état d'erreur et utiliser 'cin.ignore()' pour ignorer l'entrée invalide. –

Répondre

4

En règle générale, lorsque vous vous trouvez copier et coller plus d'une ou deux lignes de code, vous devez arrêter et penser que ce serait plus propre à factoriser ce code dans une fonction.

Vous pouvez dans ce cas créer une fonction do_movie_specific_stuff() qui prend pour arguments les données différentes entre les trois films (s'il y a quelque chose de différent entre les trois cas de commutation). déclaration: un appel à cette fonction avec les arguments corrects

+1

Je suspecte fortement que la classe de cette personne n'a pas encore appris à écrire des fonctions personnalisées. Très tôt, les fonctions sont seulement appelées, non écrites, et 'int main()' est toujours juste une incantation magique qui va en haut d'un programme. –

1

Je recommande de mettre votre logique dans une boucle et briser votre logique en fonctions, ou éventuellement des classes, si vous êtes familier. Quelque chose comme ça (ce qui est non compilé/non testé le code semi-pseudo ... juste pour vous donner une idée):

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) 

Si vous avez besoin de garder une trace de ce que les films que l'utilisateur a déjà essayé, vous pouvez le faire, il vous suffira de garder une trace de cela quelque part, et de le gérer dans la logique.

0

Le code que vous avez montré est un bon exemple avec les problèmes de code purement linéaire: Cela ne fonctionne tout simplement pas.

En tant que conseil: je soit créer trois fonctions pour gérer chaque film, ou de préférence, créer une fonction générique pour gérer tous les films, qui prendra ses données de quelque classe:

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