Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace P09_TeamworkProjects
- {
- class P09_TeamworkProjects
- {
- static void Main(string[] args)
- {
- var usersList = new List<User>();
- List<Team> teams = CreateTeams(ref usersList);
- teams = AddMembersToTeams(teams, usersList);
- var sortedTeams = teams
- .OrderByDescending(c => c.MembersCount)
- .ThenBy(n => n.Name)
- .ToList();
- PrintTeams(sortedTeams);
- }
- static void PrintTeams(List<Team> sortedTeams)
- {
- var teamsToPrint = sortedTeams
- .Where(m => m.IsHavingMembers)
- .OrderByDescending(c => c.Members.Count)
- .ThenBy(n => n.Name)
- .ToList();
- foreach (var team in teamsToPrint)
- {
- Console.WriteLine(team.Name);
- Console.WriteLine($"- {team.Creator}");
- foreach (var member in team.Members)
- {
- Console.WriteLine($"-- {member}");
- }
- }
- var teamsToDisband = sortedTeams
- .Where(m => !m.IsHavingMembers)
- .OrderBy(n => n.Name)
- .ToList();
- Console.WriteLine("Teams to disband:");
- foreach (var team in teamsToDisband)
- {
- Console.WriteLine(team.Name);
- }
- }
- static List<Team> AddMembersToTeams(List<Team> teams, List<User> usersList)
- {
- var command = Console.ReadLine();
- while (command != "end of assignment")
- {
- var nameAndTeam = command.Split(new string[] { "->" }, StringSplitOptions.None).ToList();
- var userName = nameAndTeam[0];
- var teamName = nameAndTeam[1];
- var existingUser = AddUserIfNew(usersList, userName);
- var existingTeam = teams.FirstOrDefault(t => t.Name == teamName);
- if (existingTeam == null)
- {
- Console.WriteLine($"Team {teamName} does not exist!");
- command = Console.ReadLine();
- continue;
- }
- if (existingUser.IsMemberOfTeam)
- {
- Console.WriteLine($"Member {userName} cannot join team {teamName}!");
- command = Console.ReadLine();
- continue;
- }
- if (existingTeam.Members == null)
- {
- existingTeam.Members = new List<string>();
- }
- existingTeam.Members.Add(userName);
- existingTeam.IsHavingMembers = true;
- existingUser.IsMemberOfTeam = true;
- command = Console.ReadLine();
- }
- return teams;
- }
- static List<Team> CreateTeams(ref List<User> usersList)
- {
- var teamsCount = int.Parse(Console.ReadLine());
- var teams = new List<Team>(teamsCount);
- //var usersList = userList;
- for (int i = 0; i < teamsCount; i++)
- {
- var userAndTeam = Console.ReadLine().Split('-').ToList();
- var userName = userAndTeam[0];
- var teamName = userAndTeam[1];
- var existingUser = AddUserIfNew(usersList, userName);
- var existingTeam = teams.FirstOrDefault(t => t.Name == teamName);
- if (existingTeam != null)
- {
- Console.WriteLine($"Team {teamName} was already created!");
- //usersList = usersList.Where(u => u.Name != userName).ToList();////
- continue;
- }
- if (existingUser.IsMemberOfTeam)
- {
- Console.WriteLine($"{userName} cannot create another team!");
- continue;
- }
- AddNewTeam(teams, userName, teamName);
- existingUser.IsMemberOfTeam = true;
- }
- return teams;
- }
- static void AddNewTeam(List<Team> teams, string userName, string teamName)
- {
- Team newTeam = new Team
- {
- Name = teamName,
- Creator = userName,
- IsHavingMembers = false
- };
- Console.WriteLine($"Team {teamName} has been created by {userName}!");
- teams.Add(newTeam);
- }
- static User AddUserIfNew(List<User> usersList, string userName)
- {
- var existingUser = usersList.FirstOrDefault(u => u.Name == userName);
- if (existingUser == null)
- {
- var newUser = new User
- {
- Name = userName,
- IsMemberOfTeam = false
- };
- usersList.Add(newUser);
- return newUser;
- }
- return existingUser;
- }
- }
- class Team
- {
- public string Name { get; set; }
- public string Creator { get; set; }
- public List<string> Members { get; set; }
- public bool IsHavingMembers { get; set; }
- public int MembersCount
- {
- get
- {
- return IsHavingMembers ? Members.Count : 0;
- }
- }
- }
- class User
- {
- public string Name { get; set; }
- public bool IsMemberOfTeam { get; set; }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement