C#:使用Windows窗体的ATM系统如何安装取款按钮?这笔钱扣了两次
例如:当我的余额为200美元时,我第一次提取12美元,剩余的是188美元(这是有效的),但当我再次提取2美元时(必须是186美元),但我得到的答案是174美元。 我在项目中使用了多态性和抽象类。我对它进行了调试,发现我创建的foreach语句就是问题所在,但我无法修复它。 我忘了放数据库类C#:使用Windows窗体的ATM系统如何安装取款按钮?这笔钱扣了两次,c#,button,polymorphism,abstract-class,windows-forms-designer,C#,Button,Polymorphism,Abstract Class,Windows Forms Designer,例如:当我的余额为200美元时,我第一次提取12美元,剩余的是188美元(这是有效的),但当我再次提取2美元时(必须是186美元),但我得到的答案是174美元。 我在项目中使用了多态性和抽象类。我对它进行了调试,发现我创建的foreach语句就是问题所在,但我无法修复它。 我忘了放数据库类 public class BankDatabase { private Account[] account; public BankDatabase() { accou
public class BankDatabase
{
private Account[] account;
public BankDatabase()
{
account = new Account[3];
account[0] = new Account(1000, 1111, 200, 100);
account[1] = new Account(1001, 2222, 400, 500);
account[2] = new Account(1002, 3333, 100, 700);
}
private Account GetAccount(int account_number)
{
foreach (Account currentAccount in account)
{
if (currentAccount.AccountNum == account_number)
return currentAccount;
}
return null;
}
public bool Validation(int user_accnum, int user_pin)
{
Account user = GetAccount(user_accnum);
if (user != null)
return user.verification(user_pin);
else
return false;
}
public decimal GetAvailableBalance(int user_accum)
{
Account user = GetAccount(user_accum);
return user.AvailableBalance;
}
public decimal GetTotalBalance(int user_accum)
{
Account user = GetAccount(user_accum);
return user.TotalBalance;
}
public decimal Credit(int user_accum, decimal amount)
{
Account user = GetAccount(user_accum);
return user.Credit(amount);
}
public decimal Debit(int user_accum, decimal amount)
{
Account user = GetAccount(user_accum);
return user.debit(amount);
}
}
class Account
{
private int accountnum;
private int pin;
private decimal availablebalance;
private decimal totalbalance;
public Account()
{
}
public Account(int accountnum, int pin, decimal availablebalance, decimal totalbalance)
{
this.accountnum = accountnum;
this.pin = pin;
this.availablebalance = availablebalance;
this.totalbalance = totalbalance;
}
public int AccountNum
{
get
{
return accountnum;
}
}
public int PIN
{
get
{
return pin;
}
}
public decimal AvailableBalance
{
get
{
return availablebalance;
}
}
public decimal TotalBalance
{
get
{
return totalbalance;
}
}
public decimal Credit(decimal amount)
{
return availablebalance = availablebalance + amount;
}
public decimal debit(decimal amount)
{
return availablebalance = availablebalance - amount;
}
public bool verification (int userpin)
{
return (userpin == PIN);
}
}
public class Withdraw : Transaction
{
private decimal amount;
decimal t2;
public Withdraw()
{ }
public Withdraw(int accountnum, BankDatabase database, decimal amount) : base(accountnum, database)
{
this.amount = amount;
}
public decimal Amount
{
get
{
return amount;
}
}
public override string ToString()
{
return "Withdrawn amount is= " + t2;
}
public override decimal balance()
{
decimal availablebalance = DataBase.GetAvailableBalance(accountnum);
if(amount<=availablebalance)
{
t2 = DataBase.Debit(accountnum, amount);
}
return t2;
}
}
public abstract class Transaction
{
protected int accountnum;
private BankDatabase database;
public Transaction ()
{
}
public Transaction(int accountnum,BankDatabase database)
{
this.accountnum = accountnum;
this.database = database;
}
public int AccountNum
{
get
{
return accountnum;
}
}
public BankDatabase DataBase
{
get
{
return database;
}
}
public abstract decimal balance();
public override string ToString()
{
return "Account Number" + accountnum;
}
}
private void withdraw_button_Click(object sender, EventArgs e)
{
transaction.Add(new Withdraw(Form1.accountnumber, database, with_amount));
foreach (Transaction trans in transaction)
{
label2.Text = "Withdraw" + trans.balance().ToString();
}
}
公共类数据库
{
私人账户[]账户;
公共银行数据库()
{
账户=新账户[3];
账户[0]=新账户(10001111200100);
账户[1]=新账户(1001222400500);
账户[2]=新账户(1002333100700);
}
私人帐户GetAccount(内部帐户\u编号)
{
foreach(账户中的当前账户)
{
if(currentAccount.AccountNum==帐号)
返回活期账户;
}
返回null;
}
公共bool验证(int user\u accnum、int user\u pin)
{
账户用户=GetAccount(用户\账户编号);
如果(用户!=null)
返回用户验证(用户密码);
其他的
返回false;
}
公共十进制GetAvailableBalance(int user_accum)
{
账户用户=GetAccount(用户累计);
返回user.AvailableBalance;
}
公共十进制GetTotalBalance(int user_acum)
{
账户用户=GetAccount(用户累计);
返回user.TotalBalance;
}
公共十进制贷记(整数用户累计,十进制金额)
{
账户用户=GetAccount(用户累计);
返回用户信用(金额);
}
公共十进制借方(整数用户累计,十进制金额)
{
账户用户=GetAccount(用户累计);
返回用户。借方(金额);
}
}
类别帐户
{
私人帐户数;
私人密码;
私有十进制可用平衡;
私人十进位余额;
公共帐户()
{
}
公共帐户(int accountnum、int pin、十进制可用余额、十进制总余额)
{
this.accountnum=accountnum;
this.pin=pin;
this.availablebalance=availablebalance;
this.totalbalance=totalbalance;
}
公共int AccountNum
{
得到
{
返回accountnum;
}
}
公共内部PIN码
{
得到
{
回位销;
}
}
公共十进制可用平衡
{
得到
{
返回可用平衡;
}
}
公共十进制总余额
{
得到
{
返回总余额;
}
}
公共十进制信用证(十进制金额)
{
返回可用平衡=可用平衡+金额;
}
公共十进制借方(十进制金额)
{
return availablebalance=availablebalance-金额;
}
公共bool验证(int-userpin)
{
返回(userpin==PIN);
}
}
公共类撤消:事务
{
私人十进制金额;
十进制t2;
公众撤回
{ }
公共提款(int accountnum,BankDatabase数据库,十进制金额):基数(accountnum,数据库)
{
这个。金额=金额;
}
公共小数金额
{
得到
{
退货金额;
}
}
公共重写字符串ToString()
{
return“提取金额为=”+t2;
}
公共覆盖十进制余额()
{
decimal availablebalance=数据库.GetAvailableBalance(accountnum);
如果(金额在您的foreach循环中,您正在迭代您的交易,而没有为下一个循环清除它。实际上,您正在累积交易,并每次重复它们。以某种方式清除交易
可以解决您的问题。您可能没有清除交易,而您的foreach循环正在重复它。还没有完全查看代码,但是如果您在方法末尾清除了事务,您应该会很好。Retrach\u Click事件处理程序中事务变量的数据类型是什么?这是一个列表吗?
?您在哪里定义它?您向我们展示了很多代码,但可能没有展示最重要的代码partI会说,使用draw.Balance()来应用更改似乎是一个奇怪的地方。我希望交易有一个虚拟的apply()或类似的。并且帐户有一个贷方(借方只是一个负值)取款将依赖于账户来实际进行更改。余额似乎不是取款的“一部分”。@gilliduck我确实使用了clear事务,它工作正常!谢谢!现在我想在账户之间转账,不使用真正的数据库而不是数据库类,这可能吗?