2017-01-22 16 views
1

Я не хочу публиковать весь ответ на школьное задание, поэтому я попытаюсь просто включить достаточно подробных сведений о кодировке, чтобы показать, где я Я повесил трубку.Вычисленный ежемесячный платеж отдельного клиента будет возвращен для каждого объекта CreditCustomer в массиве объектов

class Customer : IComparable // class declaration 
    { 
     public int customerNumber { get; set; } 
     public string customerName { get; set; } 
     public double amountDue { get; set; } 

     // Cust class constructor values assigned through accessors 
     public Customer(int number, string name, double due) 
     { 
     customerNumber = number; 
     customerName = name; 
     amountDue = due; 
     } 

     // override ToString method 
     public override string ToString() 
     { 
     return ("Credit Customer " + customerNumber + " " + customerName + " AmountDue is " + amountDue.ToString("C2") + 
      " Interest rate is " + creditRate); // creditRate causes error 
     } 
    } 

    // class derived from Customer 
    class CreditCustomer : Customer, IComparable 
    { 
     public double creditRate { get; set; } 

     // CreditCustomer class constructor values 
     public CreditCustomer(int number, string name, double due, double rate) : base(number, name, due) 
     { 
     customerNumber = number; 
     customerName = name; 
     amountDue = due; 
     creditRate = rate; 
     } 

     // override ToString method 
     public override string ToString() 
     { 
     return (base.ToString() + "\nMonthly payment is " + getPaymentAmount(creditCustomer[count].amountDue)); 
     } 

    } 

    // wrapper for Main 
    class Assignment06 
    { 
     static void Main(string[] args) 
     { 
     // instantiate an array of 5 CreditCustomer objects 
     const int NUM_OF_CUSTS = 5; 
     CreditCustomer[] creditCustomer = new CreditCustomer[NUM_OF_CUSTS]; 

     // get user input 
     for (int i = 0; i < creditCustomer.Length; i++) 
     { 
      Console.Write("Enter customer number: > "); 
      int number = Convert.ToInt32(Console.ReadLine()); 

      Console.Write("Enter name: > "); 
      string name = Convert.ToString(Console.ReadLine()); 

      Console.Write("Enter amount due: > "); 
      double due = Convert.ToDouble(Console.ReadLine()); 

      Console.Write("Enter interest rate: > "); 
      double rate = Convert.ToDouble(Console.ReadLine()); 

      creditCustomer[i] = new CreditCustomer(number, name, due, rate); 
     } 

     // Print to Console Summary Section 
     Console.WriteLine("\nSummary\n"); 
     double totalDue = 0.00; 
     for (int count = 0; count < creditCustomer.Length; count++) 
     { 
      Console.WriteLine(creditCustomer[count].ToString()); 
      totalDue += creditCustomer[count].amountDue; 
     } 
     Console.WriteLine("\nAmountDue for all Customers is {0}", totalDue.ToString("C2")); 

     // Print to Console Payment Section 
     Console.WriteLine("\nPayment Information\n"); 
     double monthlyDue = 0.00; 
     for (int count = 0; count < creditCustomer.Length; count++) 
     { 
      double payAmt = getPaymentAmount(creditCustomer[count].amountDue); 
      Console.WriteLine(creditCustomer[count].ToString()); 
      monthlyDue += creditCustomer[count].amountDue/24; 
     } 
     Console.WriteLine("\nMonthly payments for all Customers is {0}", monthlyDue.ToString("C2")); 
     } // end Main 

     public static double getPaymentAmount(double value) 
     { 
     double monthlyPayment = value/24; 
     return monthlyPayment; 
     } 
    } // end class wrapper for Main 

Где у меня возникают проблемы в двух местах: 1) Моей первой "публичное переопределение строки ToString() нужно тянуть в creditRate либо от CreditCustomer или главного класса. Я не уверен, как передать это значение из дочернего класса в родительский класс. 2) На моей второй «открытой переопределяющей строке ToStrng()» я пытаюсь добавить дополнительный вывод консоли для первого переопределения, а значение, которое мне нужно извлечь, является результатом самого последнего метода программы «getPaymentAmount»

