银行提款和存款程序C#
我是C#的新手,目前正在研究创建一个简单的银行取款和存款程序的方法和构造器,以计算存款后的余额 我要么被这些指示弄糊涂了,要么我做错了什么。我只是想不通。我试图将初始默认余额设置为$1000,同时将余额字段设置为只读字段 我遇到的主要问题是,我正在尝试为只读“Balance”字段设置构造函数。C#是说我不能调用只读的方法。如果有人能帮我的话,我把我的代码贴在下面。先谢谢你 Account.cs银行提款和存款程序C#,c#,methods,constructor,readonly,C#,Methods,Constructor,Readonly,我是C#的新手,目前正在研究创建一个简单的银行取款和存款程序的方法和构造器,以计算存款后的余额 我要么被这些指示弄糊涂了,要么我做错了什么。我只是想不通。我试图将初始默认余额设置为$1000,同时将余额字段设置为只读字段 我遇到的主要问题是,我正在尝试为只读“Balance”字段设置构造函数。C#是说我不能调用只读的方法。如果有人能帮我的话,我把我的代码贴在下面。先谢谢你 Account.cs class Account { public const double defaultBala
class Account
{
public const double defaultBalance = 1000;
private double _amount;
public double balance;
public double Balance
{
get { return defaultBalance; }
}
public double Amount
{
get
{
return _amount;
}
set
{
if (value < 0)
{
throw new ArgumentException("Please enter an amount greater than 0");
}
else
{
_amount = value;
}
}
}
public double doDeposit()
{
balance += _amount;
return balance;
}
public double doWithdrawl()
{
balance -= _amount;
if (balance < 0)
{
throw new ArgumentException("Withdrawing " + _amount.ToString("C") + " would leave you overdrawn!");
}
return balance;
}
}
namespace Account_Teller
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Account acc = new Account();
private void btnWithdraw_Click(object sender, EventArgs e)
{
try
{
acc.Amount = double.Parse(txtAmount.Text);
//Error in the line below. "Property cannot be assigned to -- it is read only
//Trying to set the initial balance as $1000 using constructor from 'Account' class
acc.Balance = double.Parse(lblBalance.Text);
lblBalance.Text = acc.doWithdrawl().ToString("C");
}
catch (FormatException ex)
{
MessageBox.Show(ex.Message);
}
catch (ArgumentException ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
private void btnDeposit_Click(object sender, EventArgs e)
{
try
{
acc.Amount = double.Parse(txtAmount.Text);
lblBalance.Text = acc.doDeposit().ToString("C");
}
catch (FormatException ex)
{
MessageBox.Show(ex.Message);
}
catch (ArgumentException ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
}
Amount
属性DoWithdraw(十进制金额)
和DoDeposit(十进制金额)
Balance
,但只能通过类方法修改它。答案是使用自动实现的属性<代码>公共十进制余额{get;private set;}draw
和Deposit
帐户
源代码将是:
class Account {
public decimal Balance { get; private set; }
public Account(decimal initialBalance) {
if(initialBalance < 0)
throw new ArgumentOutOfRangeException("The initial balance must be greater or equals to 0");
this.Balance = initialBalance;
}
public bool TryDeposit(decimal amount) {
if(amount <= 0)
return false;
this.Balance += amount;
return true;
}
public bool TryWithdraw(decimal amount) {
if(amount <= 0 || this.Balance - amount < 0)
return false
this.Balance -= amount;
return true;
}
}
类帐户{
公共十进制余额{get;private set;}
公共账户(十进制初始余额){
如果(初始余额<0)
抛出新ArgumentOutOfRangeException(“初始余额必须大于或等于0”);
这个平衡=初始平衡;
}
公共布尔存储(十进制金额){
如果(金额)
公共属性(属性、字段、委托、事件或方法)应始终为PascalCase
您不应该使用Amount
属性,而应该将其作为参数传递给方法,我的意思是;DoWithdraw(十进制金额)
和DoDeposit(十进制金额)
如我所见,您希望能够从类外读取Balance
,但只能通过类方法修改它。答案是使用自动实现的属性;public decimal Balance{get;private set;}
通常,一个帐户没有一个默认的初始值,如Dax Fohl所说。更合适的做法是使用一个构造函数来设置初始值
通常,我们不使用“do”作为不定式动词的前缀,只使用draw
和Deposit
正如Dax和Lars所说,对货币使用十进制数据类型更合适
然后,您的帐户
源代码将是:
class Account {
public decimal Balance { get; private set; }
public Account(decimal initialBalance) {
if(initialBalance < 0)
throw new ArgumentOutOfRangeException("The initial balance must be greater or equals to 0");
this.Balance = initialBalance;
}
public bool TryDeposit(decimal amount) {
if(amount <= 0)
return false;
this.Balance += amount;
return true;
}
public bool TryWithdraw(decimal amount) {
if(amount <= 0 || this.Balance - amount < 0)
return false
this.Balance -= amount;
return true;
}
}
类帐户{
公共十进制余额{get;private set;}
公共账户(十进制初始余额){
如果(初始余额<0)
抛出新ArgumentOutOfRangeException(“初始余额必须大于或等于0”);
这个平衡=初始平衡;
}
公共布尔存储(十进制金额){
如果(金额1),请将其更改为控制台应用程序和类(存款、取款、检查余额、更改pin)
2) 请将其更改为带有类的控制台应用程序(存款、取款、支票余额、更改pin)&使用所有OOP支柱(p>1)请将其更改为带有类的控制台应用程序(存款、取款、支票余额、更改pin)
2) 请在控制台应用程序中使用类(存款、取款、检查余额、更改pin)进行更改使用所有OOP支柱时,您的余额属性上没有setter
属性。@Steve说明要求我将余额设置为只读属性。如果允许我添加setter,则不会有问题。TLDR;我想您需要类似private decimal defaultBalance;
的设置,为什么您的余额getter返回为t他是defaultBalance而不是实际余额?也是您试图设置帐户的值。余额在您标记的行上。您应该将acc.余额解析到文本字段中考虑到程序的性质,为余额设置一个setter是一个糟糕的设计。余额的任何更改都应该是结果存款、取款、转账、借记、贷记和账户的其他形式的交易
对象您的余额
属性上没有设置器。@Steve说明要求我将余额设置为只读属性。如果允许我添加设置器,这不会是一个问题。TLDR;我想您需要类似的设置private decimal defaultBalance;
为什么您的余额获取程序返回的是默认余额而不是实际余额?您还试图设置account.Balance的值,您在第行标记了该值。您应该将acc.Balance解析到文本字段中。无论如何,为余额设置一个设置程序是不明智的程序的性质。余额
的任何更改都应该是存款、取款、转账、借记、贷记和其他形式的交易到帐户
对象的结果。我将默认余额
放入程序.cs
或其他地方,并将其传递到帐户
构造函数中。这似乎很奇怪要使account类始终以设置的美元金额(而不是零)开头,请执行以下操作。此外,decimal
在这里比double
更合适。@TiesonT。由于余额设置器应该是私有的/受保护的,所以您不能这样做。我建议更新此答案以使用decimal而不是double。千万不要让货币接近浮点