2017-08-03 11 views
0

私は非常に簡単なATMマシンを作成しています。データベースからログイン情報を保存するには

最初は、ログインとパスワードについて尋ねられます。 パスワードが正しい場合、ユーザーはいくつかの操作を行うことができます。 1)撤退お金

は、問題は、私は1を選択)か、毎回2)または3)、プログラムが尋ねていること 2)証拠金 3)現在の値:

は、今では次のように事業を展開しています私は再びログインとパスワードについて。しかし、私は初めに一度だけ聞きたいです。

私はどこかのユーザーのログイン名/パスワードを保存し、いくつかの操作をしたいときにそれを読むことができるソリューションが必要です。

これは私のコードの一部です。

public class LoginVerification { 

public static void login() throws Exception { 

    Scanner input = new Scanner(System.in); 
    System.out.println("Please enter USER ID:"); 
    String userId = input.nextLine(); 
    System.out.println("Please enter PIN CODE:"); 
    String pass = input.nextLine(); 

    try { 
     Connection con = ConnectionDB.getConnection(); 
     String sql = "SELECT COUNT(*) FROM Info WHERE ClientID = ? AND ClientPass = ?"; 

     PreparedStatement posted = con.prepareStatement(sql); 
     posted.setString(1, userId); 
     posted.setString(2, pass); 
     ResultSet resultSet = posted.executeQuery(); 
     resultSet.next(); 
     int rowCount = resultSet.getInt(1); 

     if (rowCount == 1) { 
      System.out.println("LOGIN SUCCESSFUL"); 
      Helper.showMainMenu(); 

     } else { 
      System.out.println("#LOGIN UNSUCCESSFUL, WRONG LOGIN OR PASSWORD"); 

      System.out.println("\nTry again? \n1) yes \n2) no [quit]"); 
      int choice = input.nextInt(); 
      if (choice == 1) { 
       login(); 
      } else { 
       System.exit(0); 
      } 
     } 
     con.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

}

そして、問題は以下の通りです。あなたが見ることができるように、私は別の方法でそれを行うことができないので、プログラムはログイン/パスについて再度尋ねています。あなたは、これがlogin()で設定することができ、任意のページ

から使用/確認することができ 、ユーザーがログインされているかどうかを伝えるためにフラグを必要

public static void withdraw() throws Exception { 

    Scanner input = new Scanner(System.in); 
    System.out.println("please enter USER ID:"); 
    String userId = input.nextLine(); 
    System.out.println("please enter PIN CODE:"); 
    String pass = input.nextLine(); 

    System.out.println("how much you want to withdraw"); 
    int money = input.nextInt(); 

    try { 
     Connection con = ConnectionDB.getConnection(); 
     String sql = "UPDATE BankDB.Info SET `Money`= `Money` - ? WHERE `ClientID`= ? AND `ClientPass` = ?"; 

     PreparedStatement posted = con.prepareStatement(sql); 
     posted.setInt(1, money); 
     posted.setString(2, userId); 
     posted.setString(3, pass); 

     if (posted.executeUpdate() > 0) { 
      System.out.println("OPERATION SUCCESSFUL"); 
     } else { 
      System.out.println("LOGIN UNSUCCESSFUL"); 

      System.out.println("\nTry again? \n1) yes \n2) no [quit]"); 
      int choice = input.nextInt(); 
      if (choice == 1) { 
       withdraw(); 
      } else { 
       System.exit(0); 
      } 
     } 
     con.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

フラグを使用し、必要に応じてチェックしてください – sForSujit

+0

ログインしたら、そのユーザーのセッションを維持する必要があります。すなわち、ブール変数を設定することによって行われる。そして、すべての操作について、その変数が真であるかどうかをチェックする必要があります。しかし、あなたのコードを見て、それはあなたが正しい方法でやっているようには見えません。 – v1shnu

+0

はローカル変数ではなく、クラスのフィールドとして 'userid'と' pass'を持っています。実際に操作する前にいくつかのシナリオで実際に –

答えて

1

は、以下のようにlogin()を変更します。

を1-にLoginVerificationクラス

private static boolean loggedIn = false; 

最初の行にクラススコープの変数を定義、そのフラグをチェック

public static void login() throws Exception { 

     if(loggedIn){ 
      //do nothing, user already logged in 
      return; 
     } 
//...rest of code ... 

あなたはユーザログインが正しいかどうかを調べるときにこれを追加します。

if (rowCount == 1) { 
    //add this line 
    loggedIn = true; 
} else { 
    //add this line 
    loggedIn = false; 
} 

を今すぐログインするユーザーを必要とする他のすべての場所で、

LoginVerification.login(); 
を使用

EX、交換してください。この

public static void withdraw() throws Exception { 

    Scanner input = new Scanner(System.in); 
    System.out.println("please enter USER ID:"); 
    String userId = input.nextLine(); 
    System.out.println("please enter PIN CODE:"); 
    String pass = input.nextLine(); 

    System.out.println("how much you want to withdraw");// rest of code 
これで210

:ユーザーがまだログインしていない場合

public static void withdraw() throws Exception { 
    LoginVerification.login(); 
    System.out.println("how much you want to withdraw"); // rest of code 

ユーザーがログインするように求められます。

関連する問題