1

最終的には、C# でプログラムを作成する必要があります。ユーザーが元の口座残高から合計を追加または引き出しできる銀行口座であると想定されます。プログラム自体は機能しますが、何らかの理由で更新された残高を 2 回目に使用します。代わりに、引き続き開始残高が使用されます。たとえば、最初に $100 を持っていて、$20 を取り出し、新しい残高を $80 にするとします。次にお金を追加または削除するときは、80 ドルではなく 100 ドルから取ります。私が間違っていたかもしれないことについてのアイデアはありますか?

これまでの私のコードは次のとおりです。

namespace BankingAccount
{
    public partial class Entrance : Form
    {
        public string name;
        public int number;
        public double total;
        public double with;
        public double dep;

        public Entrance()
        {
            InitializeComponent();
        }

        private void btnEnter_Click(object sender, EventArgs e)
        {
            setVisPart1(true);
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            txtAcctName.Clear();
            txtAcctName.Enabled = true;
            txtAcctNumber.Clear();
            txtAcctNumber.Enabled = true;
            lblBalance.Text = "Beginning Balance:";
            txtBalance.Clear();
            txtBalance.Enabled = true;
            setVisibility(false);
        }

        private void btnContinue_Click(object sender, EventArgs e)
        {
            string line;
            int val;
            double value;

            name = txtAcctName.Text;

            line = txtAcctNumber.Text;

            if (int.TryParse(line, out val))
            {
                if (val < 0)
                {
                    MessageBox.Show("Invalid number");

                    txtAcctNumber.Clear();
                }
                else
                {
                    number = int.Parse(txtAcctNumber.Text);

                    txtAcctNumber.Enabled = false;
                }
            }
            else
            {
                MessageBox.Show("Invalid number");

                txtAcctNumber.Clear();
            }

            line = txtBalance.Text;

            if (double.TryParse(line, out value))
            {
                total = double.Parse(txtBalance.Text);

                txtBalance.Enabled = false;
                lblBalance.Text = "Available Balance:";
            }
            else
            {
                MessageBox.Show("Invalid number");

                txtBalance.Clear();
            }

            txtAcctName.Enabled = false;
            setVisPart2(true);
            btnContinue.Visible = false;
        }

        private void btnCalculate_Click(object sender, EventArgs e)
        {
            string line;
            double value;

            total = double.Parse(txtBalance.Text);

            line = txtWithdrawal.Text;

            if (double.TryParse(line, out value))
            {
                with = double.Parse(txtWithdrawal.Text);
            }
            else
            {
                MessageBox.Show("Invalid number");

                txtWithdrawal.Clear();
            }

            line = txtDeposit.Text;

            if (double.TryParse(line, out value))
            {
                dep = double.Parse(txtDeposit.Text);
            }
            else
            {
                MessageBox.Show("Invalid number");

                txtDeposit.Clear();
            }

            Banking anAccount = new Banking(name, number, total, with, dep);

            txtBalance.Text = anAccount.Balance.ToString("C");

            txtWithdrawal.Clear();
            txtDeposit.Clear();
        }

        private void setVisibility(bool visibilityValue)
        {
            lblName.Visible = visibilityValue;
            lblNumber.Visible = visibilityValue;
            lblBalance.Visible = visibilityValue;
            lblWithdrawal.Visible = visibilityValue;
            lblDeposit.Visible = visibilityValue;
            txtAcctName.Visible = visibilityValue;
            txtAcctNumber.Visible = visibilityValue;
            txtBalance.Visible = visibilityValue;
            txtWithdrawal.Visible = visibilityValue;
            txtDeposit.Visible = visibilityValue;
            btnCalculate.Visible = visibilityValue;
            btnContinue.Visible = visibilityValue;
        }

        private void setVisPart1(bool visibilityValue)
        {
            lblName.Visible = visibilityValue;
            lblNumber.Visible = visibilityValue;
            lblBalance.Visible = visibilityValue;
            txtAcctName.Visible = visibilityValue;
            txtAcctNumber.Visible = visibilityValue;
            txtBalance.Visible = visibilityValue;
            btnContinue.Visible = visibilityValue;
        }

        private void setVisPart2(bool visibilityValue)
        {
            lblWithdrawal.Visible = visibilityValue;
            lblDeposit.Visible = visibilityValue;
            txtWithdrawal.Visible = visibilityValue;
            txtDeposit.Visible = visibilityValue;
            btnCalculate.Visible = visibilityValue;
        }
    }
}

これが私のクラスコーディングです:

namespace BankingAccount
{
    class Banking
    {
        private string acctName;
        private int acctNumber;
        private double balance;
        private double withdrawal;
        private double deposit;

        public Banking(string name, int number, double total, double with, double dep)
        {
            acctName = name;
            acctNumber = number;
            balance = total;
            withdrawal = with;
            deposit = dep;
            DetermineBalance();
        }

        public string AcctName
        {
            set
            {
                acctName = value;
            }
            get
            {
                return acctName;
            }
        }

        public int AcctNumber
        {
            set
            {
                acctNumber = value;
            }
            get
            {
                return acctNumber;
            }
        }

        public double Withdraw
        {
            set
            {
                withdrawal = value;
            }
            get
            {
                return withdrawal;
            }
        }

        public double Deposit
        {
            set
            {
                deposit = value;
            }
            get
            {
                return deposit;
            }
        }

        public double Balance
        {
            set
            {
                balance = value;
            }
            get
            {
                return balance;
            }
        }

        public void DetermineBalance()
        {
            balance = balance + (deposit - withdrawal);
        }
    }
}
4

2 に答える 2

0

これはすべてインメモリであるため(つまり、データベースは使用されません)、これはすべてスコープの問題です。

スコープは、どの変数がどこに表示されるかを定義しBankingます..ボタンクリック内で計算するたびにオブジェクトを定義しています..ボタンクリックメソッドが終了すると、このオブジェクトは使用できなくなります。

解決するには、クラス レベルで宣言します。

public partial class Entrance : Form
{
    public string name;
    public int number;
    public double total;
    public double with;
    public double dep;

    public Banking anAccount = new Banking(); // <---- declare it up here

それをどのように機能させるかについては、「読者の課題」として残します。現状では、コンストラクターにパラメーターが必要なため、私の答えは役に立ちません。そのコンストラクターを削除し、オブジェクトのパブリック プロパティを使用することを検討してください。Bankingオブジェクトを再作成する代わりに、計算を押すたびに..プロパティを設定して呼び出しますCalculateBalance

(率直な答えを与えなかったことをお詫びします..しかし、これは明らかに宿題なので、私は道徳的にあなたに答えを与えない義務があります..多分他の誰かがそうですか?私があなたに与えたものはたくさんありますが!)

于 2013-01-07T04:44:35.530 に答える
0

問題は、文字列を解析して2倍にする瞬間に ToString("C") にあると思います。正しく解析されない歌がいくつかあります。

于 2013-01-07T03:11:12.723 に答える