2013-12-04 3 views
0

Мне нужно написать простое тестовое консольное приложение на C# для отслеживания сбора средств в школе. Вот как выглядит ожидаемый результат. Запросы ввода пользователя должны быть помещены внутри цикла, чтобы программа продолжала запрашивать входные данные, пока не будет введена «999» для оценки пользователя. Если/когда введено значение 999, программа должна рассчитать среднее значение вкладов и отобразить результаты с поздравительным сообщением самому крупному сборщику.Простая консольная консоль C# для ввода пользователя и расчета среднего значения для каждого пользователя

// Создайте класс, который будет реализовывать частные переменные, которые необходимы. создавать методы класса для выполнения требуемых функций. В основном методе, создайте экземпляр одного объекта сбора средств и используйте этот объект для доступа к частной переменной. Эта проблема имеет смысл? Как вы вырезаете класс для выполнения всех этих задач?

Sample output: 
/*School Fund Raiser Tracker Application */ 

Please enter the grade of the contributor (6, 7 or 8) 
(Enter 999 to exit): 6 

Please enter the amount of the contribution: 100 

Please enter the grade of the contributor (6, 7 or 8) 
(Enter 999 to exit): 6 

Please enter the amount of the contribution: 200 

Please enter the grade of the contributor (6, 7 or 8) 
(Enter 999 to exit): 7 

Please enter the amount of the contribution: 500 

Please enter the grade of the contributor (6, 7 or 8) 
(Enter 999 to exit): 7 

Please enter the amount of the contribution: 100 

Please enter the grade of the contributor (6, 7 or 8) 
(Enter 999 to exit): 999 

Grade Level  # of Contrib Total Amount  Average 
6     2    300    150 
7     2    600    300 

Моя взять на него:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace FundRaiser 
{ 
    public class SchoolFundRaiser 
    { 
     //public int grade { get; set; } 
     //public double contribution { get; set; } 
     public double average { get; set; } 
     public int numOfContributions { get; set; } 


     public void CalculateContribution() 
     { 
      int grade= 0; double contribution = 0.0; 
      double total6 = 0.0, total7 = 0.0, total8 = 0.0, average6 = 0.0, average7 = 0.0, average8 = 0.0; 
      int count6 = 0, count7 = 0, count8 = 0; 
       while (grade != 999) 
       { 
        Console.WriteLine("Please Enter your grade(6, 7, 8). Enter 999 to quit."); 
        grade = Convert.ToInt32(Console.ReadLine()); 

        if (grade != 999) 
        { 
         Console.WriteLine("Please Enter the Amount you want to contribute. "); 
         contribution = Convert.ToDouble(Console.ReadLine()); 
        } 
        else 
        { 
         Console.WriteLine("Exiting..."); 
        } 

        if (grade == 6) 
        { 
         total6 = total6 + contribution; 
         count6 = count6 +1; 
        } 

        if (grade == 7) 
        { 
         total7 = total7 + contribution; 
         count7 = count7 + 1; 
        } 

        else if (grade == 8) 
        { 
         total8 = total8 + contribution; 
         count8= count8 + 1; 
        } 



       } 

       average6 = total6/count6; 
       average7 = total7/count7; 
       average8 = total8/count8; 

       Console.WriteLine("Grade \t" + "Num of Contributions \t" + "Total Contribution \t" + "Average contribution"); 
       if (grade == 6) 
       { 
        average = average6; 
        numOfContributions = count6; 
        Console.WriteLine(grade + "\t" + numOfContributions + "\t" + total6 + "\t" + average); 
       } 
       if (grade == 7) 
       { 
        average = average7; 
        numOfContributions = count7; 
        Console.WriteLine(grade + "\t" + numOfContributions + "\t" + total7 + "\t" + average); 
       } 
       else 
       { 
        average = average8; 
        numOfContributions = count8; 
        Console.WriteLine(grade + "\t" + numOfContributions + "\t" + total8 + "\t" + average); 
       } 

     } 

    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SchoolFundRaiser testSchoolFundRaiser = new SchoolFundRaiser(); 
      testSchoolFundRaiser.CalculateContribution(); 
     } 
    } 
} 
+0

Вы хотя бы что-то пробовали? Если да, отправьте его здесь. – Szymon

+1

@ Шимон по какой-то причине решил сначала не показывать мой код. Ошибка Ctrl + K? – Athapali

+0

Ваш код выглядит отлично. Что за вопрос? – Shaharyar

ответ

1

Вы можете использовать Dictionary и Generic List<>, если вы хотите, чтобы сделать его более элегантным. Ниже приведен класс, который будет принимать Оценки и взносы, а затем отображать общее количество взносов за класс и его среднее значение.

В списке есть свойство Count для получения количества взносов за класс, существует также метод Sum(), чтобы получить общий объем взносов за класс, а затем, наконец, есть метод Average(), чтобы получить средний взнос за класс.

contri.Count, contri.Sum(), contri.Average() 

Одна вещь, чтобы отметить также в ключе, значение пара для словаря я List<double> его стоимости, так что она могла бы столько взносов для каждого класса, как пользователь хочет, как:

private Dictionary<string, List<double>> entries = new Dictionary<string, List<double>>(); 

Вот окончательный код ниже:

class SchoolFundRaising 
{ 
    private Dictionary<string, List<double>> entries = new Dictionary<string, List<double>>(); 
    public void displayContributionsSummary() 
    { 
     Console.WriteLine("Grade \t Num of Contributions \t Total Contribution \t Average contribution"); 

     foreach (string key in entries.Keys) 
     { 
      List<double> contri = entries.FirstOrDefault(k => k.Key == key).Value; 
      Console.WriteLine("Grade {0} \t {1}   \t  {2}    \t {3}", key, contri.Count, contri.Sum(), contri.Average()); 
     } 
    } 

    public void getContributionsGrades() 
    { 
     int grade = 0; 
     double contribution; 
     while (grade != 999) 
     { 
      Console.WriteLine("Please Enter your grade(6, 7, 8). Enter 999 to quit."); 
      grade = Convert.ToInt32(Console.ReadLine()); 

      if (grade >= 6 && grade <= 8) 
      { 
       Console.WriteLine("Please Enter the Amount you want to contribute. "); 
       contribution = Convert.ToDouble(Console.ReadLine()); 
       if (!entries.ContainsKey(grade.ToString())) 
       { 
        List<double> dummyList = new List<double>(); 
        dummyList.Add(contribution); 
        entries.Add(grade.ToString(), dummyList); 
       } 
       else 
       { 
        entries.First(k => k.Key == grade.ToString()).Value.Add(contribution); 
       } 
      } 
      else 
      { 
       if (grade == 999) 
       { 
        Console.WriteLine("Done..."); 
       } 
       else 
       { 
        Console.WriteLine("Grade should either be 6,7 or 8"); 
       } 
      } 
     } 
    } 
} 

Вы могли бы назвать в вашем главном так:

SchoolFundRaising FR = new SchoolFundRaising(); 
FR.getContributionsGrades(); 
FR.displayContributionsSummary(); 
1

Другой способ использования вклада как объекта и словаря для хранения вкладов.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace FundRaiser 
{ 
    class Program 
    { 
     public class GradeContribution 
     { 
      public GradeContribution() 
      { 
       this.Count = 0; 
       this.Total = 0.0; 
       this.Average = 0.0; 
      } 

      int grade; 

      public int Grade 
      { 
       get { return grade; } 
       set { grade = value; } 
      } 
      int count; 

      public int Count 
      { 
       get { return count; } 
       set { count = value; } 
      } 
      double total; 

      public double Total 
      { 
       get { return total; } 
       set { total = value; } 
      } 
      double average; 

      public double Average 
      { 
       get { return average; } 
       set { average = value; } 
      } 

     } 

     public class SchoolFundRaiser 
     { 
      Dictionary<int, GradeContribution> contributionReciept; 

      public SchoolFundRaiser() 
      { 
       contributionReciept = new Dictionary<int, GradeContribution>(); 
      } 

      public void CalculateContribution() 
      { 
       int grade = 0; 
       while (grade != 999) 
       { 
        Console.WriteLine("Please Enter your grade(6, 7, 8).\n (Enter 999 to quit):"); 
        grade = Convert.ToInt32(Console.ReadLine()); 

        if (grade != 999) 
        { 
         GetContribution(grade); 
        } 
        else 
        { 
         Console.WriteLine("Exiting..."); 
         DisplayContribution(); 
        } 
       } 
      } 

      void GetContribution(int grade) 
      { 
       Console.WriteLine("Please Enter the Amount you want to contribute. "); 
       double contribution = Convert.ToDouble(Console.ReadLine()); 

       if (contributionReciept.ContainsKey(grade)) 
       { 
        GradeContribution contribute = contributionReciept[grade]; 
        contribute.Count++; 
        contribute.Total += contribution; 
        contribute.Average = (contribute.Total/contribute.Count); 
       } 
       else 
       { 
        GradeContribution contribute = new GradeContribution(); 
        contribute.Grade = grade; 
        contribute.Count++; 
        contribute.Total += contribution; 
        contribute.Average = (contribute.Total/contribute.Count); 
        contributionReciept.Add(grade,contribute); 
       } 
      } 

      void DisplayContribution() 
      { 
       var list = contributionReciept.Keys.ToList(); 
       list.Sort(); 

       Console.WriteLine("Grade \t" + "Num of Contributions \t" + "Total Contribution \t" + "Average contribution"); 

       foreach (var grade in list) 
       { 
        GradeContribution gc = contributionReciept[grade]; 
        Console.WriteLine(gc.Grade + "\t" + gc.Count + "\t" + gc.Total + "\t" + gc.Average); 
       } 
      } 
     } 

     static void Main(string[] args) 
     { 
      SchoolFundRaiser testSchoolFundRaiser = new SchoolFundRaiser(); 
      testSchoolFundRaiser.CalculateContribution(); 
     } 
    } 
} 
Смежные вопросы