Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.24 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Globalization;
  5.  
  6. public class Student
  7. {
  8.     public string Name { get; set; }
  9.     public List<DateTime> DatesAttended { get; set; }
  10.     public List<string> Comments { get; set; }
  11. }
  12.  
  13. public class Program
  14. {
  15.     public static void Main()
  16.     {
  17.         var namesAndDates = ReadNamesAndDates();
  18.         var comments = ReadComments(namesAndDates.Keys.ToList());
  19.         var allStudents = GetStudents(namesAndDates, comments);
  20.         PrintStudents(allStudents);
  21.     }
  22.  
  23.     public static void PrintStudents(List<Student> allStudents)
  24.     {
  25.         foreach (var student in allStudents.OrderBy(st => st.Name))
  26.         {
  27.             var studentName = student.Name;
  28.             var dates = student.DatesAttended.OrderBy(d => d).ToList();
  29.             var studentComments = student.Comments;
  30.             Console.WriteLine($"{studentName}");
  31.             var commentsCount = studentComments.Count;
  32.             if (commentsCount > 0)
  33.             {
  34.                 Console.WriteLine("Comments:");
  35.                 foreach (var comment in studentComments)
  36.                 {
  37.                     Console.WriteLine($"- {comment}");
  38.                 }
  39.             }
  40.             else
  41.             {
  42.                 Console.WriteLine("Comments:");
  43.             }
  44.             Console.WriteLine($"Dates attended:");
  45.             if (dates.Count > 0)
  46.             {
  47.                 foreach (var date in dates)
  48.                 {
  49.                     var day = date.Day;
  50.                     var month = date.Month;
  51.                     var year = date.Year;
  52.                     Console.WriteLine($"-- {day:d2}/{month:d2}/{year:d4}");
  53.                 }
  54.             }
  55.         }
  56.     }
  57.  
  58.     public static List<Student> GetStudents(Dictionary<string, List<DateTime>> namesAndDates, Dictionary<string, List<string>> comments)
  59.     {
  60.         var studentsList = new List<Student>();
  61.         foreach (var student in namesAndDates)
  62.         {
  63.             var name = student.Key;
  64.             var dates = student.Value;
  65.             var studentComments = new List<string>();
  66.             if (comments.ContainsKey(name))
  67.             {
  68.                 studentComments = comments[name];
  69.             }
  70.             var currentStudent = new Student
  71.             {
  72.                 Name = name,
  73.                 DatesAttended = dates,
  74.                 Comments = studentComments
  75.             };
  76.             studentsList.Add(currentStudent);
  77.         }
  78.         return studentsList;
  79.     }
  80.  
  81.     private static Dictionary<string, List<string>> ReadComments(List<string> names)
  82.     {
  83.         var line = Console.ReadLine();
  84.         var namesAndComments = new Dictionary<string, List<string>>();
  85.         while (line != "end of comments")
  86.         {
  87.             var tokens = line.Split('-');
  88.             var name = tokens[0];
  89.             var comment = tokens[1];
  90.             if (!names.Contains(name))
  91.             {
  92.                 line = Console.ReadLine();
  93.                 continue;
  94.             }
  95.             if (!namesAndComments.ContainsKey(name))
  96.             {
  97.                 namesAndComments[name] = new List<string>();
  98.             }
  99.             namesAndComments[name].Add(comment);
  100.             line = Console.ReadLine();
  101.         }
  102.  
  103.         return namesAndComments;
  104.     }
  105.  
  106.     public static Dictionary<string, List<DateTime>> ReadNamesAndDates()
  107.     {
  108.         var line = Console.ReadLine();
  109.         var namesAndDates = new Dictionary<string, List<DateTime>>();
  110.         while (line != "end of dates")
  111.         {
  112.             var tokens = line.Split(new[] { ' ', ',' });
  113.             var name = tokens[0];
  114.             if (tokens.Length == 1)
  115.             {
  116.                 namesAndDates[name] = new List<DateTime>();
  117.                 line = Console.ReadLine();
  118.                 continue;
  119.             }
  120.             var dates = tokens.Skip(1).Select(a => DateTime.ParseExact(a, "dd/MM/yyyy", CultureInfo.InstalledUICulture)).ToList();
  121.             if (!namesAndDates.ContainsKey(name))
  122.             {
  123.                 namesAndDates[name] = new List<DateTime>();
  124.             }
  125.             namesAndDates[name].AddRange(dates);
  126.             line = Console.ReadLine();
  127.         }
  128.         return namesAndDates;
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement