0

さて、学校の課題があります。このプログラムは、2 つのタブを持つ GUI です。最初のタブには、名前、ID、年齢、口座残高の 4 つのテキストボックスがあります。このタブには、2 番目のタブのコンボボックスにアカウントを追加するボタンもあります。2 番目のタブには、名前、ID、年齢、およびバランス用のコンボボックスと 4 つのテキストボックスがあります。コンボボックスから名前を選択すると、4 つのテキストボックスに情報が自動的に入力されます。私が直面している問題は、ユーザーが金額を入力して、テキストボックスの残高に差し引いたり追加したりできる引き出しボタンと入金ボタンが必要なことです。誰もこれを行う方法を知っていますか? コードを見たい場合は、私に知らせてください。

 class BankAccount
    {
        //attributes
        public string accountID;
        public string customerName;
        public int customerAge;
        public double balance;
        public const double DEFAULT_BALANCE = 500.00;

    //construct
    public BankAccount()
    {
    }

    public BankAccount(string anID, string aName, int anAge, double aBalance)
    {
        accountID = anID;
        customerName = aName;
        customerAge = anAge;
        balance = aBalance;
        if (aBalance == 0)
        {
            balance = DEFAULT_BALANCE;
        }
        else
        {
            balance = aBalance;
        }
    }

    public BankAccount(string anID, string aName, int anAge)
    {
        accountID = anID;
        customerName = aName;
        customerAge = anAge;
        balance = DEFAULT_BALANCE;
    }






     //accessors
    public void SetID(string anID)
    {
        accountID = anID;
    }

    public void SetName(string aName)
    {
        customerName = aName;
    }

    public void SetAge(int anAge)
    {
        customerAge = anAge;
    }

    public void SetBalance(double aBalance)
    {
        balance = aBalance;
    }

    public string GetID()
    {
        return accountID;
    }

    public string GetName()
    {
        return customerName;
    }

    public int GetAge()
    {
        return customerAge;
    }

    public double GetBalance()
    {
        return balance;
    }

これがフォームです

public partial class Form1 : Form
    {

    //ArrayList account = new ArrayList();
    private List<BankAccount> account = new List<BankAccount>();

    public Form1()
    {
        InitializeComponent();
    }



    private void btnAddAccount_Click(object sender, EventArgs e)
    {
        BankAccount aBankAccount = new BankAccount(txtAccountID.Text, txtName.Text,
            int.Parse(txtAge.Text), double.Parse(txtBalance.Text));

        account.Add(aBankAccount);
        AddToComboBox();
        ClearText();


    }

    private void AddToComboBox()
    {
        cboAccount.Items.Clear();
        foreach (BankAccount person in account)
        {
            cboAccount.Items.Add(person.GetName());
            //cboAccount.Items.Add(person);               

        }


    }
    private void ClearText()
    {
        txtName.Clear();
        txtAccountID.Clear();
        txtBalance.Clear();
        txtAge.Clear();
        txtAccountID.Focus();


    }

    private void cboAccount_SelectedIndexChanged(object sender, EventArgs e)
    {

        //txtNameTab2.Text = cboAccount.SelectedItem.ToString();
        txtNameTab2.Text = account[cboAccount.SelectedIndex].customerName;
        txtAgeTab2.Text = account[cboAccount.SelectedIndex].customerAge.ToString();
        txtAccountIDTab2.Text = account[cboAccount.SelectedIndex].accountID.ToString();
        txtBalanceTab2.Text = account[cboAccount.SelectedIndex].balance.ToString();





    }

    private void btnWithdraw_Click(object sender, EventArgs e)
    {







    }




}

}

4

1 に答える 1

1

次のようなオブジェクトでアカウントを表す場合:

public class Account{

    public int Id { get; set; }

    public string Name { get; set; }

    public int Age { get; set; }

    public Decimal Balance { get; set; }

}

次に、引き出しには残高からのお金の削除が含まれ、入金には残高への追加が含まれることを考慮してください。これは次のように表すことができます。

public class Account{

    public int Id { get; set; }

    public string Name { get; set; }

    public int Age { get; set; }

    public Decimal Balance { get; set; }

    public Decimal DepositMoney(Decimal amount)
    {
        Balance+=amount;
        return Balance;
    }

    public Decimal WithdrawMoney(Decimal amount)
    {
        Decimal moneyAfterWithdrawal = Balance-amount;

        if(moneyAfterWithdrawal >= 0)
        {
           Balance = moneyAfterWithdrawal;
           return Balance;
        }

        throw new Exception(String.Format("Withdrawing {0} would leave you overdrawn!", amount.ToString());

    }


}

次に、テキストボックスの値とクリックしたボタンに基づいて、必要に応じて DepositMoney と WithdrawMoney を呼び出すことができます。のような関数Decimal.TryParseは、入力文字列を必要な型に変換するのに役立ちます。また、入出金後に画面上の残高の状態を更新することもできます。

あなたの例では、残高を表すために Double のタイプが必要です。私の例では、 Decimal を Double に置き換えるだけです。

編集

さて、イベント ハンドラーの 1 つである btnWithdraw_Click を見てみましょう。

private void btnWithdraw_Click(object sender, EventArgs e) 
{ 
    //First, it is necessary to get the amount to be withdrawn
    //Am assuming this is in a textbox, which I'll call txtAmount

    double amount = 0;

    //Check is a valid double
    if(Double.TryParse(txtAmount.Text, out amount))
    {
       //Lets ignore negative amounts as they are technically a deposit ;-)
       if(amount > 0)
       {
            BankAccount currentAccount = account[cboAccount.SelectedIndex];

            double currentBalance = currentAccount.GetBalance();

            double amountLeft = currentBalance - amount;

            if(amountLeft >= 0)
            {

                currentAccount.SetBalance(amountLeft);
                txtBalanceTab2.Text = amountLeft.ToString("D2");
            }
            else
            {
                //Warn user they would go overdrawn
            }

       }

    }


}

ただし、私のアカウントの例のように、クラスの状態を変更するため、Withdraw メソッドと Deposit メソッドはアカウント自体に属していると私は信じていることに注意してください。このロジックを維持するのに最適な場所は、クラス自体です。

Deposit は読者の演習として残しておきます ;-)

于 2012-04-04T22:35:59.527 に答える