Как связать указанный объект c Customer с собственными объектами Account? - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь запрограммировать банковскую систему. Это для назначения класса, так что я не ищу полное решение, а просто, как выполнить sh один аспект. Система имеет класс Customer, абстрактный класс Account и 4 производных класса Account. Я использую Windows формы, чтобы принять пользовательский ввод. Пользователь вводит информацию о клиенте в текстовые поля, затем нажимает кнопку, которая создает новый объект клиента и добавляет его в список клиентов, который был создан ранее в коде:

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

Затем пользователь может ввести информацию об учетной записи и выберите тип учетной записи, затем нажмите другую кнопку, чтобы создать экземпляр объекта учетной записи с объектом Customer в качестве одного из его параметров.

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

Вот перегруженный конструктор учетной записи:

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

Моя проблема в том, что я не знаю, что должно go в строке new CheckingAccount(_____, acctNum, startBal, "Checking") вместо подчеркиваний, показанных здесь. Идея состоит в том, чтобы использовать композицию, чтобы показать, что учетная запись принадлежит клиенту (т. Е. У клиента есть учетная запись), чтобы я мог показать список учетных записей, принадлежащих конкретным c клиентам. Это прекрасно работает при создании экземпляров объектов непосредственно в коде без ввода данных пользователем, потому что я могу назвать переменную объекта 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"));

Вместо приведенных выше подчеркиваний я попытался использовать custID и Customer.custID, но постоянно получаю следующую ошибку:

Аргумент 1 : невозможно преобразовать из int в Bank.Customer. И я понимаю, почему появляется ошибка, но я не могу найти правильный путь, чтобы не получить ошибку.

Еще одна идея, о которой я подумал, но не могу понять, как ее реализовать, - это просто исключить объект Customer из списка параметров в перегруженном конструкторе. Вместо этого, чтобы вызвать учетную запись определенного клиента c, я бы использовал индекс объектов в списке. Но, помимо простого знания порядка, в котором клиенты / учетные записи были добавлены в их соответствующие списки, как пользователь сможет получить нужную информацию для нужного клиента / учетной записи?

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Это не то, что я искал, но это сделало работу достаточно хорошо. Я изменил свой конструктор так, чтобы он принимал строку с именем custID вместо создания объекта реального клиента. Я также добавил строковое поле с тем же именем в свой абстрактный класс Account, а также поле List с именем List<Account> _accountList;

Затем в своей основной программе я добавил все производные объекты аккаунта в List. Чтобы позвонить на счет, принадлежащий указанному клиенту c, я использовал следующее l oop и выражение 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]);
    }
}

Конечно, я хотел бы что-то более надежное для реальной банковской системы, но это было достаточно хорошо для класса!

0 голосов
/ 28 марта 2020

Если я правильно вас понимаю, ваша проблема в том, что у вас возникли проблемы с переходом от ввода данных пользователя в форме Windows к созданию учетной записи? Похоже, вы уже получили суть того, что поместить в свои _____ блоки с помощью своего раздела «создание экземпляров непосредственно в коде».

Я бы порекомендовал, чтобы для вашей формы, которая создает новую учетную запись, было раскрывающееся меню Клиенты из списка customerList. Затем сопоставьте выбор пользователя с фактическим клиентом в customerList по идентификатору и передайте его в конструктор учетной записи.

...