2017-01-01 76 views
1

我創建的預訂系統,用戶可註冊並登錄,同時驗證。 的代碼做的是,它具有收集每個用戶創建的帳戶Useraccounts對象的列表。因此,對於註冊和登錄,我將分別爲每個表單。預訂表單將在他們的憑證被驗證時顯示。顯示錶單一次登錄,在

我面臨的問題是,當任何用戶登錄時,我將如何顯示預訂表單一次,同時單擊登錄表單上的登錄按鈕進行驗證?

我給寄存器形式代碼如下所示。

public partial class Register : Form 

{ 

    Login_page login; 

    public Register(Login_page l) 
    { 
     InitializeComponent(); 
     login = l; 
    } 


    public static List<UserAccount> UserAccounts = new List<UserAccount>(); 

    Login_page lp = new Login_page(UserAccounts); 

    int count = UserAccounts.Count; 

    public List<UserAccount> AddUserAccounts() 
    { 

     UserAccounts.Add(new UserAccount 
     { 
      Name = NameReg.Text, 
      Username = UsernameReg.Text, 
      Password = PasswordReg.Text, 
      Email = EmailReg.Text, 
      Address = AddressReg.Text, 
      CardNum = int.Parse(CardNumReg.Text), 
      PaymentType = PaymentTypeReg.Text 

     }); 

     MessageBox.Show("Register was successful!"); 

     count++; 
     return UserAccounts; 
    } 

    private void CANAReg_Click_1(object sender, EventArgs e) 
    { 
     AddUserAccounts(); 
    } 

    private void BackButton_Click(object sender, EventArgs e) 
    { 

     login.Show(); 
     this.Hide(); 

    } 
} 

而登錄表單(我在這裏有問題)的代碼如下所示。

public partial class Login_page : Form 
{ 
    Register r; 
    //public List<UserAccount> UserAccounts { get; set; } 
    public static List<UserAccount> UserAccounts = new List<UserAccount>(); 

    public Login_page(List<UserAccount> UV1) 
    { 
     InitializeComponent(); 
     UserAccounts = UV1; 
    } 

    public Login_page() 
    { 
     InitializeComponent(); 
     r = new Register(this); 
    } 



    private void Calculations() 
    { 

     for (int i = 0; i< UserAccounts.Count ; i++) 
     { 

      if (UsernameLogin.Text.Equals(UserAccounts[i].Username) && PasswordLogin.Text.Equals(UserAccounts[i].Password)) 
      { 

       Booking bookings = new Booking(); 
       bookings.Show(); 
       this.Hide(); 
      } 
      else 
       MessageBox.Show("Please check your username or password"); 
      UsernameLogin.Focus(); 
     } 

     } 


    private void Login_Click(object sender, EventArgs e) 
    { 
     Calculations(); 
    } 

    private void CANA_Click_1(object sender, EventArgs e) 
    { 
     Register reg = new Register(this); 
     reg.Show(); 
     this.Hide(); 
    } 
} 

我在計算部分有問題。我想要的是,當任何用戶點擊登錄按鈕,但同時驗證,預訂表單將不會顯示多次。

+0

我不確定爲什麼您使用的是循環的,但我相信你有一個很好的理由。我提供的解決方案是一旦第一次滿足條件,就把環路「斷開」。 –

+0

因爲我想遍歷列表並驗證用戶的憑據。顯然我認爲很難,因爲哪個用戶帳戶創建首先很重要。例如,即使第二個用戶具有正確的憑證,他們也將無法登錄,因爲他們的用戶帳戶是在列表的第二位創建的。我可否知道這個限制僅限於一個用戶帳戶?如果不是,你有任何解決方案提供?因爲我真的不能想到它,因爲我剛剛學會了C#..預先感謝和新年快樂! @KraangPrime – Sofia

+0

順便說一句,休息有助於停止。但它不能解決我的問題,雖然我知道我想要什麼,但我不知道如何實現它。我嘗試了不同的方法,但仍然沒有工作.. @KraangPrime – Sofia

回答

0

我相信你缺少的是break;命令提前退出循環,一旦你的條件得到滿足。

嘗試使用此代碼替換Caculations方法:

private void Calculations() 
{ 

    for (int i = 0; i< UserAccounts.Count ; i++) 
    { 

     if (UsernameLogin.Text.Equals(UserAccounts[i].Username) && PasswordLogin.Text.Equals(UserAccounts[i].Password)) 
     { 

      Booking bookings = new Booking(); 
      bookings.Show(); 
      this.Hide(); 
      break; 
     } else { 
      MessageBox.Show("Please check your username or password"); 
      UsernameLogin.Focus(); 
     } 

    } 

}