2017-01-22 17 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()」需要無論從CreditCustomer或主類creditRate拉。我不知道如何將該值從子類傳遞到父類 2)在我的第二個'公共覆蓋字符串ToStrng()',我試圖添加一個額外的控制檯輸出到第一個覆蓋,並且我需要的值是名爲'getPaymentAmount'的程序的最後一種方法的結果

這是一項家庭作業任務,因此只是試圖填寫要求。

任何指導將不勝感激!

這些都是充分的功課要求:

  1. 定義類客戶實現IComparable接口。
    • 創建3個客戶類字段:客戶編號,客戶名稱和應付金額。爲每個字段創建自動訪問器。
    • 創建一個Customer類構造函數,它接受所有類字段的參數並通過訪問器分配傳遞的值。
    • 創建一個不帶參數的默認無參數Customer類構造函數,它將不帶任何參數並導致將默認值(9,「ZZZ」,0)發送到3參數構造函數。
    • 創建一個(覆蓋)Equals()方法,如果它們具有相同的客戶編號,則確定兩個客戶相等。
    • 創建一個(重寫)GetHashCode()方法,該方法返回客戶編號。
    • 創建一個(覆蓋)ToString()方法,該方法返回包含一般客戶信息的字符串(例如:CreditCustomer 1 russell AmountDue爲$ 4,311.00利率爲0.01)。以貨幣格式顯示美元金額。
    • 執行CompareTo以比較>,<,==的對象客戶編號以實現對對象數組的排序。
  2. 創建一個從Customer派生並實現IComparable接口的CreditCustomer類。
    • 使用自動存取器創建一個名爲Rate的類變量。
    • 創建一個CreditCustomer類構造函數,該構造函數爲Customer類的字段設置客戶編號,名稱,金額和費率百分比,將Rate CreditCustomer變量設置爲費率百分比。將ID號,名稱和金額傳回給基類Customer構造函數。
    • 創建一個不帶參數的默認無參數CreditCustomer類構造函數,該構造函數將不帶任何參數,並會將默認值(0,「」,0,0)發送到四參數CreditCustomer構造函數。
    • 創建一個(覆蓋)ToString()方法,該方法返回一個包含一般客戶信息的字符串(例如:CreditCustomer 1 russell AmountDue爲$ 4,311.00利率爲0.01每月付款爲$ 179.63)。以貨幣格式顯示美元金額。
    • 實施的CompareTo比較根據客戶的號碼>,<,==實現分選對象的數組CreditCustomer對象。
  3. 在主:
    • 創建五個CreditCustomer對象的數組。
    • 提示用戶輸入五個Customer對象各自的值;不要允許重複的客戶號碼,並在輸入重複的客戶號碼時強制用戶重新輸入客戶。
    • CreditCustomer對象應在客戶編號顯示前按客戶編號排序。
    • 當輸入五位有效客戶時,將其全部顯示出來,顯示所有客戶到期的總金額,再次顯示相同信息以及每位客戶的每月付款。請參閱下面顯示的輸入/輸出示例。
    • 創建一個靜態GetPaymentAmounts方法,該方法將當前的Credit客戶對象作爲參數並返回一個double值類型。每個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如果是的話,我相信他們在賦值時犯了一個錯誤,他們說顯示General Client的信息,但是他們寫在.ToString()CreditClient中。您無法訪問「父級」的屬性。 –

相關問題