Это домашнее задание, поэтому просто пытаюсь выполнить требования.

Любые указания будут оценены!

Эти полные требования домашние задания:

  1. Создать класс с именем клиента, который реализует интерфейс IComparable.
    • Создайте 3 поля класса клиента: номер клиента, имя клиента и причитающуюся сумму. Создавайте автоматические аксессоры для каждого поля.
    • Создайте конструктор класса Customer, который принимает параметры для всех полей класса и присваивает переданные значения через аксессоров.
    • Создайте конструктор класса по умолчанию, без аргумента, который не примет никаких параметров и приведет к отправке значений по умолчанию (9, «ZZZ», 0) в конструктор с 3 аргументами.
    • Создать (переопределить) метод Equals(), который определяет два Клиента, равны, если они имеют одинаковый номер Клиента.
    • Создайте (переопределить) метод GetHashCode(), который возвращает номер клиента.
    • Создайте (переопределить) метод ToString(), который возвращает строку, содержащую общую информацию о клиенте (например: CreditCustomer 1 russell AmountDue составляет 4 311,00 долларов США. Процентная ставка равна 0,01). Отображение суммы в долларах в формате валюты.
    • Внедрение CompareTo для сравнения номеров клиентов объекта для>, <, == для реализации сортировки для массива объектов.
  2. Создайте класс CreditCustomer, который происходит от Клиента и реализует интерфейс IComparable.
    • Создайте переменную класса с именем Rate с использованием автоматического доступа.
    • Создайте конструктор класса CreditCustomer, который принимает параметры для номера клиента, полей, имени, суммы и процента процента класса клиента, который устанавливает переменную Rate CreditCustomer в процентную ставку. Передайте номер id, имя и сумму обратно в базовый конструктор класса Customer.
    • Создайте конструктор класса CreditCustomer по умолчанию без аргументов, который не примет никаких параметров и приведет к отправке значений по умолчанию (0, «", 0, 0) в конструктор CreditCustomer с 4 аргументами.
    • Создайте (переопределить) метод ToString(), который возвращает строку, содержащую общую информацию о клиенте (например: CreditCustomer 1 russell AmountDue составляет 4 311,00 долларов США. Процентная ставка 0,01 Ежемесячный платеж составляет 179,63 доллара США).Отображение суммы в долларах в формате валюты.
    • Реализация CompareTo для сравнения объектов CreditCustomer на основе номеров клиентов для>, <, == для реализации сортировки для массива объектов.
  3. В Main:
    • Создать массив из пяти CreditCustomer объектов.
    • Запросить пользователя для значений для каждого из пяти объектов Customer; НЕ разрешайте дублировать номера клиентов и заставлять пользователя повторно вводить Клиента при вводе двойного номера клиента.
    • Объекты CreditCustomer должны быть отсортированы по номеру клиента до их отображения.
    • Когда введены пять действительных Клиентов, отобразите их все, отобразите общую сумму, подлежащую оплате для всех Клиентов, снова отобразите ту же самую информацию с ежемесячной оплатой для каждого клиента. См. Пример ввода/вывода, показанный ниже.
    • Создайте статический метод GetPaymentAmounts, который будет иметь текущий объект клиента кредита как параметр и возвращает тип двойного значения. Каждый ежемесячный платеж CreditCustomer составит 1/24 от суммы (причитающейся суммы). Вычисленная ежемесячная индивидуальная оплата клиента будет возвращена для каждого объекта CreditCustomer в массиве объектов.
+0

Так что же такое ожидание, если 'Customer' не' CreditCustomer'? У такого клиента нет «creditRate», и поэтому не имеет смысла иметь его на этом уровне «ToString». –

+0

Я бы согласился, но это просто то, что задает домашнее задание. –

+0

Можете ли вы уточнить, что следует печатать вместо «creditRate», если это будет «Клиент», у которого его нет? (Если вы не уверены, вам нужно обратиться к вашему инструктору.) –

ответ

0

На вопрос 1:

Вы можете использовать бросок для родительского класса, но будьте осторожны, когда вы делаете такие вещи, потому что вы можете получить StackOverflow исключение :) (или просто нулевым исключением)

Для вопроса 2: Вы можете создать общий класс и совершить звонки через этот класс.

Я изменил код для обоих вариантов: (я удалил IComparable)

public static class Common 
    { 
     public static double getPaymentAmount(double value) 
     { 
      double monthlyPayment = value/24; 
      return monthlyPayment; 
     } 
    } 

    class Customer // class declaration 
    { 
     public int customerNumber { get; set; } 
     public string customerName { get; set; } 
     public double amountDue { get; set; } 

     // Cust class constructor values assigned through accessors 
     public Customer(int number, string name, double due) 
     { 
      customerNumber = number; 
      customerName = name; 
      amountDue = due; 
     } 

     // override ToString method 
     public override string ToString() 
     { 
      return ("Credit Customer " + customerNumber + " " + customerName + " AmountDue is " + amountDue.ToString("C2") + 
       " Interest rate is " + ((this as CreditCustomer!=null) ? ((CreditCustomer)this).creditRate.ToString() : "N/A")); // creditRate causes error 
     } 
    } 

    // class derived from Customer 
    class CreditCustomer : Customer 
    { 
     public double creditRate { get; set; } 

     // CreditCustomer class constructor values 
     public CreditCustomer(int number, string name, double due, double rate) 
      : base(number, name, due) 
     { 
      customerNumber = number; 
      customerName = name; 
      amountDue = due; 
      creditRate = rate; 
     } 

     // override ToString method 
     public override string ToString() 
     { 
      return (base.ToString() + "\nMonthly payment is " + Common.getPaymentAmount(this.amountDue)); 
     } 

    } 

    // wrapper for Main 
    class Assignment06 
    { 
     static void Main(string[] args) 
     { 
      // instantiate an array of 5 CreditCustomer objects 
      const int NUM_OF_CUSTS = 1; 
      CreditCustomer[] creditCustomer = new CreditCustomer[NUM_OF_CUSTS]; 

      // get user input 
      for (int i = 0; i < creditCustomer.Length; i++) 
      { 
       Console.Write("Enter customer number: > "); 
       int number = Convert.ToInt32(Console.ReadLine()); 

       Console.Write("Enter name: > "); 
       string name = Convert.ToString(Console.ReadLine()); 

       Console.Write("Enter amount due: > "); 
       double due = Convert.ToDouble(Console.ReadLine()); 

       Console.Write("Enter interest rate: > "); 
       double rate = Convert.ToDouble(Console.ReadLine()); 

       creditCustomer[i] = new CreditCustomer(number, name, due, rate); 
      } 

      // Print to Console Summary Section 
      Console.WriteLine("\nSummary\n"); 
      double totalDue = 0.00; 
      for (int count = 0; count < creditCustomer.Length; count++) 
      { 
       Console.WriteLine(creditCustomer[count].ToString()); 
       totalDue += creditCustomer[count].amountDue; 
      } 
      Console.WriteLine("\nAmountDue for all Customers is {0}", totalDue.ToString("C2")); 

      // Print to Console Payment Section 
      Console.WriteLine("\nPayment Information\n"); 
      double monthlyDue = 0.00; 
      for (int count = 0; count < creditCustomer.Length; count++) 
      { 
       double payAmt = Common.getPaymentAmount(creditCustomer[count].amountDue); 
       Console.WriteLine(creditCustomer[count].ToString()); 
       monthlyDue += creditCustomer[count].amountDue/24; 
      } 
      Console.WriteLine("\nMonthly payments for all Customers is {0}", monthlyDue.ToString("C2")); 
      Console.ReadKey(); 
     } // end Main 


    } // end class wrapper for Main 
+0

Общий класс работал, спасибо. Что касается кастинга, это работает так же хорошо, но это еще не было охвачено в моем тексте, поэтому решение, которое требуется учителю, должно иметь какое-то отношение к Наследству, геттерам и сеттерам. –

+0

@ T.Hill, если это так, я считаю, что они допустили ошибку в задании, они сказали, что отображают информацию об общем клиенте, но они писали в .ToString() CreditClient. Вы не можете получить доступ к свойствам «родителя». –