【问题标题】:How to connect a specific Customer object with its own Account objects?如何将特定的 Customer 对象与其自己的 Account 对象连接起来?
【发布时间】:2020-03-27 17:11:42
【问题描述】:

我正在尝试对银行系统进行编程。这是一个课堂作业,所以我不是在寻找一个完整的解决方案,而只是在寻找如何完成一个方面。系统有一个Customer类、一个抽象Account类和4个派生的account类。我正在使用 Windows 窗体来接受用户输入。用户在文本框中输入客户信息,然后单击一个按钮,该按钮实例化一个新的客户对象并将其添加到前面在代码中创建的客户列表中:

customerList.Add(new Customer(custID, name, phone));

然后用户可以输入帐户信息并选择帐户类型,然后单击另一个按钮以实例化一个客户对象作为其参数之一的帐户对象。

checkingList.Add(new CheckingAccount(_____, acctNum, startBal, "Checking"));

这里是重载的 Account 构造函数:

public Account(Customer customer, int acctNum, decimal balance, string acctType)
        {
            _customer = customer;
            _acctNum = acctNum;
            _balance = balance;
            _APY = APY;
            _acctType = acctType;
        }

我的问题是,我不知道应该在new CheckingAccount(_____, acctNum, startBal, "Checking") 行中用什么代替此处显示的下划线。这个想法是使用组合来显示该帐户属于客户(即客户“拥有”帐户),以便我可以显示属于特定客户的帐户列表。这在无需用户输入的情况下直接在代码中实例化对象时效果很好,因为我可以在编写 Customer 对象变量时为其命名。例如:

Customer customer1 = new Customer(1000, "John Doe", "555-555-5555");
customerList.Add(customer1);
checkingList.Add(new CheckingAccount(customer1, 300001, 5000, "Checking"));
savingsList.Add(new SavingsAccount(customer1, 400001, 10000, "Savings"));

我尝试使用custIDCustomer.custID 代替上面的下划线,但我不断收到以下错误:

参数 1:无法从 'int' 转换为 'Bank.Customer' 而且我理解为什么会弹出错误,但我无法找出正确的方法,所以我没有收到错误。

另一个我考虑过但不太清楚如何实现的想法是简单地从重载构造函数的参数列表中删除 Customer 对象。相反,要调用特定客户的帐户,我会使用列表中的对象索引。但是,除了知道将客户/帐户添加到各自列表中的顺序之外,用户如何能够为正确的客户/帐户提取正确的信息?

【问题讨论】:

  • 通过首先指定您的列表是什么并只留下重现问题所需的最少代码,为我们提供更多代码。

标签: c# visual-studio winforms composition


【解决方案1】:

如果我理解正确,您的问题是您在从 Windows 窗体中的给定用户输入到创建帐户时遇到问题?似乎您已经通过“直接在代码中实例化”部分了解了要在_____ 块中放入什么内容的要点。

我建议,对于创建新帐户的表单,从 customerList 中填充一个客户下拉列表。然后,通过 id 将用户的选择映射到 customerList 中的实际客户,并将其传递给帐户构造函数。

【讨论】:

    【解决方案2】:

    这不是我想要的,但它可以很好地完成工作。我修改了我的构造函数以接受一个名为custID 的字符串,而不是实际客户对象的实例化。我还在我的抽象 Account 类中添加了一个同名的字符串字段,以及一个名为 List<Account> _accountList; 的 List 字段

    然后在我的主程序中,我将所有派生帐户对象添加到列表中。为了调用属于特定客户的帐户,我使用了以下循环和 if 语句:

    private void btnShowCustAccts_Click(object sender, EventArgs e)
    {
        lstbxAccounts.Items.Clear();
        string currentCustomer = txtbxEnterCustID.Text;
        for (int i=0; i< accountList.Count;i++)
        {
            if (accountList[i].CustID == currentCustomer)
                lstbxAccounts.Items.Add(accountList[i]);
        }
    }
    

    当然,我希望为实际的银行系统提供更强大的东西,但这对于课堂来说已经足够了!

    【讨论】:

      猜你喜欢
      • 2014-05-02
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      相关资源
      最近更新 更多