Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.69 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace P09_TeamworkProjects
  8. {
  9.     class P09_TeamworkProjects
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             var usersList = new List<User>();
  14.             List<Team> teams = CreateTeams(ref usersList);
  15.             teams = AddMembersToTeams(teams, usersList);
  16.             var sortedTeams = teams
  17.                 .OrderByDescending(c => c.MembersCount)
  18.                 .ThenBy(n => n.Name)
  19.                 .ToList();
  20.  
  21.             PrintTeams(sortedTeams);
  22.         }
  23.  
  24.         static void PrintTeams(List<Team> sortedTeams)
  25.         {
  26.             var teamsToPrint = sortedTeams
  27.                 .Where(m => m.IsHavingMembers)
  28.                 .OrderByDescending(c => c.Members.Count)
  29.                 .ThenBy(n => n.Name)
  30.                 .ToList();
  31.  
  32.             foreach (var team in teamsToPrint)
  33.             {
  34.                 Console.WriteLine(team.Name);
  35.                 Console.WriteLine($"- {team.Creator}");
  36.                 foreach (var member in team.Members)
  37.                 {
  38.                     Console.WriteLine($"-- {member}");
  39.                 }
  40.             }
  41.  
  42.  
  43.             var teamsToDisband = sortedTeams
  44.                 .Where(m => !m.IsHavingMembers)
  45.                 .OrderBy(n => n.Name)
  46.                 .ToList();
  47.  
  48.             Console.WriteLine("Teams to disband:");
  49.             foreach (var team in teamsToDisband)
  50.             {
  51.                 Console.WriteLine(team.Name);
  52.             }
  53.  
  54.         }
  55.  
  56.         static List<Team> AddMembersToTeams(List<Team> teams, List<User> usersList)
  57.         {
  58.             var command = Console.ReadLine();
  59.  
  60.             while (command != "end of assignment")
  61.             {
  62.                 var nameAndTeam = command.Split(new string[] { "->" }, StringSplitOptions.None).ToList();
  63.                 var userName = nameAndTeam[0];
  64.                 var teamName = nameAndTeam[1];
  65.  
  66.                 var existingUser = AddUserIfNew(usersList, userName);
  67.  
  68.                 var existingTeam = teams.FirstOrDefault(t => t.Name == teamName);
  69.                 if (existingTeam == null)
  70.                 {
  71.                     Console.WriteLine($"Team {teamName} does not exist!");
  72.                     command = Console.ReadLine();
  73.                     continue;
  74.                 }
  75.  
  76.                 if (existingUser.IsMemberOfTeam)
  77.                 {
  78.                     Console.WriteLine($"Member {userName} cannot join team {teamName}!");
  79.                     command = Console.ReadLine();
  80.                     continue;
  81.                 }
  82.                 if (existingTeam.Members == null)
  83.                 {
  84.                     existingTeam.Members = new List<string>();
  85.                 }
  86.                 existingTeam.Members.Add(userName);
  87.                 existingTeam.IsHavingMembers = true;
  88.                 existingUser.IsMemberOfTeam = true;
  89.  
  90.  
  91.                 command = Console.ReadLine();
  92.             }
  93.  
  94.             return teams;
  95.         }
  96.  
  97.         static List<Team> CreateTeams(ref List<User> usersList)
  98.         {
  99.             var teamsCount = int.Parse(Console.ReadLine());
  100.             var teams = new List<Team>(teamsCount);
  101.             //var usersList = userList;
  102.             for (int i = 0; i < teamsCount; i++)
  103.             {
  104.                 var userAndTeam = Console.ReadLine().Split('-').ToList();
  105.                 var userName = userAndTeam[0];
  106.                 var teamName = userAndTeam[1];
  107.  
  108.                 var existingUser = AddUserIfNew(usersList, userName);
  109.  
  110.                 var existingTeam = teams.FirstOrDefault(t => t.Name == teamName);
  111.                 if (existingTeam != null)
  112.                 {
  113.                     Console.WriteLine($"Team {teamName} was already created!");
  114.                     //usersList = usersList.Where(u => u.Name != userName).ToList();////
  115.                     continue;
  116.                 }
  117.                 if (existingUser.IsMemberOfTeam)
  118.                 {
  119.                     Console.WriteLine($"{userName} cannot create another team!");
  120.                     continue;
  121.                 }
  122.  
  123.                 AddNewTeam(teams, userName, teamName);
  124.                 existingUser.IsMemberOfTeam = true;
  125.  
  126.             }
  127.  
  128.             return teams;
  129.         }
  130.  
  131.         static void AddNewTeam(List<Team> teams, string userName, string teamName)
  132.         {
  133.             Team newTeam = new Team
  134.             {
  135.                 Name = teamName,
  136.                 Creator = userName,
  137.                 IsHavingMembers = false
  138.             };
  139.  
  140.             Console.WriteLine($"Team {teamName} has been created by {userName}!");
  141.             teams.Add(newTeam);
  142.         }
  143.  
  144.         static User AddUserIfNew(List<User> usersList, string userName)
  145.         {
  146.             var existingUser = usersList.FirstOrDefault(u => u.Name == userName);
  147.             if (existingUser == null)
  148.             {
  149.                 var newUser = new User
  150.                 {
  151.                     Name = userName,
  152.                     IsMemberOfTeam = false
  153.                 };
  154.  
  155.                 usersList.Add(newUser);
  156.                 return newUser;
  157.             }
  158.             return existingUser;
  159.  
  160.         }
  161.     }
  162.  
  163.     class Team
  164.     {
  165.         public string Name { get; set; }
  166.         public string Creator { get; set; }
  167.         public List<string> Members { get; set; }
  168.         public bool IsHavingMembers { get; set; }
  169.         public int MembersCount
  170.         {
  171.             get
  172.             {
  173.                 return IsHavingMembers ? Members.Count : 0;
  174.             }
  175.         }
  176.     }
  177.  
  178.     class User
  179.     {
  180.         public string Name { get; set; }
  181.         public bool IsMemberOfTeam { get; set; }
  182.     }
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement