0

私は現在、C# で atm マシンを設計しようとしていますが、これはまったくの初心者です。ログインに 3 回失敗した後、ログイン画面をウェルカム画面に戻したいのですが、どこから始めればよいのか、プログラムにコードを実装してこれを行う方法がわかりません。

ログイン画面の現在のコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.Common;

namespace bankkk
{
    public partial class FrmLogin : Form
    {
        public FrmLogin()
        {
            InitializeComponent();
        }

        public static OleDbConnection con = new OleDbConnection();

        string dbProvider;
        string dbSource;

        OleDbDataAdapter da;

        public static DataSet ds1 = new DataSet();

        string sql;
        string pin;
        int rownum = 0;
        bool valid = false;

        private void FrmLogin_Load(object sender, EventArgs e)
        {
            dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;";
            dbSource = "Data Source = 'd:\\bank11.accdb'";
            con.ConnectionString = dbProvider + dbSource;
            ds1 = new DataSet();
            con.Open();
            sql = " SELECT tblCustomers.* FROM tblCustomers";
            da = new OleDbDataAdapter(sql, con);
            rownum = da.Fill(ds1, "tblCustomers");

            con.Close();
        }

        private void btnexit_Click(object sender, EventArgs e)
        {

            System.Environment.Exit(0);
            this.Close();

        }


        //METHOD VALIDATE

        private bool validate()
        {
            ds1 = new DataSet();
            con.Open();

            sql = "SELECT tblCustomers.* FROM tblCustomers WHERE ((tblCustomers.AccountNo) = '" + txtAccount.Text + "')";
            da = new OleDbDataAdapter(sql, con);
            rownum = da.Fill(ds1, "tblCustomers");
            con.Close();

            if (rownum != 1)
            {
                MessageBox.Show("Not a valid Account");
                return false;
            }
            else
            {
                pin = ds1.Tables["tblCustomers"].Rows[0][4].ToString();
                if (pin == txtPin.Text)
                {
                    return true;
                }
                else
                {
                    MessageBox.Show("INVALID PIN");
                    return false;
                }
            }
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            valid = validate();
            if (valid == true)
            {
                if (txtAccount.Text == "11111111" && txtPin.Text == "9999")
                {
                    Frmmanager Manager = new Frmmanager();
                    this.Close();
                    Manager.Show();
                }
                else
                {
                    frmaccount account = new frmaccount();
                    this.Close();
                    account.Show();

                    {
                        txtAccount.Clear();
                        txtPin.Clear();
                    }
                }
            }
        }

        private void btnlogin_Click_1(object sender, EventArgs e)
        {
            valid = validate();
            if (valid == true)
            {
                if (txtAccount.Text == "11111111" && txtPin.Text == "9999")
                {
                    Frmmanager Manager = new Frmmanager();
                    this.Close();
                    Manager.Show();
                }
                else
                {
                    frmaccount account = new frmaccount();
                    this.Close();
                    account.Show();

                    {
                        txtAccount.Clear();
                        txtPin.Clear();
                    }
                }
            }
        }
    }
}
4

2 に答える 2

1

Return back to my Welcome screenと言っているので、 の代わりにFrmLoginusing を表示していると思います。そうすれば、古いフォームを閉じるだけで済みます。.ShowDialog().Show()

を行っているだけの場合は.Show()、次のようなことができます。

public partial class FrmWelcome {

    //in some part of your code...
    var frmLogin = new FrmLogin();

    //when the login form is closed, show this one.
    //Depending on your application, you might want to add some boolean variable
    //to the Login Form that will be true if the user authentication failed, and 
    //show this form again only if it is true.
    frmLogin.Closed += (s, e) => this.Show();

    this.Hide();
    frmLogin.Show();
}

以下のコードを試してください。アイデアはfailedAttempts、検証コードが失敗するたびにインクリメントされる変数を持つことです。3 に等しい場合は、フォームを閉じるだけです (上記を参照)。

namespace bankkk
{
    public partial class FrmLogin : Form
    {
        public FrmLogin()
        {
            InitializeComponent();
        }

        ...

        int failedAttempts = 0;

        private void btnlogin_Click_1(object sender, EventArgs e)
        {
            valid = validate();
            if (!valid) {
                //Increment the number of failed attempts
                failedAttempts += 1;

                //If equal to 3
                if (failedAttempts == 3) {
                    //Just close this window
                    this.Close();
                }
            }
            else
            {
                //the same code you were using...
            }
        }
    }
}
于 2013-03-08T20:08:11.477 に答える
0

プログラムに変数を追加し、それをインクリメントして、ログインの試行回数を制限することができます。アカウントの試行回数を制限するには、無効な試行を含むログイン情報をデータベースに保存するテーブルを追加します。そのテーブルを Customer テーブルにリンクします。有効な顧客アカウントへの無効なログイン試行が行われると、無効な試行回数が増加し、ログイン テーブルに書き戻されます。ログインに成功すると、無効な試行回数を 0 に設定できます。

于 2013-03-08T20:10:58.857 に答える