2017-01-22 32 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中。您无法访问“父级”的属性。 –

相关问题