public void start() throws Exception {
   int menuOption = 1;
   while (menuOption != 2) {
     inputOutput.printLogInQuit();
     menuOption = inputOutput.readInputFromConsole();
     switch (menuOption) {
       case 1:
         inputOutput.printEnterLoginId();
         User whoIsLogin =
             login.logIn(inputOutput.readStringFromConsole(), inputOutput.readPassword());
         if (whoIsLogin.getRoll().equals("user")) {
           while (menuOption != 8) {
             inputOutput.printMenuOnConsoleForUser();
             inputOutput.printEnterYourChoice();
             menuOption = inputOutput.readInputFromConsole();
             dispatcherForOption(inputOutput, library, menuOption, whoIsLogin);
           }
         } else if (whoIsLogin.getRoll().equals("librarian")) {
           while (menuOption != 8) {
             inputOutput.printMenuOnConsoleForAdmin();
             inputOutput.printEnterYourChoice();
             menuOption = inputOutput.readInputFromConsole();
             dispatcherForOption(inputOutput, library, menuOption, whoIsLogin);
           }
         } else {
           inputOutput.printValidationProblem();
         }
         break;
       case 2:
         System.exit(0);
       default:
         inputOutput.printInvalidOptionMessage();
     }
   }
 }
 private void dispatcherForOption(
     InputOutput inputOutput, Library library, int menuOption, User whoIsLogin) {
   if ("user".equals(whoIsLogin.getRoll()) && menuOption > 8) {
     inputOutput.printInvalidOptionMessage();
   } else
     switch (menuOption) {
       case 1:
         inputOutput.printBooksOnConsole(library.allAvailableBooks);
         break;
       case 2:
         inputOutput.printEnterBookName();
         if (library.checkOutBook(whoIsLogin.getUserId(), inputOutput.readStringFromConsole())) {
           inputOutput.printThankYouEnjoyTheBook();
         } else {
           inputOutput.printThatBookIsNotAvailableMessage();
         }
         break;
       case 3:
         inputOutput.printEnterBookName();
         if (library.checkInBooks(whoIsLogin.getUserId(), inputOutput.readStringFromConsole())) {
           inputOutput.printThankYouForReturningTheBook();
         } else {
           inputOutput.printThatIsNotAValidBookToReturn();
         }
         break;
       case 4:
         inputOutput.printMoviesOnConsole(library.allAvailableMovies);
         break;
       case 5:
         inputOutput.printEnterMovieName();
         if (library.checkOutMovie(whoIsLogin.getUserId(), inputOutput.readStringFromConsole())) {
           inputOutput.printThankYouEnjoyTheMovie();
         } else {
           inputOutput.printThatMovieIsNotAvailable();
         }
         break;
       case 6:
         inputOutput.printEnterMovieName();
         if (library.checkInMovie(whoIsLogin.getUserId(), inputOutput.readStringFromConsole())) {
           inputOutput.printThankYouForReturningTheMovie();
         } else {
           inputOutput.printThatMovieIsNotAvailableToReturn();
         }
         break;
       case 7:
         inputOutput.printUserInfoOnConsole(whoIsLogin.toString());
         break;
       case 8:
         break;
       case 9:
         for (String userId : library.issuedBooksByUsers.keySet()) {
           inputOutput.printUserInfoOnConsole(
               userId + " - " + library.issuedBooksByUsers.get(userId).getNameOfBook());
         }
         break;
       case 10:
         for (String userId : library.issuedMoviesByUsers.keySet()) {
           inputOutput.printUserInfoOnConsole(
               userId + " - " + library.issuedMoviesByUsers.get(userId).getMovieName());
         }
         break;
       default:
         inputOutput.printInvalidOptionMessage();
     }
 }