2017-01-22 42 views
1

Je ne souhaite pas afficher toute la réponse à une tâche d'école. Je vais donc essayer d'inclure suffisamment de détails de codage pour montrer où Je suis raccroché.Le paiement du client individuel mensuel calculé sera retourné pour chaque objet CreditCustomer dans le tableau d'objets.

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 

Là où je vais avoir du mal est en deux points: 1) Ma première « chaîne override publique ToString() » doit tirer dans le creditRate soit de la CreditCustomer ou la classe principale. Je ne sais pas comment passer cette valeur d'une classe enfant à la classe parente 2) Sur ma deuxième chaîne de substitution publique ToStrng(), j'essaie d'ajouter une sortie de console supplémentaire au premier remplacement, et la valeur que je dois tirer est le résultat de la toute dernière méthode du programme nommé 'getPaymentAmount'

Ceci est un devoir, donc juste essayer de remplir les exigences.

Des instructions seraient appréciées!

Ce sont toutes les exigences de devoirs:

  1. Créer une classe nommée client qui implémente l'interface IComparable.
    • Créer 3 champs de classe client: numéro de client, nom du client et montant dû. Créer des accesseurs automatiques pour chaque champ.
    • Créez un constructeur de classe Customer qui prend des paramètres pour tous les champs de classe et affecte les valeurs passées via les accesseurs.
    • Créez un constructeur de classe client par défaut, sans argument, qui ne prendra aucun paramètre et provoquera l'envoi des valeurs par défaut de (9, "ZZZ", 0) au constructeur à 3 arguments.
    • Créez une méthode (override) Equals() qui détermine si deux clients sont égaux s'ils ont le même numéro de client.
    • Créez une méthode (override) GetHashCode() qui renvoie le numéro de client.
    • Créer une méthode (substitution) ToString() qui renvoie une chaîne contenant les informations générales du client (par exemple: CreditCustomer 1 russell AmountDue est $ 4,311.00 Le taux d'intérêt est 0,01). Afficher les montants en dollars au format monétaire
    • Mettre en œuvre CompareTo pour comparer les numéros de client d'objet pour>, <, == pour implémenter le tri pour le tableau d'objets.
  2. Créez une classe CreditCustomer dérivée de Customer et implémente l'interface IComparable.
    • Créez une variable de classe nommée Rate à l'aide d'un accesseur automatique.
    • Créez un constructeur de classe CreditCustomer qui prend en compte les paramètres du numéro de client, du nom, du montant et du pourcentage de taux des champs de classe Client qui définissent la variable Rate CreditCustomer sur le pourcentage de taux. Transmettez le numéro d'identification, le nom et le montant au constructeur de classe client de base.
    • Créez un constructeur de classe CreditCustomer par défaut et sans argument qui ne prendra aucun paramètre et provoquera l'envoi des valeurs par défaut de (0, "", 0, 0) au constructeur CreditCustomer à 4 arguments.
    • Créer une méthode (override) ToString() qui renvoie une chaîne contenant les informations générales du client (par exemple: CreditCustomer 1 russell AmountDue est $ 4,311.00 Le taux d'intérêt est de 0,01 Le paiement mensuel est $ 179,63).Afficher les montants en dollars au format monétaire
    • Mettre en œuvre CompareTo pour comparer les objets CreditCustomer en fonction des numéros de client pour>, <, == pour implémenter le tri pour le tableau d'objets.
  3. à Main:
    • Créer un tableau de cinq objets CreditCustomer.
    • Demande à l'utilisateur des valeurs pour chacun des cinq objets Client; N'autorisez PAS les numéros de client en double et obligez l'utilisateur à entrer de nouveau dans le client lorsqu'un numéro de client dupliqué est entré.
    • Les objets CreditCustomer doivent être triés par numéro de client avant d'être affichés.
    • Lorsque les cinq clients valides ont été saisis, affichez-les tous, affichez le montant total dû pour tous les clients, affichez la même information avec le paiement mensuel pour chaque client. Voir l'exemple d'entrée/sortie ci-dessous.
    • Créez une méthode GetPaymentAmounts statique qui aura l'objet Client de crédit en cours en tant que paramètre et retournera un type de valeur double. Chaque paiement mensuel CreditCustomer sera 1/24 du solde (montant dû). Le paiement du client individuel mensuel calculé sera renvoyé pour chaque objet CreditCustomer dans le tableau d'objets.
+0

Alors, quelle est l'attente exactement si le 'Customer' n'est pas un' CreditCustomer'? Ce type de client n'a pas de 'creditRate', et donc cela n'a pas beaucoup de sens de l'avoir dans ce niveau de 'ToString'. –

+0

Je suis d'accord, mais c'est exactement ce que cette tâche demande. –

+0

Pouvez-vous clarifier ce qui devrait être imprimé à la place de 'creditRate' s'il s'agit d'un' client' qui n'en a pas? (Si vous n'êtes pas sûr, vous devez aller à votre instructeur.) –

Répondre

0

Pour la question 1:

Vous pouvez utiliser la distribution pour la classe parente, mais soyez prudent lorsque vous faites des choses comme cela parce que vous pouvez obtenir StackOverflow exception :) (ou juste exception null

Pour la question 2: Vous pouvez créer une classe commune et passer vos appels dans cette classe.

J'ai modifié le code pour les deux options: (j'ai enlevé le 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

La classe commune a travaillé, merci. En ce qui concerne le casting, cela fonctionne aussi, mais cela n'a pas encore été couvert dans mon texte, donc la solution dont l'enseignant a besoin doit avoir quelque chose à voir avec l'Héritage ou les getters et setters. –

+0

@ T.Hill si oui, je crois qu'ils ont fait une erreur dans la cession, ils ont dit afficher les informations de General Client, mais ils ont écrit dans le CreditTient .ToString(). Vous ne pouvez pas accéder aux propriétés d'un "parent". –