Никита 3 år sedan
förälder
incheckning
6c111e5dad
100 ändrade filer med 10342 tillägg och 2166 borttagningar
  1. 16 0
      UnitTestProject/App.config
  2. 20 0
      UnitTestProject/Properties/AssemblyInfo.cs
  3. 551 0
      UnitTestProject/UnitTest1.cs
  4. 85 0
      UnitTestProject/UnitTestProject.csproj
  5. 6 0
      UnitTestProject/packages.config
  6. 6 0
      Курсовой проект 3.1.sln
  7. 26 0
      Курсовой проект 3.1/Achievements.cs
  8. 18 9
      Курсовой проект 3.1/App.config
  9. 77 3
      Курсовой проект 3.1/App.xaml
  10. 2 0
      Курсовой проект 3.1/App.xaml.cs
  11. 0 516
      Курсовой проект 3.1/ApplicationWindow.xaml
  12. 0 48
      Курсовой проект 3.1/ApplicationWindow.xaml.cs
  13. 33 0
      Курсовой проект 3.1/Countries.cs
  14. 30 0
      Курсовой проект 3.1/Disciplines.cs
  15. 299 0
      Курсовой проект 3.1/Func.cs
  16. 0 456
      Курсовой проект 3.1/MainWindow.xaml.cs
  17. 32 0
      Курсовой проект 3.1/Matches.cs
  18. 41 0
      Курсовой проект 3.1/MyTeam.Context.cs
  19. 636 0
      Курсовой проект 3.1/MyTeam.Context.tt
  20. 10 0
      Курсовой проект 3.1/MyTeam.Designer.cs
  21. 9 0
      Курсовой проект 3.1/MyTeam.cs
  22. 1034 0
      Курсовой проект 3.1/MyTeam.edmx
  23. 39 0
      Курсовой проект 3.1/MyTeam.edmx.diagram
  24. 733 0
      Курсовой проект 3.1/MyTeam.tt
  25. 25 0
      Курсовой проект 3.1/PlayerApps.cs
  26. 0 93
      Курсовой проект 3.1/RegistrationWindow.xaml.cs
  27. 0 51
      Курсовой проект 3.1/SQL.cs
  28. 25 0
      Курсовой проект 3.1/TeamApps.cs
  29. 0 513
      Курсовой проект 3.1/TeamProfileWindow.xaml.cs
  30. 54 0
      Курсовой проект 3.1/Teams.cs
  31. 26 0
      Курсовой проект 3.1/TeamsUsers.cs
  32. 203 0
      Курсовой проект 3.1/Test.cs
  33. 29 0
      Курсовой проект 3.1/TournamentFormats.cs
  34. 0 165
      Курсовой проект 3.1/TournamentWindow.xaml
  35. 0 231
      Курсовой проект 3.1/TournamentWindow.xaml.cs
  36. 42 0
      Курсовой проект 3.1/Tournaments.cs
  37. 28 0
      Курсовой проект 3.1/UserControls/LimitedTextBlock.xaml
  38. 35 0
      Курсовой проект 3.1/UserControls/LimitedTextBlock.xaml.cs
  39. 43 0
      Курсовой проект 3.1/UserControls/MatchControl.xaml
  40. 37 0
      Курсовой проект 3.1/UserControls/MatchControl.xaml.cs
  41. 52 0
      Курсовой проект 3.1/Users.cs
  42. 84 0
      Курсовой проект 3.1/Windows/AddPlayerInTeamWindow.xaml
  43. 82 0
      Курсовой проект 3.1/Windows/AddPlayerInTeamWindow.xaml.cs
  44. 702 0
      Курсовой проект 3.1/Windows/ApplicationWindow.xaml
  45. 743 0
      Курсовой проект 3.1/Windows/ApplicationWindow.xaml.cs
  46. 2 2
      Курсовой проект 3.1/Authorization.xaml
  47. 22 21
      Курсовой проект 3.1/Authorization.xaml.cs
  48. 113 0
      Курсовой проект 3.1/Windows/CreateTeamWindow.xaml
  49. 163 0
      Курсовой проект 3.1/Windows/CreateTeamWindow.xaml.cs
  50. 153 0
      Курсовой проект 3.1/Windows/CreateTournamentWindow.xaml
  51. 121 0
      Курсовой проект 3.1/Windows/CreateTournamentWindow.xaml.cs
  52. 43 15
      Курсовой проект 3.1/MainWindow.xaml
  53. 368 0
      Курсовой проект 3.1/Windows/MainWindow.xaml.cs
  54. 119 0
      Курсовой проект 3.1/Windows/MatchWindow.xaml
  55. 137 0
      Курсовой проект 3.1/Windows/MatchWindow.xaml.cs
  56. 81 0
      Курсовой проект 3.1/Windows/PlayerApplicationAddWindow.xaml
  57. 68 0
      Курсовой проект 3.1/Windows/PlayerApplicationAddWindow.xaml.cs
  58. 114 0
      Курсовой проект 3.1/Windows/PlayerProfileSettingsWindow.xaml
  59. 158 0
      Курсовой проект 3.1/Windows/PlayerProfileSettingsWindow.xaml.cs
  60. 17 6
      Курсовой проект 3.1/RegistrationWindow.xaml
  61. 115 0
      Курсовой проект 3.1/Windows/RegistrationWindow.xaml.cs
  62. 99 0
      Курсовой проект 3.1/Windows/ResultAddWindow.xaml
  63. 96 0
      Курсовой проект 3.1/Windows/ResultAddWindow.xaml.cs
  64. 246 0
      Курсовой проект 3.1/Windows/SearchWindow.xaml
  65. 254 0
      Курсовой проект 3.1/Windows/SearchWindow.xaml.cs
  66. 133 0
      Курсовой проект 3.1/Windows/SelectTeamsInMatchWindow.xaml
  67. 171 0
      Курсовой проект 3.1/Windows/SelectTeamsInMatchWindow.xaml.cs
  68. 81 0
      Курсовой проект 3.1/Windows/TeamApplicationAddWindow.xaml
  69. 70 0
      Курсовой проект 3.1/Windows/TeamApplicationAddWindow.xaml.cs
  70. 114 0
      Курсовой проект 3.1/Windows/TeamProfileSettingsWindow.xaml
  71. 158 0
      Курсовой проект 3.1/Windows/TeamProfileSettingsWindow.xaml.cs
  72. 71 37
      Курсовой проект 3.1/TeamProfileWindow.xaml
  73. 406 0
      Курсовой проект 3.1/Windows/TeamProfileWindow.xaml.cs
  74. 294 0
      Курсовой проект 3.1/Windows/TournamentWindow.xaml
  75. 442 0
      Курсовой проект 3.1/Windows/TournamentWindow.xaml.cs
  76. BIN
      Курсовой проект 3.1/img/Default/addPlayer.png
  77. BIN
      Курсовой проект 3.1/img/Default/cupBronze.png
  78. BIN
      Курсовой проект 3.1/img/Default/cupGold.png
  79. BIN
      Курсовой проект 3.1/img/Default/cupSilver.png
  80. BIN
      Курсовой проект 3.1/img/Default/discipline.png
  81. BIN
      Курсовой проект 3.1/img/Default/log-out.png
  82. BIN
      Курсовой проект 3.1/img/Default/settings.png
  83. BIN
      Курсовой проект 3.1/img/countrys - 24/Abkhazia.png
  84. BIN
      Курсовой проект 3.1/img/countrys - 24/Afghanistan.png
  85. BIN
      Курсовой проект 3.1/img/countrys - 24/Aland.png
  86. BIN
      Курсовой проект 3.1/img/countrys - 24/Albania.png
  87. BIN
      Курсовой проект 3.1/img/countrys - 24/Algeria.png
  88. BIN
      Курсовой проект 3.1/img/countrys - 24/American-Samoa.png
  89. BIN
      Курсовой проект 3.1/img/countrys - 24/Andorra.png
  90. BIN
      Курсовой проект 3.1/img/countrys - 24/Angola.png
  91. BIN
      Курсовой проект 3.1/img/countrys - 24/Anguilla.png
  92. BIN
      Курсовой проект 3.1/img/countrys - 24/Antarctica.png
  93. BIN
      Курсовой проект 3.1/img/countrys - 24/Antigua-and-Barbuda.png
  94. BIN
      Курсовой проект 3.1/img/countrys - 24/Argentina.png
  95. BIN
      Курсовой проект 3.1/img/countrys - 24/Armenia.png
  96. BIN
      Курсовой проект 3.1/img/countrys - 24/Aruba.png
  97. BIN
      Курсовой проект 3.1/img/countrys - 24/Australia.png
  98. BIN
      Курсовой проект 3.1/img/countrys - 24/Austria.png
  99. BIN
      Курсовой проект 3.1/img/countrys - 24/Azerbaijan.png
  100. 0 0
      Курсовой проект 3.1/img/countrys - 24/Bahamas.png

+ 16 - 0
UnitTestProject/App.config

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <configSections>
+    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+  </configSections>
+  <connectionStrings>
+    <add name="MyTeamEntities" connectionString="metadata=res://*/MyTeam.csdl|res://*/MyTeam.ssdl|res://*/MyTeam.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=DESKTOP-SIUQI7L\SQLEXPRESS;initial catalog=MyTeam;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
+  </connectionStrings>
+  <entityFramework>
+    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
+    <providers>
+      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
+    </providers>
+  </entityFramework>
+</configuration>

+ 20 - 0
UnitTestProject/Properties/AssemblyInfo.cs

@@ -0,0 +1,20 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("UnitTestProject")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("UnitTestProject")]
+[assembly: AssemblyCopyright("Copyright ©  2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+[assembly: ComVisible(false)]
+
+[assembly: Guid("7d521796-276e-48ab-a24e-4de500704455")]
+
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 551 - 0
UnitTestProject/UnitTest1.cs

@@ -0,0 +1,551 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System.Collections.Generic;
+using Курсовой_проект_3._1;
+using System.Linq;
+
+namespace UnitTestProject
+{
+    [TestClass]
+    public class UnitTest1
+    {
+        [TestMethod]
+        public void AuthorizationTest()
+        {
+            string login, password;
+
+            // 1
+            login = "nikich4523";
+            password = "123qaz";
+
+            Assert.IsTrue(Test.AuthorizationTest(login, password));
+
+            // 2
+            login = "gr692_pav";
+            password = "uncorrect_pass";
+
+            Assert.IsFalse(Test.AuthorizationTest(login, password));
+
+            // 3
+            login = "nikich4523";
+            password = "";
+
+            Assert.IsFalse(Test.AuthorizationTest(login, password));
+
+            // 4
+            login = "";
+            password = "123qaz";
+
+            Assert.IsFalse(Test.AuthorizationTest(login, password));
+
+            // 5
+            login = "nikich45233";
+            password = "123qaz";
+
+            Assert.IsFalse(Test.AuthorizationTest(login, password));
+
+            // 6
+            login = "";
+            password = "";
+
+            Assert.IsFalse(Test.AuthorizationTest(login, password));
+        }
+
+        [TestMethod]
+        public void RegistrationTest()
+        {
+            string login, password, fname, lname, mname, nickname, email, phoneNumber, birthday;
+
+            // 1
+            login = "newUser";
+            password = "123qaz";
+            fname = "Иван";
+            lname = "Иванов";
+            mname = "Иванович";
+            nickname = "newNickname";
+            email = "ivan4523@mail.ru";
+            phoneNumber = "+79641166980";
+            birthday = "02.04.2003";
+
+            Assert.IsTrue(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 2
+            login = "";
+            password = "123qaz";
+            fname = "Иван";
+            lname = "Иванов";
+            mname = "Иванович";
+            nickname = "newNickname";
+            email = "ivan4523@mail.ru";
+            phoneNumber = "+79641166980";
+            birthday = "02.04.2003";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 3
+            login = "newUser";
+            password = "";
+            fname = "Иван";
+            lname = "Иванов";
+            mname = "Иванович";
+            nickname = "newNickname";
+            email = "ivan4523@mail.ru";
+            phoneNumber = "+79641166980";
+            birthday = "02.04.2003";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 4
+            login = "newUser";
+            password = "123qaz";
+            fname = "";
+            lname = "Иванов";
+            mname = "Иванович";
+            nickname = "newNickname";
+            email = "ivan4523@mail.ru";
+            phoneNumber = "+79641166980";
+            birthday = "02.04.2003";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 5
+            login = "newUser";
+            password = "123qaz";
+            fname = "Иван";
+            lname = "";
+            mname = "Иванович";
+            nickname = "newNickname";
+            email = "ivan4523@mail.ru";
+            phoneNumber = "+79641166980";
+            birthday = "02.04.2003";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 6
+            login = "newUser";
+            password = "123qaz";
+            fname = "Иван";
+            lname = "Иванов";
+            mname = "";
+            nickname = "newNickname";
+            email = "ivan4523@mail.ru";
+            phoneNumber = "+79641166980";
+            birthday = "02.04.2003";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 7
+            login = "newUser";
+            password = "123qaz";
+            fname = "Иван";
+            lname = "Иванов";
+            mname = "Иванович";
+            nickname = "";
+            email = "ivan4523@mail.ru";
+            phoneNumber = "+79641166980";
+            birthday = "02.04.2003";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 8
+            login = "newUser";
+            password = "123qaz";
+            fname = "Иван";
+            lname = "Иванов";
+            mname = "Иванович";
+            nickname = "newNickname";
+            email = "";
+            phoneNumber = "+79641166980";
+            birthday = "02.04.2003";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 9
+            login = "nikich4523";
+            password = "123qaz";
+            fname = "Иван";
+            lname = "Иванов";
+            mname = "Иванович";
+            nickname = "newNickname";
+            email = "ivan4523@mail.ru";
+            phoneNumber = "";
+            birthday = "02.04.2003";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 10
+            login = "newUser";
+            password = "123qaz";
+            fname = "Иван";
+            lname = "Иванов";
+            mname = "Иванович";
+            nickname = "newNickname";
+            email = "ivan4523mail.ru";
+            phoneNumber = "+79641166980";
+            birthday = "02.04.2003";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 11
+            login = "newUser";
+            password = "123qaz";
+            fname = "Иван";
+            lname = "Иванов";
+            mname = "Иванович";
+            nickname = "newNickname";
+            email = "ivan4523@mail.ru";
+            phoneNumber = "+7964116698AAAAA";
+            birthday = "02.04.2003";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 12
+            login = "newUser";
+            password = "123qaz";
+            fname = "Иван";
+            lname = "Иванов";
+            mname = "Иванович";
+            nickname = "newNickname";
+            email = "ivan4523@mail.ru";
+            phoneNumber = "+79641166980";
+            birthday = "";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+
+            // 13
+            login = "newUser";
+            password = "123qaz";
+            fname = "Иван";
+            lname = "Иванов";
+            mname = "Иванович";
+            nickname = "Arxont";
+            email = "ivan4523@mail.ru";
+            phoneNumber = "+79641166980";
+            birthday = "02.04.2003";
+
+            Assert.IsFalse(Test.RegistrationTest(login, password, fname, lname, mname, nickname, email, phoneNumber, birthday));
+        }
+
+        [TestMethod]
+        public void ChangeSettingsTest()
+        {
+            int userId;
+            string email, phoneNumber, about;
+
+            // 1
+            userId = 1;
+            email = "newEmail@mail.ru";
+            phoneNumber = "+79132818850";
+            about = "Немного обо мне!)";
+
+            Assert.IsTrue(Test.ChangeSettingsTest(userId, email, phoneNumber, about));
+
+            // 2
+            userId = 1;
+            email = "newEmail@mail.ru";
+            phoneNumber = "+79132818850";
+            about = "";
+
+            Assert.IsTrue(Test.ChangeSettingsTest(userId, email, phoneNumber, about));
+
+            // 3
+            userId = 1;
+            email = "nikich4523@mail.ru";
+            phoneNumber = "+79132818850";
+            about = "Немного обо мне!)";
+
+            Assert.IsFalse(Test.ChangeSettingsTest(userId, email, phoneNumber, about));
+
+            // 4
+            userId = 1;
+            email = "newEmail@mail.ru";
+            phoneNumber = "+79641166987";
+            about = "Немного обо мне!)";
+
+            Assert.IsFalse(Test.ChangeSettingsTest(userId, email, phoneNumber, about));
+
+            // 5
+            userId = 1;
+            email = "";
+            phoneNumber = "";
+            about = "Немного обо мне!)";
+
+            Assert.IsFalse(Test.ChangeSettingsTest(userId, email, phoneNumber, about));
+
+            // 6
+            userId = 1;
+            email = "alen.20.plo@mail.ru";
+            phoneNumber = "+79642DDD6432";
+            about = "Немного обо мне!)";
+
+            Assert.IsFalse(Test.ChangeSettingsTest(userId, email, phoneNumber, about));
+
+        }
+
+        [TestMethod]
+        public void CreatePlayerAppTest()
+        {
+            string title, text;
+            int userId;
+
+            // 1
+            userId = 2;
+            title = "Ищу команду!";
+            text = "Играю в Dota 2. Опыта игры на профессинональной сцене не имею.";
+
+            Assert.IsTrue(Test.CreatePlayerApp(userId, title, text));
+
+            // 2
+            userId = 1;
+            title = "Ищу команду!";
+            text = "Играю в Dota 2. Опыта игры на профессинональной сцене не имею.";
+
+            Assert.IsFalse(Test.CreatePlayerApp(userId, title, text));
+
+            // 3
+            userId = 2;
+            title = "";
+            text = "Играю в Dota 2. Опыта игры на профессинональной сцене не имею.";
+
+            Assert.IsFalse(Test.CreatePlayerApp(userId, title, text));
+
+            // 4
+            userId = 2;
+            title = "Ищу команду!";
+            text = "";
+
+            Assert.IsFalse(Test.CreatePlayerApp(userId, title, text));
+
+            // 5
+            userId = 2;
+            title = "";
+            text = "";
+
+            Assert.IsFalse(Test.CreatePlayerApp(userId, title, text));
+        }
+
+        [TestMethod]
+        public void CreateTeamAppTest()
+        {
+            string title, text;
+            int teamId;
+
+            // 1
+            teamId = 2;
+            title = "Ищем игрока!";
+            text = "Команда по Counter-Strike ищет игрока на роль снайпера. Ранг глобал или выше!";
+
+            Assert.IsTrue(Test.CreateTeamApp(teamId, title, text));
+
+            // 2
+            teamId = 1;
+            title = "Ищем игрока!";
+            text = "Команда по Counter-Strike ищет игрока на роль снайпера. Ранг глобал или выше!";
+
+            Assert.IsFalse(Test.CreateTeamApp(teamId, title, text));
+
+            // 3
+            teamId = 2;
+            title = "";
+            text = "Команда по Counter-Strike ищет игрока на роль снайпера. Ранг глобал или выше!";
+
+            Assert.IsFalse(Test.CreateTeamApp(teamId, title, text));
+
+            // 4
+            teamId = 2;
+            title = "Ищем игрока!";
+            text = "";
+
+            Assert.IsFalse(Test.CreateTeamApp(teamId, title, text));
+
+            // 5
+            teamId = 2;
+            title = "";
+            text = "";
+
+            Assert.IsFalse(Test.CreateTeamApp(teamId, title, text));
+        }
+
+        [TestMethod]
+        public void TeamInfoOutput()
+        {
+            int tournamentId, teamId;
+            int expected, result;
+
+            // GetPrizeInTournament ///
+            // 1
+            tournamentId = 1;
+            teamId = 6;
+            expected = 0;
+            result = Func.GetPrizeInTournament(tournamentId, teamId);
+
+            Assert.AreEqual(expected, result);
+
+            // 2
+            tournamentId = 4;
+            teamId = 1008;
+            expected = 18000000;
+            result = Func.GetPrizeInTournament(tournamentId, teamId);
+
+            Assert.AreEqual(expected, result);
+
+            // 3
+            tournamentId = 4;
+            teamId = 1016;
+            expected = 5000000;
+            result = Func.GetPrizeInTournament(tournamentId, teamId);
+
+            Assert.AreEqual(expected, result);
+
+            // GetPlaceInTournament ///
+            // 1
+            string resultStr;
+            tournamentId = 1;
+            teamId = 6;
+            string expectedStr = "";
+            resultStr = Func.GetPlaceInTournament(tournamentId, teamId);
+
+            Assert.AreEqual(expectedStr, resultStr);
+
+            // 2
+            tournamentId = 4;
+            teamId = 1008;
+            expectedStr = "1";
+            resultStr = Func.GetPlaceInTournament(tournamentId, teamId);
+
+            Assert.AreEqual(expectedStr, resultStr);
+
+            // 3
+            tournamentId = 4;
+            teamId = 1016;
+            expectedStr = "2";
+            resultStr = Func.GetPlaceInTournament(tournamentId, teamId);
+
+            Assert.AreEqual(expectedStr, resultStr);
+
+
+            // GetTeamTournamentIds ///
+            // 1 
+            List<int> expectedTournamentIds = new List<int>();
+            List<int> resultTournamentIds = Func.GetTeamTournamentIds(1);
+
+            Assert.IsTrue(expectedTournamentIds.SequenceEqual(resultTournamentIds));
+
+            // 2 
+            expectedTournamentIds = new List<int>() { 4 };
+            resultTournamentIds = Func.GetTeamTournamentIds(1008);
+
+            Assert.IsTrue(expectedTournamentIds.SequenceEqual(resultTournamentIds));
+        }
+
+        [TestMethod]
+        public void PlayerInfoOutput()
+        {
+            // ConvertToStringMoneyTest ///
+            int moneyInt;
+            string expectedStr, resultStr;
+
+            // 1
+            moneyInt = 40000000;
+            expectedStr = "40 000 000";
+
+            resultStr = Func.ConvertIntToStringMoney(moneyInt);
+
+            StringAssert.Equals(expectedStr, resultStr);
+            
+            // 2
+            moneyInt = 0;
+            expectedStr = "0";
+
+            resultStr = Func.ConvertIntToStringMoney(moneyInt);
+            StringAssert.Equals(expectedStr, resultStr);
+
+            // 3
+            moneyInt = 1000;
+            expectedStr = "1 000";
+
+            resultStr = Func.ConvertIntToStringMoney(moneyInt);
+            StringAssert.Equals(expectedStr, resultStr);
+
+            // 4
+            moneyInt = 1623451;
+            expectedStr = "1 623 451";
+
+            resultStr = Func.ConvertIntToStringMoney(moneyInt);
+            StringAssert.Equals(expectedStr, resultStr);
+
+            // 5
+            moneyInt = 235;
+            expectedStr = "235";
+
+            resultStr = Func.ConvertIntToStringMoney(moneyInt);
+            StringAssert.Equals(expectedStr, resultStr);
+
+
+            // GetTeamIdsTest ///
+            List<int> expectedTeamIds;
+            List<int> resultTeamIds;
+
+            // 1
+            expectedTeamIds = new List<int>() { };
+            resultTeamIds = Func.GetTeamIds(1);
+            Assert.IsTrue(expectedTeamIds.SequenceEqual(resultTeamIds));
+
+            // 2
+            expectedTeamIds = new List<int>() { 1006 };
+            resultTeamIds = Func.GetTeamIds(7);
+            Assert.IsTrue(expectedTeamIds.SequenceEqual(resultTeamIds));
+
+            // 3
+            expectedTeamIds = new List<int>() { 6 };
+            resultTeamIds = Func.GetTeamIds(8);
+            Assert.IsTrue(expectedTeamIds.SequenceEqual(resultTeamIds));
+
+
+            // GetWinDrawLoseCountUser ///
+            int winCount, drawCount, loseCount;
+            (int, int, int) resultCount;
+
+            // 1
+            (winCount, drawCount, loseCount) = (0, 0, 0);
+            resultCount = Func.GetWinDrawLoseCountUser(1);
+
+            Assert.AreEqual((winCount, drawCount, loseCount), resultCount);
+
+            // 2
+            (winCount, drawCount, loseCount) = (0, 0, 0);
+            resultCount = Func.GetWinDrawLoseCountUser(1);
+
+            Assert.AreEqual((winCount, drawCount, loseCount), resultCount);
+
+            // 3
+            (winCount, drawCount, loseCount) = (0, 0, 0);
+            resultCount = Func.GetWinDrawLoseCountUser(1);
+
+            Assert.AreEqual((winCount, drawCount, loseCount), resultCount);
+
+
+            // GetTeamMatchIds ///
+            List<int> expectedMatchIds;
+            List<int> resultMatchIds;
+
+            // 1
+            expectedMatchIds = new List<int>();
+            resultMatchIds = Func.GetTeamMatchIds(1);
+
+            Assert.IsTrue(expectedMatchIds.SequenceEqual(resultMatchIds));
+
+            // 2
+            expectedMatchIds = new List<int>() { 1, 9, 14};
+            resultMatchIds = Func.GetTeamMatchIds(6);
+
+            Assert.IsTrue(expectedMatchIds.SequenceEqual(resultMatchIds));
+
+            // 3
+            expectedMatchIds = new List<int>() { 5 };
+            resultMatchIds = Func.GetTeamMatchIds(1007);
+
+            Assert.IsTrue(expectedMatchIds.SequenceEqual(resultMatchIds));
+
+        }
+    }
+}

+ 85 - 0
UnitTestProject/UnitTestProject.csproj

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.props')" />
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{7D521796-276E-48AB-A24E-4DE500704455}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>UnitTestProject</RootNamespace>
+    <AssemblyName>UnitTestProject</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
+    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
+    <IsCodedUITest>False</IsCodedUITest>
+    <TestProjectType>UnitTest</TestProjectType>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath>
+    </Reference>
+    <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MSTest.TestFramework.2.1.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MSTest.TestFramework.2.1.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.Core" />
+    <Reference Include="WindowsBase" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="UnitTest1.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Курсовой проект 3.1\Курсовой проект 3.1.csproj">
+      <Project>{773b5205-4560-4598-8deb-239fa999e1c2}</Project>
+      <Name>Курсовой проект 3.1</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>Данный проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Используйте восстановление пакетов NuGet, чтобы скачать их.  Дополнительную информацию см. по адресу: http://go.microsoft.com/fwlink/?LinkID=322105. Отсутствует следующий файл: {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.props'))" />
+    <Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.targets'))" />
+  </Target>
+  <Import Project="..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.targets')" />
+</Project>

+ 6 - 0
UnitTestProject/packages.config

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="EntityFramework" version="6.2.0" targetFramework="net472" />
+  <package id="MSTest.TestAdapter" version="2.1.2" targetFramework="net472" />
+  <package id="MSTest.TestFramework" version="2.1.2" targetFramework="net472" />
+</packages>

+ 6 - 0
Курсовой проект 3.1.sln

@@ -5,6 +5,8 @@ VisualStudioVersion = 16.0.30907.101
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Курсовой проект 3.1", "Курсовой проект 3.1\Курсовой проект 3.1.csproj", "{773B5205-4560-4598-8DEB-239FA999E1C2}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTestProject", "UnitTestProject\UnitTestProject.csproj", "{7D521796-276E-48AB-A24E-4DE500704455}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -15,6 +17,10 @@ Global
 		{773B5205-4560-4598-8DEB-239FA999E1C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{773B5205-4560-4598-8DEB-239FA999E1C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{773B5205-4560-4598-8DEB-239FA999E1C2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7D521796-276E-48AB-A24E-4DE500704455}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7D521796-276E-48AB-A24E-4DE500704455}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7D521796-276E-48AB-A24E-4DE500704455}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7D521796-276E-48AB-A24E-4DE500704455}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 26 - 0
Курсовой проект 3.1/Achievements.cs

@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class Achievements
+    {
+        public int Id { get; set; }
+        public int FK_Tournament_Id { get; set; }
+        public int FK_Team_Id { get; set; }
+        public int Prize { get; set; }
+        public string Place { get; set; }
+    
+        public virtual Teams Teams { get; set; }
+        public virtual Tournaments Tournaments { get; set; }
+    }
+}

+ 18 - 9
Курсовой проект 3.1/App.config

@@ -1,11 +1,20 @@
-<?xml version="1.0" encoding="utf-8" ?>
+<?xml version="1.0" encoding="utf-8"?>
 <configuration>
-    <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
-    </startup>
-    <connectionStrings>
-      <add name="DefaultConnection"
-           connectionString="Data Source=DESKTOP-SIUQI7L\SQLEXPRESS;Initial Catalog=MyTeam;Integrated Security=True"
-          providerName="System.Data.SqlClient"/>
-    </connectionStrings>
+  <configSections>
+    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+  </configSections>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+  </startup>
+  <connectionStrings>
+    <add name="MyTeamEntities" connectionString="metadata=res://*/MyTeam.csdl|res://*/MyTeam.ssdl|res://*/MyTeam.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=DESKTOP-SIUQI7L\SQLEXPRESS;initial catalog=MyTeam;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
+  </connectionStrings>
+  <entityFramework>
+    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
+    <providers>
+      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
+    </providers>
+  </entityFramework>
 </configuration>

+ 77 - 3
Курсовой проект 3.1/App.xaml

@@ -1,9 +1,83 @@
 <Application x:Class="Курсовой_проект_3._1.App"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-             xmlns:local="clr-namespace:Курсовой_проект_3._1"
-             StartupUri="Authorization.xaml">
+             xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+             StartupUri="Windows/Authorization.xaml">
     <Application.Resources>
-         
+
+        <!-- SettingBtnStyle -->
+        <Style x:Key="FocusVisual">
+            <Setter Property="Control.Template">
+                <Setter.Value>
+                    <ControlTemplate>
+                        <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+        <SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD"/>
+        <SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/>
+        <SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/>
+        <SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/>
+        <SolidColorBrush x:Key="Button.Pressed.Background" Color="#FFC4E5F6"/>
+        <SolidColorBrush x:Key="Button.Pressed.Border" Color="#FF2C628B"/>
+        <SolidColorBrush x:Key="Button.Disabled.Background" Color="#FFF4F4F4"/>
+        <SolidColorBrush x:Key="Button.Disabled.Border" Color="#FFADB2B5"/>
+        <SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383"/>
+        <Style x:Key="SettingBtnStyle" TargetType="{x:Type Button}">
+            <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
+            <Setter Property="Background" Value="{StaticResource Button.Static.Background}"/>
+            <Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/>
+            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
+            <Setter Property="BorderThickness" Value="1"/>
+            <Setter Property="HorizontalContentAlignment" Value="Center"/>
+            <Setter Property="VerticalContentAlignment" Value="Center"/>
+            <Setter Property="Padding" Value="1"/>
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type Button}">
+                        <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
+                            <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsDefaulted" Value="true">
+                                <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
+                            </Trigger>
+                            <Trigger Property="IsEnabled" Value="false">
+                                <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
+                                <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
+                                <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+
+        <!-- Button styles -->
+        <Style TargetType="Button" x:Key="NavigationBtnTemplate">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="0"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" Value="Red" TargetName="ButtonBorder"/>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="#4682b4" TargetName="ButtonBorder"/>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+
     </Application.Resources>
 </Application>

+ 2 - 0
Курсовой проект 3.1/App.xaml.cs

@@ -13,5 +13,7 @@ namespace Курсовой_проект_3._1
     /// </summary>
     public partial class App : Application
     {
+        public static int UserId {get; set;}
+        public static int prevWindowId { get; set; }
     }
 }

+ 0 - 516
Курсовой проект 3.1/ApplicationWindow.xaml

@@ -1,516 +0,0 @@
-<Window x:Class="Курсовой_проект_3._1.ApplicationWindow"
-        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-        xmlns:local="clr-namespace:Курсовой_проект_3._1"
-        mc:Ignorable="d"
-        Title="ApplicationWindow"  Height="700" Width="900" MinWidth="550" MinHeight="600">
-    <Window.Resources>
-        <!-- Diffrent templates for the ApplicationList (Players, Teams, Tournaments) -->
-        <DataTemplate x:Key="PlayersItemTemplate">
-            <Grid>
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="0.4*"/>
-                    <ColumnDefinition Width="*"/>
-                </Grid.ColumnDefinitions>
-                
-                <!-- Photo, ShortAboutPlayer -->
-                <Grid>
-                    <Grid.RowDefinitions>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                    </Grid.RowDefinitions>
-
-                    <Image Grid.Row="0" Source="{Binding Path=UserPhoto}" Margin="5"/>
-
-                    <Grid Grid.Row="1">
-                        <Grid.RowDefinitions>
-                            <RowDefinition/>
-                            <RowDefinition/>
-                            <RowDefinition/>
-                            <RowDefinition/>
-                        </Grid.RowDefinitions>
-
-                        <Viewbox Grid.Row="0" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=Name}"></TextBlock>
-                        </Viewbox>
-
-                        <Viewbox Grid.Row="1" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=Age}"></TextBlock>
-                        </Viewbox>
-
-                        <Viewbox Grid.Row="2" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=Country}"></TextBlock>
-                        </Viewbox>
-
-                        <Viewbox Grid.Row="3" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=Discipline}"></TextBlock>
-                        </Viewbox>
-                    </Grid>
-                </Grid>
-                
-                <!-- Title, ApplicationText, Date -->
-                <Grid>
-                    <Grid.RowDefinitions>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                    </Grid.RowDefinitions>
-
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                    </Grid.ColumnDefinitions>
-
-                    <Viewbox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Stretch="Uniform">
-                        <TextBlock Text="{Binding Path=Title}"></TextBlock>
-                    </Viewbox>
-
-                    <Viewbox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Stretch="Uniform">
-                        <TextBlock Text="{Binding Path=ApplicationText}"></TextBlock>
-                    </Viewbox>
-
-                    <Grid Grid.Row="2" Grid.Column="0">
-                        <Grid.RowDefinitions>
-                            <RowDefinition/>
-                            <RowDefinition/>
-                        </Grid.RowDefinitions>
-
-                        <Viewbox Grid.Row="0" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=Email}"></TextBlock>
-                        </Viewbox>
-
-                        <Viewbox Grid.Row="1" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=PhoneNumber}"></TextBlock>
-                        </Viewbox>
-                    </Grid>
-
-                    <Viewbox Grid.Row="2" Grid.Column="1" Stretch="Uniform">
-                        <TextBlock Text="{Binding Path=Date}"></TextBlock>
-                    </Viewbox>
-                </Grid>
-            </Grid>
-        </DataTemplate>
-
-        <DataTemplate x:Key="TeamsItemTemplate">
-            <Grid>
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="0.4*"/>
-                    <ColumnDefinition Width="*"/>
-                </Grid.ColumnDefinitions>
-
-                <!-- Photo, ShortAboutTeam -->
-                <Grid>
-                    <Grid.RowDefinitions>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                    </Grid.RowDefinitions>
-
-                    <Image Grid.Row="0" Source="{Binding Path=TeamLogo}" Margin="5"/>
-
-                    <Grid Grid.Row="1">
-                        <Grid.RowDefinitions>
-                            <RowDefinition/>
-                            <RowDefinition/>
-                            <RowDefinition/>
-                            <RowDefinition/>
-                        </Grid.RowDefinitions>
-
-                        <Viewbox Grid.Row="0" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=TeamName}"></TextBlock>
-                        </Viewbox>
-
-                        <Viewbox Grid.Row="1" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=DateOfFoundation}"></TextBlock>
-                        </Viewbox>
-
-                        <Viewbox Grid.Row="2" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=Country}"></TextBlock>
-                        </Viewbox>
-
-                        <Viewbox Grid.Row="3" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=Discipline}"></TextBlock>
-                        </Viewbox>
-                    </Grid>
-                </Grid>
-
-                <!-- Title, ApplicationText, Date -->
-                <Grid>
-                    <Grid.RowDefinitions>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                    </Grid.RowDefinitions>
-
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition/>
-                        <ColumnDefinition/>
-                    </Grid.ColumnDefinitions>
-
-                    <Viewbox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Stretch="Uniform">
-                        <TextBlock Text="{Binding Path=Title}"></TextBlock>
-                    </Viewbox>
-
-                    <Viewbox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Stretch="Uniform">
-                        <TextBlock Text="{Binding Path=ApplicationText}"></TextBlock>
-                    </Viewbox>
-
-                    <Grid Grid.Row="2" Grid.Column="0">
-                        <Grid.RowDefinitions>
-                            <RowDefinition/>
-                            <RowDefinition/>
-                        </Grid.RowDefinitions>
-
-                        <Viewbox Grid.Row="0" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=Email}"></TextBlock>
-                        </Viewbox>
-
-                        <Viewbox Grid.Row="1" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=PhoneNumber}"></TextBlock>
-                        </Viewbox>
-                    </Grid>
-
-                    <Viewbox Grid.Row="2" Grid.Column="1" Stretch="Uniform">
-                        <TextBlock Text="{Binding Path=Date}"></TextBlock>
-                    </Viewbox>
-                </Grid>
-            </Grid>
-        </DataTemplate>
-
-        <DataTemplate x:Key="TournamentsItemTemplate">
-            <Grid>
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="0.4*"/>
-                    <ColumnDefinition Width="*"/>
-                </Grid.ColumnDefinitions>
-
-                <!-- TournamentLogo -->
-                <Grid>
-                    <Grid.RowDefinitions>
-                        <RowDefinition/>
-                    </Grid.RowDefinitions>
-
-                    <Image Source="{Binding Path=TournamentLogo}" Margin="5"/>
-                </Grid>
-
-                <!-- Title, Date, Stages, Place, PrizeFond, FreeSlot, Contacts -->
-                <Grid>
-                    <Grid.RowDefinitions>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                        <RowDefinition/>
-                    </Grid.RowDefinitions>
-
-                    <Viewbox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Stretch="Uniform">
-                        <TextBlock Text="{Binding Path=Title}"></TextBlock>
-                    </Viewbox>
-
-                    <Viewbox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Stretch="Uniform">
-                        <TextBlock Text="{Binding Path=Date}"></TextBlock>
-                    </Viewbox>
-
-                    <Viewbox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Stretch="Uniform">
-                        <TextBlock Text="{Binding Path=Stages}"></TextBlock>
-                    </Viewbox>
-
-                    <Viewbox Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Stretch="Uniform">
-                        <TextBlock Text="{Binding Path=PrizeFond}"></TextBlock>
-                    </Viewbox>
-
-                    <Viewbox Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Stretch="Uniform">
-                        <TextBlock Text="{Binding Path=FreeSlot}"></TextBlock>
-                    </Viewbox>
-
-                    <Grid Grid.Row="5" Grid.Column="0">
-                        <Grid.RowDefinitions>
-                            <RowDefinition/>
-                            <RowDefinition/>
-                        </Grid.RowDefinitions>
-
-                        <Viewbox Grid.Row="0" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=Email}"></TextBlock>
-                        </Viewbox>
-
-                        <Viewbox Grid.Row="1" Stretch="Uniform">
-                            <TextBlock Text="{Binding Path=PhoneNumber}"></TextBlock>
-                        </Viewbox>
-                    </Grid>
-
-                    <Button Grid.Row="6"></Button>
-                </Grid>
-            </Grid>
-        </DataTemplate>
-
-        <!-- TextBox style -->
-        <Style TargetType="TextBox">
-            <Setter Property="Foreground" Value="#FF464646"/>
-            <Setter Property="Template">
-                <Setter.Value>
-                    <ControlTemplate TargetType="{x:Type TextBox}">
-                        <Grid>
-                            <Border x:Name="TextBoxBorder"
-                                    Background="White" 
-                                    BorderBrush="White" 
-                                    BorderThickness="1" 
-                                    CornerRadius="8" Opacity="1">
-                                <Grid>
-                                    <ScrollViewer x:Name="PART_ContentHost" 
-                                                  BorderThickness="0" IsTabStop="False" 
-                                                  Margin="0" Padding="{TemplateBinding Padding}">
-                                    </ScrollViewer>
-                                </Grid>
-                            </Border>
-                        </Grid>
-                        <ControlTemplate.Triggers>
-                            <Trigger Property="IsMouseOver" Value="True">
-                                <Setter TargetName="TextBoxBorder" Property="Background" Value="WhiteSmoke"/>
-                            </Trigger>
-                            <Trigger Property="IsFocused" Value="True">
-                                <Setter TargetName="TextBoxBorder" Property="Background" Value="#FFF0F0F0"/>
-                            </Trigger>
-                        </ControlTemplate.Triggers>
-                    </ControlTemplate>
-                </Setter.Value>
-            </Setter>
-        </Style>
-        
-        <!-- CountryFilter & Discipline ListBoxTemplate-->
-        <DataTemplate x:Key="FilterItemTemplate">
-            <CheckBox Content="{Binding Path=ItemName}"/>
-        </DataTemplate>
-        
-        <!-- Button style -->
-        <Style TargetType="Button">
-            <Setter Property="Template">
-                <Setter.Value>
-                    <ControlTemplate TargetType="Button">
-                        <Border CornerRadius="20"
-                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
-
-                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
-                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
-                        </Border>
-                        <ControlTemplate.Triggers>
-                            <Trigger Property="IsPressed" Value="True">
-                                <Setter Property="Background" TargetName="ButtonBorder">
-                                    <Setter.Value>
-                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
-                                            <RadialGradientBrush.RelativeTransform>
-                                                <TransformGroup>
-                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
-                                                    <TranslateTransform X="0.02" Y="0.3"/>
-                                                </TransformGroup>
-                                            </RadialGradientBrush.RelativeTransform>
-                                            <GradientStop Color="#00000000" Offset="1"/>
-                                            <GradientStop Color="#FF303030" Offset="0.3"/>
-                                        </RadialGradientBrush>
-                                    </Setter.Value>
-                                </Setter>
-                            </Trigger>
-
-                            <Trigger Property="IsMouseOver" Value="True">
-                                <Setter Property="Background" TargetName="ButtonBorder">
-                                    <Setter.Value>
-                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
-                                            <RadialGradientBrush.RelativeTransform>
-                                                <TransformGroup>
-                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
-                                                    <TranslateTransform X="0.02" Y="0.3"/>
-                                                </TransformGroup>
-                                            </RadialGradientBrush.RelativeTransform>
-                                            <GradientStop Color="#00000000" Offset="1"/>
-                                            <GradientStop Color="#FF303030" Offset="0.3"/>
-                                        </RadialGradientBrush>
-                                    </Setter.Value>
-                                </Setter>
-                            </Trigger>
-
-                            <Trigger Property="IsEnabled" Value="False">
-                                <Setter Property="Background" TargetName="ButtonBorder">
-                                    <Setter.Value>
-                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
-                                            <RadialGradientBrush.RelativeTransform>
-                                                <TransformGroup>
-                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
-                                                    <TranslateTransform X="0.02" Y="0.3"/>
-                                                </TransformGroup>
-                                            </RadialGradientBrush.RelativeTransform>
-                                            <GradientStop Color="#00000000" Offset="1"/>
-                                            <GradientStop Color="#FF303030" Offset="0.3"/>
-                                        </RadialGradientBrush>
-                                    </Setter.Value>
-                                </Setter>
-                            </Trigger>
-                        </ControlTemplate.Triggers>
-                    </ControlTemplate>
-                </Setter.Value>
-            </Setter>
-        </Style>
-    </Window.Resources>
-    
-    <Grid>
-        <Grid>
-            <Grid.RowDefinitions>
-                <RowDefinition Height="0.1*"></RowDefinition>
-                <RowDefinition Height="0.05*"></RowDefinition>
-                <RowDefinition Height="*"></RowDefinition>
-            </Grid.RowDefinitions>
-            <Grid.ColumnDefinitions>
-                <ColumnDefinition></ColumnDefinition>
-            </Grid.ColumnDefinitions>
-
-            <!-- Navigation -->
-            <StackPanel x:Name="NavigationStackPanel" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Background="#68A4C8"/>
-
-            <!-- BackStep -->
-            <Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Background="#81AEC8">
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="*"/>
-                    <ColumnDefinition Width="0.4*"/>
-                    <ColumnDefinition Width="0.4*"/>
-                    <ColumnDefinition Width="0.4*"/>
-                    <ColumnDefinition Width="*"/>
-                </Grid.ColumnDefinitions>
-
-                <Button x:Name="PlayerListShowButton" Grid.Column="1" Content="Игроки" Click="PlayerListShowButton_Click" Background="#68A4C8" BorderThickness="0"/>
-                <Button x:Name="TeamListShowButton" Grid.Column="2" Content="Команды" Margin="5 0 5 0"/>
-                <Button x:Name="TournamentListShowButton" Grid.Column="3" Content="Турниры"/>
-            </Grid>
-
-
-            <!-- ##################### MAIN ##################### -->
-            <Grid Grid.Row="2" Grid.Column="0">
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="*"/>
-                    <ColumnDefinition Width="0.5*"/>
-                </Grid.ColumnDefinitions>
-                
-                <!-- ApplicationList -->
-                <ScrollViewer x:Name="MainScroll" Grid.Column="0" Grid.ColumnSpan="3">
-                    <StackPanel x:Name="AboutStackPanel">
-                        <ListBox ItemTemplate="{StaticResource PlayersItemTemplate}">
-                        </ListBox>
-                    </StackPanel>
-                </ScrollViewer> <!-- ApplicationList -->
-                
-                <!-- ApplicationFilter -->
-                <Rectangle Grid.Column="1" Fill="#FF68A4C8"/>
-                <Grid Grid.Column="1">
-                    <!-- PlayersFilter -->
-                    <Grid Visibility="Hidden" ShowGridLines="True">
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition/>
-                            <ColumnDefinition/>
-                        </Grid.ColumnDefinitions>
-                        <Grid.RowDefinitions>
-                            <RowDefinition Height="0.1*" MinHeight="50"/>
-                            <RowDefinition Height="0.4*" MaxHeight="60"/>
-                            <RowDefinition x:Name="CountryFilterExpanderRow" Height="0.2*"/>
-                            <RowDefinition x:Name="DisciplineFilterExpanderRow" Height="0.2*"/>
-                            <RowDefinition Height="0.2*" MaxHeight="30"/>
-                            <RowDefinition Height="0.8*"/>
-                            <RowDefinition Height="*" MaxHeight="100"/>
-                        </Grid.RowDefinitions>
-
-                        <!-- Date -->
-                        <TextBlock Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="12 0 0 0">
-                            Дата заявки:<LineBreak/>С:
-                        </TextBlock>
-                        <TextBlock Grid.Row="0"  Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="12 0 0 0">
-                           До:
-                        </TextBlock>
-                        <DatePicker Grid.Row="1" Margin="10"/>
-                        <DatePicker Grid.Row="1" Grid.Column="1" Margin="10"/>
-
-                        <!-- Country -->
-                        <Expander Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Header="Страна:" Height="100">
-                            <ListBox x:Name="CountryFilterLB" ItemTemplate="{StaticResource FilterItemTemplate}">
-                            </ListBox>
-                        </Expander>
-                        
-                        <!-- Discipline -->
-                        <Expander Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Header="Дисциплина:" Height="100">
-                            <ListBox x:Name="DisciplineFilterLB" ItemTemplate="{StaticResource FilterItemTemplate}">
-                            </ListBox>
-                        </Expander>
-                        
-                        <!-- Age -->
-                        <Grid  Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2">
-                            <Grid.ColumnDefinitions>
-                                <ColumnDefinition Width="0.7*"/>
-                                <ColumnDefinition/>
-                            </Grid.ColumnDefinitions>
-                            
-                            <TextBlock Text="Возраст:" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12 0 0 0"/>
-                            <TextBox Grid.Column="1" Margin="0 0 5 0"/>
-                        </Grid>
-
-                        <Button x:Name="ApplyFilterButton" Grid.Row="8" Grid.Column="0" Grid.ColumnSpan="2" Content="Применить фильтр" Margin="25"/>
-                    </Grid>
-            
-                    <!-- TeamsFilter -->
-                    <Grid Visibility="Hidden">
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition/>
-                            <ColumnDefinition/>
-                        </Grid.ColumnDefinitions>
-                        <Grid.RowDefinitions>
-                            <RowDefinition Height="0.1*" MinHeight="50"/>
-                            <RowDefinition Height="0.4*" MaxHeight="60"/>
-                            <RowDefinition x:Name="CountryTeamFilterExpanderRow" Height="0.2*"/>
-                            <RowDefinition x:Name="DisciplineTeamFilterExpanderRow" Height="0.2*"/>
-                            <RowDefinition Height="0.2*" MaxHeight="30"/>
-                            <RowDefinition Height="0.8*"/>
-                            <RowDefinition Height="*" MaxHeight="100"/>
-                        </Grid.RowDefinitions>
-
-                        <!-- Date -->
-                        <TextBlock Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="12 0 0 0">
-                            Дата заявки:<LineBreak/>С:
-                        </TextBlock>
-                        <TextBlock Grid.Row="0"  Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="12 0 0 0">
-                           До:
-                        </TextBlock>
-                        <DatePicker Grid.Row="1" Margin="10"/>
-                        <DatePicker Grid.Row="1" Grid.Column="1" Margin="10"/>
-
-                        <!-- Country -->
-                        <Expander Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Header="Страна:" Height="100">
-                            <ListBox x:Name="CountryTeamFilterLB" ItemTemplate="{StaticResource FilterItemTemplate}">
-                            </ListBox>
-                        </Expander>
-
-                        <!-- Discipline -->
-                        <Expander Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Header="Дисциплина:" Height="100">
-                            <ListBox x:Name="DisciplineTeamFilterLB" ItemTemplate="{StaticResource FilterItemTemplate}">
-                            </ListBox>
-                        </Expander>
-
-                        <!-- Age -->
-                        <Grid  Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2">
-                            <Grid.ColumnDefinitions>
-                                <ColumnDefinition Width="0.7*"/>
-                                <ColumnDefinition/>
-                            </Grid.ColumnDefinitions>
-
-                            <TextBlock Text="Возраст:" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12 0 0 0"/>
-                            <TextBox Grid.Column="1" Margin="0 0 5 0"/>
-                        </Grid>
-
-                        <Button x:Name="ApplyFilterTeamButton" Grid.Row="8" Grid.Column="0" Grid.ColumnSpan="2" Content="Применить фильтр" Margin="25"/>
-                    </Grid>
-
-                    <!-- TournamentsFilter -->
-                    <Grid Visibility="Hidden">
-
-                    </Grid>
-                </Grid> <!-- ApplicationFilter -->
-            </Grid>
-        </Grid>
-    </Grid>
-</Window>

+ 0 - 48
Курсовой проект 3.1/ApplicationWindow.xaml.cs

@@ -1,48 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Shapes;
-
-namespace Курсовой_проект_3._1
-{
-    /// <summary>
-    /// Логика взаимодействия для ApplicationWindow.xaml
-    /// </summary>
-    public partial class ApplicationWindow : Window
-    {
-        public ApplicationWindow()
-        {
-            InitializeComponent();
-
-            List<Country> countryList = new List<Country>
-            {
-                new Country{ ItemName="Russia"},
-                new Country{ ItemName="Ukraine"},
-                new Country{ ItemName="USA"},
-                new Country{ ItemName="Canada"},
-                new Country{ ItemName="Kazahstan"}
-            };
-            CountryFilterLB.ItemsSource = countryList;
-        }
-
-        private void PlayerListShowButton_Click(object sender, RoutedEventArgs e)
-        {
-            MessageBox.Show("kek");
-        }
-    }
-
-    //
-    public class Country
-    {
-        public string ItemName { get; set;}
-    }
-}

+ 33 - 0
Курсовой проект 3.1/Countries.cs

@@ -0,0 +1,33 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class Countries
+    {
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+        public Countries()
+        {
+            this.Teams = new HashSet<Teams>();
+            this.Users = new HashSet<Users>();
+        }
+    
+        public int Id { get; set; }
+        public string Name { get; set; }
+        public string IconPath { get; set; }
+    
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Teams> Teams { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Users> Users { get; set; }
+    }
+}

+ 30 - 0
Курсовой проект 3.1/Disciplines.cs

@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class Disciplines
+    {
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+        public Disciplines()
+        {
+            this.Users = new HashSet<Users>();
+        }
+    
+        public int Id { get; set; }
+        public string Name { get; set; }
+        public string IconPath { get; set; }
+    
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Users> Users { get; set; }
+    }
+}

+ 299 - 0
Курсовой проект 3.1/Func.cs

@@ -0,0 +1,299 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+
+namespace Курсовой_проект_3._1
+{
+    public class Func
+    {
+        static MyTeamContext _context = new MyTeamContext();
+
+        // КОМАНДЫ ///
+        // Возвращает название команды
+        public static string GetTeamName(int teamId)
+        {
+            return _context.Teams.Where(t => t.Id == teamId).Select(t => t.Name).ToList()[0];
+        }
+
+        // Возвращает список всех команд игрока
+        public static List<int> GetTeamIds(int userId)
+        {
+            return _context.TeamsUsers.Where(dr => dr.FK_User_Id == userId).Select(dr => dr.FK_Team_Id).ToList();
+        }
+
+        // Возвращает список всех игроков команды в настоящий момент
+        public static List<int> GetPlayerIdsInTeamPresent(int teamId)
+        {
+            return _context.TeamsUsers.Where(tu => tu.FK_Team_Id == teamId && tu.DateEnd == null).Select(tu => tu.FK_User_Id).ToList();
+        }
+
+        // Возвращает список всех игроков команды в прошлом
+        public static List<int> GetPlayerIdsInTeamPast(int teamId)
+        {
+            return  _context.TeamsUsers.Where(tu => tu.FK_Team_Id == teamId && tu.DateEnd != null).Select(tu => tu.FK_User_Id).ToList(); ;
+        }
+
+
+        // КОЛИЧЕСТВО ПОБЕД ///
+        // Возвращает количество (побед, ничьих, поражений) игрока во ВСЕХ командах
+        public static (int, int, int) GetWinDrawLoseCountUser(int userId)
+        {
+            int winCounter = 0;
+            int loseCounter = 0;
+            int drawCounter = 0;
+
+            // Получаем список всех команд
+            List<int> teamIds = GetTeamIds(userId);
+
+            // Считаем количество побед, ничьих, поражений
+            for (int i = 0; i < teamIds.Count; i++)
+            {
+                int teamId = teamIds[i];
+
+                int winIncrement, drawIncrement, loseIncrement;
+
+                (winIncrement, drawIncrement, loseIncrement) = GetWinDrawLoseCountUserInOneTeam(userId, teamId);
+                winCounter += winIncrement;
+                drawCounter += drawIncrement;
+                loseCounter += loseIncrement;
+            }
+
+            return (winCounter, drawCounter, loseCounter);
+        }
+
+        // Возвращает количество (побед, ничьих, поражений) игрока в ОДНОЙ команде
+        public static (int, int, int) GetWinDrawLoseCountUserInOneTeam(int userId, int teamId)
+        {
+            // инициализация счетчиков
+            int winCounter = 0;
+            int loseCounter = 0;
+            int drawCounter = 0;
+
+            // получаем список матчей в игрока в команде
+            List<Matches> matchList = GetMatchesUserInTeam(userId, teamId);
+
+            // для каждого матча узнать (победа, ничья, поражение)
+            foreach (Matches match in matchList)
+            {
+                if (match.FK_WinnerTeam_Id == teamId)
+                {
+                    winCounter++;
+                }
+                else if (match.FK_WinnerTeam_Id == null)
+                {
+                    drawCounter++;
+                }
+                else
+                {
+                    loseCounter++;
+                }
+            }  // foreach
+
+            return (winCounter, drawCounter, loseCounter);
+        }
+
+        // Возвращает количество (побед, ничьих, поражений) команды
+        public static (int, int, int) GetWinDrawLoseCountTeam(int teamId)
+        {
+            // инициализация счетчиков
+            int winCounter = 0;
+            int loseCounter = 0;
+            int drawCounter = 0;
+
+            // получаем список матчей команды
+            List<Matches> matchesList = _context.Matches.Where(m => m.FK_FrstTeam_Id == teamId || m.FK_ScndTeam_Id == teamId).ToList();
+
+            // для каждого матча узнать (победа, ничья, поражение)
+            foreach (Matches match in matchesList)
+            {
+                if (match.FK_WinnerTeam_Id == teamId)
+                {
+                    winCounter++;
+                }
+                else if (match.FK_WinnerTeam_Id == null)
+                {
+                    drawCounter++;
+                }
+                else
+                {
+                    loseCounter++;
+                }
+            }  // foreach
+
+            return (winCounter, drawCounter, loseCounter);
+        }
+
+
+        // МАТЧИ ///
+        // Возвращает все матчи игрока в команде
+        public static List<Matches> GetMatchesUserInTeam(int userId, int teamId)
+        {
+            // Получаем даты нахождения в команде
+            var param = _context.TeamsUsers.Where(p => p.FK_User_Id == userId && p.FK_Team_Id == teamId).Select(p => new
+            {
+                DateStart = p.DateStart,
+                DateEnd = p.DateEnd
+            }).ToList();
+
+            DateTime dateStart = param[0].DateStart;
+            DateTime? dateEnd = param[0].DateEnd;
+
+            if (dateEnd == null)
+            {
+                dateEnd = Convert.ToDateTime("01/01/2099");
+            }
+
+            // Получаем все матчи игрока в одной команде
+            List<Matches> matchList = _context.Matches.Where(m => m.GameDate >= dateStart && m.GameDate <= dateEnd && (m.FK_FrstTeam_Id == teamId || m.FK_ScndTeam_Id == teamId)).OrderByDescending(m => m.GameDate).ToList();
+
+            return matchList;
+        }
+
+        // Возвращает все матчи игрока (order by gameDate desc)
+        public static List<Matches> GetAllMatchesUser(int userId)
+        {
+            // получаем список команд
+            List<int> teamIds = _context.TeamsUsers.Where(p => p.FK_User_Id == userId).Select(p => p.FK_Team_Id).ToList();
+
+            // для каждой команды получаем матчи
+            List<Matches> matchList = new List<Matches>();
+            foreach (int teamId in teamIds)
+            {
+                matchList.AddRange(GetMatchesUserInTeam(userId, teamId));
+            }
+
+            return matchList;
+        }
+
+        // Возвращает список матчей, в которых участвовала команад
+        public static List<int> GetTeamMatchIds(int teamId)
+        {
+            return _context.Matches.Where(m => m.FK_FrstTeam_Id == teamId || m.FK_ScndTeam_Id == teamId).OrderBy(m => m.GameDate).Select(m => m.Id).ToList();
+        }
+
+
+        // ТУРНИРЫ ///
+        // Возвращает название турнира
+        public static string GetTournamentName(int tournamentId)
+        {
+            return _context.Tournaments.Where(t => t.Id == tournamentId).Select(t => t.Name).ToList()[0];
+        }
+
+        // Возвращает список турниров, в котором участвовала команда
+        public static List<int> GetTeamTournamentIds(int teamId)
+        {
+            return _context.Achievements.Where(t => t.FK_Team_Id == teamId).Select(t => t.FK_Tournament_Id).ToList();
+        }
+
+        // Возвращает место команды в турнире
+        public static string GetPlaceInTournament(int tournamentId, int teamId)
+        {
+            List<string> places = _context.Achievements.Where(a => a.FK_Team_Id == teamId && a.FK_Tournament_Id == tournamentId).Select(t => t.Place).ToList();
+            if (places.Count != 0)
+                return places[0];
+
+            return String.Empty;
+        }
+
+        // Возвращает приз команды за турнир
+        public static int GetPrizeInTournament(int tournamentId, int teamId)
+        {
+            List<int> prizes = _context.Achievements.Where(a => a.FK_Team_Id == teamId && a.FK_Tournament_Id == tournamentId).Select(t => t.Prize).ToList();
+            if (prizes.Count() != 0)
+                return prizes[0];
+
+            return 0;
+        }
+
+
+        // ПРОЧЕЕ ///
+        // Возвращает число в формате 1623451 => 1 623 451
+        public static string ConvertIntToStringMoney(int num)
+        {
+            string moneyStr = num.ToString("#,#").Replace(',', ' ');
+            return moneyStr;
+        }
+
+        // Возвращает возраст
+        public static int CalculateAge(DateTime birthDate)
+        {
+            int age = DateTime.Now.Year - birthDate.Year;
+
+            if (DateTime.Now.Month < birthDate.Month || (DateTime.Now.Month == birthDate.Month && DateTime.Now.Day < birthDate.Day))
+                age--;
+
+            return age;
+        }
+
+        // Возвращает True, если все строки содержат значения. В ином случае False
+        public static bool IsNullOrWhiteSpace(string[] strs)
+        {
+            for (int i = 0; i < strs.Length; i++)
+            {
+                if (string.IsNullOrWhiteSpace(strs[i]))
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+
+        // Возвращает True, если логин и пароль корректен. В ином случае False
+        public static bool IsValidLogAndPass(string login, string password)
+        {
+            if (String.IsNullOrWhiteSpace(login) || String.IsNullOrWhiteSpace(password))
+            {
+                return false;
+            }
+
+            return true;
+        }
+
+        // Возвращает True, если email корректен. В ином случае False
+        public static bool IsValidEmail(string email)
+        {
+            Regex regex = new Regex(@"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
+                @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$");
+
+            if (regex.IsMatch(email))
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+        // Возвращает True, если номер телефона корректен. В ином случае False
+        public static bool IsValidPhoneNumber(string phoneNumber)
+        {
+            foreach (char ch in phoneNumber)
+            {
+                if (!Char.IsDigit(ch))
+                {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        // Возвращает True, если строка состоит только из чисел. В ином случае False
+        public static bool IsOnlyDigitString(string str)
+        {
+            foreach (char ch in str)
+            {
+                if (!Char.IsDigit(ch))
+                {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+    }
+}

+ 0 - 456
Курсовой проект 3.1/MainWindow.xaml.cs

@@ -1,456 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Globalization;
-using System.Windows;
-using System.Windows.Data;
-using System.Windows.Media;
-
-namespace Курсовой_проект_3._1
-{
-    /// <summary>
-    /// Логика взаимодействия для MainWindow.xaml
-    /// </summary>
-    public partial class MainWindow : Window
-    {
-        int userId; // id открытого профиля
-        SQL query;
-
-        // TeamsGrid
-        List<PartInTeams> teams = new List<PartInTeams>(5);
-        int offsetTeams = 0;
-        int offsetNextFetchTeams = 5;
-
-        // MatchesGrid
-        List<Match> matches = new List<Match>(5);
-        int offsetMatches = 0;
-        int offsetNextFetchMatches = 5;
-
-        public MainWindow(int userId)
-        {
-            InitializeComponent();
-            DataTable dt = new DataTable();
-            this.userId = userId;
-
-            // адаптация к размеру окна
-            SizeChanged += MainWindow_SizeChanged;
-
-            // указываем строку подключения для запросов
-            query = new SQL("DefaultConnection");
-
-            // Подгрузка краткой информации
-            dt = query.SendSelectQuery("SELECT " +
-                                            "CONCAT(LName, ' ', FName, ' ', MName)," +
-                                            "Nickname," +
-                                            "Birthday," +
-                                            "(0 + Convert(Char(8), GETDATE(), 112) - Convert(Char(8), Birthday, 112)) / 10000," +
-                                            "Country," +
-                                            "PhoneNumber," +
-                                            "Email," +
-                                            "AboutShort," +
-                                            "PhotoURL," + //
-                                            "TeamId " +
-                                            "FROM Users WHERE UserId = " + Convert.ToString(this.userId));
-
-            RealNameTB.Text += Convert.ToString(dt.Rows[0][0]);
-            NicknameTB.Text += Convert.ToString(dt.Rows[0][1]);
-            BirthDateTB.Text += Convert.ToDateTime(dt.Rows[0][2]).ToString("D") + " (" + Convert.ToString(dt.Rows[0][3]) + " лет)";
-            CountryTB.Text += Convert.ToString(dt.Rows[0][4]);
-            PhoneNumberTB.Text += Convert.ToString(dt.Rows[0][5]);
-            EmailTB.Text += Convert.ToString(dt.Rows[0][6]);
-            AboutMeTB.Text += Convert.ToString(dt.Rows[0][7]);
-
-            // Подгрузка статистики
-            var (winCount, drawCount, loseCount) = GetWinDrawLoseCount(Convert.ToString(this.userId));
-            int gamesCount = winCount + drawCount + loseCount;
-            if (gamesCount != 0)
-            {
-                LineBarWin.Width = new GridLength(winCount * 100 / gamesCount, GridUnitType.Star);
-                LineBarDraw.Width = new GridLength(drawCount * 100 / gamesCount, GridUnitType.Star);
-                LineBarLose.Width = new GridLength(loseCount * 100 / gamesCount, GridUnitType.Star);
-
-                WinCountTB.Text = winCount.ToString() + " побед";
-                DrawCountTB.Text = drawCount.ToString() + " ничьих";
-                LoseCountTB.Text = loseCount.ToString() + " поражений";
-
-                WinPercentTB.Text = Math.Round(Convert.ToDouble(winCount) * 100.0 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
-                DrawPercentTB.Text = Math.Round(Convert.ToDouble(drawCount) * 100 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
-                LosePercentTB.Text = Math.Round(Convert.ToDouble(loseCount) * 100 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
-            }
-
-            // Подгрузка команд
-            int offsetTeamsInc = 0;
-            foreach (string teamId in GetTeamIds(Convert.ToString(this.userId), Convert.ToString(offsetTeams), Convert.ToString(offsetNextFetchTeams)))
-            {
-                teams.Add(GetPartInTeams(Convert.ToString(this.userId), teamId));
-                offsetTeamsInc++;
-            }
-            offsetTeams += offsetTeamsInc;
-            TeamsGrid.ItemsSource = teams;
-
-            // Подгрузка матчей
-            int offsetMatchesInc = 0;
-            foreach (DataRow dr in GetAllMatchesUser(Convert.ToString(this.userId), Convert.ToString(offsetMatches), Convert.ToString(offsetNextFetchMatches)).Rows)
-            {
-                matches.Add(GetMatch(dr));
-                offsetMatchesInc++;
-            }
-            offsetMatches += offsetMatchesInc;
-            MatchesGrid.ItemsSource = matches;
-
-            // Если зашел главные пользователь, то добавить кнопку настроек
-        }
-
-        private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
-        {
-            ProfileDockPanel.MinHeight = MyWindow.Height * 4 / 10;
-            ProfileDockPanel.MaxHeight = ProfileDockPanel.MinHeight + 100;
-        }
-
-        private void MoreGamesButton_Click(object sender, RoutedEventArgs e)
-        {
-            int offsetMatchesInc = 0;
-            DataTable dt = GetAllMatchesUser(Convert.ToString(this.userId), Convert.ToString(offsetMatches), Convert.ToString(offsetNextFetchMatches));
-
-            if (dt != null)
-            {
-                foreach (DataRow dr in dt.Rows)
-                {
-                    matches.Add(GetMatch(dr));
-                    offsetMatchesInc++;
-                }
-                offsetMatches += offsetMatchesInc;
-                MatchesGrid.ItemsSource = new List<Match>(1);
-                MatchesGrid.ItemsSource = matches;
-            }
-            else
-            {
-                MessageBox.Show("Больше матчей нет");
-                return;
-            }
-        }
-
-        private void MoreTeamsBtn_Click(object sender, RoutedEventArgs e)
-        {
-            int offsetTeamsInc = 0;
-            List<string> teamIds = GetTeamIds(Convert.ToString(this.userId), Convert.ToString(offsetTeams), Convert.ToString(offsetNextFetchTeams));
-
-            try
-            {
-                string check = teamIds[0];
-                foreach (string teamId in teamIds)
-                {
-                    teams.Add(GetPartInTeams(Convert.ToString(this.userId), teamId));
-                    offsetTeamsInc++;
-                }
-                offsetTeams += offsetTeamsInc;
-                TeamsGrid.ItemsSource = teams;
-            }
-            catch
-            {
-                MessageBox.Show("Больше матчей нет");
-                return;
-            }
-        }
-
-        // МАТЧИ ///
-        // Возвращает все матчи игрока в команде
-        private DataTable GetMatchesUserInTeam(string userId, string teamId)
-        {
-            // Получаем даты нахождения в команде
-            string queryText = "SELECT DateIn, DateOut FROM TeamCompositions WHERE UserId = " + userId + " AND TeamId = " + teamId;
-            DataTable dt = query.SendSelectQuery(queryText);
-            string dateIn = dt.Rows[0][0].ToString();
-            string dateOut = dt.Rows[0][1].ToString();
-
-            // Получаем все матчи игрока в одной команде
-            queryText = "SELECT TeamIdFrst, TeamIdScnd, IsFrstWin, GameDate, TournamentID, FrstScores, ScndScores FROM Matches WHERE (TeamIdFrst = " + teamId + " OR TeamIDScnd = " + teamId + " ) AND GameDate BETWEEN '" + dateIn + "'  AND '" + dateOut + "'" 
-                + "\n ORDER BY GameDate DESC" + ";";
-            dt = query.SendSelectQuery(queryText);
-
-            return dt;
-        }
-
-        // Возвращает все матчи игрока (order by game date desc)
-        private DataTable GetAllMatchesUser(string userId)
-        {
-            // получаем список команд
-            List<string> teamIds = GetTeamIds(userId);
-
-            // для каждой команды получаем матчи
-            DataTable dt = new DataTable();
-            foreach (string teamId in teamIds)
-            {
-                dt.Merge(GetMatchesUserInTeam(userId, teamId));
-            }
-
-            return dt;
-        }
-
-        // Возвращает все матчи игрока со сдвигом
-        private DataTable GetAllMatchesUser(string userId, string offset, string fetchNext)
-        {
-            // получаем список всех матчей (order by game date desc)
-            DataTable dt = GetAllMatchesUser(userId);
-
-            // проверяем количество оставшихся матчей
-            if (dt.Rows.Count < Convert.ToInt32(offset) + Convert.ToInt32(fetchNext))
-            {
-                fetchNext = Convert.ToString(Convert.ToInt32(fetchNext) - (Convert.ToInt32(offset) + Convert.ToInt32(fetchNext) - dt.Rows.Count));
-            }
-
-            // создаем подмассив для datarow
-            DataRow[] subDr = new DataRow[Convert.ToInt32(fetchNext)];
-            int drCounter = 0;
-
-            // заполняем подмассив строками из списка матчей со сдвигом
-            for (int i = Convert.ToInt32(offset) + 1; i <= Convert.ToInt32(offset) + Convert.ToInt32(fetchNext); i++)
-            {
-
-                subDr[drCounter] = dt.Rows[i - 1];
-                drCounter++;
-            }
-
-            DataTable subDt;
-            try
-            {
-                subDt = subDr.CopyToDataTable();
-            }
-            catch
-            {
-                return null;
-            }
-
-            return subDt;
-        }
-
-
-        // ОБЪЕКТЫ ///
-        // Возвращает объект класса PartInTeams
-        private PartInTeams GetPartInTeams(string userId, string teamId)
-        {
-            PartInTeams player = new PartInTeams();
-            player.TeamName = GetTeamName(teamId);
-            player.DateOfStart = GetDateInTeam(userId, teamId);
-            player.DateOfEnd = GetDateOutTeam(userId, teamId);
-
-            int winCount, drawCount, loseCount;
-            (winCount, drawCount, loseCount) = GetWinDrawLoseCount(userId, teamId);
-            player.Stat = winCount.ToString() + " побед, " + drawCount.ToString() + " ничьих, " + loseCount.ToString() + " поражений";
-
-            return player;
-        }
-
-        // Возвращает объект класса Match
-        private Match GetMatch(DataRow dr)
-        {
-            Match match = new Match();
-            match.FrstTeamName = GetTeamName(dr[0].ToString());
-            match.ScndTeamName = GetTeamName(dr[1].ToString());
-            match.Scores = dr[5].ToString() + " : " + dr[6].ToString();
-            match.Tournament = dr[4].ToString();
-            match.GameDate = Convert.ToDateTime(dr[3]).ToString("D");
-            
-            if (dr[2] != null)
-            {
-                if (Convert.ToBoolean(dr[2]))
-                {
-                    match.WinTeam = match.FrstTeamName;
-                }
-                else
-                {
-                    match.WinTeam = match.ScndTeamName;
-                }
-            }
-
-            return match;
-        }
-
-
-        // КОМАНДЫ ///
-        // Возвращает название команды
-        private string GetTeamName(string teamId)
-        {
-            string queryText = "SELECT TeamName FROM Teams WHERE TeamId = " + teamId;
-            DataTable dt = query.SendSelectQuery(queryText);
-
-            return dt.Rows[0][0].ToString();
-        }
-
-        // Возвращает дату вступления игрока в команду
-        private string GetDateInTeam(string userId, string teamId)
-        {
-            string queryText = "SELECT DateIn FROM TeamCompositions WHERE UserId = " + userId + " AND TeamId = " + teamId;
-            DataTable dt = query.SendSelectQuery(queryText);
-
-            return Convert.ToDateTime(dt.Rows[0][0]).ToString("D");
-        }
-
-        // Возвращает дату выхода игрока из команды
-        private string GetDateOutTeam(string userId, string teamId)
-        {
-            string queryText = "SELECT DateOut FROM TeamCompositions WHERE UserId = " + userId + " AND TeamId = " + teamId;
-            DataTable dt = query.SendSelectQuery(queryText);
-
-            return Convert.ToDateTime(dt.Rows[0][0]).ToString("D");
-        }
-
-        // Возвращает список всех команд игрока
-        private List<string> GetTeamIds(string userId)
-        {
-            string queryText = "SELECT TeamId FROM TeamCompositions WHERE UserId = " + userId;
-            DataTable dt = query.SendSelectQuery(queryText);
-
-            List<string> teamIds = new List<string>();
-            foreach (DataRow dtRow in dt.Rows)
-            {
-                teamIds.Add(dtRow[0].ToString());
-            }
-
-            return teamIds;
-        }
-
-        // Возвращает список команд игрока со сдвигом
-        private List<string> GetTeamIds(string userId, string offset, string fetchNext)
-        {
-            string queryText = "SELECT TeamId FROM TeamCompositions WHERE UserId = " + userId + "\n" +
-                               "ORDER BY DateIn DESC, TeamId" + "\n" +
-                               "OFFSET " + offset + " ROWS FETCH NEXT " + fetchNext + " ROWS ONLY";
-            DataTable dt = query.SendSelectQuery(queryText);
-
-            List<string> teamIds = new List<string>();
-            foreach (DataRow dtRow in dt.Rows)
-            {
-                teamIds.Add(dtRow[0].ToString());
-            }
-
-            return teamIds;
-        }
-
-
-        // КОЛИЧЕСТВО ПОБЕД ///
-        // Возвращает количество (побед, ничьих, поражений) игрока во ВСЕХ командах
-        private (int, int, int) GetWinDrawLoseCount(string userId)
-        {
-            int winCounter = 0;
-            int loseCounter = 0;
-            int drawCounter = 0;
-
-            // Получаем список всех команд
-            List<string> teamIds = GetTeamIds(userId);
-
-            // Считаем количество побед, ничьих, поражений
-            for (int i = 0; i < teamIds.Count; i++)
-            {
-                string teamId = teamIds[i];
-
-                int winIncrement, drawIncrement, loseIncrement;
-
-                (winIncrement, drawIncrement, loseIncrement) = GetWinDrawLoseCount(userId, teamId);
-                winCounter += winIncrement;
-                drawCounter += drawIncrement;
-                loseCounter += loseIncrement;
-            }
-
-            return (winCounter, drawCounter, loseCounter);
-        }
-
-        // Возвращает количество (побед, ничьих, поражений) игрока в ОДНОЙ команде
-        private (int, int, int) GetWinDrawLoseCount(string userId, string teamId)
-        {
-            // инициализация счетчиков
-            int winCounter = 0;
-            int loseCounter = 0;
-            int drawCounter = 0;
-
-            // получаем список матчей в игрока в команде
-            DataTable dt = GetMatchesUserInTeam(userId, teamId);
-
-            // для каждого матча узнать (победа, ничья, поражение)
-            foreach (DataRow dtRow in dt.Rows)
-            {
-                if (dtRow[0].ToString() == teamId)
-                {
-
-                    if (dtRow[2] != null)
-                    {
-                        if (Convert.ToBoolean(dtRow[2]))
-                        {
-                            winCounter++;
-                        }
-                        else
-                        {
-                            loseCounter++;
-                        }
-                    }
-                    else
-                    {
-                        drawCounter++;
-                    }
-                }
-                else
-                {
-                    if (dtRow[2] != null)
-                    {
-                        if (!Convert.ToBoolean(dtRow[2]))
-                        {
-                            winCounter++;
-                        }
-                        else
-                        {
-                            loseCounter++;
-                        }
-                    }
-                    else
-                    {
-                        drawCounter++;
-                    }
-                }
-            }  // foreach
-
-            return (winCounter, drawCounter, loseCounter);
-        }
-    }  // class MainWindow
-
-
-    public class MyConverter : IMultiValueConverter
-    {
-        public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
-        {
-            string team = value[0] as string;
-            string winTeam = value[1] as string;
-
-            if (team == winTeam)
-            {
-                return Brushes.LightGreen;
-            }
-            else
-            {
-                return DependencyProperty.UnsetValue;
-            }
-        }
-
-        public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
-        {
-            throw new NotSupportedException();
-        }
-    }
-
-    public class PartInTeams
-    {
-        public string TeamName { get; set; }
-        public string Stat { get; set; }
-        public string DateOfStart { get; set; }
-        public string DateOfEnd { get; set; }
-    }
-
-    public class Match
-    {
-        public string FrstTeamName { get; set; }
-        public string ScndTeamName { get; set; }
-        public string Scores { get; set; }
-        public string GameDate { get; set; }
-        public string Tournament { get; set; }
-        public string WinTeam { get; set; }
-    }
-}  // namespace

+ 32 - 0
Курсовой проект 3.1/Matches.cs

@@ -0,0 +1,32 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class Matches
+    {
+        public int Id { get; set; }
+        public int FK_FrstTeam_Id { get; set; }
+        public int FK_ScndTeam_Id { get; set; }
+        public int FrstScore { get; set; }
+        public int ScndScore { get; set; }
+        public Nullable<int> FK_WinnerTeam_Id { get; set; }
+        public System.DateTime GameDate { get; set; }
+        public int RoundNum { get; set; }
+        public int FK_Tournament_Id { get; set; }
+    
+        public virtual Tournaments Tournaments { get; set; }
+        public virtual Teams Teams { get; set; }
+        public virtual Teams Teams1 { get; set; }
+        public virtual Teams Teams2 { get; set; }
+    }
+}

+ 41 - 0
Курсовой проект 3.1/MyTeam.Context.cs

@@ -0,0 +1,41 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Data.Entity;
+    using System.Data.Entity.Infrastructure;
+    
+    public partial class MyTeamContext : DbContext
+    {
+        public MyTeamContext()
+            : base("name=MyTeamEntities")
+        {
+        }
+    
+        protected override void OnModelCreating(DbModelBuilder modelBuilder)
+        {
+            throw new UnintentionalCodeFirstException();
+        }
+    
+        public virtual DbSet<Achievements> Achievements { get; set; }
+        public virtual DbSet<Countries> Countries { get; set; }
+        public virtual DbSet<Disciplines> Disciplines { get; set; }
+        public virtual DbSet<Matches> Matches { get; set; }
+        public virtual DbSet<PlayerApps> PlayerApps { get; set; }
+        public virtual DbSet<sysdiagrams> sysdiagrams { get; set; }
+        public virtual DbSet<TeamApps> TeamApps { get; set; }
+        public virtual DbSet<Teams> Teams { get; set; }
+        public virtual DbSet<TeamsUsers> TeamsUsers { get; set; }
+        public virtual DbSet<TournamentFormats> TournamentFormats { get; set; }
+        public virtual DbSet<Tournaments> Tournaments { get; set; }
+        public virtual DbSet<Users> Users { get; set; }
+    }
+}

+ 636 - 0
Курсовой проект 3.1/MyTeam.Context.tt

@@ -0,0 +1,636 @@
+<#@ template language="C#" debug="false" hostspecific="true"#>
+<#@ include file="EF6.Utility.CS.ttinclude"#><#@
+ output extension=".cs"#><#
+
+const string inputFile = @"MyTeam.edmx";
+var textTransform = DynamicTextTransformation.Create(this);
+var code = new CodeGenerationTools(this);
+var ef = new MetadataTools(this);
+var typeMapper = new TypeMapper(code, ef, textTransform.Errors);
+var loader = new EdmMetadataLoader(textTransform.Host, textTransform.Errors);
+var itemCollection = loader.CreateEdmItemCollection(inputFile);
+var modelNamespace = loader.GetModelNamespace(inputFile);
+var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef);
+
+var container = itemCollection.OfType<EntityContainer>().FirstOrDefault();
+if (container == null)
+{
+    return string.Empty;
+}
+#>
+//------------------------------------------------------------------------------
+// <auto-generated>
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#>
+//
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#>
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#>
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+<#
+
+var codeNamespace = code.VsNamespaceSuggestion();
+if (!String.IsNullOrEmpty(codeNamespace))
+{
+#>
+namespace <#=code.EscapeNamespace(codeNamespace)#>
+{
+<#
+    PushIndent("    ");
+}
+
+#>
+using System;
+using System.Data.Entity;
+using System.Data.Entity.Infrastructure;
+<#
+if (container.FunctionImports.Any())
+{
+#>
+using System.Data.Entity.Core.Objects;
+using System.Linq;
+<#
+}
+#>
+
+<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
+{
+    public <#=code.Escape(container)#>()
+        : base("name=<#=container.Name#>")
+    {
+<#
+if (!loader.IsLazyLoadingEnabled(container))
+{
+#>
+        this.Configuration.LazyLoadingEnabled = false;
+<#
+}
+
+foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
+{
+    // Note: the DbSet members are defined below such that the getter and
+    // setter always have the same accessibility as the DbSet definition
+    if (Accessibility.ForReadOnlyProperty(entitySet) != "public")
+    {
+#>
+        <#=codeStringGenerator.DbSetInitializer(entitySet)#>
+<#
+    }
+}
+#>
+    }
+
+    protected override void OnModelCreating(DbModelBuilder modelBuilder)
+    {
+        throw new UnintentionalCodeFirstException();
+    }
+
+<#
+    foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
+    {
+#>
+    <#=codeStringGenerator.DbSet(entitySet)#>
+<#
+    }
+
+    foreach (var edmFunction in container.FunctionImports)
+    {
+        WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: false);
+    }
+#>
+}
+<#
+
+if (!String.IsNullOrEmpty(codeNamespace))
+{
+    PopIndent();
+#>
+}
+<#
+}
+#>
+<#+
+
+private void WriteFunctionImport(TypeMapper typeMapper, CodeStringGenerator codeStringGenerator, EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
+{
+    if (typeMapper.IsComposable(edmFunction))
+    {
+#>
+
+    [DbFunction("<#=edmFunction.NamespaceName#>", "<#=edmFunction.Name#>")]
+    <#=codeStringGenerator.ComposableFunctionMethod(edmFunction, modelNamespace)#>
+    {
+<#+
+        codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter);
+#>
+        <#=codeStringGenerator.ComposableCreateQuery(edmFunction, modelNamespace)#>
+    }
+<#+
+    }
+    else
+    {
+#>
+
+    <#=codeStringGenerator.FunctionMethod(edmFunction, modelNamespace, includeMergeOption)#>
+    {
+<#+
+        codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter);
+#>
+        <#=codeStringGenerator.ExecuteFunction(edmFunction, modelNamespace, includeMergeOption)#>
+    }
+<#+
+        if (typeMapper.GenerateMergeOptionFunction(edmFunction, includeMergeOption))
+        {
+            WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: true);
+        }
+    }
+}
+
+public void WriteFunctionParameter(string name, string isNotNull, string notNullInit, string nullInit)
+{
+#>
+        var <#=name#> = <#=isNotNull#> ?
+            <#=notNullInit#> :
+            <#=nullInit#>;
+
+<#+
+}
+
+public const string TemplateId = "CSharp_DbContext_Context_EF6";
+
+public class CodeStringGenerator
+{
+    private readonly CodeGenerationTools _code;
+    private readonly TypeMapper _typeMapper;
+    private readonly MetadataTools _ef;
+
+    public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef)
+    {
+        ArgumentNotNull(code, "code");
+        ArgumentNotNull(typeMapper, "typeMapper");
+        ArgumentNotNull(ef, "ef");
+
+        _code = code;
+        _typeMapper = typeMapper;
+        _ef = ef;
+    }
+
+    public string Property(EdmProperty edmProperty)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2} {{ {3}get; {4}set; }}",
+            Accessibility.ForProperty(edmProperty),
+            _typeMapper.GetTypeName(edmProperty.TypeUsage),
+            _code.Escape(edmProperty),
+            _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
+            _code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
+    }
+
+    public string NavigationProperty(NavigationProperty navProp)
+    {
+        var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType());
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2} {{ {3}get; {4}set; }}",
+            AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)),
+            navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType,
+            _code.Escape(navProp),
+            _code.SpaceAfter(Accessibility.ForGetter(navProp)),
+            _code.SpaceAfter(Accessibility.ForSetter(navProp)));
+    }
+    
+    public string AccessibilityAndVirtual(string accessibility)
+    {
+        return accessibility + (accessibility != "private" ? " virtual" : "");
+    }
+    
+    public string EntityClassOpening(EntityType entity)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1}partial class {2}{3}",
+            Accessibility.ForType(entity),
+            _code.SpaceAfter(_code.AbstractOption(entity)),
+            _code.Escape(entity),
+            _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
+    }
+    
+    public string EnumOpening(SimpleType enumType)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} enum {1} : {2}",
+            Accessibility.ForType(enumType),
+            _code.Escape(enumType),
+            _code.Escape(_typeMapper.UnderlyingClrType(enumType)));
+        }
+    
+    public void WriteFunctionParameters(EdmFunction edmFunction, Action<string, string, string, string> writeParameter)
+    {
+        var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
+        foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable))
+        {
+            var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null";
+            var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")";
+            var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))";
+            writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit);
+        }
+    }
+    
+    public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} IQueryable<{1}> {2}({3})",
+            AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
+            _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
+            _code.Escape(edmFunction),
+            string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()));
+    }
+    
+    public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});",
+            _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
+            edmFunction.NamespaceName,
+            edmFunction.Name,
+            string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()),
+            _code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())));
+    }
+    
+    public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        var returnType = _typeMapper.GetReturnType(edmFunction);
+
+        var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray());
+        if (includeMergeOption)
+        {
+            paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption";
+        }
+
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2}({3})",
+            AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
+            returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
+            _code.Escape(edmFunction),
+            paramList);
+    }
+    
+    public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        var returnType = _typeMapper.GetReturnType(edmFunction);
+
+        var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()));
+        if (includeMergeOption)
+        {
+            callParams = ", mergeOption" + callParams;
+        }
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});",
+            returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
+            edmFunction.Name,
+            callParams);
+    }
+    
+    public string DbSet(EntitySet entitySet)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} virtual DbSet<{1}> {2} {{ get; set; }}",
+            Accessibility.ForReadOnlyProperty(entitySet),
+            _typeMapper.GetTypeName(entitySet.ElementType),
+            _code.Escape(entitySet));
+    }
+
+    public string DbSetInitializer(EntitySet entitySet)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} = Set<{1}>();",
+            _code.Escape(entitySet),
+            _typeMapper.GetTypeName(entitySet.ElementType));
+    }
+
+    public string UsingDirectives(bool inHeader, bool includeCollections = true)
+    {
+        return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
+            ? string.Format(
+                CultureInfo.InvariantCulture,
+                "{0}using System;{1}" +
+                "{2}",
+                inHeader ? Environment.NewLine : "",
+                includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "",
+                inHeader ? "" : Environment.NewLine)
+            : "";
+    }
+}
+
+public class TypeMapper
+{
+    private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName";
+
+    private readonly System.Collections.IList _errors;
+    private readonly CodeGenerationTools _code;
+    private readonly MetadataTools _ef;
+
+    public static string FixNamespaces(string typeName)
+    {
+        return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial.");
+    }
+
+    public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors)
+    {
+        ArgumentNotNull(code, "code");
+        ArgumentNotNull(ef, "ef");
+        ArgumentNotNull(errors, "errors");
+
+        _code = code;
+        _ef = ef;
+        _errors = errors;
+    }
+
+    public string GetTypeName(TypeUsage typeUsage)
+    {
+        return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null);
+    }
+
+    public string GetTypeName(EdmType edmType)
+    {
+        return GetTypeName(edmType, isNullable: null, modelNamespace: null);
+    }
+
+    public string GetTypeName(TypeUsage typeUsage, string modelNamespace)
+    {
+        return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace);
+    }
+
+    public string GetTypeName(EdmType edmType, string modelNamespace)
+    {
+        return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace);
+    }
+
+    public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace)
+    {
+        if (edmType == null)
+        {
+            return null;
+        }
+
+        var collectionType = edmType as CollectionType;
+        if (collectionType != null)
+        {
+            return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace));
+        }
+
+        var typeName = _code.Escape(edmType.MetadataProperties
+                                .Where(p => p.Name == ExternalTypeNameAttributeName)
+                                .Select(p => (string)p.Value)
+                                .FirstOrDefault())
+            ?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ?
+                _code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) :
+                _code.Escape(edmType));
+
+        if (edmType is StructuralType)
+        {
+            return typeName;
+        }
+
+        if (edmType is SimpleType)
+        {
+            var clrType = UnderlyingClrType(edmType);
+            if (!IsEnumType(edmType))
+            {
+                typeName = _code.Escape(clrType);
+            }
+
+            typeName = FixNamespaces(typeName);
+
+            return clrType.IsValueType && isNullable == true ?
+                String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) :
+                typeName;
+        }
+
+        throw new ArgumentException("edmType");
+    }
+    
+    public Type UnderlyingClrType(EdmType edmType)
+    {
+        ArgumentNotNull(edmType, "edmType");
+
+        var primitiveType = edmType as PrimitiveType;
+        if (primitiveType != null)
+        {
+            return primitiveType.ClrEquivalentType;
+        }
+
+        if (IsEnumType(edmType))
+        {
+            return GetEnumUnderlyingType(edmType).ClrEquivalentType;
+        }
+
+        return typeof(object);
+    }
+    
+    public object GetEnumMemberValue(MetadataItem enumMember)
+    {
+        ArgumentNotNull(enumMember, "enumMember");
+        
+        var valueProperty = enumMember.GetType().GetProperty("Value");
+        return valueProperty == null ? null : valueProperty.GetValue(enumMember, null);
+    }
+    
+    public string GetEnumMemberName(MetadataItem enumMember)
+    {
+        ArgumentNotNull(enumMember, "enumMember");
+        
+        var nameProperty = enumMember.GetType().GetProperty("Name");
+        return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null);
+    }
+
+    public System.Collections.IEnumerable GetEnumMembers(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+
+        var membersProperty = enumType.GetType().GetProperty("Members");
+        return membersProperty != null 
+            ? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null)
+            : Enumerable.Empty<MetadataItem>();
+    }
+    
+    public bool EnumIsFlags(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+        
+        var isFlagsProperty = enumType.GetType().GetProperty("IsFlags");
+        return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null);
+    }
+
+    public bool IsEnumType(GlobalItem edmType)
+    {
+        ArgumentNotNull(edmType, "edmType");
+
+        return edmType.GetType().Name == "EnumType";
+    }
+
+    public PrimitiveType GetEnumUnderlyingType(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+
+        return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null);
+    }
+
+    public string CreateLiteral(object value)
+    {
+        if (value == null || value.GetType() != typeof(TimeSpan))
+        {
+            return _code.CreateLiteral(value);
+        }
+
+        return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks);
+    }
+    
+    public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable<string> types, string sourceFile)
+    {
+        ArgumentNotNull(types, "types");
+        ArgumentNotNull(sourceFile, "sourceFile");
+        
+        var hash = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
+        if (types.Any(item => !hash.Add(item)))
+        {
+            _errors.Add(
+                new CompilerError(sourceFile, -1, -1, "6023",
+                    String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict"))));
+            return false;
+        }
+        return true;
+    }
+    
+    public IEnumerable<SimpleType> GetEnumItemsToGenerate(IEnumerable<GlobalItem> itemCollection)
+    {
+        return GetItemsToGenerate<SimpleType>(itemCollection)
+            .Where(e => IsEnumType(e));
+    }
+    
+    public IEnumerable<T> GetItemsToGenerate<T>(IEnumerable<GlobalItem> itemCollection) where T: EdmType
+    {
+        return itemCollection
+            .OfType<T>()
+            .Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName))
+            .OrderBy(i => i.Name);
+    }
+
+    public IEnumerable<string> GetAllGlobalItems(IEnumerable<GlobalItem> itemCollection)
+    {
+        return itemCollection
+            .Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i))
+            .Select(g => GetGlobalItemName(g));
+    }
+
+    public string GetGlobalItemName(GlobalItem item)
+    {
+        if (item is EdmType)
+        {
+            return ((EdmType)item).Name;
+        }
+        else
+        {
+            return ((EntityContainer)item).Name;
+        }
+    }
+
+    public IEnumerable<EdmProperty> GetSimpleProperties(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetSimpleProperties(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetComplexProperties(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetComplexProperties(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
+    }
+
+    public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
+    }
+    
+    public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
+    }
+
+    public IEnumerable<NavigationProperty> GetNavigationProperties(EntityType type)
+    {
+        return type.NavigationProperties.Where(np => np.DeclaringType == type);
+    }
+    
+    public IEnumerable<NavigationProperty> GetCollectionNavigationProperties(EntityType type)
+    {
+        return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many);
+    }
+    
+    public FunctionParameter GetReturnParameter(EdmFunction edmFunction)
+    {
+        ArgumentNotNull(edmFunction, "edmFunction");
+
+        var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters");
+        return returnParamsProperty == null
+            ? edmFunction.ReturnParameter
+            : ((IEnumerable<FunctionParameter>)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault();
+    }
+
+    public bool IsComposable(EdmFunction edmFunction)
+    {
+        ArgumentNotNull(edmFunction, "edmFunction");
+
+        var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute");
+        return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null);
+    }
+
+    public IEnumerable<FunctionImportParameter> GetParameters(EdmFunction edmFunction)
+    {
+        return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
+    }
+
+    public TypeUsage GetReturnType(EdmFunction edmFunction)
+    {
+        var returnParam = GetReturnParameter(edmFunction);
+        return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage);
+    }
+    
+    public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption)
+    {
+        var returnType = GetReturnType(edmFunction);
+        return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType;
+    }
+}
+
+public static void ArgumentNotNull<T>(T arg, string name) where T : class
+{
+    if (arg == null)
+    {
+        throw new ArgumentNullException(name);
+    }
+}
+#>

+ 10 - 0
Курсовой проект 3.1/MyTeam.Designer.cs

@@ -0,0 +1,10 @@
+// Создание кода T4 для модели "C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\MyTeam.edmx" включено. 
+// Чтобы включить формирование кода прежних версий, измените значение свойства "Стратегия создания кода" конструктора
+// на "Legacy ObjectContext". Это свойство доступно в окне "Свойства", если модель
+// открыта в конструкторе.
+
+// Если не сформированы контекст и классы сущности, возможная причина в том, что вы создали пустую модель, но
+// еще не выбрали версию Entity Framework для использования. Чтобы сформировать класс контекста и классы сущностей
+// для своей модели, откройте модель в конструкторе, щелкните правой кнопкой область конструктора и
+// выберите "Обновить модель из базы данных", "Сформировать базу данных из модели" или "Добавить элемент формирования
+// кода...".

+ 9 - 0
Курсовой проект 3.1/MyTeam.cs

@@ -0,0 +1,9 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1034 - 0
Курсовой проект 3.1/MyTeam.edmx


+ 39 - 0
Курсовой проект 3.1/MyTeam.edmx.diagram

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
+ <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
+  <edmx:Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
+    <!-- Diagram content (shape and connector positions) -->
+    <edmx:Diagrams>
+      <Diagram DiagramId="84c5c118ee6849e59fcdc2c8bbb5c2d6" Name="Diagram1">
+        <EntityTypeShape EntityType="MyTeamModel.Achievements" Width="1.5" PointX="8.25" PointY="7.625" IsExpanded="true" />
+        <EntityTypeShape EntityType="MyTeamModel.Countries" Width="1.5" PointX="0.75" PointY="10.875" IsExpanded="true" />
+        <EntityTypeShape EntityType="MyTeamModel.Disciplines" Width="1.5" PointX="3.75" PointY="7" IsExpanded="true" />
+        <EntityTypeShape EntityType="MyTeamModel.Matches" Width="1.5" PointX="8.25" PointY="14.125" IsExpanded="true" />
+        <EntityTypeShape EntityType="MyTeamModel.PlayerApps" Width="1.5" PointX="8.25" PointY="10.75" IsExpanded="true" />
+        <EntityTypeShape EntityType="MyTeamModel.sysdiagrams" Width="1.5" PointX="0.75" PointY="0.75" IsExpanded="true" />
+        <EntityTypeShape EntityType="MyTeamModel.TeamApps" Width="1.5" PointX="5.25" PointY="18.125" IsExpanded="true" />
+        <EntityTypeShape EntityType="MyTeamModel.Teams" Width="1.5" PointX="3" PointY="9.625" IsExpanded="true" />
+        <EntityTypeShape EntityType="MyTeamModel.TeamsUsers" Width="1.5" PointX="11.25" PointY="10.625" IsExpanded="true" />
+        <EntityTypeShape EntityType="MyTeamModel.TournamentFormats" Width="1.5" PointX="9" PointY="5" IsExpanded="true" />
+        <EntityTypeShape EntityType="MyTeamModel.Tournaments" Width="1.5" PointX="11.25" PointY="6" IsExpanded="true" />
+        <EntityTypeShape EntityType="MyTeamModel.Users" Width="1.5" PointX="6" PointY="9.375" IsExpanded="true" />
+        <AssociationConnector Association="MyTeamModel.FK_Achievements_Teams" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_Achievements_Tournaments" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_Teams_Countries" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_Users_Countries" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_Users_Disciplines" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_Matches_Tournaments" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_MatchesFrst_Teams" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_MatchesScnd_Teams" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_MatchesWinner_Teams" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_PlayerApps_Users" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_TeamApps_Users" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_Teams_Users" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_TeamsUsers_Teams" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_TeamsUsers_Users" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_Tournaments_TournamentFormats" ManuallyRouted="false" />
+        <AssociationConnector Association="MyTeamModel.FK_Tournaments_Users" ManuallyRouted="false" />
+      </Diagram>
+    </edmx:Diagrams>
+  </edmx:Designer>
+</edmx:Edmx>

+ 733 - 0
Курсовой проект 3.1/MyTeam.tt

@@ -0,0 +1,733 @@
+<#@ template language="C#" debug="false" hostspecific="true"#>
+<#@ include file="EF6.Utility.CS.ttinclude"#><#@ 
+ output extension=".cs"#><#
+
+const string inputFile = @"MyTeam.edmx";
+var textTransform = DynamicTextTransformation.Create(this);
+var code = new CodeGenerationTools(this);
+var ef = new MetadataTools(this);
+var typeMapper = new TypeMapper(code, ef, textTransform.Errors);
+var	fileManager = EntityFrameworkTemplateFileManager.Create(this);
+var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile);
+var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef);
+
+if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile))
+{
+    return string.Empty;
+}
+
+WriteHeader(codeStringGenerator, fileManager);
+
+foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
+{
+    fileManager.StartNewFile(entity.Name + ".cs");
+    BeginNamespace(code);
+#>
+<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
+<#=codeStringGenerator.EntityClassOpening(entity)#>
+{
+<#
+    var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(entity);
+    var collectionNavigationProperties = typeMapper.GetCollectionNavigationProperties(entity);
+    var complexProperties = typeMapper.GetComplexProperties(entity);
+
+    if (propertiesWithDefaultValues.Any() || collectionNavigationProperties.Any() || complexProperties.Any())
+    {
+#>
+    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+    public <#=code.Escape(entity)#>()
+    {
+<#
+        foreach (var edmProperty in propertiesWithDefaultValues)
+        {
+#>
+        this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>;
+<#
+        }
+
+        foreach (var navigationProperty in collectionNavigationProperties)
+        {
+#>
+        this.<#=code.Escape(navigationProperty)#> = new HashSet<<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType())#>>();
+<#
+        }
+
+        foreach (var complexProperty in complexProperties)
+        {
+#>
+        this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>();
+<#
+        }
+#>
+    }
+
+<#
+    }
+
+    var simpleProperties = typeMapper.GetSimpleProperties(entity);
+    if (simpleProperties.Any())
+    {
+        foreach (var edmProperty in simpleProperties)
+        {
+#>
+    <#=codeStringGenerator.Property(edmProperty)#>
+<#
+        }
+    }
+
+    if (complexProperties.Any())
+    {
+#>
+
+<#
+        foreach(var complexProperty in complexProperties)
+        {
+#>
+    <#=codeStringGenerator.Property(complexProperty)#>
+<#
+        }
+    }
+
+    var navigationProperties = typeMapper.GetNavigationProperties(entity);
+    if (navigationProperties.Any())
+    {
+#>
+
+<#
+        foreach (var navigationProperty in navigationProperties)
+        {
+            if (navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
+            {
+#>
+    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+<#
+            }
+#>
+    <#=codeStringGenerator.NavigationProperty(navigationProperty)#>
+<#
+        }
+    }
+#>
+}
+<#
+    EndNamespace(code);
+}
+
+foreach (var complex in typeMapper.GetItemsToGenerate<ComplexType>(itemCollection))
+{
+    fileManager.StartNewFile(complex.Name + ".cs");
+    BeginNamespace(code);
+#>
+<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: false)#>
+<#=Accessibility.ForType(complex)#> partial class <#=code.Escape(complex)#>
+{
+<#
+    var complexProperties = typeMapper.GetComplexProperties(complex);
+    var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(complex);
+
+    if (propertiesWithDefaultValues.Any() || complexProperties.Any())
+    {
+#>
+    public <#=code.Escape(complex)#>()
+    {
+<#
+        foreach (var edmProperty in propertiesWithDefaultValues)
+        {
+#>
+        this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>;
+<#
+        }
+
+        foreach (var complexProperty in complexProperties)
+        {
+#>
+        this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>();
+<#
+        }
+#>
+    }
+
+<#
+    }
+
+    var simpleProperties = typeMapper.GetSimpleProperties(complex);
+    if (simpleProperties.Any())
+    {
+        foreach(var edmProperty in simpleProperties)
+        {
+#>
+    <#=codeStringGenerator.Property(edmProperty)#>
+<#
+        }
+    }
+
+    if (complexProperties.Any())
+    {
+#>
+
+<#
+        foreach(var edmProperty in complexProperties)
+        {
+#>
+    <#=codeStringGenerator.Property(edmProperty)#>
+<#
+        }
+    }
+#>
+}
+<#
+    EndNamespace(code);
+}
+
+foreach (var enumType in typeMapper.GetEnumItemsToGenerate(itemCollection))
+{
+    fileManager.StartNewFile(enumType.Name + ".cs");
+    BeginNamespace(code);
+#>
+<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: false)#>
+<#
+    if (typeMapper.EnumIsFlags(enumType))
+    {
+#>
+[Flags]
+<#
+    }
+#>
+<#=codeStringGenerator.EnumOpening(enumType)#>
+{
+<#
+    var foundOne = false;
+    
+    foreach (MetadataItem member in typeMapper.GetEnumMembers(enumType))
+    {
+        foundOne = true;
+#>
+    <#=code.Escape(typeMapper.GetEnumMemberName(member))#> = <#=typeMapper.GetEnumMemberValue(member)#>,
+<#
+    }
+
+    if (foundOne)
+    {
+        this.GenerationEnvironment.Remove(this.GenerationEnvironment.Length - 3, 1);
+    }
+#>
+}
+<#
+    EndNamespace(code);
+}
+
+fileManager.Process();
+
+#>
+<#+
+
+public void WriteHeader(CodeStringGenerator codeStringGenerator, EntityFrameworkTemplateFileManager fileManager)
+{
+    fileManager.StartHeader();
+#>
+//------------------------------------------------------------------------------
+// <auto-generated>
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#>
+//
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#>
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#>
+// </auto-generated>
+//------------------------------------------------------------------------------
+<#=codeStringGenerator.UsingDirectives(inHeader: true)#>
+<#+
+    fileManager.EndBlock();
+}
+
+public void BeginNamespace(CodeGenerationTools code)
+{
+    var codeNamespace = code.VsNamespaceSuggestion();
+    if (!String.IsNullOrEmpty(codeNamespace))
+    {
+#>
+namespace <#=code.EscapeNamespace(codeNamespace)#>
+{
+<#+
+        PushIndent("    ");
+    }
+}
+
+public void EndNamespace(CodeGenerationTools code)
+{
+    if (!String.IsNullOrEmpty(code.VsNamespaceSuggestion()))
+    {
+        PopIndent();
+#>
+}
+<#+
+    }
+}
+
+public const string TemplateId = "CSharp_DbContext_Types_EF6";
+
+public class CodeStringGenerator
+{
+    private readonly CodeGenerationTools _code;
+    private readonly TypeMapper _typeMapper;
+    private readonly MetadataTools _ef;
+
+    public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef)
+    {
+        ArgumentNotNull(code, "code");
+        ArgumentNotNull(typeMapper, "typeMapper");
+        ArgumentNotNull(ef, "ef");
+
+        _code = code;
+        _typeMapper = typeMapper;
+        _ef = ef;
+    }
+
+    public string Property(EdmProperty edmProperty)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2} {{ {3}get; {4}set; }}",
+            Accessibility.ForProperty(edmProperty),
+            _typeMapper.GetTypeName(edmProperty.TypeUsage),
+            _code.Escape(edmProperty),
+            _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
+            _code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
+    }
+
+    public string NavigationProperty(NavigationProperty navProp)
+    {
+        var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType());
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2} {{ {3}get; {4}set; }}",
+            AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)),
+            navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType,
+            _code.Escape(navProp),
+            _code.SpaceAfter(Accessibility.ForGetter(navProp)),
+            _code.SpaceAfter(Accessibility.ForSetter(navProp)));
+    }
+    
+    public string AccessibilityAndVirtual(string accessibility)
+    {
+        return accessibility + (accessibility != "private" ? " virtual" : "");
+    }
+    
+    public string EntityClassOpening(EntityType entity)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1}partial class {2}{3}",
+            Accessibility.ForType(entity),
+            _code.SpaceAfter(_code.AbstractOption(entity)),
+            _code.Escape(entity),
+            _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
+    }
+    
+    public string EnumOpening(SimpleType enumType)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} enum {1} : {2}",
+            Accessibility.ForType(enumType),
+            _code.Escape(enumType),
+            _code.Escape(_typeMapper.UnderlyingClrType(enumType)));
+        }
+    
+    public void WriteFunctionParameters(EdmFunction edmFunction, Action<string, string, string, string> writeParameter)
+    {
+        var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
+        foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable))
+        {
+            var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null";
+            var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")";
+            var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))";
+            writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit);
+        }
+    }
+    
+    public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} IQueryable<{1}> {2}({3})",
+            AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
+            _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
+            _code.Escape(edmFunction),
+            string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()));
+    }
+    
+    public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});",
+            _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
+            edmFunction.NamespaceName,
+            edmFunction.Name,
+            string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()),
+            _code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())));
+    }
+    
+    public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        var returnType = _typeMapper.GetReturnType(edmFunction);
+
+        var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray());
+        if (includeMergeOption)
+        {
+            paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption";
+        }
+
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2}({3})",
+            AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
+            returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
+            _code.Escape(edmFunction),
+            paramList);
+    }
+    
+    public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        var returnType = _typeMapper.GetReturnType(edmFunction);
+
+        var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()));
+        if (includeMergeOption)
+        {
+            callParams = ", mergeOption" + callParams;
+        }
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});",
+            returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
+            edmFunction.Name,
+            callParams);
+    }
+    
+    public string DbSet(EntitySet entitySet)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} virtual DbSet<{1}> {2} {{ get; set; }}",
+            Accessibility.ForReadOnlyProperty(entitySet),
+            _typeMapper.GetTypeName(entitySet.ElementType),
+            _code.Escape(entitySet));
+    }
+
+    public string UsingDirectives(bool inHeader, bool includeCollections = true)
+    {
+        return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
+            ? string.Format(
+                CultureInfo.InvariantCulture,
+                "{0}using System;{1}" +
+                "{2}",
+                inHeader ? Environment.NewLine : "",
+                includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "",
+                inHeader ? "" : Environment.NewLine)
+            : "";
+    }
+}
+
+public class TypeMapper
+{
+    private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName";
+
+    private readonly System.Collections.IList _errors;
+    private readonly CodeGenerationTools _code;
+    private readonly MetadataTools _ef;
+
+    public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors)
+    {
+        ArgumentNotNull(code, "code");
+        ArgumentNotNull(ef, "ef");
+        ArgumentNotNull(errors, "errors");
+
+        _code = code;
+        _ef = ef;
+        _errors = errors;
+    }
+
+    public static string FixNamespaces(string typeName)
+    {
+        return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial.");
+    }
+
+    public string GetTypeName(TypeUsage typeUsage)
+    {
+        return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null);
+    }
+
+    public string GetTypeName(EdmType edmType)
+    {
+        return GetTypeName(edmType, isNullable: null, modelNamespace: null);
+    }
+
+    public string GetTypeName(TypeUsage typeUsage, string modelNamespace)
+    {
+        return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace);
+    }
+
+    public string GetTypeName(EdmType edmType, string modelNamespace)
+    {
+        return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace);
+    }
+
+    public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace)
+    {
+        if (edmType == null)
+        {
+            return null;
+        }
+
+        var collectionType = edmType as CollectionType;
+        if (collectionType != null)
+        {
+            return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace));
+        }
+
+        var typeName = _code.Escape(edmType.MetadataProperties
+                                .Where(p => p.Name == ExternalTypeNameAttributeName)
+                                .Select(p => (string)p.Value)
+                                .FirstOrDefault())
+            ?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ?
+                _code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) :
+                _code.Escape(edmType));
+
+        if (edmType is StructuralType)
+        {
+            return typeName;
+        }
+
+        if (edmType is SimpleType)
+        {
+            var clrType = UnderlyingClrType(edmType);
+            if (!IsEnumType(edmType))
+            {
+                typeName = _code.Escape(clrType);
+            }
+
+            typeName = FixNamespaces(typeName);
+
+            return clrType.IsValueType && isNullable == true ?
+                String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) :
+                typeName;
+        }
+
+        throw new ArgumentException("edmType");
+    }
+    
+    public Type UnderlyingClrType(EdmType edmType)
+    {
+        ArgumentNotNull(edmType, "edmType");
+
+        var primitiveType = edmType as PrimitiveType;
+        if (primitiveType != null)
+        {
+            return primitiveType.ClrEquivalentType;
+        }
+
+        if (IsEnumType(edmType))
+        {
+            return GetEnumUnderlyingType(edmType).ClrEquivalentType;
+        }
+
+        return typeof(object);
+    }
+    
+    public object GetEnumMemberValue(MetadataItem enumMember)
+    {
+        ArgumentNotNull(enumMember, "enumMember");
+        
+        var valueProperty = enumMember.GetType().GetProperty("Value");
+        return valueProperty == null ? null : valueProperty.GetValue(enumMember, null);
+    }
+    
+    public string GetEnumMemberName(MetadataItem enumMember)
+    {
+        ArgumentNotNull(enumMember, "enumMember");
+        
+        var nameProperty = enumMember.GetType().GetProperty("Name");
+        return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null);
+    }
+
+    public System.Collections.IEnumerable GetEnumMembers(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+
+        var membersProperty = enumType.GetType().GetProperty("Members");
+        return membersProperty != null 
+            ? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null)
+            : Enumerable.Empty<MetadataItem>();
+    }
+    
+    public bool EnumIsFlags(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+        
+        var isFlagsProperty = enumType.GetType().GetProperty("IsFlags");
+        return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null);
+    }
+
+    public bool IsEnumType(GlobalItem edmType)
+    {
+        ArgumentNotNull(edmType, "edmType");
+
+        return edmType.GetType().Name == "EnumType";
+    }
+
+    public PrimitiveType GetEnumUnderlyingType(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+
+        return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null);
+    }
+
+    public string CreateLiteral(object value)
+    {
+        if (value == null || value.GetType() != typeof(TimeSpan))
+        {
+            return _code.CreateLiteral(value);
+        }
+
+        return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks);
+    }
+    
+    public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable<string> types, string sourceFile)
+    {
+        ArgumentNotNull(types, "types");
+        ArgumentNotNull(sourceFile, "sourceFile");
+        
+        var hash = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
+        if (types.Any(item => !hash.Add(item)))
+        {
+            _errors.Add(
+                new CompilerError(sourceFile, -1, -1, "6023",
+                    String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict"))));
+            return false;
+        }
+        return true;
+    }
+    
+    public IEnumerable<SimpleType> GetEnumItemsToGenerate(IEnumerable<GlobalItem> itemCollection)
+    {
+        return GetItemsToGenerate<SimpleType>(itemCollection)
+            .Where(e => IsEnumType(e));
+    }
+    
+    public IEnumerable<T> GetItemsToGenerate<T>(IEnumerable<GlobalItem> itemCollection) where T: EdmType
+    {
+        return itemCollection
+            .OfType<T>()
+            .Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName))
+            .OrderBy(i => i.Name);
+    }
+
+    public IEnumerable<string> GetAllGlobalItems(IEnumerable<GlobalItem> itemCollection)
+    {
+        return itemCollection
+            .Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i))
+            .Select(g => GetGlobalItemName(g));
+    }
+
+    public string GetGlobalItemName(GlobalItem item)
+    {
+        if (item is EdmType)
+        {
+            return ((EdmType)item).Name;
+        }
+        else
+        {
+            return ((EntityContainer)item).Name;
+        }
+    }
+
+    public IEnumerable<EdmProperty> GetSimpleProperties(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetSimpleProperties(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetComplexProperties(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetComplexProperties(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
+    }
+
+    public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
+    }
+    
+    public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
+    }
+
+    public IEnumerable<NavigationProperty> GetNavigationProperties(EntityType type)
+    {
+        return type.NavigationProperties.Where(np => np.DeclaringType == type);
+    }
+    
+    public IEnumerable<NavigationProperty> GetCollectionNavigationProperties(EntityType type)
+    {
+        return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many);
+    }
+    
+    public FunctionParameter GetReturnParameter(EdmFunction edmFunction)
+    {
+        ArgumentNotNull(edmFunction, "edmFunction");
+
+        var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters");
+        return returnParamsProperty == null
+            ? edmFunction.ReturnParameter
+            : ((IEnumerable<FunctionParameter>)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault();
+    }
+
+    public bool IsComposable(EdmFunction edmFunction)
+    {
+        ArgumentNotNull(edmFunction, "edmFunction");
+
+        var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute");
+        return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null);
+    }
+
+    public IEnumerable<FunctionImportParameter> GetParameters(EdmFunction edmFunction)
+    {
+        return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
+    }
+
+    public TypeUsage GetReturnType(EdmFunction edmFunction)
+    {
+        var returnParam = GetReturnParameter(edmFunction);
+        return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage);
+    }
+    
+    public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption)
+    {
+        var returnType = GetReturnType(edmFunction);
+        return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType;
+    }
+}
+
+public static void ArgumentNotNull<T>(T arg, string name) where T : class
+{
+    if (arg == null)
+    {
+        throw new ArgumentNullException(name);
+    }
+}
+#>

+ 25 - 0
Курсовой проект 3.1/PlayerApps.cs

@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class PlayerApps
+    {
+        public int Id { get; set; }
+        public int FK_User_Id { get; set; }
+        public string Title { get; set; }
+        public string AppText { get; set; }
+        public System.DateTime AppDate { get; set; }
+    
+        public virtual Users Users { get; set; }
+    }
+}

+ 0 - 93
Курсовой проект 3.1/RegistrationWindow.xaml.cs

@@ -1,93 +0,0 @@
-using System;
-using System.Windows;
-using System.Data.SqlClient;
-using System.Data;
-using System.Configuration;
-
-
-namespace Курсовой_проект_3._1
-{
-    /// <summary>
-    /// Логика взаимодействия для RegistrationWindow.xaml
-    /// </summary>
-    public partial class RegistrationWindow : Window
-    {
-        string connectionString;
-
-        public RegistrationWindow()
-        {
-            InitializeComponent();
-            connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
-        }
-
-        private void AuthLink_Click(object sender, RoutedEventArgs e)
-        {
-            Authorization wnd = new Authorization();
-            wnd.Show();
-            Close();
-        }
-
-        private void RegBtn_Click(object sender, RoutedEventArgs e)
-        {
-            string login = LoginTB.Text.Trim();
-            string password = PasswordPB.Password.Trim();
-            string nickname = NicknameTB.Text.Trim();
-            string fname = FNameTB.Text.Trim();
-            string lname = LNameTB.Text.Trim();
-            string mname = MNameTB.Text.Trim();
-            string birthday = BirthdayDP.Text;
-
-            // проверка на заполненость всех полей
-            if (login == "" || password == "" || nickname == "" || fname == "" || lname == "" || mname == "" || birthday == "")
-            {
-                MessageBox.Show("Все поля должны быть заполнены!");
-                return;
-            }
-
-            SqlConnection connection = null;
-            try
-            {
-                connection = new SqlConnection(connectionString);
-                connection.Open();
-
-                // проверка на существование такого же логина в БД
-                DataTable dt = new DataTable();
-                SqlDataAdapter adapter = new SqlDataAdapter();
-
-                string sqlQuery = "SELECT * FROM Users WHERE Login = '" + login + "';";
-                SqlCommand command = new SqlCommand(sqlQuery, connection);
-
-                adapter.SelectCommand = command;
-                adapter.Fill(dt);
-                if (dt.Rows.Count > 0)
-                {
-                    MessageBox.Show("Такой логин уже существует!");
-                    LoginTB.Text = "";
-                    return;
-                }
-
-                // добавление нового пользователя в БД
-                string sqlQuery1 = "INSERT INTO Users (Login, Password, FName, LName, MName, Nickname, Birthday) VALUES(N'" + login + "', N'" + password + "', N'" + fname + "', N'" + lname + "', N'" + mname + "', N'" + nickname + "', '" + birthday + "')";
-                SqlCommand command1 = new SqlCommand(sqlQuery1, connection);
-                command1.ExecuteNonQuery();
-
-                // возврат к авторизации
-                MessageBox.Show("Регистрация прошла успешно!");
-                Authorization wnd = new Authorization();
-                wnd.Show();
-                Close();
-            }
-            catch (Exception ex)
-            {
-                MessageBox.Show(ex.Message);
-            }
-            finally
-            {
-                if (connection != null)
-                {
-                    connection.Close();
-                }
-            }
-        }
-    }
-}

+ 0 - 51
Курсовой проект 3.1/SQL.cs

@@ -1,51 +0,0 @@
-using System;
-using System.Data.SqlClient;
-using System.Data;
-using System.Configuration;
-using System.Windows;
-
-namespace Курсовой_проект_3._1
-{
-    class SQL
-    {
-        string connectionString;
-        public string connectionName { get; set; }
-
-        public SQL(string connectionName)
-        {
-            this.connectionName = connectionName;
-            connectionString = ConfigurationManager.ConnectionStrings[connectionName].ConnectionString;
-        }
-
-        public DataTable SendSelectQuery(string sqlQuery)
-        {
-            DataTable dataTable = new DataTable();
-            SqlConnection connection = null;
-            try
-            {
-                connection = new SqlConnection(connectionString);
-                connection.Open();
-
-                SqlCommand command = new SqlCommand(sqlQuery, connection);
-
-
-                SqlDataAdapter adapter = new SqlDataAdapter(command);
-                adapter.Fill(dataTable);
-            }
-            catch (Exception ex)
-            {
-                MessageBox.Show(ex.Message);
-                return null;
-            }
-            finally
-            {
-                if (connection != null)
-                {
-                    connection.Close();
-                }
-            }
-
-            return dataTable;
-        }
-    }
-}

+ 25 - 0
Курсовой проект 3.1/TeamApps.cs

@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class TeamApps
+    {
+        public int Id { get; set; }
+        public int FK_Team_Id { get; set; }
+        public string Title { get; set; }
+        public string AppText { get; set; }
+        public System.DateTime AppDate { get; set; }
+    
+        public virtual Teams Teams { get; set; }
+    }
+}

+ 0 - 513
Курсовой проект 3.1/TeamProfileWindow.xaml.cs

@@ -1,513 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Windows;
-using System.Windows.Media.Imaging;
-
-namespace Курсовой_проект_3._1
-{
-    /// <summary>
-    /// Логика взаимодействия для TeamProfileWindow.xaml
-    /// </summary>
-    public partial class TeamProfileWindow : Window
-    {
-        SQL query;
-        string teamId;
-
-        List<PlayerInTeamList> teamList = new List<PlayerInTeamList>();
-
-        List<Achievement> achievementList = new List<Achievement>();
-        List<string> tournamentIds = new List<string>();
-        int offsetAchievment = 0;
-
-        public TeamProfileWindow(string teamId)
-        {
-            InitializeComponent();
-            DataTable dt = new DataTable();
-            this.teamId = teamId;
-
-            // Адаптация к размеру окна
-
-            // Указываем строку подключения для запросов
-            query = new SQL("DefaultConnection");
-
-            // Подгрузка краткой информации
-            dt = query.SendSelectQuery("SELECT " +
-                                            "TeamName," +
-                                            "Country," +
-                                            "DateOfFoundation," +
-                                            "PhoneNumber," +
-                                            "Email," +
-                                            "AboutTeam," +
-                                            "LogoURL " +
-                                            "FROM Teams WHERE TeamId = " + this.teamId);
-
-            TeamNameTB.Text = dt.Rows[0][0].ToString();
-            CountryTB.Text = "Страна: " + dt.Rows[0][1].ToString();
-            FoundationDateTB.Text = "Дата основания: " + Convert.ToDateTime(dt.Rows[0][2]).ToString("D");
-            PhoneNumberTB.Text = "Номер телефона: " + "+" + dt.Rows[0][3].ToString();
-            EmailTB.Text = "Email: " + dt.Rows[0][4].ToString();
-            AboutTeamTB.Text = "О команде: " + dt.Rows[0][5].ToString();
-
-            // Подгрузка аватара
-            if (dt.Rows[0][6] != DBNull.Value)
-            {
-                TeamLogoImg.Source = new BitmapImage(new Uri(dt.Rows[0][6].ToString()));
-            }
-
-            // Подгрузка статистики
-            var (winCount, drawCount, loseCount) = GetWinDrawLoseCount(this.teamId);
-            int gamesCount = winCount + drawCount + loseCount;
-            if (gamesCount != 0)
-            {
-                LineBarWin.Width = new GridLength(winCount * 100 / gamesCount, GridUnitType.Star);
-                LineBarDraw.Width = new GridLength(drawCount * 100 / gamesCount, GridUnitType.Star);
-                LineBarLose.Width = new GridLength(loseCount * 100 / gamesCount, GridUnitType.Star);
-
-                WinCountTB.Text = winCount.ToString() + " побед";
-                DrawCountTB.Text = drawCount.ToString() + " ничьих";
-                LoseCountTB.Text = loseCount.ToString() + " поражений";
-
-                WinPercentTB.Text = Math.Round(Convert.ToDouble(winCount) * 100.0 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
-                DrawPercentTB.Text = Math.Round(Convert.ToDouble(drawCount) * 100.0 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
-                LosePercentTB.Text = Math.Round(Convert.ToDouble(loseCount) * 100.0 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
-            }
-
-            // Подгрузка состава -- происходит в NowStatusRB_Checked
-            NowStatusRB.IsChecked = true;
-
-            // Подгрузка истории матчей
-
-            // Подгрузка достижений
-            tournamentIds = GetTournamentIds(this.teamId);
-            int offsetInc = 0;
-            if (tournamentIds.Count > 5)
-            {
-                for (int i = 0; i < 5; i++)
-                {
-                    achievementList.Add(GetAchievement(this.teamId, tournamentIds[i]));
-                    offsetInc++;
-                }
-            }
-            else
-            {
-                for (int i = 0; i < tournamentIds.Count; i++)
-                {
-                    achievementList.Add(GetAchievement(this.teamId, tournamentIds[i]));
-                    offsetInc++;
-                }
-            }
-            offsetAchievment += offsetInc;
-            AchievementDataGrid.ItemsSource = achievementList;
-        }
-
-        private void NowStatusRB_Checked(object sender, RoutedEventArgs e)
-        {
-            TeamListStatusExpander.Header = NowStatusRB.Content;
-            TeamListStatusExpander.IsExpanded = false;
-
-            teamList = new List<PlayerInTeamList>();
-            List<string> userIds = GetPlayerIdsInTeamPresent(this.teamId);
-            foreach (string userId in userIds)
-            {
-                teamList.Add(GetPlayerInTeamList(userId));
-            }
-            TeamLB.ItemsSource = new List<string>();
-            TeamLB.ItemsSource = teamList;
-        }
-
-        private void PastStatusRB_Checked(object sender, RoutedEventArgs e)
-        {
-            TeamListStatusExpander.Header = PastStatusRB.Content;
-            TeamListStatusExpander.IsExpanded = false;
-
-            teamList = new List<PlayerInTeamList>();
-            List<string> userIds = GetPlayerIdsInTeamPast(this.teamId);
-            foreach (string userId in userIds)
-            {
-                teamList.Add(GetPlayerInTeamList(userId));
-            }
-            TeamLB.ItemsSource = new List<string>();
-            TeamLB.ItemsSource = teamList;
-        }
-
-        private void MoreAchievementBtn_Click(object sender, RoutedEventArgs e)
-        {
-            if (tournamentIds.Count <= achievementList.Count)
-            {
-                MessageBox.Show("Больше достижений нет!");
-                return;
-            }
-
-            int offsetInc = 0;
-            if (tournamentIds.Count - achievementList.Count > 5)
-            {
-                for (int i = offsetAchievment; i < offsetAchievment + 5; i++)
-                {
-                    achievementList.Add(GetAchievement(this.teamId, tournamentIds[i]));
-                    offsetInc++;
-                }
-            }
-            else
-            {
-                for (int i = offsetAchievment; i < tournamentIds.Count - achievementList.Count + offsetAchievment; i++)
-                {
-                    achievementList.Add(GetAchievement(this.teamId, tournamentIds[i]));
-                    offsetInc++;
-                }
-            }
-            AchievementDataGrid.ItemsSource = new List<Achievement>();
-            AchievementDataGrid.ItemsSource = achievementList;
-            offsetAchievment += offsetInc;
-        }
-
-        // Возвращает список турниров, в котором участвовала команда
-        private List<string> GetTournamentIds(string teamId)
-        {
-            List<string> tournamentIds = new List<string>();
-
-            DataTable dt = query.SendSelectQuery("SELECT TournamentId FROM TournamentPlaces WHERE TeamId = " + teamId);
-            foreach (DataRow dr in dt.Rows)
-            {
-                tournamentIds.Add(dr[0].ToString());
-            }
-
-            return tournamentIds;
-        }
-
-        // Возвращает информацию (DataTable) о турнире
-        private DataTable GetTournamentInfo(string tournamentId)
-        {
-            return query.SendSelectQuery("SELECT * FROM Tournaments WHERE TournamentId = " + tournamentId);
-        }
-
-        // Возвращает место команды в турнире
-        private string GetPlaceInTournament(string tournamentId, string teamId)
-        {
-           
-            DataTable dt = query.SendSelectQuery("SELECT Place FROM TournamentPlaces WHERE TournamentId = " + tournamentId + " AND TeamId = " + teamId);
-
-            if (dt.Rows.Count > 0)
-            {
-                if (dt.Rows[0].IsNull(0))
-                {
-                    return null;
-                }
-
-                return dt.Rows[0][0].ToString();
-            }
-
-            return null;
-        }
-
-
-        // Возвращает список всех игроков команды в настоящий момент
-        private List<string> GetPlayerIdsInTeamPresent(string teamId)
-        {
-            List<string> playerIds = new List<string>();
-
-            DataTable dt = query.SendSelectQuery("SELECT UserId, DateOut FROM TeamCompositions WHERE TeamId = " + teamId);
-
-            foreach (DataRow dr in dt.Rows)
-            {
-                if (dr.IsNull(1))
-                {
-                    playerIds.Add(dr[0].ToString());
-                }
-            }
-
-            return playerIds;
-        }
-
-        // Возвращает список всех игроков команды в прошлом
-        private List<string> GetPlayerIdsInTeamPast(string teamId)
-        {
-            if (teamId == null)
-            {
-                return new List<string>();
-            }
-
-            List<string> playerIds = new List<string>();
-
-            DataTable dt = query.SendSelectQuery("SELECT UserId, DateOut FROM TeamCompositions WHERE TeamId = " + teamId);
-
-            foreach (DataRow dr in dt.Rows)
-            {
-                if (!dr.IsNull(1))
-                {
-                    playerIds.Add(dr[0].ToString());
-                }
-            }
-
-            return playerIds;
-        }
-
-        // Возвращает количество (побед, ничьих, поражений) команды
-        private (int, int, int) GetWinDrawLoseCount(string teamId)
-        {
-            // инициализация счетчиков
-            int winCounter = 0;
-            int loseCounter = 0;
-            int drawCounter = 0;
-
-            // получаем список матчей в игрока в команде
-            DataTable dt = query.SendSelectQuery("SELECT TeamIdFrst, TeamIdScnd, IsFrstWin FROM Matches WHERE TeamIdFrst = " + teamId + " OR TeamIdScnd = " + teamId);
-
-            // для каждого матча узнать (победа, ничья, поражение)
-            foreach (DataRow dtRow in dt.Rows)
-            {
-                if (dtRow[0].ToString() == teamId)
-                {
-
-                    if (!dtRow.IsNull(2))
-                    {
-                        if (Convert.ToBoolean(dtRow[2]))
-                        {
-                            winCounter++;
-                        }
-                        else
-                        {
-                            loseCounter++;
-                        }
-                    }
-                    else
-                    {
-                        drawCounter++;
-                    }
-                }
-                else
-                {
-                    if (!dtRow.IsNull(2))
-                    {
-                        if (!Convert.ToBoolean(dtRow[2]))
-                        {
-                            winCounter++;
-                        }
-                        else
-                        {
-                            loseCounter++;
-                        }
-                    }
-                    else
-                    {
-                        drawCounter++;
-                    }
-                }
-            }  // foreach
-
-            return (winCounter, drawCounter, loseCounter);
-        }
-
-        // Возвращает количество (побед, ничьих, поражений) игрока в ОДНОЙ команде
-        private (int, int, int) GetWinDrawLoseCount(string userId, string teamId)
-        {
-            // инициализация счетчиков
-            int winCounter = 0;
-            int loseCounter = 0;
-            int drawCounter = 0;
-
-            // получаем список матчей в игрока в команде
-            DataTable dt = GetMatchesUserInTeam(userId, teamId);
-
-            // для каждого матча узнать (победа, ничья, поражение)
-            foreach (DataRow dtRow in dt.Rows)
-            {
-                if (dtRow[0].ToString() == teamId)
-                {
-
-                    if (!dtRow.IsNull(2))
-                    {
-                        if (Convert.ToBoolean(dtRow[2]))
-                        {
-                            winCounter++;
-                        }
-                        else
-                        {
-                            loseCounter++;
-                        }
-                    }
-                    else
-                    {
-                        drawCounter++;
-                    }
-                }
-                else
-                {
-                    if (!dtRow.IsNull(2))
-                    {
-                        if (!Convert.ToBoolean(dtRow[2]))
-                        {
-                            winCounter++;
-                        }
-                        else
-                        {
-                            loseCounter++;
-                        }
-                    }
-                    else
-                    {
-                        drawCounter++;
-                    }
-                }
-            }  // foreach
-
-            return (winCounter, drawCounter, loseCounter);
-        }
-
-        // Возвращает все матчи игрока в команде
-        private DataTable GetMatchesUserInTeam(string userId, string teamId)
-        {
-            // Получаем даты нахождения в команде
-            string queryText = "SELECT DateIn, DateOut FROM TeamCompositions WHERE UserId = " + userId + " AND TeamId = " + teamId;
-            DataTable dt = query.SendSelectQuery(queryText);
-            string dateIn = dt.Rows[0][0].ToString();
-
-            string dateOut = DateTime.Now.ToString("u");
-            if (!dt.Rows[0].IsNull(1))
-            {
-                dateOut = dt.Rows[0][1].ToString();
-            }
-
-
-
-            // Получаем все матчи игрока в одной команде
-            queryText = "SELECT TeamIdFrst, TeamIdScnd, IsFrstWin, GameDate, TournamentID, FrstScores, ScndScores FROM Matches WHERE (TeamIdFrst = " + teamId + " OR TeamIDScnd = " + teamId + " ) AND GameDate BETWEEN '" + dateIn + "'  AND '" + dateOut + "'"
-                + "\n ORDER BY GameDate DESC" + ";";
-            dt = query.SendSelectQuery(queryText);
-
-            return dt;
-        }
-
-        // Возвращает дату вступления игрока в команду
-        private string GetDateInTeam(string userId, string teamId)
-        {
-            string queryText = "SELECT DateIn FROM TeamCompositions WHERE UserId = " + userId + " AND TeamId = " + teamId;
-            DataTable dt = query.SendSelectQuery(queryText);
-
-            return Convert.ToDateTime(dt.Rows[0][0]).ToString("D");
-        }
-
-        // Возвращает дату выхода игрока из команды
-        private string GetDateOutTeam(string userId, string teamId)
-        {
-            string queryText = "SELECT DateOut FROM TeamCompositions WHERE UserId = " + userId + " AND TeamId = " + teamId;
-            DataTable dt = query.SendSelectQuery(queryText);
-
-            if (!dt.Rows[0].IsNull(0))
-            {
-                return Convert.ToDateTime(dt.Rows[0][0]).ToString("D");
-
-            }
-            else
-            {
-                return "настоящее время";
-            }
-        }
-
-        // Возвращает объект класса PlayerInTeamList
-        private PlayerInTeamList GetPlayerInTeamList(string userId)
-        {
-            PlayerInTeamList player = new PlayerInTeamList();
-
-            DataTable dt = query.SendSelectQuery("SELECT "+
-                                                        "CONCAT(LName, ' ', FName, ' ', MName), " +
-                                                        "Nickname, " +
-                                                        "TeamId, " +
-                                                        "CountryId, " +
-                                                        "PhotoURL " +
-                                                        "FROM Users WHERE UserId = " + userId);
-            // имя
-            player.RealName = dt.Rows[0][0].ToString();
-            player.Nickname = dt.Rows[0][1].ToString();
-
-            // фото игрока
-            if (!dt.Rows[0].IsNull(4))
-            {
-                player.UserPhotoPath = dt.Rows[0][4].ToString();
-            }
-            else
-            {
-                player.UserPhotoPath = "C:/Users/nikich4523/source/repos/Курсовой проект 3.1/Images/WithoutPhoto.png";
-            }
-
-            // иконка страны
-            if (dt.Rows[0][3].ToString() != "0")
-            {
-                DataTable dtCountry = query.SendSelectQuery("SELECT ImgPath FROM Country WHERE CountryId = " + dt.Rows[0][3].ToString());
-                player.UserPhotoPath = dtCountry.Rows[0][0].ToString();
-            }
-            else
-            {
-                player.CountryIconPath = "C:/Users/nikich4523/source/repos/Курсовой проект 3.1/Images/Cup.png";
-            }
-
-            // даты в команде
-            player.Dates = GetDateInTeam(userId, this.teamId) + " - " + GetDateOutTeam(userId, this.teamId);
-
-
-            // статистика в команде
-            int winCount, drawCount, loseCount;
-            (winCount, drawCount, loseCount) = GetWinDrawLoseCount(userId, this.teamId);
-            player.Statistick = winCount.ToString() + " побед, " + drawCount.ToString() + " ничьих, " + loseCount.ToString() + " поражений";
-
-            return player;
-        }
-
-        // Возвращает объект класса Achievment
-        private Achievement GetAchievement(string teamId, string tournamentId)
-        {
-            Achievement achievement = new Achievement();
-            DataTable dt = GetTournamentInfo(tournamentId);
-
-            string place = GetPlaceInTournament(tournamentId, teamId);
-            if (place != "")
-            {
-                achievement.Place = GetPlaceInTournament(tournamentId, teamId);
-                achievement.Tournament = dt.Rows[0][1].ToString();
-                achievement.Venue = dt.Rows[0][4].ToString() + ",";
-                achievement.DateOfVenue = dt.Rows[0][2].ToString() + " - " + dt.Rows[0][3].ToString();
-                achievement.Place = place;
-                achievement.PrizeFond = dt.Rows[0][5].ToString();
-
-                return achievement;
-            }
-            else
-            {
-                return null;
-            }
-        }
-    }
-
-    // Класс, описывающий объект/элемент ListBox - TeamListGroupBox
-    public class PlayerInTeamList
-    {
-        public string UserPhotoPath { get; set; }
-        public string CountryIconPath { get; set; }
-        public string Nickname { get; set; }
-        public string RealName { get; set; }
-        public string Dates { get; set; }
-        public string Statistick { get; set; }
-    }
-
-    // Класс, описывающий объект/элемент DataGrid - AchievementListGroupBox
-    public class Achievement
-    {
-        public string Place { get; set; }
-        public string Tournament { get; set; }
-        public string Venue { get; set; }
-        public string DateOfVenue { get; set; }
-        public string Prize { get; set; }
-        public string PrizeFond { get; set; }
-    }
-
-    // Класс, описывающий объект/элемент DataGrid - MatchesGrid
-    public class Match
-    {
-        public string FrstTeamName { get; set; }
-        public string ScndTeamName { get; set; }
-        public string Scores { get; set; }
-        public string GameDate { get; set; }
-        public string Tournament { get; set; }
-        public string WinTeam { get; set; }
-    }
-}

+ 54 - 0
Курсовой проект 3.1/Teams.cs

@@ -0,0 +1,54 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class Teams
+    {
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+        public Teams()
+        {
+            this.Achievements = new HashSet<Achievements>();
+            this.Matches = new HashSet<Matches>();
+            this.Matches1 = new HashSet<Matches>();
+            this.Matches2 = new HashSet<Matches>();
+            this.TeamApps = new HashSet<TeamApps>();
+            this.TeamsUsers = new HashSet<TeamsUsers>();
+        }
+    
+        public int Id { get; set; }
+        public string Name { get; set; }
+        public System.DateTime FoundationDate { get; set; }
+        public Nullable<System.DateTime> DissolationDate { get; set; }
+        public string PhoneNumber { get; set; }
+        public string Email { get; set; }
+        public string About { get; set; }
+        public string LogoPath { get; set; }
+        public int FK_Creater_Id { get; set; }
+        public int FK_Country_Id { get; set; }
+    
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Achievements> Achievements { get; set; }
+        public virtual Countries Countries { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Matches> Matches { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Matches> Matches1 { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Matches> Matches2 { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<TeamApps> TeamApps { get; set; }
+        public virtual Users Users { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<TeamsUsers> TeamsUsers { get; set; }
+    }
+}

+ 26 - 0
Курсовой проект 3.1/TeamsUsers.cs

@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class TeamsUsers
+    {
+        public int Id { get; set; }
+        public int FK_Team_Id { get; set; }
+        public int FK_User_Id { get; set; }
+        public System.DateTime DateStart { get; set; }
+        public Nullable<System.DateTime> DateEnd { get; set; }
+    
+        public virtual Teams Teams { get; set; }
+        public virtual Users Users { get; set; }
+    }
+}

+ 203 - 0
Курсовой проект 3.1/Test.cs

@@ -0,0 +1,203 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Курсовой_проект_3._1
+{
+    public static class Test
+    {
+        // for test only
+        public static bool PlayerInfoOutput()
+        {
+            MyTeamContext _context = new MyTeamContext(); 
+
+            return true;
+        }
+
+        // for test only
+        public static bool CreateTeamApp(int teamId, string title, string text)
+        {
+            int teamIdWithApp = 1;
+
+            if (string.IsNullOrWhiteSpace(title) || string.IsNullOrWhiteSpace(text))
+            {
+                return false;
+            }
+
+            if (teamId == teamIdWithApp)
+            {
+                return false;
+            }
+
+            if (title.Length > 20)
+            {
+                return false;
+            }
+
+            if (text.Length > 255)
+            {
+                return false;
+            }
+
+            return true;
+        }
+
+        // for test only
+        public static bool CreatePlayerApp(int userId, string title, string text)
+        {
+            int userIdWithApp = 1;
+
+            if (string.IsNullOrWhiteSpace(title) || string.IsNullOrWhiteSpace(text))
+            {
+                return false;
+            }
+            
+            if (userId == userIdWithApp)
+            {
+                return false;
+            }
+
+            if (title.Length > 20)
+            {
+                return false;
+            }
+
+            if (text.Length > 255)
+            {
+                return false;
+            }
+
+            return true;
+        }
+
+        // for test only
+        public static bool ChangeSettingsTest(int userId, string email, string phoneNumber, string about)
+        {
+            phoneNumber = phoneNumber.TrimStart('+');
+
+            string existEmail, existPhoneNumber;
+            existEmail = "nikich4523@mail.ru";
+            existPhoneNumber = "79641166987";
+
+            string nowUserEmail, nowUserPhoneNumber;
+            nowUserEmail = "alen.20.plo@mail.ru";
+            nowUserPhoneNumber = "79132818850";
+
+            // проверка на корректность введенной почты
+            if (!string.IsNullOrWhiteSpace(email))
+            {
+                if (email != nowUserEmail)
+                {
+                    if (email != existEmail)
+                    {
+                        if (Func.IsValidEmail(email))
+                        {
+                            //
+                        }
+                        else
+                        {
+                            return false;
+                        }
+                    }
+                    else
+                    {
+                        return false;
+                    }
+                }
+            }
+            else
+            {
+                return false;
+            }
+
+            // проверка на корректность введенного номера телефона
+            if (!string.IsNullOrWhiteSpace(phoneNumber))
+            {
+                if (phoneNumber != nowUserPhoneNumber)
+                {
+
+                    if (phoneNumber != existPhoneNumber)
+                    {
+                        if (Func.IsValidPhoneNumber(phoneNumber))
+                        {
+                            //
+                        }
+                        else
+                        {
+                            return false;
+                        }
+                    }
+                    else
+                    {
+                        return false;
+                    }
+                }
+            }
+            else
+            {
+                return false;
+            }
+
+            return true;
+        }
+
+        // for test only
+        public static bool AuthorizationTest(string login, string password)
+        {
+
+            if (Func.IsValidLogAndPass(login, password))
+            {
+                if (login == "nikich4523" && password == "123qaz")
+                {
+                    return true;
+                }
+                else
+                {
+                    return false;
+                }
+            }
+            else
+            {
+                return false;
+            }
+        }
+
+        // for test only
+        public static bool RegistrationTest(string login, string pass, string fname, string lname, string mname, string nickname, string email, string phoneNumber, string birthday)
+        {
+            phoneNumber = phoneNumber.TrimStart('+');
+
+            string existLogin, existEmail, existPhoneNumber, existNickname;
+            existLogin = "nikich4523";
+            existEmail = "nikich4523@mail.ru";
+            existNickname = "Arxont";
+            existPhoneNumber = "+79132818850";
+
+            // проверка на заполненость всех полей
+            if (Func.IsNullOrWhiteSpace(new string[] { login, pass, nickname, fname, lname, mname, birthday }))
+            {
+                return false;
+            }
+
+            // проверка на уникальность полей
+            if (login == existLogin || email == existEmail || existNickname == nickname || existPhoneNumber == phoneNumber)
+            {
+                return false;
+            }
+
+            // проверка на корректность
+            if (!Func.IsValidPhoneNumber(phoneNumber))
+            {
+                return false;
+            }
+            if (!Func.IsValidEmail(email))
+            {
+                return false;
+            }
+
+            return true;
+        }
+    }
+}

+ 29 - 0
Курсовой проект 3.1/TournamentFormats.cs

@@ -0,0 +1,29 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class TournamentFormats
+    {
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+        public TournamentFormats()
+        {
+            this.Tournaments = new HashSet<Tournaments>();
+        }
+    
+        public int Id { get; set; }
+        public string Name { get; set; }
+    
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Tournaments> Tournaments { get; set; }
+    }
+}

+ 0 - 165
Курсовой проект 3.1/TournamentWindow.xaml

@@ -1,165 +0,0 @@
-<Window x:Class="Курсовой_проект_3._1.TournamentWindow"
-        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-        xmlns:local="clr-namespace:Курсовой_проект_3._1"
-        mc:Ignorable="d"
-        Title="TournamentWindow" Height="650" Width="1000" x:Name="MyWindow" WindowStartupLocation="CenterScreen">
-    <Window.Resources>
-        <!-- Grid styles -->
-        <Style TargetType="Grid">
-            <Setter Property="Background" Value="#fffff0"/>
-        </Style>
-
-        <!-- TextBlock styles -->
-        <Style TargetType="TextBox">
-            <Setter Property="VerticalAlignment" Value="Center"/>
-            
-            <!-- Border -->
-            <Setter Property="BorderThickness" Value="1 1 2 2"/>
-            <Setter Property="BorderBrush" Value="Black"/>
-        </Style>
-    </Window.Resources>
-
-    <Grid>
-        <Grid.RowDefinitions>
-            <RowDefinition Height="0.1*"></RowDefinition>
-            <RowDefinition Height="0.05*"></RowDefinition>
-            <RowDefinition Height="*"></RowDefinition>
-        </Grid.RowDefinitions>
-        <Grid.ColumnDefinitions>
-            <ColumnDefinition></ColumnDefinition>
-        </Grid.ColumnDefinitions>
-
-        <!-- Navigation -->
-        <StackPanel x:Name="NavigationStackPanel" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Background="#FF68A4C8"/>
-
-        <!-- BackStep -->
-        <StackPanel x:Name="BackStepStackPanel" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Background="#81AEC8"/>
-
-        <!-- MAIN -->
-        <ScrollViewer Grid.Row="2" Grid.Column="0">
-            <Grid>
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="0.1*"/>
-                    <RowDefinition Height="0.01*" MaxHeight="2" MinHeight="2"/>
-                    <RowDefinition Height="0.1*"/>
-                    <RowDefinition/>
-                    <RowDefinition/>
-                </Grid.RowDefinitions>
-
-                <!-- Tournament Name -->
-                <Grid Grid.Row="0">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition Width="2*"/>
-                        <ColumnDefinition Width="*"/>
-                        <ColumnDefinition Width="0.1*"/>
-                        <ColumnDefinition Width="3*"/>
-                        <ColumnDefinition Width="2*"/>
-                    </Grid.ColumnDefinitions>
-
-                    <Grid Grid.Column="1" HorizontalAlignment="Right">
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition Width="0.25*"/>
-                            <ColumnDefinition/>
-                        </Grid.ColumnDefinitions>
-
-                        <Image Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\DotaIcon.png"/>
-                        <Viewbox Grid.Column="1" Stretch="Uniform" Margin="5 0 0 0">
-                            <TextBlock Text="Dota 2"/>
-                        </Viewbox>
-                    </Grid>
-
-                    <TextBlock Grid.Column="2" Text="|" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="18" Foreground="#FF68A4C8"/>
-
-                    <Viewbox Grid.Column="3" Stretch="Uniform" HorizontalAlignment="Left">
-                        <TextBlock Text="ESL One Summer 2021"/>
-                    </Viewbox>
-                </Grid>
-
-                <!-- Separator -->
-                <Rectangle Grid.Row="1" Fill="#FF68A4C8" Margin="10 0 10 0" RadiusX="3" RadiusY="3"/>
-
-                <!-- Tournament Info -->
-                <Grid Grid.Row="2">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition MinWidth="150"/>
-                        <ColumnDefinition MinWidth="150"/>
-                        <ColumnDefinition MinWidth="100"/>
-                        <ColumnDefinition MinWidth="50"/>
-                        <ColumnDefinition MinWidth="50"/>
-                    </Grid.ColumnDefinitions>
-
-                    <Grid Grid.Column="0" HorizontalAlignment="Center">
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition Width="0.8*"/>
-                            <ColumnDefinition/>
-                        </Grid.ColumnDefinitions>
-
-                        <TextBlock Grid.Column="0" Text="Название:" VerticalAlignment="Center" Margin="0 0 5 0"/>
-                        <TextBlock Grid.Column="2" TextWrapping="Wrap" Text="ESL One Summer 2021" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
-                    </Grid>
-
-                    <Grid Grid.Column="1" HorizontalAlignment="Center">
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition Width="0.8*"/>
-                            <ColumnDefinition/>
-                        </Grid.ColumnDefinitions>
-
-                        <TextBlock Grid.Column="0" Text="Организатор:" VerticalAlignment="Center" Margin="0 0 5 0"/>
-                        <TextBlock Grid.Column="2" TextWrapping="Wrap" Text="PGL" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
-                    </Grid>
-
-                    <Grid Grid.Column="2" HorizontalAlignment="Center">
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition Width="0.8*"/>
-                            <ColumnDefinition/>
-                        </Grid.ColumnDefinitions>
-
-                        <TextBlock Grid.Column="0" Margin="0 0 10 0" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center">Место <LineBreak/> проведения:</TextBlock>
-                        <TextBlock Grid.Column="2" TextWrapping="Wrap" Text="Онлайн" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
-                    </Grid>
-
-                    <Grid Grid.Column="3" HorizontalAlignment="Center">
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition Width="0.8*"/>
-                            <ColumnDefinition/>
-                        </Grid.ColumnDefinitions>
-
-                        <TextBlock Grid.Column="0" Text="Формат:" VerticalAlignment="Center" Margin="0 0 5 0"/>
-                        <TextBlock Grid.Column="2" TextWrapping="Wrap" Text="Single Elimination" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
-                    </Grid>
-
-                    <Grid Grid.Column="4" HorizontalAlignment="Center">
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition Width="0.8*"/>
-                            <ColumnDefinition/>
-                        </Grid.ColumnDefinitions>
-
-                        <TextBlock Grid.Column="0" Margin="0 0 10 0" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center">Сумма<LineBreak/>призовых:</TextBlock>
-                        <TextBlock Grid.Column="2" TextWrapping="Wrap" Text="40 000$" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
-                    </Grid>
-                </Grid>
-
-                <!-- TOURNAMENT BRACKET -->
-                <Border Grid.Row="3" BorderBrush="#FF68A4C8" BorderThickness="2" Margin="10" CornerRadius="1" MaxHeight="400">
-                    <ScrollViewer>
-                        <Grid x:Name="MainGrid">
-                            
-                        </Grid>
-                    </ScrollViewer>
-                </Border>
-
-                <!-- Results -->
-                <GroupBox Grid.Row="4" Header="Результаты" MinHeight="100" Margin="10" BorderThickness="2" BorderBrush="#FF68A4C8">
-                    <Grid>
-                        <ListBox>
-                            
-                        </ListBox>
-                    </Grid>
-                </GroupBox>
-            </Grid>
-        </ScrollViewer>
-    </Grid>
-</Window>

+ 0 - 231
Курсовой проект 3.1/TournamentWindow.xaml.cs

@@ -1,231 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Shapes;
-
-namespace Курсовой_проект_3._1
-{
-    /// <summary>
-    /// Логика взаимодействия для TournamentWindow.xaml
-    /// </summary>
-    public partial class TournamentWindow : Window
-    {
-        public TournamentWindow()
-        {
-            InitializeComponent();
-            MainGrid.Children.Add(GenerateSingleEliminationBracket(16));
-        }
-
-        public Grid GenerateSingleEliminationBracket(int teamCount)
-        {
-            Grid grid = new Grid();
-            grid.ShowGridLines = false;
-
-            // Создание Grid'ов ///
-            // Высчитывание размеров сетки
-            int roundCount = (int)Math.Log(teamCount, 2);  // количество раундов
-            int gridColumnCount = roundCount + roundCount - 1 + 2;  // количество колонок в grid
-            int gridRowCount = teamCount + (teamCount - 2) + 4;  // количество строк в grid
-
-            // Добавление колонок
-            for (int i = 0; i < gridColumnCount; i++)
-            {
-                grid.ColumnDefinitions.Add(new ColumnDefinition());
-            }
-
-            // Добавление строк
-            for (int j = 0; j < gridRowCount; j++)
-            {
-                grid.RowDefinitions.Add(new RowDefinition());
-            }
-
-            // Всё остальное
-            int roundNum = 1;  // номер раунда
-            int skipStart = 2;  // сколько пропустить строк с начала
-            int skipBetween = 2;  // сколько пропускать строк между играми
-
-            // Наполнение сетки
-            for (int i = 1; i < gridColumnCount - 1; i++)
-            {
-                if (i % 2 != 0)  // раунды через одну колонку
-                {
-                    int counter = 0;
-                    for (int j = skipStart; j < gridRowCount - 2; j++)
-                    {
-                        // создание grid'a с двумя колонками разной ширины (НАЗВАНИЕ КОМАНДЫ и ОЧКИ)
-                        Grid gridChild = new Grid();
-
-                        ColumnDefinition wideColumn = new ColumnDefinition();
-                        wideColumn.Width = new GridLength(0.8, GridUnitType.Star);
-                        ColumnDefinition smallColumn = new ColumnDefinition();
-                        smallColumn.Width = new GridLength(0.2, GridUnitType.Star);
-
-                        gridChild.ColumnDefinitions.Add(wideColumn);
-                        gridChild.ColumnDefinitions.Add(smallColumn);
-
-                        // текст бокс с названием команды
-                        TextBox tbName = new TextBox();
-                        Grid.SetColumn(tbName, 0);
-                        gridChild.Children.Add(tbName);
-
-                        // текст бокс со счетом
-                        TextBox tbScore = new TextBox();
-                        tbScore.MaxLength = 2;
-                        tbScore.HorizontalContentAlignment = HorizontalAlignment.Center;
-                        Grid.SetColumn(tbScore, 1);
-                        gridChild.Children.Add(tbScore);
-
-                        // добавление мини-grid'a к большому папочке
-                        Grid.SetColumn(gridChild, i);
-                        Grid.SetRow(gridChild, j);
-                        grid.Children.Add(gridChild);
-
-                        // после каждыой игры нужен пропуск (skipBetween) до следующей игры
-                        counter++;
-                        if (counter == 2)
-                        {
-                            j += skipBetween;
-                            counter = 0;
-                        }
-                    }
-                    // пересчет значений для следующего раунда
-                    roundNum++;
-                    int gamesInRoundCount = (int)(teamCount / Math.Pow(2, roundNum));
-                    skipStart *= 2;
-                    skipBetween = roundNum == roundCount ? skipStart : (gridRowCount - (skipStart * 2) - (gamesInRoundCount * 2)) / (gamesInRoundCount - 1);
-                }
-                else  // соединяющие линии между раундами
-                {
-                    if (i == 2)
-                    {
-                        for (int j = 4; j < gridRowCount; j++)
-                        {
-                            TextBox linetb1 = new TextBox();
-                            linetb1.BorderBrush = Brushes.Black;
-                            linetb1.IsReadOnly = true;
-                            var bc = new BrushConverter();
-                            linetb1.Background = (Brush)bc.ConvertFrom("#fffff0");
-                            linetb1.BorderThickness = new Thickness(2, 0, 0, 2);
-
-                            Grid.SetColumn(linetb1, i);
-                            Grid.SetRow(linetb1, j);
-                            grid.Children.Add(linetb1);
-
-                            TextBox linetb2 = new TextBox();
-                            linetb2.BorderBrush = Brushes.Black;
-                            linetb2.IsReadOnly = true;
-                            linetb2.Background = (Brush)bc.ConvertFrom("#fffff0");
-                            linetb2.BorderThickness = new Thickness(2, 2, 0, 0);
-
-                            Grid.SetColumn(linetb2, i);
-                            Grid.SetRow(linetb2, j + 1);
-                            grid.Children.Add(linetb2);
-
-                            j += 7;
-                        }
-                    }
-                    else
-                    {
-                        int drawStatus = 0; // 0 - не рисовать, 1 - leftbottom, 2 - lefttop, 3 - leftonly
-                        int leftCounter = 0;
-                        int rightCounter = 0;
-
-                        for (int j = 4; j < gridRowCount; j++)
-                        {
-                            // тут рисовка
-                            if (drawStatus == 3)
-                            {
-                                TextBox linetb3 = new TextBox();
-                                linetb3.BorderBrush = Brushes.Black;
-                                linetb3.IsReadOnly = true;
-                                var bc = new BrushConverter();
-                                linetb3.Background = (Brush)bc.ConvertFrom("#fffff0");
-                                linetb3.BorderThickness = new Thickness(2, 0, 0, 0);
-
-                                Grid.SetColumn(linetb3, i);
-                                Grid.SetRow(linetb3, j);
-                                grid.Children.Add(linetb3);
-                            }
-                            else if (drawStatus == 2)
-                            {
-                                TextBox linetb2 = new TextBox();
-                                linetb2.BorderBrush = Brushes.Black;
-                                linetb2.IsReadOnly = true;
-                                var bc = new BrushConverter();
-                                linetb2.Background = (Brush)bc.ConvertFrom("#fffff0");
-                                linetb2.BorderThickness = new Thickness(2, 2, 0, 0);
-
-                                Grid.SetColumn(linetb2, i);
-                                Grid.SetRow(linetb2, j - 1);
-                                grid.Children.Add(linetb2);
-                            }
-                            else if (drawStatus == 1)
-                            {
-                                TextBox linetb1 = new TextBox();
-                                linetb1.BorderBrush = Brushes.Black;
-                                linetb1.IsReadOnly = true;
-                                var bc = new BrushConverter();
-                                linetb1.Background = (Brush)bc.ConvertFrom("#fffff0");
-                                linetb1.BorderThickness = new Thickness(2, 0, 0, 2);
-
-                                Grid.SetColumn(linetb1, i);
-                                Grid.SetRow(linetb1, j - 1);
-                                grid.Children.Add(linetb1);
-
-                                drawStatus = 3;
-                            }
-
-                            // тут проверка
-                            if (GetElementInGridPosition(i - 1, j, grid) is Grid)
-                            {
-                                leftCounter++;
-                                drawStatus = 0;
-
-                                if (leftCounter == 2)
-                                {
-                                    drawStatus = 3;
-                                    leftCounter = 0;
-                                }
-                            }
-                            else if (GetElementInGridPosition(i + 1, j, grid) is Grid)
-                            {
-                                rightCounter++;
-
-                                if (rightCounter == 1)
-                                {
-                                    drawStatus = 1;
-                                }
-                                else
-                                {
-                                    drawStatus = 2;
-                                    rightCounter = 0;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            return grid;
-        }
-
-        private UIElement GetElementInGridPosition(int column, int row, Grid RootGrid)
-        {
-            foreach (UIElement element in RootGrid.Children)
-            {
-                if (Grid.GetColumn(element) == column && Grid.GetRow(element) == row)
-                    return element;
-            }
-
-            return null;
-        }
-    }
-}

+ 42 - 0
Курсовой проект 3.1/Tournaments.cs

@@ -0,0 +1,42 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class Tournaments
+    {
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+        public Tournaments()
+        {
+            this.Achievements = new HashSet<Achievements>();
+            this.Matches = new HashSet<Matches>();
+        }
+    
+        public int Id { get; set; }
+        public string Name { get; set; }
+        public System.DateTime DateStart { get; set; }
+        public System.DateTime DateEnd { get; set; }
+        public string Venue { get; set; }
+        public int PrizeFond { get; set; }
+        public int FK_Format_Id { get; set; }
+        public int FK_Organizer_Id { get; set; }
+        public int MaxTeamsCount { get; set; }
+        public string LogoPath { get; set; }
+    
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Achievements> Achievements { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Matches> Matches { get; set; }
+        public virtual TournamentFormats TournamentFormats { get; set; }
+        public virtual Users Users { get; set; }
+    }
+}

+ 28 - 0
Курсовой проект 3.1/UserControls/LimitedTextBlock.xaml

@@ -0,0 +1,28 @@
+<UserControl x:Class="Курсовой_проект_3._1.UserControls.LimitedTextBlock"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:Курсовой_проект_3._1.UserControls"
+             mc:Ignorable="d" 
+             d:DesignHeight="100" d:DesignWidth="250">
+    <Grid Background="White">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto" />
+            <RowDefinition Height="*" />
+        </Grid.RowDefinitions>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*" />
+            <ColumnDefinition Width="Auto" />
+        </Grid.ColumnDefinitions>
+        <Label Content="{Binding Title}" FontSize="{Binding TitleFontSize}"/>
+        <Label Grid.Column="1">
+            <StackPanel Orientation="Horizontal">
+                <TextBlock Text="{Binding ElementName=txtLimitedInput, Path=Text.Length}" />
+                <TextBlock Text="/"/>
+                <TextBlock Text="{Binding MaxLength}" />
+            </StackPanel>
+        </Label>
+        <TextBox MaxLength="{Binding MaxLength}" Grid.Row="1" Grid.ColumnSpan="2" Name="txtLimitedInput" ScrollViewer.VerticalScrollBarVisibility="Auto" TextWrapping="Wrap" />
+    </Grid>
+</UserControl>

+ 35 - 0
Курсовой проект 3.1/UserControls/LimitedTextBlock.xaml.cs

@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Курсовой_проект_3._1.UserControls
+{
+    /// <summary>
+    /// Логика взаимодействия для LimitedTextBlock.xaml
+    /// </summary>
+    public partial class LimitedTextBlock : UserControl
+    {
+        public LimitedTextBlock()
+        {
+            InitializeComponent();
+            this.DataContext = this;
+        }
+
+        public string TitleFontSize { get; set; }
+
+        public string Title { get; set; }
+
+        public int MaxLength { get; set; }
+    }
+}

+ 43 - 0
Курсовой проект 3.1/UserControls/MatchControl.xaml

@@ -0,0 +1,43 @@
+<UserControl x:Class="Курсовой_проект_3._1.UserControls.MatchControl"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:Курсовой_проект_3._1.UserControls"
+             mc:Ignorable="d" 
+             d:DesignHeight="300" d:DesignWidth="600">
+    <Grid Background="White">
+        <Grid.RowDefinitions>
+            <RowDefinition/>
+            <RowDefinition/>
+        </Grid.RowDefinitions>
+
+        <Border Grid.Row="0" BorderBrush="Black" BorderThickness="2 2 2 1">
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="3*"/>
+                    <ColumnDefinition/>
+                </Grid.ColumnDefinitions>
+                
+                <TextBlock TextAlignment="Justify" Text="{Binding TeamNameFrst}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                <Border Grid.Column="1" BorderBrush="Black" BorderThickness="2 0 0 0">
+                    <TextBlock TextAlignment="Justify" Text="{Binding ScoreFrst}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                </Border>
+            </Grid>
+        </Border>
+
+        <Border Grid.Row="1" BorderBrush="Black" BorderThickness="2 1 2 2">
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="3*"/>
+                    <ColumnDefinition/>
+                </Grid.ColumnDefinitions>
+
+                <TextBlock TextAlignment="Justify" Text="{Binding TeamNameScnd}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Grid.Row="1"/>
+                <Border Grid.Column="1" BorderBrush="Black" BorderThickness="2 0 0 0">
+                    <TextBlock TextAlignment="Justify" Text="{Binding ScoreScnd}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1" Grid.Row="1"/>
+                </Border>
+            </Grid>
+        </Border>
+    </Grid>
+</UserControl>

+ 37 - 0
Курсовой проект 3.1/UserControls/MatchControl.xaml.cs

@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Курсовой_проект_3._1.UserControls
+{
+    /// <summary>
+    /// Логика взаимодействия для MatchControl.xaml
+    /// </summary>
+    public partial class MatchControl : UserControl
+    {
+        public string TeamIdFrst { get; set; }
+        public string TeamNameFrst { get; set; }
+        public string ScoreFrst { get; set; }
+        public string TeamIdScnd { get; set; }
+        public string TeamNameScnd { get; set; }
+        public string ScoreScnd { get; set; }
+        public string RoundNum { get; set; }
+
+        public MatchControl()
+        {
+            InitializeComponent();
+            this.DataContext = this;
+        }
+    }
+}

+ 52 - 0
Курсовой проект 3.1/Users.cs

@@ -0,0 +1,52 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Курсовой_проект_3._1
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class Users
+    {
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+        public Users()
+        {
+            this.PlayerApps = new HashSet<PlayerApps>();
+            this.Teams = new HashSet<Teams>();
+            this.TeamsUsers = new HashSet<TeamsUsers>();
+            this.Tournaments = new HashSet<Tournaments>();
+        }
+    
+        public int Id { get; set; }
+        public string Login { get; set; }
+        public string Password { get; set; }
+        public string FName { get; set; }
+        public string LName { get; set; }
+        public string MName { get; set; }
+        public string Nickname { get; set; }
+        public System.DateTime Birthday { get; set; }
+        public string PhoneNumber { get; set; }
+        public string Email { get; set; }
+        public string About { get; set; }
+        public string PhotoPath { get; set; }
+        public Nullable<int> FK_Country_Id { get; set; }
+        public Nullable<int> FK_Discipline_Id { get; set; }
+    
+        public virtual Countries Countries { get; set; }
+        public virtual Disciplines Disciplines { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<PlayerApps> PlayerApps { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Teams> Teams { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<TeamsUsers> TeamsUsers { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Tournaments> Tournaments { get; set; }
+    }
+}

+ 84 - 0
Курсовой проект 3.1/Windows/AddPlayerInTeamWindow.xaml

@@ -0,0 +1,84 @@
+<Window x:Class="Курсовой_проект_3._1.Windows.AddPlayerInTeamWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+        mc:Ignorable="d"
+        Title="AddPlayerInTeamWindow" Height="450" Width="600">
+    <Window.Resources>
+        <DataTemplate x:Key="PlayersItemTemplate">
+            <Grid MinHeight="100">
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="0.4"/>
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                </Grid.ColumnDefinitions>
+
+                <Border Grid.Column="0" BorderBrush="#68A4C8" BorderThickness="2" Margin="5">
+                    <Image Source="{Binding Path=PhotoPath}" Margin="3"/>
+                </Border>
+
+                <Grid Grid.Column="1">
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <TextBlock Grid.Row="0" Text="{Binding Path=Nickname}" FontSize="14" FontWeight="SemiBold" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    <TextBlock Grid.Row="1" Text="{Binding Path=Name}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                </Grid>
+
+                <Grid Grid.Column="2">
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <Grid Grid.Row="0">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="0.2"/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+
+                        <StackPanel Grid.Column="0" Grid.ColumnSpan="2" Orientation="Horizontal">
+                            <TextBlock Text="Страна: " FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                            <Image Source="{Binding Path=CountryIconPath}" MaxHeight="16" Margin="5 0 0 0"/>
+                            <TextBlock Text="{Binding Path=CountryName}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                        </StackPanel>
+                    </Grid>
+
+                    <StackPanel Grid.Row="1" Orientation="Horizontal">
+                        <TextBlock Text="Дисциплина: " FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                        <TextBlock Text="{Binding Path=DisciplineName}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    </StackPanel>
+                </Grid>
+            </Grid>
+        </DataTemplate>
+    </Window.Resources>
+    
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="0.2*"/>
+            <RowDefinition Height="0.2*"/>
+            <RowDefinition/>
+        </Grid.RowDefinitions>
+
+        <!-- Title -->
+        <TextBlock Grid.Row="0" Text="Поиск игрока" FontSize="24" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+
+        <!-- Search -->
+        <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+            <TextBlock Text="Поиск:" FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0 0 5 0"/>
+            <TextBox x:Name="SearchTBox" MinWidth="300" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" MaxLength="30" KeyDown="Search_KeyDown"/>
+        </StackPanel>
+
+        <!-- Listbox -->
+        <Border Grid.Row="2" BorderBrush="#68A4C8" BorderThickness="2" Margin="40 20 40 20">
+            <ListBox x:Name="SearchResultLB" ItemTemplate="{StaticResource PlayersItemTemplate}" MouseDoubleClick="SearchResultLB_MouseDoubleClick"/>
+        </Border>
+    </Grid>
+</Window>

+ 82 - 0
Курсовой проект 3.1/Windows/AddPlayerInTeamWindow.xaml.cs

@@ -0,0 +1,82 @@
+using System;
+using System.Collections.Generic;
+using System.Data.Entity;
+using System.Linq;
+using System.Windows;
+using System.Windows.Input;
+
+
+namespace Курсовой_проект_3._1.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для AddPlayerInTeamWindow.xaml
+    /// </summary>
+    public partial class AddPlayerInTeamWindow : Window
+    {
+        MyTeamContext _context;
+
+        public AddPlayerInTeamWindow()
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+        }
+
+        private void Search_KeyDown(object sender, KeyEventArgs e)
+        {
+            SearchResultLB.ItemsSource = new List<int>();
+
+            if (e.Key == Key.Enter)
+            {
+                List<PlayerApps> playerAppList = _context.PlayerApps.Where(u => DbFunctions.Like(u.Users.Nickname, "%" + SearchTBox.Text + "%")
+                || DbFunctions.Like(u.Users.LName + " " + u.Users.FName + " " + u.Users.MName, "%" + SearchTBox.Text + "%")).ToList();
+
+                List<PlayerItem> playerItemList = new List<PlayerItem>();
+                foreach (PlayerApps app in playerAppList)
+                {
+                    PlayerItem item = new PlayerItem();
+                    item.Name = $"{app.Users.LName} {app.Users.FName} {app.Users.MName}";
+                    item.Nickname = app.Users.Nickname;
+                    item.PhotoPath = app.Users.PhotoPath;
+                    item.CountryName = app.Users.Countries.Name;
+                    item.CountryIconPath = app.Users.Countries.IconPath;
+                        
+                    if (app.Users.Disciplines != null)
+                        item.DisciplineName = app.Users.Disciplines.Name;
+
+                    item.UserId = app.Users.Id;
+
+                    playerItemList.Add(item);
+                }
+
+                SearchResultLB.ItemsSource = playerItemList;
+            }
+        }
+
+        private void SearchResultLB_MouseDoubleClick(object sender, MouseButtonEventArgs e)
+        {
+            if (SearchResultLB.SelectedItem != null)
+            {
+                PlayerItem selectedUser = (PlayerItem)SearchResultLB.SelectedItem;
+
+                if (_context.TeamsUsers.Where(tu => tu.FK_User_Id == selectedUser.UserId && tu.DateEnd == null).Count() != 0)
+                {
+                    MessageBox.Show("Игрок уже состоит в другой команде!");
+                    return;
+                }
+
+                // создаем новую запись
+                TeamsUsers newTeamUsersRow = new TeamsUsers();
+                newTeamUsersRow.FK_Team_Id = _context.Teams.Where(t => t.FK_Creater_Id == App.UserId).Select(t => t.Id).FirstOrDefault();
+                newTeamUsersRow.FK_User_Id = selectedUser.UserId;
+                newTeamUsersRow.DateStart = DateTime.Now;
+                newTeamUsersRow.DateEnd = null;
+
+                _context.TeamsUsers.Add(newTeamUsersRow);
+
+                _context.SaveChanges();
+
+                MessageBox.Show("Игрок добавлен в команду!");
+            }
+        }
+    }
+}

+ 702 - 0
Курсовой проект 3.1/Windows/ApplicationWindow.xaml

@@ -0,0 +1,702 @@
+<Window x:Class="Курсовой_проект_3._1.ApplicationWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1"
+        mc:Ignorable="d"
+        Title="ApplicationWindow"  Height="700" Width="900" MinWidth="550" MinHeight="600" WindowStartupLocation="CenterScreen">
+    <Window.Resources>
+        <!-- Diffrent templates for the ApplicationList (Players, Teams, Tournaments) -->
+        <DataTemplate x:Key="PlayersItemTemplate">
+            <Border BorderThickness="2" BorderBrush="#346E91">
+                <Grid>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="0.4*"/>
+                        <ColumnDefinition Width="*"/>
+                    </Grid.ColumnDefinitions>
+
+                    <!-- Background -->
+                    <Rectangle Grid.ColumnSpan="2" Fill="#68A4C8"/>
+
+                    <!-- Photo, ShortAboutPlayer -->
+                    <Grid Grid.Column="0" Margin="5 5 0 5">
+                        <Grid.RowDefinitions>
+                            <RowDefinition/>
+                            <RowDefinition Height="0.2*"/>
+                        </Grid.RowDefinitions>
+
+                        <Image Grid.Row="0" Source="{Binding Path=PhotoURL}" Margin="5" MaxWidth="100"/>
+
+                        <Grid Grid.Row="1">
+                            <Grid.RowDefinitions>
+                                <RowDefinition/>
+                                <RowDefinition/>
+                                <RowDefinition/>
+                                <RowDefinition/>
+                            </Grid.RowDefinitions>
+
+                            <StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center">
+                                <TextBlock Text="Имя: "/>
+                                <TextBlock Text="{Binding Path=Name}" TextWrapping="Wrap" MaxWidth="100"/>
+                            </StackPanel>
+
+
+                            <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center">
+                                <TextBlock Text="Возраст: "/>
+                                <TextBlock Text="{Binding Path=Age}"/>
+                            </StackPanel>
+
+                            <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center">
+                                <Image Source="{Binding Path=CountryURL}" MaxWidth="10"/>
+
+                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5 0 0 0">
+                                    <TextBlock Text="Страна: "/>
+                                    <TextBlock Text="{Binding Path=CountryName}"/>
+                                </StackPanel>
+                            </StackPanel>
+
+                            <StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Center">
+                                <TextBlock Text="Дисциплина: "/>
+                                <TextBlock Text="{Binding Path=DisciplineName}"/>
+                            </StackPanel>
+                        </Grid>
+                    </Grid>
+
+                    <!-- Title, ApplicationText, Date -->
+                    <Grid Grid.Column="1">
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="0.2*"/>
+                            <RowDefinition/>
+                            <RowDefinition Height="0.2*"/>
+                        </Grid.RowDefinitions>
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+
+                        <TextBlock Text="{Binding Path=Title}" FontSize="25"/>
+
+                        <TextBlock Grid.Row="1" Text="{Binding Path=Text}" TextWrapping="Wrap" FontSize="14" Margin="0 20 10 10" TextAlignment="Justify"/>
+
+                        <Grid Grid.Row="2">
+                            <Grid.RowDefinitions>
+                                <RowDefinition/>
+                                <RowDefinition/>
+                            </Grid.RowDefinitions>
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition/>
+                                <ColumnDefinition/>
+                            </Grid.ColumnDefinitions>
+
+                            <StackPanel Grid.Row="0" Orientation="Horizontal">
+                                <TextBlock Text="Email: "/>
+                                <TextBlock Text="{Binding Path=Email}"/>
+                            </StackPanel>
+
+                            <StackPanel  Grid.Row="1" Orientation="Horizontal">
+                                <TextBlock Text="Номер телефона: "/>
+                                <TextBlock Text="{Binding Path=PhoneNumber}"/>
+                            </StackPanel>
+
+                            <StackPanel Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0 0 10 0">
+                                <TextBlock Text="Дата: "/>
+                                <TextBlock Text="{Binding Path=Date}"/>
+                            </StackPanel>
+
+                        </Grid>
+                    </Grid>
+                </Grid>
+            </Border>
+        </DataTemplate>
+
+        <DataTemplate x:Key="TeamsItemTemplate">
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="0.4*"/>
+                    <ColumnDefinition Width="*"/>
+                </Grid.ColumnDefinitions>
+
+                <!-- Photo, ShortAboutTeam -->
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <Image Grid.Row="0" Source="{Binding Path=TeamLogo}" Margin="5"/>
+
+                    <Grid Grid.Row="1">
+                        <Grid.RowDefinitions>
+                            <RowDefinition/>
+                            <RowDefinition/>
+                            <RowDefinition/>
+                            <RowDefinition/>
+                        </Grid.RowDefinitions>
+
+                        <Viewbox Grid.Row="0" Stretch="Uniform">
+                            <TextBlock Text="{Binding Path=TeamName}"></TextBlock>
+                        </Viewbox>
+
+                        <Viewbox Grid.Row="1" Stretch="Uniform">
+                            <TextBlock Text="{Binding Path=DateOfFoundation}"></TextBlock>
+                        </Viewbox>
+
+                        <Viewbox Grid.Row="2" Stretch="Uniform">
+                            <TextBlock Text="{Binding Path=Country}"></TextBlock>
+                        </Viewbox>
+
+                        <Viewbox Grid.Row="3" Stretch="Uniform">
+                            <TextBlock Text="{Binding Path=Discipline}"></TextBlock>
+                        </Viewbox>
+                    </Grid>
+                </Grid>
+
+                <!-- Title, ApplicationText, Date -->
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition/>
+                        <ColumnDefinition/>
+                    </Grid.ColumnDefinitions>
+
+                    <Viewbox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Stretch="Uniform">
+                        <TextBlock Text="{Binding Path=Title}"></TextBlock>
+                    </Viewbox>
+
+                    <Viewbox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Stretch="Uniform">
+                        <TextBlock Text="{Binding Path=ApplicationText}"></TextBlock>
+                    </Viewbox>
+
+                    <Grid Grid.Row="2" Grid.Column="0">
+                        <Grid.RowDefinitions>
+                            <RowDefinition/>
+                            <RowDefinition/>
+                        </Grid.RowDefinitions>
+
+                        <Viewbox Grid.Row="0" Stretch="Uniform">
+                            <TextBlock Text="{Binding Path=Email}"></TextBlock>
+                        </Viewbox>
+
+                        <Viewbox Grid.Row="1" Stretch="Uniform">
+                            <TextBlock Text="{Binding Path=PhoneNumber}"></TextBlock>
+                        </Viewbox>
+                    </Grid>
+
+                    <Viewbox Grid.Row="2" Grid.Column="1" Stretch="Uniform">
+                        <TextBlock Text="{Binding Path=Date}"></TextBlock>
+                    </Viewbox>
+                </Grid>
+            </Grid>
+        </DataTemplate>
+
+        <DataTemplate x:Key="TournamentsItemTemplate">
+            <Grid MaxHeight="500">
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="0.4*"/>
+                    <ColumnDefinition Width="*"/>
+                </Grid.ColumnDefinitions>
+
+                <!-- TournamentLogo -->
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <Border Margin="5" BorderThickness="1" BorderBrush="#81AEC8">
+                        <Image Source="{Binding Path=LogoPath}" Margin="1"/>
+                    </Border>
+                </Grid>
+
+                <!-- Title, Date, Place, PrizeFond, FreeSlot, Contacts -->
+                <Grid Grid.Column="1">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="1.2*"/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                        <Image Source="{Binding Path=IconPath}" Margin="0 0 10 0" MaxHeight="25"/>
+                        <TextBlock Text="{Binding Path=Title}" FontSize="20" FontWeight="SemiBold"/>
+                    </StackPanel>
+
+                    <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                        <TextBlock Text="Дисциплина: " Margin="0 0 2 0" FontSize="14" FontWeight="Bold"/>
+                        <TextBlock Text="{Binding Path=DisciplineName}" FontSize="14"/>
+                    </StackPanel>
+
+                    <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                        <TextBlock Text="Дата проведения: " Margin="0 0 2 0" FontSize="14" FontWeight="Bold"/>
+                        <TextBlock Text="{Binding Path=Date}" FontSize="14"/>
+                    </StackPanel>
+
+                    <StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                        <TextBlock Text="Место проведения: " Margin="0 0 2 0" FontSize="14" FontWeight="Bold"/>
+                        <TextBlock Text="{Binding Path=Venue}" FontSize="14"/>
+                    </StackPanel>
+
+                    <StackPanel Grid.Row="4" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                        <TextBlock Text="Призовой фонд: " Margin="0 0 2 0" FontSize="14" FontWeight="Bold"/>
+                        <TextBlock Text="{Binding Path=PrizeFond}" FontSize="14"/>
+                        <TextBlock Text="$" Margin="2 0 0 0" FontSize="14" FontWeight="Bold"/>
+                    </StackPanel>
+
+                    <StackPanel Grid.Row="5" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                        <TextBlock Text="Количество команд: " Margin="0 0 2 0" FontSize="14" FontWeight="Bold"/>
+                        <TextBlock Text="{Binding Path=TeamCount}" FontSize="14"/>
+                    </StackPanel>
+
+                    <Grid Grid.Row="6">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+
+                        <StackPanel Grid.Column="0" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                            <TextBlock Text="Номер телефона: " Margin="0 0 2 0" FontSize="12" FontWeight="Bold"/>
+                            <TextBlock Text="+" FontSize="12"/>
+                            <TextBlock Text="{Binding Path=PhoneNumber}" FontSize="12"/>
+                        </StackPanel>
+
+                        <StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                            <TextBlock Text="Email: " Margin="0 0 2 0" FontSize="12" FontWeight="Bold"/>
+                            <TextBlock Text="{Binding Path=Email}" FontSize="12"/>
+                        </StackPanel>
+                    </Grid>
+                </Grid>
+            </Grid>
+        </DataTemplate>
+
+        <DataTemplate x:Key="TemplateSelector">
+            <ContentPresenter Content="{Binding}" Name="contentPresenter" />
+
+            <DataTemplate.Triggers>
+                <DataTrigger Binding="{Binding ElementName=templateSelector, Path=Text}" Value="PlayersItemTemplate">
+                    <Setter TargetName="contentPresenter" Property="ContentTemplate" Value="{StaticResource PlayersItemTemplate}" />
+                </DataTrigger>
+                <DataTrigger Binding="{Binding ElementName=templateSelector, Path=Text}" Value="TeamsItemTemplate">
+                    <Setter TargetName="contentPresenter" Property="ContentTemplate" Value="{StaticResource TeamsItemTemplate}" />
+                </DataTrigger>
+                <DataTrigger Binding="{Binding ElementName=templateSelector, Path=Text}" Value="TournamentsItemTemplate">
+                    <Setter TargetName="contentPresenter" Property="ContentTemplate" Value="{StaticResource TournamentsItemTemplate}" />
+                </DataTrigger>
+            </DataTemplate.Triggers>
+        </DataTemplate>
+
+        <!-- TextBox style -->
+        <Style TargetType="TextBox">
+            <Setter Property="Foreground" Value="#FF464646"/>
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type TextBox}">
+                        <Grid>
+                            <Border x:Name="TextBoxBorder"
+                                    Background="White" 
+                                    BorderBrush="White" 
+                                    BorderThickness="1" 
+                                    CornerRadius="8" Opacity="1">
+                                <Grid>
+                                    <ScrollViewer x:Name="PART_ContentHost" 
+                                                  BorderThickness="0" IsTabStop="False" 
+                                                  Margin="0" Padding="{TemplateBinding Padding}">
+                                    </ScrollViewer>
+                                </Grid>
+                            </Border>
+                        </Grid>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter TargetName="TextBoxBorder" Property="Background" Value="WhiteSmoke"/>
+                            </Trigger>
+                            <Trigger Property="IsFocused" Value="True">
+                                <Setter TargetName="TextBoxBorder" Property="Background" Value="#FFF0F0F0"/>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+        
+        <!-- CountryFilter & Discipline ListBoxTemplate-->
+        <DataTemplate x:Key="FilterItemTemplate">
+            <StackPanel  Orientation="Horizontal">
+                <CheckBox IsChecked="{Binding IsSelected, Mode=OneWayToSource}" />
+                <TextBlock Text="{Binding Path=ItemName}"
+                           Foreground="Blue" />
+            </StackPanel>
+        </DataTemplate>
+        
+        <!-- Button style -->
+        <Style TargetType="Button">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="0"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" Value="#68A4C8" TargetName="ButtonBorder"/>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="#68A4C8" TargetName="ButtonBorder"/>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+
+        <Style TargetType="Button" x:Key="ApplyBtnStyle">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="5"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="WhiteSmoke" TargetName="ButtonBorder">
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </Window.Resources>
+    
+    <Grid>
+        <Grid>
+            <Grid.RowDefinitions>
+                <RowDefinition Height="0.1*"></RowDefinition>
+                <RowDefinition Height="0.05*"></RowDefinition>
+                <RowDefinition Height="*"></RowDefinition>
+            </Grid.RowDefinitions>
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition></ColumnDefinition>
+            </Grid.ColumnDefinitions>
+
+            <!-- Navigation -->
+            <Grid  Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Background="#68A4C8">
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                </Grid.ColumnDefinitions>
+
+                <Border Grid.Column="0" BorderBrush="Black" BorderThickness="0 0 1 0">
+                    <Button Background="#68A4C8" Content="Главная" Foreground="White" FontSize="18" FontWeight="SemiBold" Style="{StaticResource NavigationBtnTemplate}"/>
+                </Border>
+
+                <Border Grid.Column="1" BorderBrush="Black" BorderThickness="0 0 1 0">
+                    <Button x:Name="SearchBtn" Grid.Column="1" Background="#68A4C8" Content="Поиск" Foreground="White" FontSize="18" FontWeight="SemiBold" Style="{StaticResource NavigationBtnTemplate}" Click="SearchBtn_Click"/>
+                </Border>
+
+                <Border Grid.Column="2">
+                    <Button x:Name="ProfileBtn" Grid.Column="2" Background="#68A4C8" Content="Профиль" Foreground="White" FontSize="18" FontWeight="SemiBold" Style="{StaticResource NavigationBtnTemplate}" Click="ProfileBtn_Click"/>
+                </Border>
+            </Grid>
+
+            <!-- ChooseCategory -->
+            <Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Background="#81AEC8">
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="0.5*"/>
+                </Grid.ColumnDefinitions>
+
+                <!-- Category -->
+                <Grid Grid.Column="0">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="0.2*"/>
+                        <ColumnDefinition/>
+                        <ColumnDefinition Width="0.2*"/>
+                        <ColumnDefinition/>
+                        <ColumnDefinition Width="0.2*"/>
+                        <ColumnDefinition/>
+                        <ColumnDefinition Width="0.2*"/>
+                    </Grid.ColumnDefinitions>
+
+                    <Button x:Name="PlayerListShowButton" Grid.Column="1" Content="Игроки" Click="PlayerListShowButton_Click" Background="#FFDDDDDD"/>
+                    <Button x:Name="TeamListShowButton" Grid.Column="3" Content="Команды" Click="TeamListShowButton_Click" Background="#FFDDDDDD"/>
+                    <Button x:Name="TournamentListShowButton" Grid.Column="5" Content="Турниры" Click="TournamentListShowButton_Click" Background="#FFDDDDDD"/>
+                </Grid>
+                
+                <!-- Add application -->
+                <Button x:Name="PlayerAppAddBtn" Grid.Column="5" Content="Добавить" Background="#FFDDDDDD" Visibility="Hidden" Margin="40 0 40 0" Click="PlayerAppAddBtn_Click"/>
+
+                <Grid Grid.Column="5">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition/>
+                        <ColumnDefinition/>
+                    </Grid.ColumnDefinitions>
+                    
+                    <Button x:Name="TeamAppAddBtn" Grid.Column="0" Content="Добавить заявку" Background="#FFDDDDDD" Margin="5 0 5 0" Visibility="Visible" Click="TeamAppAddBtn_Click"/>
+                    <Button x:Name="TeamAddBtn" Grid.Column="1" Content="Создать команду" Margin="5 0 5 0" Visibility="Visible" Click="TeamAddBtn_Click"/>
+                </Grid>
+                
+                <Button x:Name="TournamentAddBtn" Grid.Column="5" Content="Добавить" Background="#FFDDDDDD" Visibility="Hidden" Margin="40 0 40 0" Click="TournamentAddBtn_Click"/>
+            </Grid>
+
+
+            <!-- ##################### MAIN ##################### -->
+            <Grid Grid.Row="2" Grid.Column="0">
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="0.5*"/>
+                </Grid.ColumnDefinitions>
+                
+                <!-- ApplicationList -->
+                <ListBox x:Name="applicationsLB" Grid.Column="0" ItemTemplate="{StaticResource TemplateSelector}" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" MouseDoubleClick="applicationsLB_MouseDoubleClick"/>
+                <TextBlock x:Name="templateSelector" Text="PlayersItemTemplate" Visibility="Collapsed"/>
+                <!-- ApplicationList -->
+                
+                <!-- ApplicationFilter -->
+                <Rectangle Grid.Column="1" Fill="#FF68A4C8"/>
+                <Grid Grid.Column="1">
+                    <!-- PlayersFilter -->
+                    <Grid x:Name="PlayersFilter" Visibility="Hidden">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="0.2*" MinHeight="50"/>
+                            <RowDefinition Height="0.4*" MaxHeight="60" MinHeight="45"/>
+                            <RowDefinition x:Name="CountryFilterExpanderRowPlayers" Height="0.2*" MinHeight="30"/>
+                            <RowDefinition Height="0.2*" MaxHeight="20"/>
+                            <RowDefinition x:Name="DiciplineFilterExpanderRowPlayers" Height="0.2*" MinHeight="30"/>
+                            <RowDefinition Height="0.2*" MaxHeight="20"/>
+                            <RowDefinition Height="0.2*" MaxHeight="30"/>
+                            <RowDefinition x:Name="BuffExpanderRowPlayers" Height="0.8*"/>
+                            <RowDefinition Height="*" MaxHeight="100"/>
+                        </Grid.RowDefinitions>
+
+                        <!-- Date -->
+                        <TextBlock Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="12 0 0 0">
+                            Дата заявки:<LineBreak/><LineBreak/>С
+                        </TextBlock>
+                        <TextBlock Grid.Row="0"  Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="12 0 0 0">
+                           До
+                        </TextBlock>
+                        <DatePicker x:Name="LowerDataPickerPlayers" Grid.Row="1" Margin="10"/>
+                        <DatePicker x:Name="UpperDataPickerPlayers" Grid.Row="1" Grid.Column="1" Margin="10"/>
+
+                        <!-- Country -->
+                        <Expander x:Name="CountryExpanderPlayers" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Header="Страна:" MinHeight="100" Expanded="CountryExpanderPlayers_Expanded" Collapsed="CountryExpanderPlayers_Collapsed">
+                            <ListBox x:Name="CountryFilterPlayersLB" ItemTemplate="{StaticResource FilterItemTemplate}"/>
+                        </Expander>
+                        
+                        <!-- Discipline -->
+                        <Expander x:Name="DiciplineExpanderPlayers" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Header="Дисциплина:" MinHeight="100" Expanded="DiciplineExpanderPlayers_Expanded" Collapsed="DiciplineExpanderPlayers_Collapsed">
+                            <ListBox x:Name="DiciplineFilterPlayersLB" ItemTemplate="{StaticResource FilterItemTemplate}"/>
+                        </Expander>
+
+                        <!-- Age -->
+                        <Grid  Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="2">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="0.4*"/>
+                                <ColumnDefinition Width="0.2*"/>
+                                <ColumnDefinition Width="0.05*"/>
+                                <ColumnDefinition Width="0.2*"/>
+                                <ColumnDefinition Width="0.1*"/>
+                            </Grid.ColumnDefinitions>
+
+                            <TextBlock Grid.Column="0" Text="Возраст:" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12 0 0 0"/>
+                            <TextBox x:Name="LowerAgePlayersTBox" Grid.Column="1" MaxLength="2" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="0 0 0 0"/>
+                            <TextBlock Grid.Column="2" Text=" - " HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                            <TextBox x:Name="UpperAgePlayersTBox" Grid.Column="3" MaxLength="2" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="0 0 0 0"/>
+                        </Grid>
+
+                        <Button x:Name="ApplyFilterPlayersButton" Grid.Row="8" Grid.Column="0" Grid.ColumnSpan="2" Content="Применить фильтр" Margin="25" Style="{StaticResource ApplyBtnStyle}" Click="ApplyFilterPlayersButton_Click"/>
+                    </Grid>
+            
+                    <!-- TeamsFilter -->
+                    <Grid x:Name="TeamsFilter" Visibility="Hidden">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="0.2*" MinHeight="50"/>
+                            <RowDefinition Height="0.4*" MaxHeight="60"/>
+                            <RowDefinition x:Name="CountryFilterExpanderRowTeams" Height="0.2*"/>
+                            <RowDefinition Height="0.2*" MaxHeight="20"/>
+                            <RowDefinition x:Name="DiciplineFilterExpanderRowTeams" Height="0.2*"/>
+                            <RowDefinition Height="0.2*" MaxHeight="20"/>
+                            <RowDefinition Height="0.2*" MaxHeight="30"/>
+                            <RowDefinition x:Name="BuffExpanderRowTeams" Height="0.8*"/>
+                            <RowDefinition Height="*" MaxHeight="100"/>
+                        </Grid.RowDefinitions>
+
+                        <!-- Date -->
+                        <TextBlock Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="12 0 0 0">
+                            Дата заявки:<LineBreak/><LineBreak/>С
+                        </TextBlock>
+                        <TextBlock Grid.Row="0"  Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="12 0 0 0">
+                           До
+                        </TextBlock>
+                        <DatePicker x:Name="LowerDataPickerTeams" Grid.Row="1" Margin="10"/>
+                        <DatePicker x:Name="UpperDataPickerTeams" Grid.Row="1" Grid.Column="1" Margin="10"/>
+
+                        <!-- Country -->
+                        <Expander x:Name="CountryExpanderTeams" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Header="Страна:" MinHeight="100" Expanded="CountryExpanderTeams_Expanded" Collapsed="CountryExpanderTeams_Collapsed">
+                            <ListBox x:Name="CountryFilterTeamsLB" ItemTemplate="{StaticResource FilterItemTemplate}"/>
+                        </Expander>
+
+                        <!-- Discipline -->
+                        <Expander x:Name="DiciplineExpanderTeams" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Header="Дисциплина:" MinHeight="100" Expanded="DiciplineExpanderTeams_Expanded" Collapsed="DiciplineExpanderTeams_Collapsed">
+                            <ListBox x:Name="DiciplineFilterTeamsLB" ItemTemplate="{StaticResource FilterItemTemplate}"/>
+                        </Expander>
+
+                        <Button x:Name="ApplyFilterTeamsButton" Grid.Row="8" Grid.Column="0" Grid.ColumnSpan="2" Content="Применить фильтр" Margin="25" Style="{StaticResource ApplyBtnStyle}" Click="ApplyFilterTeamsButton_Click"/>
+                    </Grid>
+
+                    <!-- TournamentsFilter -->
+                    <Grid x:Name="TournamentsFilter" Visibility="Hidden">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="0.1*" MinHeight="50"/> <!-- DataTB -->
+                            <RowDefinition Height="0.2*" MaxHeight="60" MinHeight="45"/> <!-- DataPicker -->
+                            <RowDefinition x:Name="VenueFilterExpanderRowTournaments" Height="0.1*" MinHeight="25"/> <!-- Venue -->
+                            <RowDefinition Height="0.1*" MaxHeight="20"/>
+                            <RowDefinition x:Name="DiciplineFilterExpanderRowTournaments" Height="0.1*" MinHeight="25"/> <!-- Discipline -->
+                            <RowDefinition Height="0.1*" MaxHeight="20"/> 
+                            <RowDefinition Height="0.2*" MinHeight="35"/> <!-- PrizeFond -->
+                            <RowDefinition Height="0.1*" MaxHeight="20"/>
+                            <RowDefinition Height="0.4*"/> <!-- FreePlace -->
+                            <RowDefinition x:Name="BuffExpanderRowTournaments"/>
+                            <RowDefinition Height="*" MaxHeight="100"/>
+                        </Grid.RowDefinitions>
+
+                        <!-- DateVenue -->
+                        <TextBlock Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="12 0 0 0">
+                            Дата начала:<LineBreak/><LineBreak/>С
+                        </TextBlock>
+                        <TextBlock Grid.Row="0"  Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="12 0 0 0">
+                           До
+                        </TextBlock>
+                        <DatePicker x:Name="LowerDataPickerTournaments" Grid.Row="1" Margin="10"/>
+                        <DatePicker x:Name="UpperDataPickerTournaments" Grid.Row="1" Grid.Column="1" Margin="10"/>
+
+                        <!-- Venue -->
+                        <Expander x:Name="VenueExpanderTournaments" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Header="Место проведения:" MinHeight="100" Expanded="VenueExpanderTournaments_Expanded" Collapsed="VenueExpanderTournaments_Collapsed" Visibility="Hidden">
+                            <ListBox x:Name="VenueFilterTournamentsLB" ItemTemplate="{StaticResource FilterItemTemplate}"/>
+                        </Expander>
+
+                        <!-- Discipline -->
+                        <Expander x:Name="DiciplineExpanderTournaments" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Header="Дисциплина:" MinHeight="100" Expanded="DiciplineExpanderTournaments_Expanded" Collapsed="DiciplineExpanderTournaments_Collapsed">
+                            <ListBox x:Name="DiciplineFilterTournamentsLB" ItemTemplate="{StaticResource FilterItemTemplate}"/>
+                        </Expander>
+
+                        <!-- PrizeFond -->
+                        <Grid  Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="2">
+                            <Grid.ColumnDefinitions>
+                            </Grid.ColumnDefinitions>
+                            <Grid.RowDefinitions>
+                                <RowDefinition/>
+                                <RowDefinition Height="0.1*"/>
+                                <RowDefinition/>
+                            </Grid.RowDefinitions>
+
+                            <TextBlock Grid.Row="0" Text="Призовой фонд:" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12 0 0 0"/>
+                            <Grid Grid.Row="2">
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition/>
+                                    <ColumnDefinition Width="0.3*"/>
+                                    <ColumnDefinition/>
+                                </Grid.ColumnDefinitions>
+                                
+                                <TextBox x:Name="LowerPrizeTournamentsTBox" Grid.Column="0" MaxLength="8" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="12 0 0 0"/>
+                                <TextBlock Grid.Column="1" Text=" - " HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
+                                <TextBox x:Name="UpperPrizeTournamentsTBox" Grid.Column="2" MaxLength="8" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="0 0 12 0"/>
+                            </Grid>
+                        </Grid>
+                        
+                        <!-- FreePlaces -->
+                        <Grid Grid.Row="8" Grid.Column="0" Grid.ColumnSpan="2">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="0.8*"/>
+                                <ColumnDefinition Width="0.3*"/>
+                            </Grid.ColumnDefinitions>
+
+                            <TextBlock Grid.Column="0" Text="Только со свободными местами:" TextAlignment="Center" TextWrapping="Wrap"/>
+                            <CheckBox x:Name="FreePlaceTournamentsCB" Grid.Column="1" HorizontalAlignment="Center"/>
+                        </Grid>
+
+                        <Button x:Name="ApplyFilterTournamentsButton" Grid.Row="10" Grid.Column="0" Grid.ColumnSpan="2" Content="Применить фильтр" Margin="25" Style="{StaticResource ApplyBtnStyle}" Click="ApplyFilterTournamentsButton_Click"/>
+                    </Grid>
+                </Grid> <!-- ApplicationFilter -->
+            </Grid>
+        </Grid>
+    </Grid>
+</Window>

+ 743 - 0
Курсовой проект 3.1/Windows/ApplicationWindow.xaml.cs

@@ -0,0 +1,743 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows;
+using System.Windows.Controls.Primitives;
+using System.Windows.Input;
+using System.Windows.Media;
+using Курсовой_проект_3._1.Windows;
+
+namespace Курсовой_проект_3._1
+{
+    /// <summary>
+    /// Логика взаимодействия для ApplicationWindow.xaml
+    /// </summary>
+    public partial class ApplicationWindow : Window
+    {
+        List<Item> countryList = new List<Item>();
+        List<Item> disciplineList = new List<Item>();
+
+        MyTeamContext _context;
+
+        public ApplicationWindow()
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            PlayerListShowButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
+
+            foreach (Countries country in _context.Countries)
+            {
+                countryList.Add(CountryToItem(country));
+            }
+
+            foreach (Disciplines discipline in _context.Disciplines)
+            {
+                disciplineList.Add(DisciplineToItem(discipline));
+            }
+           
+            CountryFilterPlayersLB.ItemsSource = countryList;
+            DiciplineFilterPlayersLB.ItemsSource = disciplineList;
+        }
+
+        private Item CountryToItem(Countries country)
+        {
+            return new Item() {ItemName = country.Name, IsSelected = false, ItemId = country.Id };
+        }
+
+        private Item DisciplineToItem(Disciplines discipline)
+        {
+            return new Item() { ItemName = discipline.Name, IsSelected = false, ItemId = discipline.Id };
+        }
+
+        // NavigationBtns
+        private void SearchBtn_Click(object sender, RoutedEventArgs e)
+        {
+            SearchWindow wnd = new SearchWindow();
+            wnd.ShowDialog();
+        }
+
+        private void ProfileBtn_Click(object sender, RoutedEventArgs e)
+        {
+            MainWindow wnd = new MainWindow(App.UserId);
+            wnd.Show();
+            Close();
+        }
+
+        // ListShowBtns
+        private void PlayerListShowButton_Click(object sender, RoutedEventArgs e)
+        {
+            var bc = new BrushConverter();
+            PlayerListShowButton.Background = (Brush)bc.ConvertFrom("#68A4C8");
+            TeamListShowButton.Background = (Brush)bc.ConvertFrom("#FFDDDDDD");
+            TournamentListShowButton.Background = (Brush)bc.ConvertFrom("#FFDDDDDD");
+
+            PlayersFilter.Visibility = Visibility.Visible;
+            TeamsFilter.Visibility = Visibility.Hidden;
+            TournamentsFilter.Visibility = Visibility.Hidden;
+
+            PlayerAppAddBtn.Visibility = Visibility.Visible;
+            TeamAppAddBtn.Visibility = Visibility.Hidden;
+            TournamentAddBtn.Visibility = Visibility.Hidden;
+            TeamAddBtn.Visibility = Visibility.Collapsed;
+
+            applicationsLB.ItemsSource = new List<string>();
+
+            ApplyFilterPlayersButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
+        }
+
+        private void TeamListShowButton_Click(object sender, RoutedEventArgs e)
+        {
+            var bc = new BrushConverter();
+            PlayerListShowButton.Background = (Brush)bc.ConvertFrom("#FFDDDDDD");
+            TeamListShowButton.Background = (Brush)bc.ConvertFrom("#68A4C8");
+            TournamentListShowButton.Background = (Brush)bc.ConvertFrom("#FFDDDDDD");
+
+            PlayersFilter.Visibility = Visibility.Hidden;
+            TeamsFilter.Visibility = Visibility.Visible;
+            TournamentsFilter.Visibility = Visibility.Hidden;
+
+            PlayerAppAddBtn.Visibility = Visibility.Hidden;
+            TeamAppAddBtn.Visibility = Visibility.Visible;
+            TournamentAddBtn.Visibility = Visibility.Hidden;
+            TeamAddBtn.Visibility = Visibility.Visible;
+
+            // очищаем фильтры
+            LowerDataPickerPlayers.Text = "";
+            UpperDataPickerPlayers.Text = "";
+            LowerAgePlayersTBox.Text = "";
+            UpperAgePlayersTBox.Text = "";
+
+            applicationsLB.ItemsSource = new List<byte>();
+
+            ApplyFilterTeamsButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
+        }
+
+        private void TournamentListShowButton_Click(object sender, RoutedEventArgs e)
+        {
+            var bc = new BrushConverter();
+            PlayerListShowButton.Background = (Brush)bc.ConvertFrom("#FFDDDDDD");
+            TeamListShowButton.Background = (Brush)bc.ConvertFrom("#FFDDDDDD");
+            TournamentListShowButton.Background = (Brush)bc.ConvertFrom("#68A4C8");
+
+            PlayersFilter.Visibility = Visibility.Hidden;
+            TeamsFilter.Visibility = Visibility.Hidden;
+            TournamentsFilter.Visibility = Visibility.Visible;
+
+            PlayerAppAddBtn.Visibility = Visibility.Hidden;
+            TeamAppAddBtn.Visibility = Visibility.Hidden;
+            TournamentAddBtn.Visibility = Visibility.Visible;
+            TeamAddBtn.Visibility = Visibility.Collapsed;
+
+            // очищаем фильтры
+            LowerDataPickerPlayers.Text = "";
+            UpperDataPickerPlayers.Text = "";
+            LowerAgePlayersTBox.Text = "";
+            UpperAgePlayersTBox.Text = "";
+            CountryFilterPlayersLB.ItemsSource = new List<byte>();
+            DiciplineFilterPlayersLB.ItemsSource = new List<byte>();
+
+            applicationsLB.ItemsSource = new List<byte>();
+
+            ApplyFilterTournamentsButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
+        }
+
+        // ApplyFilterBtns
+        private void ApplyFilterPlayersButton_Click(object sender, RoutedEventArgs e)
+        {
+            // обновляем шаблон для заявок
+            templateSelector.Text = "PlayersItemTemplate";
+
+            // инициализируем переменные
+            DateTime lowerDate, upperDate;
+            int lowerAge, upperAge;
+            List<int> countries = new List<int>();
+            List<int> disciplines = new List<int>();
+
+            lowerDate = String.IsNullOrWhiteSpace(LowerDataPickerPlayers.Text) ? Convert.ToDateTime("01.12.2021") : Convert.ToDateTime(LowerDataPickerPlayers.Text.Trim());
+            upperDate =  String.IsNullOrWhiteSpace(UpperDataPickerPlayers.Text) ? DateTime.Now : Convert.ToDateTime(UpperDataPickerPlayers.Text.Trim());
+            lowerAge = String.IsNullOrWhiteSpace(LowerAgePlayersTBox.Text) ? 0 : Convert.ToInt32(LowerAgePlayersTBox.Text.Trim());
+            upperAge = String.IsNullOrWhiteSpace(UpperAgePlayersTBox.Text) ? 99 : Convert.ToInt32(UpperAgePlayersTBox.Text.Trim());
+
+            foreach (Item item in CountryFilterPlayersLB.Items)
+            {
+                if (item.IsSelected)
+                {
+                    countries.Add(item.ItemId);
+                }
+            }
+
+            foreach(Item item in DiciplineFilterPlayersLB.Items)
+            {
+                if (item.IsSelected)
+                {
+                    disciplines.Add(item.ItemId);
+                }
+            }
+
+            string countriesString = countries.Count == 0 ? "*" : string.Join(",", countries);
+            string disciplinesString = disciplines.Count == 0 ? "*" : string.Join(",", disciplines);
+
+            // проверка на корректность введенных значений
+            if (Convert.ToInt32(lowerAge) > Convert.ToInt32(upperAge))
+            {
+                MessageBox.Show("Некорректно введен возвраст!");
+                return;
+            }
+
+            if (DateTime.Compare(Convert.ToDateTime(lowerDate), Convert.ToDateTime(upperDate)) > 0)
+            {
+                MessageBox.Show("Некорректно введены даты!");
+                return;
+            }
+
+            // очищаем текущий список
+            applicationsLB.ItemsSource = new List<string>();
+
+            List<PlayerApps> apps = new List<PlayerApps>();
+            List<PlayerApps> beforeApps = new List<PlayerApps>();
+            // получаем список заявок (lowerAgeParam, upperAgeParam, lowerDateParam, upperDateParam, countriesParam, disciplinesParam)
+            if (countriesString == "*" || disciplinesString == "*")
+            {
+                if (countriesString == "*" && disciplinesString == "*")
+                {
+                    beforeApps = _context.PlayerApps.Where(app => app.AppDate >= lowerDate && app.AppDate <= upperDate).ToList();
+                    foreach (PlayerApps beforeApp in beforeApps)
+                    {
+                        if (Func.CalculateAge(beforeApp.Users.Birthday) >= lowerAge && Func.CalculateAge(beforeApp.Users.Birthday) <= upperAge)
+                        {
+                            apps.Add(beforeApp);
+                        }
+                    }
+                }
+                else if (countriesString == "*")
+                {
+                    foreach (int discipline in disciplines)
+                    {
+                        beforeApps.AddRange(_context.PlayerApps.Where(app => app.AppDate >= lowerDate && app.AppDate <= upperDate && app.Users.FK_Discipline_Id == discipline).ToList());
+                    }
+
+                    foreach (PlayerApps beforeApp in beforeApps)
+                    {
+                        if (Func.CalculateAge(beforeApp.Users.Birthday) >= lowerAge && Func.CalculateAge(beforeApp.Users.Birthday) <= upperAge)
+                        {
+                            apps.Add(beforeApp);
+                        }
+                    }
+                }
+                else
+                {
+                    foreach (int country in countries)
+                    {
+                        beforeApps.AddRange(_context.PlayerApps.Where(app => app.AppDate >= lowerDate && app.AppDate <= upperDate && app.Users.FK_Country_Id == country).ToList());
+                    }
+
+                    foreach (PlayerApps beforeApp in beforeApps)
+                    {
+                        if (Func.CalculateAge(beforeApp.Users.Birthday) >= lowerAge && Func.CalculateAge(beforeApp.Users.Birthday) <= upperAge)
+                        {
+                            apps.Add(beforeApp);
+                        }
+                    }
+                }
+            }
+            else
+            {
+                foreach (int country in countries)
+                {
+                    foreach (int discipline in disciplines)
+                    {
+                        beforeApps.AddRange(_context.PlayerApps.Where(app => app.AppDate >= lowerDate && app.AppDate <= upperDate && app.Users.FK_Country_Id == country && app.Users.FK_Discipline_Id == discipline).ToList());
+                    }
+                }
+
+                foreach (PlayerApps beforeApp in beforeApps)
+                {
+                    if (Func.CalculateAge(beforeApp.Users.Birthday) >= lowerAge && Func.CalculateAge(beforeApp.Users.Birthday) <= upperAge)
+                    {
+                        apps.Add(beforeApp);
+                    }
+                }
+            }
+
+            // заполняем список заявок
+            List<PlayerApplication> playerApps = new List<PlayerApplication>();
+            foreach (PlayerApps app in apps)
+            {
+                PlayerApplication playerApp = new PlayerApplication();
+                playerApp.Name = app.Users.LName + " " + app.Users.FName + " " + app.Users.MName;
+                playerApp.Nickname = app.Users.Nickname;
+                playerApp.Age = Func.CalculateAge(app.Users.Birthday).ToString();
+
+                
+
+                if (string.IsNullOrEmpty(app.Users.PhotoPath))
+                {
+                    playerApp.PhotoURL = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\WithoutPhoto.png";
+                }
+                else
+                {
+                    playerApp.PhotoURL = app.Users.PhotoPath;
+                }
+
+                playerApp.CountryName = app.Users.Countries.Name;
+
+                if (string.IsNullOrEmpty(app.Users.Countries.IconPath))
+                {
+                    playerApp.CountryURL = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\countrys - 24\_unknown.png";
+                }
+                else
+                {
+                    playerApp.CountryURL = app.Users.Countries.IconPath;
+                }
+
+                playerApp.DisciplineName = app.Users.Disciplines != null ? app.Users.Disciplines.Name : "Не указано";
+
+                playerApp.Email = app.Users.Email;
+                playerApp.PhoneNumber = "+" + app.Users.PhoneNumber;
+
+                playerApp.Title = app.Title;
+                playerApp.Text = app.AppText;
+                playerApp.Date = app.AppDate.ToString("D");
+                playerApp.PlayerId = app.Users.Id.ToString();
+
+                playerApps.Add(playerApp);
+            }
+
+            applicationsLB.ItemsSource = playerApps;
+        }
+
+        private void ApplyFilterTeamsButton_Click(object sender, RoutedEventArgs e)
+        {
+            // обновляем шаблон для заявок
+            templateSelector.Text = "TeamsItemTemplate";
+
+            // очищаем текущий список
+            applicationsLB.ItemsSource = new List<string>();
+
+            // инициализируем переменные
+            DateTime lowerDate, upperDate;
+            List<int> countries = new List<int>();
+            List<int> disciplines = new List<int>();
+
+            lowerDate = string.IsNullOrWhiteSpace(LowerDataPickerTeams.Text) ? Convert.ToDateTime("01.12.2021") : Convert.ToDateTime(LowerDataPickerTeams.Text.Trim());
+            upperDate = string.IsNullOrWhiteSpace(UpperDataPickerTeams.Text) ? DateTime.Now : Convert.ToDateTime(UpperDataPickerTeams.Text.Trim());
+
+            foreach (Item item in CountryFilterTeamsLB.Items)
+            {
+                if (item.IsSelected)
+                {
+                    countries.Add(item.ItemId);
+                }
+            }
+
+            foreach (Item item in DiciplineFilterTeamsLB.Items)
+            {
+                if (item.IsSelected)
+                {
+                    disciplines.Add(item.ItemId);
+                }
+            }
+
+            string countriesString = countries.Count == 0 ? "*" : string.Join(",", countries);
+            string disciplinesString = disciplines.Count == 0 ? "*" : string.Join(",", disciplines);
+
+            // проверка на корректность введенных значений
+            if (DateTime.Compare(lowerDate, upperDate) > 0)
+            {
+                MessageBox.Show("Некорректно введены даты!");
+                return;
+            }
+
+            List<TeamApps> apps = new List<TeamApps>();
+            // получаем список заявок (lowerAgeParam, upperAgeParam, lowerDateParam, upperDateParam, countriesParam, disciplinesParam)
+            if (countriesString == "*" || disciplinesString == "*")
+            {
+                if (countriesString == "*" && disciplinesString == "*")
+                {
+                    apps = _context.TeamApps.Where(app => app.AppDate >= lowerDate && app.AppDate <= upperDate).ToList();
+                }
+                else if (countriesString == "*")
+                {
+                    foreach (int discipline in disciplines)
+                    {
+                        apps.AddRange(_context.TeamApps.Where(app => app.AppDate >= lowerDate && app.AppDate <= upperDate && app.Teams.Users.FK_Discipline_Id == discipline).ToList());
+                    }
+                }
+                else
+                {
+                    foreach (int country in countries)
+                    {
+                        apps.AddRange(_context.TeamApps.Where(app => app.AppDate >= lowerDate && app.AppDate <= upperDate && app.Teams.Users.FK_Country_Id == country).ToList());
+                    }
+                }
+            }
+            else
+            {
+                foreach (int country in countries)
+                {
+                    foreach (int discipline in disciplines)
+                    {
+                        apps.AddRange(_context.TeamApps.Where(app => app.AppDate >= lowerDate && app.AppDate <= upperDate && app.Teams.Users.FK_Discipline_Id == discipline
+                        && app.Teams.Users.FK_Country_Id == country).ToList());
+                    }
+                }
+            }
+
+            // заполняем список заявок
+            List<TeamApplication> teamApps = new List<TeamApplication>();
+            foreach (TeamApps app in apps)
+            {
+                TeamApplication teamApp = new TeamApplication();
+                teamApp.Name = app.Teams.Name;
+                teamApp.DateOfFoundation = app.Teams.FoundationDate.ToString("d");
+
+                if (string.IsNullOrEmpty(app.Teams.LogoPath))
+                {
+                    teamApp.LogoURL = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\WithoutPhoto.png";
+                }
+                else
+                {
+                    teamApp.LogoURL = app.Teams.LogoPath;
+                }
+
+                teamApp.CountryName = app.Teams.Users.Countries.Name;
+
+                if (string.IsNullOrEmpty(app.Teams.Users.Countries.IconPath))
+                {
+                    teamApp.CountryURL = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\countrys - 24\_unknown.png";
+                }
+                else
+                {
+                    teamApp.CountryURL = app.Teams.Countries.IconPath;
+                }
+
+                teamApp.DisciplineName = app.Teams.Users.Disciplines.Name;
+                teamApp.Title = app.Title;
+                teamApp.Text = app.AppText;
+                teamApp.Date = app.AppDate.ToString("D");
+                teamApp.TeamId = app.Teams.Id.ToString();
+
+                teamApps.Add(teamApp);
+            }
+
+            applicationsLB.ItemsSource = teamApps;
+        }
+
+        private void ApplyFilterTournamentsButton_Click(object sender, RoutedEventArgs e)
+        {
+            // обновляем шаблон для заявок
+            templateSelector.Text = "TournamentsItemTemplate";
+
+            // очищаем текущий список
+            applicationsLB.ItemsSource = new List<string>();
+
+            // инициализируем переменные
+            DateTime lowerDate, upperDate;
+            int lowerPrize, upperPrize;
+            bool withFreePlace;
+            List<int> disciplines = new List<int>();
+
+            lowerDate = string.IsNullOrWhiteSpace(LowerDataPickerTournaments.Text) ? Convert.ToDateTime("01.01.2021") : Convert.ToDateTime(LowerDataPickerTournaments.Text.Trim());
+            upperDate = string.IsNullOrWhiteSpace(UpperDataPickerTournaments.Text) ? DateTime.Now : Convert.ToDateTime(UpperDataPickerTournaments.Text.Trim());
+            lowerPrize = string.IsNullOrWhiteSpace(LowerPrizeTournamentsTBox.Text) ? 0 : Convert.ToInt32(LowerPrizeTournamentsTBox.Text.Trim());
+            upperPrize = string.IsNullOrWhiteSpace(UpperPrizeTournamentsTBox.Text) ? 99999999 : Convert.ToInt32(UpperPrizeTournamentsTBox.Text.Trim());
+            withFreePlace = (bool)FreePlaceTournamentsCB.IsChecked;
+
+            foreach (Item item in DiciplineFilterTournamentsLB.Items)
+            {
+                if (item.IsSelected)
+                {
+                    disciplines.Add(item.ItemId);
+                }
+            }
+
+            string disciplinesString = disciplines.Count == 0 ? "*" : string.Join(",", disciplines);
+
+            // проверка на корректность введенных значений
+            if (DateTime.Compare(Convert.ToDateTime(lowerDate), Convert.ToDateTime(upperDate)) > 0)
+            {
+                MessageBox.Show("Некорректно введены даты!");
+                return;
+            }
+
+            // получаем список заявок
+            List<Tournaments> apps = new List<Tournaments>();
+            if (disciplinesString == "*")
+            {
+                if (withFreePlace)
+                {
+                    apps = _context.Tournaments.Where(app => app.DateStart >= lowerDate && app.DateStart <= upperDate && app.PrizeFond >= lowerPrize && app.PrizeFond <= upperPrize
+                    && app.MaxTeamsCount > _context.Matches.Where(m => m.FK_Tournament_Id == app.Id && m.RoundNum == 1).Count()).ToList();
+                }
+                else
+                {
+                    apps = _context.Tournaments.Where(app => app.DateStart >= lowerDate && app.DateStart <= upperDate && app.PrizeFond >= lowerPrize && app.PrizeFond <= upperPrize).ToList();
+                }
+            }
+            else
+            {
+                foreach (int discipline in disciplines)
+                {
+                    if (withFreePlace)
+                    {
+                        apps.AddRange(_context.Tournaments.Where(app => app.DateStart >= lowerDate && app.DateStart <= upperDate && app.PrizeFond >= lowerPrize && app.PrizeFond <= upperPrize
+                        && app.Users.FK_Discipline_Id == discipline && app.MaxTeamsCount > _context.Matches.Where(m => m.FK_Tournament_Id == app.Id && m.RoundNum == 1).Count()).ToList());
+                    }
+                    else
+                    {
+                        apps.AddRange(_context.Tournaments.Where(app => app.DateStart >= lowerDate && app.DateStart <= upperDate && app.PrizeFond >= lowerPrize && app.PrizeFond <= upperPrize
+                        && app.Users.FK_Discipline_Id == discipline).ToList());
+                    }
+                }
+            }
+
+            // заполняем список заявок
+            List<TournamentApplication> tournamentApps = new List<TournamentApplication>();
+            foreach (Tournaments app in apps)
+            {
+                TournamentApplication tournamentApp = new TournamentApplication();
+                tournamentApp.TournamentId = app.Id.ToString();
+                tournamentApp.Title = app.Name;
+                tournamentApp.Date = app.DateStart.ToString("d") + " - " + app.DateEnd.ToString("d");
+                tournamentApp.PrizeFond = app.PrizeFond.ToString();
+                tournamentApp.PhoneNumber = app.Users.PhoneNumber;
+                tournamentApp.Email = app.Users.Email;
+
+                if (string.IsNullOrEmpty(app.LogoPath))
+                {
+                    tournamentApp.LogoPath = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\WithoutPhoto.png";
+                }
+                else
+                {
+                    tournamentApp.LogoPath = app.LogoPath;
+                }
+                tournamentApp.Venue = app.Venue;
+
+                if (app.Users.Disciplines != null)
+                {
+                    tournamentApp.DisciplineName = app.Users.Disciplines.Name;
+                    tournamentApp.IconPath = app.Users.Disciplines.IconPath;
+                }
+
+                int teamCount = _context.Matches.Where(m => m.FK_Tournament_Id == app.Id && m.RoundNum == 1).Count() * 2;
+                tournamentApp.TeamCount = teamCount.ToString() + " / " + app.MaxTeamsCount.ToString();
+                tournamentApp.Format = app.TournamentFormats.Name;
+
+                if (withFreePlace)
+                {
+                    if (teamCount < app.MaxTeamsCount)
+                    {
+                        tournamentApps.Add(tournamentApp);
+                    }
+                }
+                else
+                {
+                    tournamentApps.Add(tournamentApp);
+                }
+            }
+
+            applicationsLB.ItemsSource = tournamentApps;
+        }
+
+        // AddAppBtns
+        private void PlayerAppAddBtn_Click(object sender, RoutedEventArgs e)
+        {
+            PlayerApplicationAddWindow wnd = new PlayerApplicationAddWindow();
+            wnd.ShowDialog();
+        }
+
+        private void TeamAppAddBtn_Click(object sender, RoutedEventArgs e)
+        {
+            TeamApplicationAddWindow wnd = new TeamApplicationAddWindow();
+            wnd.ShowDialog();
+        }
+
+        private void TeamAddBtn_Click(object sender, RoutedEventArgs e)
+        {
+            if (_context.TeamsUsers.Where(tu => tu.FK_User_Id == App.UserId && tu.DateEnd == null).Count() == 0)
+            {
+                CreateTeamWindow wnd = new CreateTeamWindow();
+                wnd.Show();
+                Close();
+            }
+            else
+            {
+                MessageBox.Show("У вас уже есть команда!");
+            }
+        }
+
+        private void TournamentAddBtn_Click(object sender, RoutedEventArgs e)
+        {
+            CreateTournamentWindow wnd = new CreateTournamentWindow();
+            wnd.ShowDialog();
+        }
+
+        // applicationsLB
+        private void applicationsLB_MouseDoubleClick(object sender, MouseButtonEventArgs e)
+        {
+            if (applicationsLB.SelectedItem != null)
+            {
+                if (applicationsLB.SelectedItem is PlayerApplication)
+                {
+                    PlayerApplication player = (PlayerApplication)applicationsLB.SelectedItem;
+                    MainWindow wnd = new MainWindow(Convert.ToInt32(player.PlayerId));
+                    wnd.Show();
+                }
+                else if (applicationsLB.SelectedItem is PlayerApplication)
+                {
+                    TeamApplication team = (TeamApplication)applicationsLB.SelectedItem;
+                    TeamProfileWindow wnd = new TeamProfileWindow(Convert.ToInt32(team.TeamId));
+                    wnd.Show();
+                }
+                else
+                {
+                    TournamentApplication tournament = (TournamentApplication)applicationsLB.SelectedItem;
+                    TournamentWindow wnd = new TournamentWindow(Convert.ToInt32(tournament.TournamentId));
+                    wnd.Show();
+                }
+                Close();
+            }
+        }
+
+        // Players filter expander
+        private void CountryExpanderPlayers_Expanded(object sender, RoutedEventArgs e)
+        {
+            CountryFilterExpanderRowPlayers.Height = new GridLength(2, GridUnitType.Star);
+            BuffExpanderRowPlayers.Height = new GridLength(0.2, GridUnitType.Star);
+            DiciplineExpanderPlayers.IsExpanded = false;
+        }
+
+        private void DiciplineExpanderPlayers_Expanded(object sender, RoutedEventArgs e)
+        {
+            DiciplineFilterExpanderRowPlayers.Height = new GridLength(2, GridUnitType.Star);
+            BuffExpanderRowPlayers.Height = new GridLength(0.2, GridUnitType.Star);
+            CountryExpanderPlayers.IsExpanded = false;
+        }
+
+        private void CountryExpanderPlayers_Collapsed(object sender, RoutedEventArgs e)
+        {
+            CountryFilterExpanderRowPlayers.Height = new GridLength(0.2, GridUnitType.Star);
+            BuffExpanderRowPlayers.Height = new GridLength(0.8, GridUnitType.Star);
+        }
+
+        private void DiciplineExpanderPlayers_Collapsed(object sender, RoutedEventArgs e)
+        {
+            DiciplineFilterExpanderRowPlayers.Height = new GridLength(0.2, GridUnitType.Star);
+            BuffExpanderRowPlayers.Height = new GridLength(0.8, GridUnitType.Star);
+        }
+
+        // Teams filter expander
+        private void CountryExpanderTeams_Expanded(object sender, RoutedEventArgs e)
+        {
+            CountryFilterExpanderRowTeams.Height = new GridLength(2, GridUnitType.Star);
+            BuffExpanderRowTeams.Height = new GridLength(0.2, GridUnitType.Star);
+            DiciplineExpanderTeams.IsExpanded = false;
+        }
+
+        private void DiciplineExpanderTeams_Expanded(object sender, RoutedEventArgs e)
+        {
+            DiciplineFilterExpanderRowTeams.Height = new GridLength(2, GridUnitType.Star);
+            BuffExpanderRowTeams.Height = new GridLength(0.2, GridUnitType.Star);
+            CountryExpanderTeams.IsExpanded = false;
+        }
+
+        private void CountryExpanderTeams_Collapsed(object sender, RoutedEventArgs e)
+        {
+            CountryFilterExpanderRowTeams.Height = new GridLength(0.2, GridUnitType.Star);
+            BuffExpanderRowTeams.Height = new GridLength(0.8, GridUnitType.Star);
+        }
+
+        private void DiciplineExpanderTeams_Collapsed(object sender, RoutedEventArgs e)
+        {
+            DiciplineFilterExpanderRowTeams.Height = new GridLength(0.2, GridUnitType.Star);
+            BuffExpanderRowTeams.Height = new GridLength(0.8, GridUnitType.Star);
+        }
+
+        // Tournaments filter expander
+        private void VenueExpanderTournaments_Expanded(object sender, RoutedEventArgs e)
+        {
+            VenueFilterExpanderRowTournaments.Height = new GridLength(2, GridUnitType.Star);
+            BuffExpanderRowTournaments.Height = new GridLength(0.1, GridUnitType.Star);
+            DiciplineExpanderTournaments.IsExpanded = false;
+        }
+
+        private void DiciplineExpanderTournaments_Expanded(object sender, RoutedEventArgs e)
+        {
+            DiciplineFilterExpanderRowTournaments.Height = new GridLength(2, GridUnitType.Star);
+            BuffExpanderRowTournaments.Height = new GridLength(0.1, GridUnitType.Star);
+            VenueExpanderTournaments.IsExpanded = false;
+        }
+
+        private void VenueExpanderTournaments_Collapsed(object sender, RoutedEventArgs e)
+        {
+            VenueFilterExpanderRowTournaments.Height = new GridLength(0.2, GridUnitType.Star);
+            BuffExpanderRowTournaments.Height = new GridLength(0.8, GridUnitType.Star);
+        }
+
+        private void DiciplineExpanderTournaments_Collapsed(object sender, RoutedEventArgs e)
+        {
+            DiciplineFilterExpanderRowTournaments.Height = new GridLength(0.2, GridUnitType.Star);
+            BuffExpanderRowTeams.Height = new GridLength(0.8, GridUnitType.Star);
+        }
+
+    }
+
+    // Класс, описывающий элементы для фильтрации (Страна, Дисциплина, Место проведения) (ListBox)
+    public class Item
+    {
+        public string ItemName { get; set;}
+        public bool IsSelected { get; set; }
+        public int ItemId { get; set; }
+    }
+
+    // Класс, описывающий заявку от игрока
+    public class PlayerApplication
+    {
+        public string Name { get; set; }
+        public string Nickname { get; set; }
+        public string Age { get; set; }
+        public string DisciplineName { get; set; }
+        public string PhotoURL { get; set; }
+        public string CountryName { get; set; }
+        public string CountryURL { get; set; }
+        public string PhoneNumber { get; set; }
+        public string Email { get; set; }
+        public string Title { get; set; }
+        public string Text { get; set; }
+        public string Date { get; set; }
+        public string PlayerId { get; set; }
+    }
+
+    // Класс, описывающий заявку от команды
+    public class TeamApplication
+    {
+        public string Name { get; set; }
+        public string DateOfFoundation { get; set; }
+        public string DisciplineName { get; set; }
+        public string LogoURL { get; set; }
+        public string CountryName { get; set; }
+        public string CountryURL { get; set; }
+        public string Title { get; set; }
+        public string Text { get; set; }
+        public string Date { get; set; }
+        public string TeamId { get; set; }
+    }
+
+    // Класс, описывающий заявку от команды
+    public class TournamentApplication
+    {
+        public string Name { get; set; }
+        public string Date { get; set; }
+        public string DisciplineName { get; set; }
+        public string IconPath { get; set; }
+        public string LogoPath { get; set; }
+        public string Venue { get; set; }
+        public string Email { get; set; }
+        public string PhoneNumber { get; set; }
+        public string PrizeFond { get; set; }
+        public string Format { get; set; }
+        public string TeamCount { get; set; }
+        public string Title { get; set; }
+        public string TournamentId { get; set; }
+    }
+}

+ 2 - 2
Курсовой проект 3.1/Authorization.xaml

@@ -5,7 +5,7 @@
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:local="clr-namespace:Курсовой_проект_3._1"
         mc:Ignorable="d"
-        Title="Authorization" Height="650" Width="600" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
+        Title="Авторизация" Height="650" Width="600" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
     <Window.Resources>
         <!-- TextBox style -->
         <Style TargetType="TextBox">
@@ -74,7 +74,7 @@
             </Setter>
         </Style>
 
-        <!-- Buttom style -->
+        <!-- Button style -->
         <Style TargetType="Button">
             <Setter Property="Template">
                 <Setter.Value>

+ 22 - 21
Курсовой проект 3.1/Authorization.xaml.cs

@@ -1,7 +1,9 @@
 using System.Windows;
 using System.Data;
-using System.Configuration;
 using System;
+using Курсовой_проект_3._1.Windows;
+using System.Linq;
+using System.Collections.Generic;
 
 namespace Курсовой_проект_3._1
 {
@@ -10,48 +12,47 @@ namespace Курсовой_проект_3._1
     /// </summary>
     public partial class Authorization : Window
     {
-        public int mainUserId;
-        SQL query;
+        MyTeamContext _context;
 
         public Authorization()
         {
             InitializeComponent();
-            TeamProfileWindow wnd = new TeamProfileWindow("1");
-            wnd.ShowDialog();
-            Close();
-
-            // получаем строку подключения из app.config
-            query = new SQL("DefaultConnection");
+            _context = new MyTeamContext();
         }
 
         private void LoginBtn_Click(object sender, RoutedEventArgs e)
         {
-            if (LoginTB.Text != "" || PasswordPB.Password != "")
+            if (Func.IsValidLogAndPass(LoginTB.Text, PasswordPB.Password))
             {
-                string login = "'" + LoginTB.Text + "'";
-                string password = "'" + PasswordPB.Password + "'";
-
-                DataTable dt = new DataTable();
-                dt = query.SendSelectQuery("SELECT * FROM Users WHERE Login = " + login + "AND Password = " + password);
-
-                if (dt.Rows.Count > 0)
+                List<Users> users;
+                try
                 {
-                    MessageBox.Show("Вход выполнен");
+                    users = _context.Users.Where(u => u.Login == LoginTB.Text && u.Password == PasswordPB.Password).ToList();
+                }
+                catch
+                {
+                    MessageBox.Show("Произошла непредвиденная ошибка!");
+                    return;
+                }
 
+                if (users.Count() == 1)
+                {
                     // переход в новое окно
-                    mainUserId = Convert.ToInt32(dt.Rows[0][0]);
-                    MainWindow wnd = new MainWindow(mainUserId);
+                    App.UserId = users[0].Id;
+                    ApplicationWindow wnd = new ApplicationWindow();
                     wnd.Show();
                     Close();
                 }
                 else
                 {
-                    MessageBox.Show("Такого пользователя не существует!");
+                    MessageBox.Show("Неверный логин или пароль!");
+                    return;
                 }
             }
             else
             {
                 MessageBox.Show("Поля логин и пароль должны быть заполнены!");
+                return;
             }
         }
 

+ 113 - 0
Курсовой проект 3.1/Windows/CreateTeamWindow.xaml

@@ -0,0 +1,113 @@
+<Window x:Class="Курсовой_проект_3._1.Windows.CreateTeamWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:uc="clr-namespace:Курсовой_проект_3._1.UserControls"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+        mc:Ignorable="d"
+        Title="Создание команды" Height="500" Width="550" MinHeight="500" MinWidth="550" WindowStartupLocation="CenterScreen">
+    <Window.Resources>
+        <!-- Buttom style -->
+        <Style TargetType="Button">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="5"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="WhiteSmoke" TargetName="ButtonBorder">
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </Window.Resources>
+
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition/>
+            <ColumnDefinition/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="0.6*"/>
+            <RowDefinition/>
+            <RowDefinition/>
+            <RowDefinition/>
+            <RowDefinition/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
+
+        <!-- Title -->
+        <TextBlock Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" Text="Создание команды" FontSize="18" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+
+        <!-- Team info -->
+        <StackPanel Grid.Column="0" Grid.Row="1" Orientation="Horizontal" Margin="5 0 0 0">
+            <TextBlock Text="Название: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="TeamNameTBox" MinWidth="170" Margin="10 30 10 30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" MaxLength="50" MaxLines="1"/>
+        </StackPanel>
+
+        <StackPanel Grid.Column="0" Grid.Row="2" Orientation="Horizontal" Margin="5 0 0 0">
+            <TextBlock Text="Номер телефона: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="PhoneNumberTBox" MinWidth="120" Margin="5 30 0 30" MaxLength="16" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
+        </StackPanel>
+
+        <StackPanel Grid.Column="0" Grid.Row="3" Orientation="Horizontal" Margin="5 0 0 0">
+            <TextBlock Text="Email: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="EmailTBox" MinWidth="205" Margin="5 30 0 30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" MaxLength="50" MaxLines="1"/>
+        </StackPanel>
+        
+        <!-- About uc -->
+        <uc:LimitedTextBlock x:Name="AboutTBox" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="4" Margin="5" Title="О команде:" TitleFontSize="16" MaxLength="255"/>
+
+        <!-- Logo -->
+        <Border Grid.Column="1" Grid.Row="1" Grid.RowSpan="2" BorderBrush="#FF68A4C8" BorderThickness="2" Margin="50 10 50 10">
+            <Image x:Name="LogoImg" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\WithoutPhoto.png" Margin="5"/>
+        </Border>
+        <Button x:Name="ChangeLogoBtn" Grid.Column="1" Grid.Row="3" Content="Выбрать логотип" FontSize="16" FontWeight="SemiBold" Margin="50 20 50 20" Click="ChangeLogoBtn_Click"/>
+
+        <!-- Create button -->
+        <Button x:Name="CreateBtn" Grid.Column="1" Grid.Row="6" Content="Создать" FontSize="18" FontWeight="SemiBold" Margin="20 15 20 15" Click="CreateBtn_Click"/>
+    </Grid>
+</Window>

+ 163 - 0
Курсовой проект 3.1/Windows/CreateTeamWindow.xaml.cs

@@ -0,0 +1,163 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Курсовой_проект_3._1.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для CreateTeamWindow.xaml
+    /// </summary>
+    public partial class CreateTeamWindow : Window
+    {
+        MyTeamContext _context;
+        bool isPhotoChanged;
+
+        public CreateTeamWindow()
+        {
+            InitializeComponent();
+            isPhotoChanged = false;
+            _context = new MyTeamContext();
+
+            PhoneNumberTBox.Text = "+" + _context.Users.Find(App.UserId).PhoneNumber;
+            EmailTBox.Text = _context.Users.Find(App.UserId).Email;
+        }
+
+        private void CreateBtn_Click(object sender, RoutedEventArgs e)
+        {
+            // инициализируем переменные
+            string teamName = TeamNameTBox.Text;
+            string email = EmailTBox.Text;
+            string phoneNumber = PhoneNumberTBox.Text.Trim('+');
+            string about = AboutTBox.txtLimitedInput.Text;
+
+            // проверка на заполнение всех полей
+            if (string.IsNullOrWhiteSpace(teamName))
+            {
+                MessageBox.Show("Название команды должно быть заполнено!");
+                return;
+            }
+
+            if (email != String.Empty)
+            {
+                if (!Func.IsValidEmail(email))
+                {
+                    MessageBox.Show("Некорректный Email!");
+                    return;
+                }
+            }
+
+            if (phoneNumber != String.Empty)
+            {
+                if (!Func.IsValidPhoneNumber(phoneNumber))
+                {
+                    MessageBox.Show("Некорректный номер телефона!");
+                    return;
+                }
+            }
+
+            // проверка на уникальность email
+            if (_context.Teams.Where(t => t.Email == email).ToList().Count() != 0)
+            {
+                MessageBox.Show("Email занят!");
+                return;
+            }
+
+            // проверка, на уникальность номера телефона
+            if (_context.Teams.Where(t => t.PhoneNumber == phoneNumber).ToList().Count() != 0)
+            {
+                MessageBox.Show("Номер телефона занят!");
+                return;
+            }
+
+            // проверка, есть ли команда с таким названием
+            if (_context.Teams.Where(t => t.Name == teamName).ToList().Count() != 0)
+            {
+                MessageBox.Show("Команда с таким названием уже существует!");
+                return;
+            }
+
+            // создаем новый объект Teams
+            Teams team = new Teams();
+            team.Name = teamName;
+            team.FoundationDate = DateTime.Now;
+            team.FK_Creater_Id = App.UserId;
+            team.FK_Country_Id = _context.Users.Find(App.UserId).Countries.Id;
+            
+            if (!string.IsNullOrWhiteSpace(email))
+            {
+                team.Email = email;
+            }
+
+            if (!string.IsNullOrWhiteSpace(phoneNumber))
+            {
+                team.PhoneNumber = phoneNumber;
+            }
+
+            if (!string.IsNullOrWhiteSpace(about))
+            {
+                team.About = about;
+            }
+
+            if (isPhotoChanged)
+            {
+                team.LogoPath = LogoImg.Source.ToString();
+            }
+
+            // создаем новый объект TeamsUsers
+            TeamsUsers teamUser = new TeamsUsers();
+            teamUser.FK_Team_Id = team.Id;
+            teamUser.FK_User_Id = App.UserId;
+            teamUser.DateStart = DateTime.Now;
+
+            _context.Teams.Add(team);
+            _context.TeamsUsers.Add(teamUser);
+            _context.SaveChanges();
+
+            TeamProfileWindow tWnd = new TeamProfileWindow(team.Id);
+            tWnd.Show();
+
+            foreach (var wnd in Application.Current.Windows)
+            {
+                if (wnd is ApplicationWindow)
+                {
+                    ApplicationWindow appWnd = (ApplicationWindow)wnd;
+                    appWnd.Close();
+                }
+            }
+
+            Close();
+        }
+
+        private void ChangeLogoBtn_Click(object sender, RoutedEventArgs e)
+        {
+            // Создаем OpenFileDialog 
+            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
+
+            // Устанавливаем фильтры и стандартное расширение файла
+            dlg.DefaultExt = ".png";
+            dlg.Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif";
+
+            // Отображаем OpenFileDialog
+            Nullable<bool> result = dlg.ShowDialog();
+
+            // Получаем и устанавливаем новое изображение 
+            if (result == true)
+            {
+                // Open document 
+                string filename = dlg.FileName;
+                LogoImg.Source = new BitmapImage(new Uri(filename));
+                isPhotoChanged = true;
+            }
+        }
+    }
+}

+ 153 - 0
Курсовой проект 3.1/Windows/CreateTournamentWindow.xaml

@@ -0,0 +1,153 @@
+<Window x:Class="Курсовой_проект_3._1.Windows.CreateTournamentWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+        mc:Ignorable="d"
+        Title="Создание турнира" Height="600" Width="550" MinHeight="600" MinWidth="550" WindowStartupLocation="CenterScreen">
+    <Window.Resources>
+        <!-- Buttom style -->
+        <Style TargetType="Button">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="5"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="WhiteSmoke" TargetName="ButtonBorder">
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </Window.Resources>
+    
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition/>
+            <ColumnDefinition/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="0.6*"/>
+            <RowDefinition/>
+            <RowDefinition/>
+            <RowDefinition/>
+            <RowDefinition/>
+            <RowDefinition/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
+        
+        <!-- Title -->
+        <TextBlock Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" Text="Создание турнира" FontSize="18" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        
+        <!-- Tournament info -->
+        <StackPanel Grid.Column="0" Grid.Row="1" Orientation="Horizontal" Margin="5 0 0 0">
+            <TextBlock Text="Название: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="TournamentNameTBox" MinWidth="170" Margin="10 30 10 30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" MaxLength="50" MaxLines="1"/>
+        </StackPanel>
+
+        <StackPanel Grid.Column="0" Grid.Row="2" Orientation="Horizontal" Margin="5 0 0 0">
+            <TextBlock Text="Призовой фонд: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="PrizeFondTBox" MinWidth="120" Margin="5 30 0 30" MaxLength="8" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
+            <TextBlock Text=" $" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        </StackPanel>
+
+        <StackPanel Grid.Column="0" Grid.Row="3" Orientation="Horizontal" Margin="5 0 0 0">
+            <TextBlock Text="Количество команд: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <ComboBox x:Name="TeamCountCB" MinWidth="95" Margin="10 30 10 30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center">
+                <ComboBoxItem>
+                    <TextBlock Text="2"/>
+                </ComboBoxItem>
+                <ComboBoxItem>
+                    <TextBlock Text="4"/>
+                </ComboBoxItem>
+                <ComboBoxItem>
+                    <TextBlock Text="8"/>
+                </ComboBoxItem>
+                <ComboBoxItem>
+                    <TextBlock Text="16"/>
+                </ComboBoxItem>
+                <ComboBoxItem>
+                    <TextBlock Text="32"/>
+                </ComboBoxItem>
+                <ComboBoxItem>
+                    <TextBlock Text="64"/>
+                </ComboBoxItem>
+                <ComboBoxItem>
+                    <TextBlock Text="128"/>
+                </ComboBoxItem>
+            </ComboBox>
+        </StackPanel>
+
+        <StackPanel Grid.Column="0" Grid.Row="4" Orientation="Horizontal" Margin="5 0 0 0">
+            <TextBlock Text="Место проведения: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="VenueTBox" MinWidth="105" Margin="5 30 0 30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" MaxLength="30" MaxLines="1"/>
+        </StackPanel>
+
+        <StackPanel Grid.Column="0" Grid.Row="5" Orientation="Horizontal" Margin="5 0 0 0">
+            <TextBlock Text="Формат: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBlock Text="Single Elimination" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        </StackPanel>
+
+        <StackPanel Grid.Column="1" Grid.Row="4" Orientation="Horizontal" Margin="20 0 0 0">
+            <TextBlock Text="Дата начала: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <DatePicker x:Name="DateOfStartDP" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        </StackPanel>
+
+        <StackPanel Grid.Column="1" Grid.Row="5" Orientation="Horizontal" Margin="20 0 0 0">
+            <TextBlock Text="Дата окончания: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <DatePicker x:Name="DateOfEndDP" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        </StackPanel>
+
+        <!-- Logo -->
+        <Border Grid.Column="1" Grid.Row="1" Grid.RowSpan="2" BorderBrush="#FF68A4C8" BorderThickness="2" Margin="50 10 50 10">
+            <Image x:Name="LogoImg" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\WithoutPhoto.png" Margin="5"/>
+        </Border>
+        <Button x:Name="ChangeLogoBtn" Grid.Column="1" Grid.Row="3" Content="Выбрать логотип" FontSize="16" FontWeight="SemiBold" Margin="50 20 50 20" Click="ChangeLogoBtn_Click"/>
+
+        <!-- Create button -->
+        <Button x:Name="CreateBtn" Grid.Column="1" Grid.Row="6" Content="Создать" FontSize="18" FontWeight="SemiBold" Margin="20 15 20 15" Click="CreateBtn_Click"/>
+    </Grid>
+</Window>

+ 121 - 0
Курсовой проект 3.1/Windows/CreateTournamentWindow.xaml.cs

@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Курсовой_проект_3._1.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для CreateTournamentWindow.xaml
+    /// </summary>
+    public partial class CreateTournamentWindow : Window
+    {
+        MyTeamContext _context;
+
+        public CreateTournamentWindow()
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+        }
+
+        private void CreateBtn_Click(object sender, RoutedEventArgs e)
+        {
+            // проверка, есть ли ещё незаконченные турниры от этого пользователя
+            if (_context.Tournaments.Where(t => t.FK_Organizer_Id == App.UserId).ToList().Count() != 0)
+            {
+                MessageBox.Show("У вас ещё есть незаконченные турниры!");
+                return;
+            }
+
+            // инициализируем переменные
+            string tournamentName = TournamentNameTBox.Text;
+            string prizeFondstr = PrizeFondTBox.Text.Trim();
+            string teamsCountstr = TeamCountCB.Text.Trim();
+            string venue = VenueTBox.Text;
+            string dataStart = DateOfStartDP.Text;
+            string dataEnd = DateOfEndDP.Text;
+
+
+            // проверка на заполнение всех полей
+            if (string.IsNullOrWhiteSpace(tournamentName) || !Func.IsOnlyDigitString(prizeFondstr) || !Func.IsOnlyDigitString(teamsCountstr)
+                || string.IsNullOrWhiteSpace(venue) || string.IsNullOrWhiteSpace(dataStart) || string.IsNullOrWhiteSpace(dataEnd))
+            {
+                MessageBox.Show("Все поля должны быть заполнены!");
+                return;
+            }
+
+            int prizeFond = Convert.ToInt32(prizeFondstr);
+            int teamsCount = Convert.ToInt32(teamsCountstr);
+
+            // проверка, есть ли турниры с таким названием
+            if (_context.Tournaments.Where(t => t.Name == tournamentName).ToList().Count() != 0)
+            {
+                MessageBox.Show("У вас ещё есть незаконченные турниры!");
+                return;
+            }
+
+            // создаем новый объект Tournaments
+            Tournaments tournament = new Tournaments();
+            tournament.Name = tournamentName;
+            tournament.PrizeFond = prizeFond;
+            tournament.MaxTeamsCount = teamsCount;
+            tournament.DateStart = Convert.ToDateTime(dataStart);
+            tournament.DateEnd = Convert.ToDateTime(dataEnd);
+            tournament.Venue = venue;
+            tournament.FK_Organizer_Id = App.UserId;
+            tournament.FK_Format_Id = 1;
+
+            tournament.LogoPath = LogoImg.Source.ToString();
+
+            _context.Tournaments.Add(tournament);
+            _context.SaveChanges();
+
+            int tournamentId = _context.Tournaments.Where(t => t.Name == tournamentName).Select(t => t.Id).Single();
+
+            TournamentWindow tWnd = new TournamentWindow(tournamentId);
+            tWnd.Show();
+
+            foreach (var wnd in Application.Current.Windows)
+            {
+                if (wnd is ApplicationWindow)
+                {
+                    ApplicationWindow appWnd = (ApplicationWindow)wnd;
+                    appWnd.Close();
+                    break;
+                }
+            }
+
+            Close();
+        }
+
+        private void ChangeLogoBtn_Click(object sender, RoutedEventArgs e)
+        {
+            // Создаем OpenFileDialog 
+            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
+
+            // Устанавливаем фильтры и стандартное расширение файла
+            dlg.DefaultExt = ".png";
+            dlg.Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif";
+
+            // Отображаем OpenFileDialog
+            Nullable<bool> result = dlg.ShowDialog();
+
+            // Получаем и устанавливаем новое изображение 
+            if (result == true)
+            {
+                // Open document 
+                string filename = dlg.FileName;
+                LogoImg.Source = new BitmapImage(new Uri(filename));
+            }
+        }
+    }
+}

+ 43 - 15
Курсовой проект 3.1/MainWindow.xaml

@@ -37,7 +37,25 @@
         </Grid.ColumnDefinitions>
 
         <!-- Navigation -->
-        <StackPanel x:Name="NavigationStackPanel" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Background="#FF68A4C8"/>
+        <Grid  Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Background="#68A4C8">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition/>
+                <ColumnDefinition/>
+                <ColumnDefinition/>
+            </Grid.ColumnDefinitions>
+
+            <Border Grid.Column="0" BorderBrush="Black" BorderThickness="0 0 1 0">
+                <Button x:Name="ToMainBtn" Background="#68A4C8" Content="Главная" Foreground="White" FontSize="18" FontWeight="SemiBold" Style="{StaticResource NavigationBtnTemplate}" Click="ToMainBtn_Click"/>
+            </Border>
+
+            <Border Grid.Column="1" BorderBrush="Black" BorderThickness="0 0 1 0">
+                <Button x:Name="ToSearchBtn" Background="#68A4C8" Content="Поиск" Foreground="White" FontSize="18" FontWeight="SemiBold" Style="{StaticResource NavigationBtnTemplate}" Click="ToSearchBtn_Click"/>
+            </Border>
+
+            <Border Grid.Column="2">
+                <Button x:Name="ToProfileBtn" Background="#68A4C8" Content="Профиль" Foreground="White" FontSize="18" FontWeight="SemiBold" Style="{StaticResource NavigationBtnTemplate}" Click="ToProfileBtn_Click"/>
+            </Border>
+        </Grid>
         
         <!-- BackStep -->
         <StackPanel x:Name="BackStepStackPanel" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Background="#81AEC8"/>
@@ -48,7 +66,7 @@
             <StackPanel>
                 <DockPanel x:Name="ProfileDockPanel" MinHeight="300" MaxHeight="400">
                     <!-- ABOUT BLOCK -->
-                    <Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" ShowGridLines="True">
+                    <Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" ShowGridLines="False">
                         <Grid.ColumnDefinitions>
                             <ColumnDefinition></ColumnDefinition>
                             <ColumnDefinition></ColumnDefinition>
@@ -67,6 +85,7 @@
                             </Grid.ColumnDefinitions>
 
                             <!-- UserPhoto -->
+                            <Border Grid.Row="0" Grid.RowSpan="3" BorderBrush="#81AEC8" BorderThickness="0 0 2 0"/>
                             <Grid Grid.Row="0" Grid.Column="0">
                                 <Grid.ColumnDefinitions>
                                     <ColumnDefinition></ColumnDefinition>
@@ -93,9 +112,9 @@
                                         <ColumnDefinition></ColumnDefinition>
                                     </Grid.ColumnDefinitions>
 
-                                    <Image x:Name="FirstCupImg" Grid.Column="0" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\Cup.png"/>
-                                    <Viewbox Grid.Column="1" Stretch="Uniform">
-                                        <TextBlock x:Name="FirstPlaceCountTB" Text=":07"></TextBlock>
+                                    <Image x:Name="FirstCupImg" Grid.Column="0" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\Default\cupGold.png" MaxHeight="40"/>
+                                    <Viewbox Grid.Column="1" Stretch="Uniform" Margin="5">
+                                        <TextBlock x:Name="FirstPlaceCountTB" Text=":00"/>
                                     </Viewbox>
 
                                 </Grid>
@@ -107,9 +126,9 @@
                                         <ColumnDefinition></ColumnDefinition>
                                     </Grid.ColumnDefinitions>
 
-                                    <Image x:Name="SecondCupImg"  Margin="1 1 1 1" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\Cup.png"/>
-                                    <Viewbox Grid.Column="1" Stretch="Uniform">
-                                        <TextBlock x:Name="SecondPlaceCountTB" Text=":03"></TextBlock>
+                                    <Image x:Name="SecondCupImg"  Margin="1 1 1 1" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\Default\cupSilver.png" MaxHeight="40"/>
+                                    <Viewbox Grid.Column="1" Stretch="Uniform" Margin="5">
+                                        <TextBlock x:Name="SecondPlaceCountTB" Text=":00"/>
                                     </Viewbox>
                                 </Grid>
 
@@ -120,17 +139,17 @@
                                         <ColumnDefinition></ColumnDefinition>
                                     </Grid.ColumnDefinitions>
 
-                                    <Image x:Name="ThirdCupImg"  Margin="1 1 1 1" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\Cup.png"/>
-                                    <Viewbox Grid.Column="1" Stretch="Uniform">
-                                        <TextBlock x:Name="ThirdPlaceCountTB" Text=":12"></TextBlock>
+                                    <Image x:Name="ThirdCupImg"  Margin="1 1 1 1" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\Default\cupBronze.png" MaxHeight="40"/>
+                                    <Viewbox Grid.Column="1" Stretch="Uniform" Margin="5">
+                                        <TextBlock x:Name="ThirdPlaceCountTB" Text=":00"></TextBlock>
                                     </Viewbox>
                                 </Grid>
                             </Grid> <!-- Cup -->
 
 
                             <!-- Money -->
-                            <Viewbox Grid.Row="2" Stretch="Uniform" Margin="5">
-                                <TextBlock x:Name="PriceMoneyTB" Text="Призовые: 574 000$" FontSize="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></TextBlock>
+                            <Viewbox Grid.Row="2" Stretch="Uniform" Margin="10">
+                                <TextBlock x:Name="PriceMoneyTB" Text="Призовые: 000 000$" FontSize="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></TextBlock>
                             </Viewbox> <!-- Money -->
                         </Grid> <!-- UserPhoto, Cups, Money -->
                         
@@ -153,10 +172,19 @@
                                     <ColumnDefinition Width="*"/>
                                 </Grid.ColumnDefinitions>
 
-                                <Image Grid.Column="0" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\DotaIcon.png" Margin="5 10 5 10"/>
+                                <Image x:Name="DisciplineIconImg" Grid.Column="0" Margin="5 10 5 10"/>
                                 <Viewbox Grid.Column="1" Stretch="Uniform" HorizontalAlignment="Left" Margin="5 10 0 10">
-                                    <TextBlock x:Name="NicknameTB" Text=""></TextBlock>
+                                    <StackPanel Orientation="Horizontal">
+                                        <TextBlock x:Name="NicknameTB"/>
+                                        <TextBlock x:Name="TeamTBlock" Margin="5 0 0 0" Cursor="Hand" FontSize="11" Foreground="CadetBlue" MouseDown="TeamTBlock_MouseDown"/>
+                                    </StackPanel>
                                 </Viewbox>
+
+                                <Button x:Name="SettingsBtn" Grid.Column="2" HorizontalAlignment="Right" Margin="0 10 10 10" MinWidth="40" MinHeight="40" MaxWidth="40" MaxHeight="40" Visibility="Collapsed" Style="{DynamicResource SettingBtnStyle}" Click="SettingsBtn_Click">
+                                    <Button.Background>
+                                        <ImageBrush ImageSource="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\Default\settings.png"/>
+                                    </Button.Background>
+                                </Button>
                             </Grid>
                             
                             <!-- RealName -->

+ 368 - 0
Курсовой проект 3.1/Windows/MainWindow.xaml.cs

@@ -0,0 +1,368 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Globalization;
+using System.Linq;
+using System.Windows;
+using System.Windows.Data;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using Курсовой_проект_3._1.Windows;
+
+namespace Курсовой_проект_3._1
+{
+    /// <summary>
+    /// Логика взаимодействия для MainWindow.xaml
+    /// </summary>
+    public partial class MainWindow : Window
+    {
+        int nowUserId; // id открытого профиля
+        MyTeamContext _context;
+
+        // TeamsGrid
+        List<PartInTeams> teams = new List<PartInTeams>(5);
+
+        // MatchesGrid
+        List<Match> matches = new List<Match>(5);
+
+        public MainWindow(int userId)
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            nowUserId = userId;
+            int? nowTeamId = _context.TeamsUsers.Where(tuIn => tuIn.FK_User_Id == nowUserId && tuIn.DateEnd == null).Select(tuIn => tuIn.FK_Team_Id).FirstOrDefault();
+
+            // адаптация к размеру окна
+            SizeChanged += MainWindow_SizeChanged;
+
+            // Доступность кнопки настроек
+            if (nowUserId == App.UserId)
+            {
+                SettingsBtn.Visibility = Visibility.Visible;
+            }
+
+            // Подгрузка краткой информации
+            Users user = _context.Users.Find(nowUserId);
+
+            RealNameTB.Text += $"{user.LName} {user.FName} {user.MName}";
+            NicknameTB.Text += user.Nickname;
+            BirthDateTB.Text += user.Birthday.ToString("D") + " (" + Func.CalculateAge(user.Birthday).ToString() + " лет)";
+
+            if (user.Countries != null)
+            {
+                CountryTB.Text += user.Countries.Name;
+            }
+
+            PhoneNumberTB.Text += "+" + user.PhoneNumber;
+            EmailTB.Text += user.Email;
+
+            if (user.About != null)
+            {
+                AboutMeTB.Text += user.About;
+            }
+
+            if (user.PhotoPath != null)
+            {
+                UserPhotoImg.Source = new BitmapImage(new Uri(user.PhotoPath));
+            }
+
+            if (user.Disciplines != null)
+            {
+                DisciplineIconImg.Source = new BitmapImage(new Uri(user.Disciplines.IconPath));
+            }
+            else
+            {
+                DisciplineIconImg.Source = new BitmapImage(new Uri(@"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\Default\discipline.png"));
+            }
+
+            // Подгрузка кубков и призовых
+            if (nowTeamId != 0)
+            {
+                TeamTBlock.Text = "(" +_context.Teams.Find(nowTeamId).Name + ")";
+
+                int teamMembersCount = _context.TeamsUsers.Where(tu => tu.FK_Team_Id == nowTeamId && tu.DateEnd == null).Count();
+                decimal teamPrize = 0;
+                if (_context.Achievements.Where(a => a.FK_Team_Id == nowTeamId).Select(a => a.Prize).Count() != 0)
+                    teamPrize = _context.Achievements.Where(a => a.FK_Team_Id == nowTeamId).Select(a => a.Prize).Sum();
+
+                PriceMoneyTB.Text = "Призовые: " + Convert.ToString(teamPrize / teamMembersCount) + "$";
+
+                List<int> teamIds = Func.GetTeamIds(nowUserId);
+                int frstCupCount = 0;
+                int scndCupCount = 0;
+                int thrdCupCount = 0;
+
+                foreach(int teamId in teamIds)
+                {
+                    // Получаем даты нахождения в команде
+                    var param = _context.TeamsUsers.Where(p => p.FK_User_Id == userId && p.FK_Team_Id == teamId).Select(p => new
+                    {
+                        DateStart = p.DateStart,
+                        DateEnd = p.DateEnd
+                    }).ToList();
+
+                    DateTime dateStart = param[0].DateStart;
+                    DateTime? dateEnd = param[0].DateEnd;
+
+                    if (dateEnd == null)
+                    {
+                        dateEnd = Convert.ToDateTime("01/01/2099");
+                    }
+
+                    frstCupCount += _context.Achievements.Where(a => a.Place == "1" && a.FK_Team_Id == teamId && a.Tournaments.DateEnd >= dateStart && a.Tournaments.DateEnd >= dateEnd).Count();
+                    scndCupCount += _context.Achievements.Where(a => a.Place == "2" && a.FK_Team_Id == teamId && a.Tournaments.DateEnd >= dateStart && a.Tournaments.DateEnd >= dateEnd).Count();
+                    thrdCupCount += _context.Achievements.Where(a => a.Place == "3" && a.FK_Team_Id == teamId && a.Tournaments.DateEnd >= dateStart && a.Tournaments.DateEnd >= dateEnd).Count();
+                }
+                
+                FirstPlaceCountTB.Text = ":" + Convert.ToString(frstCupCount);
+                SecondPlaceCountTB.Text = ":" + Convert.ToString(scndCupCount);
+                ThirdPlaceCountTB.Text = ":" + Convert.ToString(thrdCupCount);
+            }
+
+            // Подгрузка статистики
+            var (winCount, drawCount, loseCount) = Func.GetWinDrawLoseCountUser(nowUserId);
+            int gamesCount = winCount + drawCount + loseCount;
+            if (gamesCount != 0)
+            {
+                LineBarWin.Width = new GridLength(winCount * 100 / gamesCount, GridUnitType.Star);
+                LineBarDraw.Width = new GridLength(drawCount * 100 / gamesCount, GridUnitType.Star);
+                LineBarLose.Width = new GridLength(loseCount * 100 / gamesCount, GridUnitType.Star);
+
+                WinCountTB.Text = winCount.ToString() + " побед";
+                DrawCountTB.Text = drawCount.ToString() + " ничьих";
+                LoseCountTB.Text = loseCount.ToString() + " поражений";
+
+                WinPercentTB.Text = Math.Round(Convert.ToDouble(winCount) * 100.0 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
+                DrawPercentTB.Text = Math.Round(Convert.ToDouble(drawCount) * 100 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
+                LosePercentTB.Text = Math.Round(Convert.ToDouble(loseCount) * 100 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
+            }
+            
+            // Подгрузка команд
+            foreach (int teamId in Func.GetTeamIds(userId))
+            {
+                teams.Add(GetPartInTeams(userId, teamId));
+            }
+            
+            List<PartInTeams> subTeamsList = new List<PartInTeams>(5);
+            if (teams.Count < 5)
+            {
+                TeamsGrid.ItemsSource = teams;
+            }
+            else
+            {
+                for (int i = 0; i < 5; i++)
+                {
+                    subTeamsList.Add(teams[i]);
+                }
+
+                TeamsGrid.ItemsSource = subTeamsList;
+            }
+
+
+            // Подгрузка матчей
+            foreach (Matches match in Func.GetAllMatchesUser(userId))
+            {
+                matches.Add(GetMatch(match));
+            }
+
+            List<Match> subMatchList = new List<Match>();
+            if (matches.Count < 5)
+            {
+                MatchesGrid.ItemsSource = matches;
+            }
+            else
+            {
+                for (int i = 0; i < 5; i++)
+                {
+                    subMatchList.Add(matches[i]);
+                }
+
+                MatchesGrid.ItemsSource = subMatchList;
+            }
+        }
+
+        private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
+        {
+            ProfileDockPanel.MinHeight = MyWindow.Height * 4 / 10;
+            ProfileDockPanel.MaxHeight = ProfileDockPanel.MinHeight + 100;
+        }
+
+        private void MoreGamesButton_Click(object sender, RoutedEventArgs e)
+        {
+            if (matches.Count - MatchesGrid.Items.Count != 0)
+            {
+                List<Match> subMatchList = new List<Match>();
+
+                for (int i = 0; i <= matches.Count - MatchesGrid.Items.Count; i++)
+                {
+                    subMatchList.Add(matches[matches.Count + i]);
+                }
+
+                List<Match> newMatch = new List<Match>();
+                newMatch.AddRange((List<Match>)MatchesGrid.ItemsSource);
+                newMatch.AddRange(subMatchList);
+
+                MatchesGrid.ItemsSource = new List<byte>();
+                MatchesGrid.ItemsSource = newMatch;
+            }
+            else
+            {
+                MessageBox.Show("Больше матчей нет");
+                return;
+            }
+        }
+
+        private void MoreTeamsBtn_Click(object sender, RoutedEventArgs e)
+        {
+            if (teams.Count - TeamsGrid.Items.Count != 0)
+            {
+                List<PartInTeams> subTeamsList = new List<PartInTeams>();
+
+                for (int i = 0; i <= teams.Count - TeamsGrid.Items.Count; i++)
+                {
+                    subTeamsList.Add(teams[teams.Count + i]);
+                }
+
+                List<PartInTeams> newTeam = new List<PartInTeams>();
+                newTeam.AddRange((List<PartInTeams>)TeamsGrid.ItemsSource);
+                newTeam.AddRange(subTeamsList);
+
+                TeamsGrid.ItemsSource = new List<byte>();
+                TeamsGrid.ItemsSource = newTeam;
+            }
+            else
+            {
+                MessageBox.Show("Больше команд нет");
+                return;
+            }
+        }
+
+        private void SettingsBtn_Click(object sender, RoutedEventArgs e)
+        {
+            PlayerProfileSettingsWindow wnd = new PlayerProfileSettingsWindow();
+            wnd.ShowDialog();
+        }
+
+        private void ToMainBtn_Click(object sender, RoutedEventArgs e)
+        {
+            ApplicationWindow wnd = new ApplicationWindow();
+            wnd.Show();
+            Close();
+        }
+
+        private void ToSearchBtn_Click(object sender, RoutedEventArgs e)
+        {
+            SearchWindow wnd = new SearchWindow();
+            wnd.ShowDialog();
+        }
+
+        private void ToProfileBtn_Click(object sender, RoutedEventArgs e)
+        {
+            MainWindow wnd = new MainWindow(App.UserId);
+            wnd.Show();
+            Close();
+        }
+
+        private void TeamTBlock_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
+        {
+            TeamProfileWindow wnd = new TeamProfileWindow(_context.TeamsUsers.Where(tu => tu.FK_User_Id == nowUserId && tu.DateEnd == null).Select(tu => tu.FK_Team_Id).Single());
+            wnd.Show();
+            Close();
+        }
+
+        // ОБЪЕКТЫ ///
+        // Возвращает объект класса PartInTeams
+        private PartInTeams GetPartInTeams(int userId, int teamId)
+        {
+            // Получаем даты нахождения в команде
+            var param = _context.TeamsUsers.Where(p => p.FK_User_Id == userId && p.FK_Team_Id == teamId).Select(p => new
+            {
+                DateStart = p.DateStart,
+                DateEnd = p.DateEnd
+            }).ToList();
+
+            DateTime dateStart = param[0].DateStart;
+            DateTime? dateEnd = param[0].DateEnd;
+
+            // Создаем объект
+            PartInTeams player = new PartInTeams();
+            player.TeamName = Func.GetTeamName(teamId);
+            player.DateOfStart = dateStart.ToString("d");
+            player.DateOfEnd = dateEnd == null ? "наст. время" : Convert.ToDateTime(dateEnd).ToString("d");
+
+
+            int winCount, drawCount, loseCount;
+            (winCount, drawCount, loseCount) = Func.GetWinDrawLoseCountUserInOneTeam(userId, teamId);
+            player.Stat = winCount.ToString() + " побед, " + drawCount.ToString() + " ничьих, " + loseCount.ToString() + " поражений";
+
+            return player;
+        }
+
+        // Возвращает объект класса Match
+        private Match GetMatch(Matches oldMatch)
+        {
+            Match match = new Match();
+            match.FrstTeamName = Func.GetTeamName(oldMatch.FK_FrstTeam_Id);
+            match.ScndTeamName = Func.GetTeamName(oldMatch.FK_ScndTeam_Id);
+            match.Scores = oldMatch.FrstScore + " : " + oldMatch.ScndScore;
+            match.Tournament = Func.GetTournamentName(oldMatch.FK_Tournament_Id);
+            match.GameDate = oldMatch.GameDate.ToString("D");
+            
+            if (oldMatch.FK_WinnerTeam_Id != 1)
+            {
+                if (oldMatch.FK_WinnerTeam_Id == oldMatch.FK_FrstTeam_Id)
+                {
+                    match.WinTeam = match.FrstTeamName;
+                }
+                else
+                {
+                    match.WinTeam = match.ScndTeamName;
+                }
+            }
+
+            return match;
+        }
+    }  // class MainWindow
+
+
+    public class MyConverter : IMultiValueConverter
+    {
+        public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
+        {
+            string team = value[0] as string;
+            string winTeam = value[1] as string;
+
+            if (team == winTeam)
+            {
+                return Brushes.LightGreen;
+            }
+            else
+            {
+                return DependencyProperty.UnsetValue;
+            }
+        }
+
+        public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
+        {
+            throw new NotSupportedException();
+        }
+    }
+
+    public class PartInTeams
+    {
+        public string TeamName { get; set; }
+        public string Stat { get; set; }
+        public string DateOfStart { get; set; }
+        public string DateOfEnd { get; set; }
+    }
+
+    public class Match
+    {
+        public string FrstTeamName { get; set; }
+        public string ScndTeamName { get; set; }
+        public string Scores { get; set; }
+        public string GameDate { get; set; }
+        public string Tournament { get; set; }
+        public string WinTeam { get; set; }
+    }
+}  // namespace

+ 119 - 0
Курсовой проект 3.1/Windows/MatchWindow.xaml

@@ -0,0 +1,119 @@
+<Window x:Class="Курсовой_проект_3._1.Windows.MatchWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+        mc:Ignorable="d"
+        Title="MatchWindow" Height="300" Width="450" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
+    <Window.Resources>
+        <!-- Buttom style -->
+        <Style TargetType="Button">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="8"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="WhiteSmoke" TargetName="ButtonBorder">
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </Window.Resources>
+    
+    <Grid Background="White" Margin="5 0 0 0">
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="6*"/>
+            <ColumnDefinition/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition/>
+            <RowDefinition/>
+            <RowDefinition/>
+            <RowDefinition/>
+        </Grid.RowDefinitions>
+
+        <TextBlock Grid.Column="0" Grid.Row="0" Text="Победитель не определен" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18"/>
+        <RadioButton x:Name="NoneTeamRB" GroupName="Winner" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="True"/>
+
+        <!-- Frst -->
+        <Border Grid.Column="0" Grid.Row="1" BorderBrush="Black" BorderThickness="2 2 2 1" Background="White" PreviewMouseDown="TeamTBlock_MouseDown">
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="3*"/>
+                    <ColumnDefinition/>
+                </Grid.ColumnDefinitions>
+
+                <TextBlock x:Name="FrstTeamTBlock" Grid.Column="0" Text="Команда 1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18" Cursor="Hand"/>
+
+                <Border Grid.Column="1" BorderBrush="Black" BorderThickness="2 0 0 0">
+                    <TextBox x:Name="FrstTeamScoreTBox" Grid.Column="1" Grid.Row="1" Text="0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="18" MaxLength="2"/>
+                </Border>
+            </Grid>
+        </Border>
+        <RadioButton x:Name="FrstTeamRB" GroupName="Winner" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+
+        <!-- Scnd -->
+        <Border Grid.Column="0" Grid.Row="2" BorderBrush="Black" BorderThickness="2 1 2 2" Background="White" PreviewMouseDown="TeamTBlock_MouseDown">
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="3*"/>
+                    <ColumnDefinition/>
+                </Grid.ColumnDefinitions>
+
+                <TextBlock x:Name="ScndTeamTBlock" Grid.Column="0" Text="Команда 2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18" Cursor="Hand"/>
+
+                <Border Grid.Column="1" BorderBrush="Black" BorderThickness="2 0 0 0">
+                    <TextBox x:Name="ScndTeamScoreTBox" Grid.Column="1" Grid.Row="1" Text="0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="18" MaxLength="2"/>
+                </Border>
+            </Grid>
+        </Border>
+        <RadioButton x:Name="ScndTeamRB" GroupName="Winner" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        
+        <!-- Btns -->
+        <Button x:Name="AcceptBtn" Grid.Column="0" Grid.Row="3" Content="Принять" FontSize="18" Margin="50 10 50 10" Click="AcceptBtn_Click"/>
+    </Grid>
+</Window>

+ 137 - 0
Курсовой проект 3.1/Windows/MatchWindow.xaml.cs

@@ -0,0 +1,137 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using Курсовой_проект_3._1.UserControls;
+
+namespace Курсовой_проект_3._1.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для MatchWindow.xaml
+    /// </summary>
+    public partial class MatchWindow : Window
+    {
+        MyTeamContext _context;
+        int nowTournamentId;
+        int roundNum;
+
+        public MatchWindow(int tournamentId, string frstTeamName, string scndTeamName, int roundNum)
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            nowTournamentId = tournamentId;
+            this.roundNum = roundNum;
+
+            FrstTeamTBlock.Text = frstTeamName;
+            ScndTeamTBlock.Text = scndTeamName;
+        }
+
+        public MatchWindow(MatchControl match, int tournamentId, int roundNum)
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            nowTournamentId = tournamentId;
+            this.roundNum = roundNum;
+
+            FrstTeamTBlock.Text = match.TeamNameFrst;
+            ScndTeamTBlock.Text = match.TeamNameScnd;
+
+            FrstTeamScoreTBox.Text = match.ScoreFrst;
+            ScndTeamScoreTBox.Text = match.ScoreScnd;
+        }
+
+        private void AcceptBtn_Click(object sender, RoutedEventArgs e)
+        {
+            List<Matches> match = _context.Matches.Where(m => m.FK_Tournament_Id == nowTournamentId && m.RoundNum == roundNum
+                                                           && m.Teams.Name == FrstTeamTBlock.Text && m.Teams1.Name == ScndTeamTBlock.Text).ToList();
+            if (match.Count() != 0)
+            {
+                Matches editMatch = match[0];
+                editMatch.FK_FrstTeam_Id = _context.Teams.Where(t => t.Name == FrstTeamTBlock.Text).Select(t => t.Id).Single();
+                editMatch.FK_ScndTeam_Id = _context.Teams.Where(t => t.Name == ScndTeamTBlock.Text).Select(t => t.Id).Single();
+                editMatch.FrstScore = Convert.ToInt32(FrstTeamScoreTBox.Text); 
+                editMatch.ScndScore = Convert.ToInt32(ScndTeamScoreTBox.Text);
+
+                if ((bool)FrstTeamRB.IsChecked)
+                {
+                    editMatch.FK_WinnerTeam_Id = editMatch.FK_FrstTeam_Id;
+                }
+                else if ((bool)ScndTeamRB.IsChecked)
+                {
+                    editMatch.FK_WinnerTeam_Id = editMatch.FK_ScndTeam_Id;
+                }
+                else
+                {
+                    editMatch.FK_WinnerTeam_Id = null;
+                }
+            }
+            else
+            {
+                string frstTeam = FrstTeamTBlock.Text;
+                string scndTeam = ScndTeamTBlock.Text;
+
+                Matches newMatch = new Matches()
+                {
+                    FK_FrstTeam_Id = _context.Teams.Where(t => t.Name == frstTeam).Select(t => t.Id).Single(),
+                    FK_ScndTeam_Id = _context.Teams.Where(t => t.Name == scndTeam).Select(t => t.Id).Single(),
+                    FrstScore = Convert.ToInt32(FrstTeamScoreTBox.Text),
+                    ScndScore = Convert.ToInt32(ScndTeamScoreTBox.Text),
+                    RoundNum = roundNum,
+                    GameDate = DateTime.Now,
+                    FK_Tournament_Id = nowTournamentId
+                };
+
+                if ((bool)FrstTeamRB.IsChecked)
+                {
+                    newMatch.FK_WinnerTeam_Id = newMatch.FK_FrstTeam_Id;
+                }
+                else if ((bool)ScndTeamRB.IsChecked)
+                {
+                    newMatch.FK_WinnerTeam_Id = newMatch.FK_ScndTeam_Id;
+                }
+                else
+                {
+                    newMatch.FK_WinnerTeam_Id = null;
+                }
+
+                _context.Matches.Add(newMatch);
+            }
+
+            _context.SaveChanges();
+
+            // Закрываем окно и пересоздаем окно турнира
+            foreach (var wnd in Application.Current.Windows)
+            {
+                if (wnd is TournamentWindow)
+                {
+                    TournamentWindow tournamentWnd = (TournamentWindow)wnd;
+                    tournamentWnd.Close();
+
+                    TournamentWindow newTournamentWnd = new TournamentWindow(nowTournamentId);
+                    newTournamentWnd.Show();
+                }
+            }
+
+            Close();
+        }
+
+        private void TeamTBlock_MouseDown(object sender, MouseButtonEventArgs e)
+        {
+            if (e.ClickCount == 2)
+            {
+                SelectTeamsInMatchWindow wnd = new SelectTeamsInMatchWindow(nowTournamentId, roundNum);
+                wnd.ShowDialog();
+                Close();
+            }
+        }
+    }
+}

+ 81 - 0
Курсовой проект 3.1/Windows/PlayerApplicationAddWindow.xaml

@@ -0,0 +1,81 @@
+<Window x:Class="Курсовой_проект_3._1.Windows.PlayerApplicationAddWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:uc="clr-namespace:Курсовой_проект_3._1.UserControls"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+        mc:Ignorable="d"
+        Title="Заявка" Height="400" Width="600" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
+    <Window.Resources>
+        <!-- Button style -->
+        <Style TargetType="Button">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="10"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="WhiteSmoke" TargetName="ButtonBorder">
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </Window.Resources>
+    
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition/>
+            <RowDefinition Height="*"/>
+            <RowDefinition Height="3*"/>
+            <RowDefinition/>
+        </Grid.RowDefinitions>
+
+        <TextBlock Grid.Row="0" Text="Заявка" FontSize="22" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        <uc:LimitedTextBlock x:Name="TitleLimTBox" Grid.Row="1" Title="Заголовок:" MaxLength="20" Margin="30 0 30 0" VerticalContentAlignment="Center" FontSize="14"/>
+        <uc:LimitedTextBlock x:Name="TextLimTBox" Grid.Row="2" Title="Заявка:" MaxLength="255" Margin="30 0 30 0" FontSize="14"/>
+        <Button x:Name="CreateBtn" Grid.Row="3" Content="Создать" HorizontalAlignment="Right" MinWidth="200" Margin="0 5 30 5" Click="CreateBtn_Click"/>
+    </Grid>
+</Window>

+ 68 - 0
Курсовой проект 3.1/Windows/PlayerApplicationAddWindow.xaml.cs

@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Курсовой_проект_3._1.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для PlayerApplicationAddWindow.xaml
+    /// </summary>
+    public partial class PlayerApplicationAddWindow : Window
+    {
+        MyTeamContext _context;
+
+        public PlayerApplicationAddWindow()
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+        }
+
+        private void CreateBtn_Click(object sender, RoutedEventArgs e)
+        {
+            string title = TitleLimTBox.txtLimitedInput.Text;
+            string text = TextLimTBox.txtLimitedInput.Text;
+
+            if (string.IsNullOrWhiteSpace(title) || string.IsNullOrWhiteSpace(text))
+            {
+                MessageBox.Show("Все поля должны быть заполнены!");
+                return;
+            }
+            else
+            {
+                PlayerApps app = new PlayerApps();
+                app.Title = title;
+                app.AppText = text;
+                app.AppDate = DateTime.Now;
+
+                app.FK_User_Id = App.UserId;
+
+                List<PlayerApps> apps = _context.PlayerApps.Where(a => a.FK_User_Id == App.UserId).ToList();
+                if (apps.Count() != 0)
+                {
+                    apps[0].Title = title;
+                    apps[0].AppText = text;
+                    apps[0].AppDate = DateTime.Now;
+
+                    MessageBox.Show("Предыдущая заявка изменена!");
+                }
+                else
+                {
+                    _context.PlayerApps.Add(app);
+                    MessageBox.Show("Заявка добавлена!");
+                }
+            }
+
+            _context.SaveChanges();
+        }
+    }
+}

+ 114 - 0
Курсовой проект 3.1/Windows/PlayerProfileSettingsWindow.xaml

@@ -0,0 +1,114 @@
+<Window x:Class="Курсовой_проект_3._1.Windows.PlayerProfileSettingsWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:uc="clr-namespace:Курсовой_проект_3._1.UserControls"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+        mc:Ignorable="d"
+        Title="PlayerProfileSettingsWindow" Height="450" Width="800" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
+    <Window.Resources>
+        <!-- Button style -->
+        <Style TargetType="Button">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="5"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="WhiteSmoke" TargetName="ButtonBorder">
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </Window.Resources>
+
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition/>
+            <ColumnDefinition Width="2*"/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="3*"/>
+            <RowDefinition/>
+        </Grid.RowDefinitions>
+
+        <!-- Photo -->
+        <Border Grid.Column="0" Grid.Row="0" BorderBrush="#FF68A4C8" BorderThickness="2" Margin="10">
+            <Image x:Name="UserPhoto"  Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\WithoutPhoto.png" Margin="5"/>
+        </Border>
+        <Button x:Name="ChangePhotoBtn" Grid.Column="0" Grid.Row="1" Margin="20 30 20 30" Content="Выбрать изображение" FontSize="16" FontWeight="SemiBold" Click="ChangePhotoBtn_Click"/>
+        
+        <!-- Country, phone, email, about me -->
+        <Grid Grid.Column="1" Grid.Row="0">
+            <Grid.RowDefinitions>
+                <RowDefinition/>
+                <RowDefinition/>
+                <RowDefinition/>
+                <RowDefinition Height="2*"/>
+            </Grid.RowDefinitions>
+
+            <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="5 0 0 0">
+                <TextBlock Text="Страна: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                <ComboBox x:Name="CountryCB" MinWidth="150" Margin="20"/>
+            </StackPanel>
+
+            <StackPanel Grid.Row="1" Orientation="Horizontal" Margin="5 0 0 0">
+                <TextBlock Text="Номер телефона: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                <TextBox x:Name="PhoneNumberTBox" MinWidth="150" Margin="20" VerticalContentAlignment="Center" MaxLength="16"/>
+            </StackPanel>
+
+            <StackPanel Grid.Row="2" Orientation="Horizontal" Margin="5 0 0 0">
+                <TextBlock Text="Email: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                <TextBox x:Name="EmailTBox" MinWidth="150" Margin="20" VerticalContentAlignment="Center" MaxLength="50"/>
+            </StackPanel>
+
+            <uc:LimitedTextBlock x:Name="AboutTBox" Grid.Row="3" Title="О себе:" MaxLength="255" TitleFontSize="16" Margin="0 0 10 10"/>
+        </Grid>
+        
+        <!-- AcceptBtn -->
+        <Button x:Name="AcceptBtn" Grid.Column="1" Grid.Row="1" Content="Сохранить изменения" FontSize="16" FontWeight="SemiBold" HorizontalAlignment="Right" MinWidth="200" Margin="0 20 20 20" Click="AcceptBtn_Click"/>
+    </Grid>
+</Window>

+ 158 - 0
Курсовой проект 3.1/Windows/PlayerProfileSettingsWindow.xaml.cs

@@ -0,0 +1,158 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Курсовой_проект_3._1.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для PlayerProfileSettingsWindow.xaml
+    /// </summary>
+    public partial class PlayerProfileSettingsWindow : Window
+    {
+        MyTeamContext _context;
+        Users user;
+        bool isPhotoChanged;
+
+        public PlayerProfileSettingsWindow()
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            isPhotoChanged = false;
+
+            List<string> countryList = _context.Countries.Select(c => c.Name).ToList();
+            CountryCB.ItemsSource = countryList;
+
+            user = _context.Users.Find(App.UserId);
+            EmailTBox.Text = user.Email;
+            PhoneNumberTBox.Text = "+" + user.PhoneNumber;
+            CountryCB.Text = user.Countries.Name;
+            AboutTBox.txtLimitedInput.Text = user.About;
+            UserPhoto.Source = new BitmapImage(new Uri(user.PhotoPath));
+        }
+
+        private void AcceptBtn_Click(object sender, RoutedEventArgs e)
+        {
+            string email, phoneNumber, selectedCountry;
+
+            // проверка на корректность введенной почты
+            if (!string.IsNullOrWhiteSpace(EmailTBox.Text))
+            {
+                email = EmailTBox.Text;
+                string nowEmailUser = _context.Users.Find(App.UserId).Email;
+
+                if (email != nowEmailUser)
+                {
+                    if (_context.Users.Where(u => u.Email == email).Count() == 0)
+                    {
+                        if (Func.IsValidEmail(email))
+                        {
+                            user.Email = email;
+                        }
+                        else
+                        {
+                            MessageBox.Show("Некорректный формат Email!");
+                            return;
+                        }
+                    }
+                    else
+                    {
+                        MessageBox.Show("Такой Email уже зарегистриован!");
+                        return;
+                    }
+                }
+            }
+            else
+            {
+                MessageBox.Show("Email должен быть заполнен!");
+                return;
+            }
+
+            // проверка на корректность введенного номера телефона
+            if (!string.IsNullOrWhiteSpace(PhoneNumberTBox.Text))
+            {
+                phoneNumber = PhoneNumberTBox.Text.TrimStart('+');
+                string nowPhoneNumberUser = _context.Users.Find(App.UserId).PhoneNumber;
+
+                if (phoneNumber != nowPhoneNumberUser)
+                {
+
+                    if (_context.Users.Where(u => u.PhoneNumber == phoneNumber).Count() == 0)
+                    {
+                        if (Func.IsValidPhoneNumber(phoneNumber))
+                        {
+                            user.PhoneNumber = phoneNumber;
+                        }
+                        else
+                        {
+                            MessageBox.Show("Некорректный формат номера телефона!");
+                            return;
+                        }
+                    }
+                    else
+                    {
+                        MessageBox.Show("Такой номер телефона уже зарегистриован!");
+                        return;
+                    }
+                }
+            }
+            else
+            {
+                MessageBox.Show("Номер телефона должен быть заполнен!");
+                return;
+            }
+
+            // проверка на корректность страны
+            if (!string.IsNullOrWhiteSpace(CountryCB.Text))
+            {
+                selectedCountry = CountryCB.Text;
+                user.FK_Country_Id = _context.Countries.Where(c => c.Name == selectedCountry).Select(c => c.Id).Single();
+            }
+
+            // проверка на корректность поля о себе
+            user.About = AboutTBox.txtLimitedInput.Text;
+
+            // если фото изменено
+            if (isPhotoChanged)
+            {
+                user.PhotoPath = UserPhoto.Source.ToString();
+            }
+
+            _context.SaveChanges();
+
+            MessageBox.Show("Изменения успешно применены!");
+        }
+
+        private void ChangePhotoBtn_Click(object sender, RoutedEventArgs e)
+        {
+            // Создаем OpenFileDialog 
+            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
+
+            // Устанавливаем фильтры и стандартное расширение файла
+            dlg.DefaultExt = ".png";
+            dlg.Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif";
+
+            // Отображаем OpenFileDialog
+            Nullable<bool> result = dlg.ShowDialog();
+
+
+            // Получаем и устанавливаем новое изображение 
+            if (result == true)
+            {
+                // Open document 
+                string filename = dlg.FileName;
+                UserPhoto.Source = new BitmapImage(new Uri(filename));
+                isPhotoChanged = true;
+            }
+        }
+    }
+}

+ 17 - 6
Курсовой проект 3.1/RegistrationWindow.xaml

@@ -5,7 +5,7 @@
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:local="clr-namespace:Курсовой_проект_3._1"
         mc:Ignorable="d"
-        Title="RegistrationWindow"  Height="650" Width="600" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
+        Title="RegistrationWindow"  Height="650" Width="950" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
     <Window.Resources>
         <!-- TextBox style -->
         <Style TargetType="TextBox">
@@ -134,6 +134,7 @@
         <Grid.ColumnDefinitions>
             <ColumnDefinition Width="0.1*"/>
             <ColumnDefinition Width="1*"/>
+            <ColumnDefinition Width="0.5*"/>
             <ColumnDefinition Width="0.1*"/>
         </Grid.ColumnDefinitions>
         <Grid.RowDefinitions>
@@ -142,14 +143,18 @@
             <RowDefinition Height="0.1*"/>
         </Grid.RowDefinitions>
 
-        <Rectangle Grid.Column="1" Grid.Row="1" Fill="#346E91" RadiusX="8" RadiusY="8"/>
-        <Grid Grid.Column="1" Grid.Row="1" ShowGridLines="False">
+        <Rectangle Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" Fill="#346E91" RadiusX="8" RadiusY="8"/>
+        <Grid Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" ShowGridLines="False">
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="0.2*"/>
                 <ColumnDefinition/>
                 <ColumnDefinition Width="0.2*"/>
                 <ColumnDefinition/>
                 <ColumnDefinition Width="0.2*"/>
+                <ColumnDefinition/>
+                <ColumnDefinition Width="0.2*"/>
+                <ColumnDefinition/>
+                <ColumnDefinition Width="0.2*"/>
             </Grid.ColumnDefinitions>
             <Grid.RowDefinitions>
                 <RowDefinition/>
@@ -171,7 +176,7 @@
                 <RowDefinition/>
             </Grid.RowDefinitions>
 
-            <TextBlock Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" Text="Регистрация" Foreground="WhiteSmoke" FontSize="24" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBlock Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="7" Text="Регистрация" Foreground="WhiteSmoke" FontSize="24" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
 
             <TextBlock Grid.Row="3" Grid.Column="1" Text="Логин" Foreground="WhiteSmoke" FontSize="20" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
             <TextBox x:Name="LoginTB" Grid.Row="3" Grid.Column="3" MaxLines="1" MaxLength="16" Margin="5" VerticalContentAlignment="Center"/>
@@ -194,8 +199,14 @@
             <TextBlock Grid.Row="12" Grid.Column="1" Text="Дата рождения" Foreground="WhiteSmoke" FontSize="20" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
             <DatePicker x:Name="BirthdayDP" Grid.Row="12" Grid.Column="3" Margin="5" VerticalContentAlignment="Center"/>
 
-            <Button x:Name="RegBtn" Grid.Row="14" Grid.Column="1" Grid.ColumnSpan="3" Margin="10 0 10 0" Content="Создать аккаунт" Click="RegBtn_Click" FontSize="20"/>
-            <TextBlock Grid.Row="15" Grid.Column="1" Grid.ColumnSpan="3" HorizontalAlignment="Center" VerticalAlignment="Center">
+            <TextBlock Grid.Row="10" Grid.Column="5" Text="Email" Foreground="WhiteSmoke" FontSize="20" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="EmailTBox" Grid.Row="10" Grid.Column="7" Margin="5" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
+
+            <TextBlock Grid.Row="12" Grid.Column="5" Text="Номер телефона" Foreground="WhiteSmoke" FontSize="20" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="PhoneNumberTBox" Grid.Row="12" Grid.Column="7" MaxLength="16" Margin="5" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
+
+            <Button x:Name="RegBtn" Grid.Row="14" Grid.Column="1" Grid.ColumnSpan="7" Margin="10 0 10 0" Content="Создать аккаунт" Click="RegBtn_Click" FontSize="20"/>
+            <TextBlock Grid.Row="15" Grid.Column="1" Grid.ColumnSpan="7" HorizontalAlignment="Center" VerticalAlignment="Center">
                 <Hyperlink x:Name="AuthLink" Foreground="Wheat" Click="AuthLink_Click">Вернуться к авторизации</Hyperlink>
             </TextBlock>
         </Grid>

+ 115 - 0
Курсовой проект 3.1/Windows/RegistrationWindow.xaml.cs

@@ -0,0 +1,115 @@
+using System;
+using System.Windows;
+using System.Data.SqlClient;
+using System.Data;
+using System.Configuration;
+using System.Linq;
+using System.Text.RegularExpressions;
+
+namespace Курсовой_проект_3._1
+{
+    /// <summary>
+    /// Логика взаимодействия для RegistrationWindow.xaml
+    /// </summary>
+    public partial class RegistrationWindow : Window
+    {
+        MyTeamContext _context;
+
+        public RegistrationWindow()
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+        }
+
+        private void AuthLink_Click(object sender, RoutedEventArgs e)
+        {
+            Authorization wnd = new Authorization();
+            wnd.Show();
+            Close();
+        }
+
+        private void RegBtn_Click(object sender, RoutedEventArgs e)
+        {
+            string login = LoginTB.Text.Trim();
+            string password = PasswordPB.Password.Trim();
+            string nickname = NicknameTB.Text.Trim();
+            string fname = FNameTB.Text.Trim();
+            string lname = LNameTB.Text.Trim();
+            string mname = MNameTB.Text.Trim();
+            string birthday = BirthdayDP.Text;
+            string email = EmailTBox.Text.Trim();
+            string phoneNumber = PhoneNumberTBox.Text.Trim().TrimStart('+'); 
+            
+           
+            // проверка на заполненость всех полей
+            if (Func.IsNullOrWhiteSpace(new string[] { login, password, nickname, fname, lname, mname, birthday }))
+            {
+                MessageBox.Show("Все поля должны быть заполнены!");
+                return;
+            }
+
+            // проверка на уникальность полей
+            if (_context.Users.Where(user => user.Login == login).Count() > 0)
+            {
+                MessageBox.Show("Такой логин уже существует!");
+                LoginTB.Text = "";
+                return;
+            }
+
+            if (_context.Users.Where(user => user.Nickname == nickname).Count() > 0)
+            {
+                MessageBox.Show("Такой никнейм уже существует!");
+                NicknameTB.Text = "";
+                return;
+            }
+
+            if (_context.Users.Where(user => user.PhoneNumber == phoneNumber.ToString()).Count() > 0)
+            {
+                MessageBox.Show("Такой номер телефона уже зарегистрирован!");
+                NicknameTB.Text = "";
+                return;
+            }
+
+            if (_context.Users.Where(user => user.Email == email).Count() > 0)
+            {
+                MessageBox.Show("Такой Email уже зарегистрирован!");
+                NicknameTB.Text = "";
+                return;
+            }
+
+            // проверка на корректность
+            if (!Func.IsValidPhoneNumber(phoneNumber))
+            {
+                MessageBox.Show("Некорректный номер телефона!");
+                return;
+            }
+
+            if (!Func.IsValidEmail(email))
+            {
+                MessageBox.Show("Некорректный Email!");
+                return;
+            }
+
+            // добавление нового пользователя в БД
+            Users newUser = new Users();
+            newUser.Login = login;
+            newUser.Password = password;
+            newUser.FName = fname;
+            newUser.LName = lname;
+            newUser.MName = mname;
+            newUser.Nickname = nickname;
+            newUser.Birthday = Convert.ToDateTime(birthday);
+            newUser.Email = email;
+            newUser.PhoneNumber = phoneNumber;
+
+            _context.Users.Add(newUser);
+            _context.SaveChanges();
+
+            // возврат к авторизации
+            MessageBox.Show("Регистрация прошла успешно!");
+            Authorization wnd = new Authorization();
+            wnd.Show();
+            Close();
+        }
+    }
+}

+ 99 - 0
Курсовой проект 3.1/Windows/ResultAddWindow.xaml

@@ -0,0 +1,99 @@
+<Window x:Class="Курсовой_проект_3._1.Windows.ResultAddWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+        mc:Ignorable="d"
+        Title="ResultAddWindow" Height="100" Width="600" WindowStartupLocation="CenterScreen" WindowStyle="None" ResizeMode="NoResize">
+    <Window.Resources>
+        <!-- Button style -->
+        <Style TargetType="Button">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="3"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="WhiteSmoke" TargetName="ButtonBorder">
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </Window.Resources>
+    
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="0.2*"/>
+            <ColumnDefinition Width="0.6*"/>
+            <ColumnDefinition Width="0.2*"/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="0.4*"/>
+            <RowDefinition/>
+            <RowDefinition Height="0.6*"/>
+        </Grid.RowDefinitions>
+        
+        <!-- Titles -->
+        <TextBlock Grid.Column="0" Grid.Row="0" Text="Место" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" FontWeight="SemiBold"/>
+        <TextBlock Grid.Column="1" Grid.Row="0" Text="Команда" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" FontWeight="SemiBold"/>
+        <TextBlock Grid.Column="2" Grid.Row="0" Text="Призовые" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" FontWeight="SemiBold"/>
+
+        <!-- Enters -->
+        <Border Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="1" BorderBrush="Black" BorderThickness="0 1 0 1"/>
+        <TextBox x:Name="PlaceTBox" Grid.Column="0" Grid.Row="1" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" MaxLength="7" Margin="15" VerticalAlignment="Center"/>
+        <ComboBox x:Name="TeamsCB" Grid.Column="1" Grid.Row="1" Margin="30 15 30 15"/>
+        <StackPanel Grid.Column="2" Grid.Row="1" Orientation="Horizontal">
+            <TextBox x:Name="PrizeTBox" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" MaxLength="8" Margin="5 15 0 15" MinWidth="100" VerticalAlignment="Center"/>
+            <TextBlock Text=" $" FontSize="14" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        </StackPanel>
+
+        <!-- Btns -->
+        <StackPanel Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right">
+            <Button x:Name="QuitBtn" Content="Отмена" MinWidth="100" Margin="20 2 20 2" Click="QuitBtn_Click"/>
+            <Button x:Name="AcceptBtn" Content="Принять" MinWidth="100" Margin="20 2 20 2" Click="AcceptBtn_Click"/>
+        </StackPanel>
+    </Grid>
+</Window>

+ 96 - 0
Курсовой проект 3.1/Windows/ResultAddWindow.xaml.cs

@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Курсовой_проект_3._1.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для ResultAddWindow.xaml
+    /// </summary>
+    public partial class ResultAddWindow : Window
+    {
+        MyTeamContext _context;
+        Achievements achievement;
+        int nowTournamentId;
+
+        public ResultAddWindow(int tournamentId)
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            nowTournamentId = tournamentId;
+
+            List<string> teamList = new List<string>();
+            teamList.AddRange(_context.Matches.Where(m => m.FK_Tournament_Id == nowTournamentId && m.RoundNum == 1).Select(m => m.Teams.Name).ToList());
+            teamList.AddRange(_context.Matches.Where(m => m.FK_Tournament_Id == nowTournamentId && m.RoundNum == 1).Select(m => m.Teams1.Name).ToList());
+
+            TeamsCB.ItemsSource = teamList;
+        }
+
+        public ResultAddWindow(string TeamName, int tournamentId)
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            nowTournamentId = tournamentId;
+
+            achievement = _context.Achievements.Where(a => a.Teams.Name == TeamName && a.FK_Tournament_Id == nowTournamentId).FirstOrDefault();
+            PlaceTBox.Text = achievement.Place;
+            TeamsCB.Text = achievement.Teams.Name;
+            PrizeTBox.Text = Func.ConvertIntToStringMoney(achievement.Prize);
+        }
+
+        private void AcceptBtn_Click(object sender, RoutedEventArgs e)
+        {
+            if (achievement != null)
+            {
+                Achievements editAchievement = achievement;
+                editAchievement.Place = PlaceTBox.Text;
+                editAchievement.FK_Team_Id = _context.Teams.Where(t => t.Name == TeamsCB.Text).Select(t => t.Id).FirstOrDefault();
+                editAchievement.Prize = Convert.ToInt32(PrizeTBox.Text);
+
+                _context.SaveChanges();
+
+                MessageBox.Show("Изменения сохранены!");
+            }
+            else
+            {
+                Achievements newAchievement = new Achievements();
+                newAchievement.Place = PlaceTBox.Text;
+                newAchievement.FK_Team_Id = _context.Teams.Where(t => t.Name == TeamsCB.Text).Select(t => t.Id).FirstOrDefault();
+                newAchievement.FK_Tournament_Id = nowTournamentId;
+                newAchievement.Prize = Convert.ToInt32(PrizeTBox.Text);
+
+                _context.Achievements.Add(newAchievement);
+                _context.SaveChanges();
+
+                MessageBox.Show("Добавлено!");
+            }
+        }
+
+        private void QuitBtn_Click(object sender, RoutedEventArgs e)
+        {
+            foreach (var wnd in Application.Current.Windows)
+            {
+                if (wnd is TournamentWindow)
+                {
+                    TournamentWindow tournamentWnd = (TournamentWindow)wnd;
+                    tournamentWnd.Close();
+
+                    TournamentWindow newTournamentWnd = new TournamentWindow(nowTournamentId);
+                    newTournamentWnd.Show();
+                }
+            }
+
+            Close();
+        }
+    }
+}

+ 246 - 0
Курсовой проект 3.1/Windows/SearchWindow.xaml

@@ -0,0 +1,246 @@
+<Window x:Class="Курсовой_проект_3._1.Windows.SearchWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+        mc:Ignorable="d"
+        Title="Поиск" Height="450" Width="700" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
+    <Window.Resources>
+        <!-- Diffrent templates for the ApplicationList (Players, Teams, Tournaments) -->
+        <DataTemplate x:Key="PlayersItemTemplate">
+            <Grid MinHeight="100">
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="0.6*"/>
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                </Grid.ColumnDefinitions>
+
+                <Border Grid.Column="0" BorderBrush="#68A4C8" BorderThickness="2" Margin="5">
+                    <Image Source="{Binding Path=PhotoPath}" Margin="3" MaxHeight="60"/>
+                </Border>
+
+                <Grid Grid.Column="1">
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <TextBlock Grid.Row="0" Text="{Binding Path=Nickname}" FontSize="14" FontWeight="SemiBold" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    <TextBlock Grid.Row="1" Text="{Binding Path=Name}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0" TextWrapping="Wrap" TextAlignment="Left"/>
+                </Grid>
+
+                <Grid Grid.Column="2">
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <Grid Grid.Row="0">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="0.2"/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+
+                        <StackPanel Grid.Column="0" Grid.ColumnSpan="2" Orientation="Horizontal">
+                            <TextBlock Text="Страна: " FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                            <Image Source="{Binding Path=CountryIconPath}" MaxHeight="16" Margin="5 0 0 0"/>
+                            <TextBlock Text="{Binding Path=CountryName}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                        </StackPanel>
+                    </Grid>
+
+                    <StackPanel Grid.Row="1" Orientation="Horizontal">
+                        <TextBlock Text="Дисциплина: " FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                        <TextBlock Text="{Binding Path=DisciplineName}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    </StackPanel>
+                </Grid>
+            </Grid>
+        </DataTemplate>
+
+        <DataTemplate x:Key="TeamsItemTemplate">
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition/>
+                    <ColumnDefinition />
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                </Grid.ColumnDefinitions>
+
+                <Border Grid.Column="0" BorderBrush="#68A4C8" BorderThickness="2" Margin="5">
+                    <Image Source="{Binding Path=LogoPath}" Margin="3"/>
+                </Border>
+
+                <Grid Grid.Column="1">
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <TextBlock Grid.Row="0" Text="{Binding Path=Name}" FontSize="14" FontWeight="SemiBold" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+
+                    <StackPanel Grid.Row="1" Orientation="Vertical">
+                        <TextBlock Text="Дата создания: " FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                        <TextBlock Text="{Binding Path=FoundationDate}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    </StackPanel>
+
+                    <StackPanel Grid.Row="2" Orientation="Vertical">
+                        <TextBlock Text="Дата закрытия: " FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                        <TextBlock Text="{Binding Path=DissolationDate}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    </StackPanel>
+                </Grid>
+
+                <Grid Grid.Column="2">
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <Grid Grid.Row="1">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="0.2"/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+
+                        <StackPanel Grid.Column="0" Grid.ColumnSpan="2" Orientation="Horizontal">
+                            <TextBlock Text="Страна: " FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                            <Image Source="{Binding Path=CountryIconPath}" MaxHeight="16" Margin="5 0 0 0"/>
+                            <TextBlock Text="{Binding Path=CountryName}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                        </StackPanel>
+                    </Grid>
+
+                    <StackPanel Grid.Row="2" Orientation="Horizontal">
+                        <TextBlock Text="Дисциплина:" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                        <TextBlock Text="{Binding Path=DisciplineName}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    </StackPanel>
+                </Grid>
+            </Grid>
+        </DataTemplate>
+
+        <DataTemplate x:Key="TournamentsItemTemplate">
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition/>
+                    <ColumnDefinition Width="1.2*"/>
+                    <ColumnDefinition/>
+                    <ColumnDefinition/>
+                </Grid.ColumnDefinitions>
+                
+                <!-- Logo -->
+                <Border Grid.Column="0" BorderBrush="#68A4C8" BorderThickness="2" Margin="5">
+                    <Image Source="{Binding Path=LogoPath}" Margin="3"/>
+                </Border>
+
+                <!-- Name, Format, Discipline -->
+                <Grid Grid.Column="1">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="1.2*"/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <TextBlock Grid.Row="0" Text="{Binding Path=Name}" FontSize="14" FontWeight="SemiBold" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    <StackPanel Grid.Row="1" Orientation="Horizontal">
+                        <TextBlock Text="Формат: " FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                        <TextBlock Text="{Binding Path=Format}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    </StackPanel>
+
+                    <StackPanel Grid.Row="2" Orientation="Horizontal">
+                        <TextBlock Text="Дисциплина: " FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                        <TextBlock Text="{Binding Path=DisciplineName}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    </StackPanel>
+                </Grid>
+
+                <!-- Dates -->
+                <Grid Grid.Column="2">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="1.2*"/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <StackPanel Grid.Row="1" Orientation="Horizontal">
+                        <TextBlock Text="Дата открытия: " FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                        <TextBlock Text="{Binding Path=DateStart}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    </StackPanel>
+
+                    <StackPanel Grid.Row="2" Orientation="Horizontal">
+                        <TextBlock Text="Дата закрытия: " FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                        <TextBlock Text="{Binding Path=DateEnd}" FontSize="12" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5 0 0 0"/>
+                    </StackPanel>
+                </Grid>
+            </Grid>
+        </DataTemplate>
+
+        <DataTemplate x:Key="TemplateSelector">
+            <ContentPresenter Content="{Binding}" Name="contentPresenter"/>
+
+            <DataTemplate.Triggers>
+                <DataTrigger Binding="{Binding ElementName=playerRB, Path=IsChecked}" Value="true">
+                    <Setter TargetName="contentPresenter" Property="ContentTemplate" Value="{StaticResource PlayersItemTemplate}"/>
+                </DataTrigger>
+                <DataTrigger Binding="{Binding ElementName=teamRB, Path=IsChecked}" Value="true">
+                    <Setter TargetName="contentPresenter" Property="ContentTemplate" Value="{StaticResource TeamsItemTemplate}"/>
+                </DataTrigger>
+                <DataTrigger Binding="{Binding ElementName=tournamentRB, Path=IsChecked}" Value="true">
+                    <Setter TargetName="contentPresenter" Property="ContentTemplate" Value="{StaticResource TournamentsItemTemplate}"/>
+                </DataTrigger>
+            </DataTemplate.Triggers>
+        </DataTemplate>
+    </Window.Resources>
+    
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="0.2*"/>
+            <RowDefinition Height="0.2*"/>
+            <RowDefinition Height="0.2*"/>
+            <RowDefinition/>
+        </Grid.RowDefinitions>
+
+        <!-- Title -->
+        <TextBlock Grid.Row="0" Text="Поиск" FontSize="24" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        
+        <!-- RadioButtons -->
+        <Grid Grid.Row="1">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition/>
+                <ColumnDefinition/>
+                <ColumnDefinition/>
+            </Grid.ColumnDefinitions>
+
+            <StackPanel Grid.Column="0" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                <TextBlock Text="Игрок" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                <RadioButton x:Name="playerRB" GroupName="Search" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="5 4 0 0" Checked="playerRB_Checked"/>
+            </StackPanel>
+
+            <StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                <TextBlock Text="Команда" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                <RadioButton x:Name="teamRB" GroupName="Search" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="5 4 0 0" Checked="teamRB_Checked"/>
+            </StackPanel>
+
+            <StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                <TextBlock Text="Турнир" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                <RadioButton x:Name="tournamentRB" GroupName="Search" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="5 4 0 0" Checked="tournamentRB_Checked"/>
+            </StackPanel>
+        </Grid>
+
+        <!-- Search -->
+        <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+            <TextBlock Text="Поиск:" FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0 0 5 0"/>
+            <TextBox x:Name="SearchTBox" MinWidth="300" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" MaxLength="30" KeyDown="Search_KeyDown"/>
+        </StackPanel>
+            
+        <!-- Listbox -->
+        <Border Grid.Row="3" BorderBrush="#68A4C8" BorderThickness="2" Margin="40 20 40 20">
+            <ListBox x:Name="SearchResultLB" Grid.Row="3" ItemTemplate="{StaticResource TemplateSelector}" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" MouseDoubleClick="SearchResultLB_MouseDoubleClick"/>
+        </Border>
+    </Grid>
+</Window>

+ 254 - 0
Курсовой проект 3.1/Windows/SearchWindow.xaml.cs

@@ -0,0 +1,254 @@
+using System;
+using System.Collections.Generic;
+using System.Data.Entity;
+using System.Linq;
+using System.Windows;
+using System.Windows.Input;
+
+
+namespace Курсовой_проект_3._1.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для SearchWindow.xaml
+    /// </summary>
+    public partial class SearchWindow : Window
+    {
+        MyTeamContext _context;
+        List<PlayerItem> playerList;
+
+        public SearchWindow()
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            playerList = new List<PlayerItem>();
+            playerRB.IsChecked = true;
+        }
+
+        private void Search_KeyDown(object sender, KeyEventArgs e)
+        {
+            SearchResultLB.ItemsSource = new List<int>();
+
+            if (e.Key == Key.Enter)
+            {
+                if ((bool)playerRB.IsChecked)
+                {
+                    List<Users> userList = _context.Users.Where(u => DbFunctions.Like(u.Nickname, "%" + SearchTBox.Text + "%")
+                    || DbFunctions.Like(u.LName + " " + u.FName + " " + u.MName, "%" + SearchTBox.Text + "%")).ToList();
+
+                    List<PlayerItem> playerItemList = new List<PlayerItem>();
+                    foreach (Users user in userList)
+                    {
+                        PlayerItem item = new PlayerItem();
+                        item.Name = $"{user.LName} {user.FName} {user.MName}";
+                        item.Nickname = user.Nickname;
+
+                        if (user.PhotoPath != null)
+                        {
+                            item.PhotoPath = user.PhotoPath;
+                        }
+                        else
+                        {
+                            item.PhotoPath = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\WithoutPhoto.png";
+                        }
+
+                        if (user.FK_Country_Id != null)
+                        {
+                            item.CountryName = user.Countries.Name;
+                            item.CountryIconPath = user.Countries.IconPath;
+                        }
+                        else
+                        {
+                            item.CountryName = "Не указана";
+                            item.CountryIconPath = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\countrys - 24\_unknown.png";
+                        }
+                        
+                        if (user.FK_Discipline_Id != null)
+                        {
+                            item.DisciplineName = user.Disciplines.Name;
+                        }
+                        else
+                        {
+                            item.DisciplineName = "Не указана";
+                        }
+
+                        item.UserId = user.Id;
+
+                        playerItemList.Add(item);
+                    }
+
+                    SearchResultLB.ItemsSource = playerItemList;
+                }
+                else if ((bool)teamRB.IsChecked)
+                {
+                    List<Teams> teamList = _context.Teams.Where(t => DbFunctions.Like(t.Name, "%" + SearchTBox.Text + "%")).ToList();
+
+                    List<TeamItem> teamItemList = new List<TeamItem>();
+                    foreach (Teams team in teamList)
+                    {
+                        TeamItem item = new TeamItem();
+                        item.Name = team.Name;
+                        item.FoundationDate = team.FoundationDate.ToString("d");
+
+                        DateTime dissolationDate;
+                        if (DateTime.TryParse(team.DissolationDate.ToString(), out dissolationDate))
+                        {
+                            item.DissolationDate = dissolationDate.ToString("d");
+                        }
+                        else
+                        {
+                            item.DissolationDate = "не распущена.";
+                        }
+
+                        item.LogoPath = team.LogoPath;
+                        item.CountryName = team.Countries.Name;
+                        item.CountryIconPath = team.Countries.IconPath;
+                        if (_context.Users.Find(team.FK_Creater_Id).Disciplines != null)
+                            item.DisciplineName = _context.Users.Find(team.FK_Creater_Id).Disciplines.Name;
+
+                        item.TeamId = team.Id;
+
+                        teamItemList.Add(item);
+                    }
+
+                    SearchResultLB.ItemsSource = teamItemList;
+                }
+                else
+                {
+                    List<Tournaments> tournamentList = _context.Tournaments.Where(t => DbFunctions.Like(t.Name, "%" + SearchTBox.Text + "%")).ToList();
+
+                    List<TournamentItem> tournamentItemList = new List<TournamentItem>();
+                    foreach (Tournaments tournament in tournamentList)
+                    {
+                        TournamentItem item = new TournamentItem();
+                        item.Name = tournament.Name;
+                        item.LogoPath = tournament.LogoPath;
+                        item.DateStart = tournament.DateStart.ToString("d");
+                        item.DateEnd = tournament.DateEnd.ToString("d");
+                        item.Format = tournament.TournamentFormats.Name;
+                        if (tournament.Users.Disciplines != null)
+                            item.DisciplineName = tournament.Users.Disciplines.Name;
+
+                        item.TournamentId = tournament.Id;
+
+                        tournamentItemList.Add(item);
+                    }
+
+                    SearchResultLB.ItemsSource = tournamentItemList;
+                }
+            }
+        }
+
+        private void SearchResultLB_MouseDoubleClick(object sender, MouseButtonEventArgs e)
+        {
+            if (SearchResultLB.SelectedItem != null)
+            {
+                if ((bool)playerRB.IsChecked)
+                {
+                    PlayerItem user = (PlayerItem)SearchResultLB.SelectedItem;
+
+                    MainWindow mainWnd = new MainWindow(user.UserId);
+                    mainWnd.Show();
+
+                    // закрываем остальные окна
+                    foreach (var wnd in Application.Current.Windows)
+                    {
+                        if (wnd is ApplicationWindow)
+                        {
+                            ApplicationWindow appWnd = (ApplicationWindow)wnd;
+                            appWnd.Close();
+                        }
+                    }
+
+                    Close();
+                }
+                else if ((bool)teamRB.IsChecked)
+                {
+                    TeamItem team = (TeamItem)SearchResultLB.SelectedItem;
+
+                    TeamProfileWindow teamWnd = new TeamProfileWindow(team.TeamId);
+                    teamWnd.Show();
+
+                    // закрываем остальные окна
+                    foreach (var wnd in Application.Current.Windows)
+                    {
+                        if (wnd is ApplicationWindow)
+                        {
+                            ApplicationWindow appWnd = (ApplicationWindow)wnd;
+                            appWnd.Close();
+                        }
+                    }
+
+                    Close();
+                }
+                else
+                {
+                    TournamentItem tournament = (TournamentItem)SearchResultLB.SelectedItem;
+
+                    TournamentWindow teamWnd = new TournamentWindow(tournament.TournamentId);
+                    teamWnd.Show();
+
+                    // закрываем остальные окна
+                    foreach (var wnd in Application.Current.Windows)
+                    {
+                        if (wnd is ApplicationWindow)
+                        {
+                            ApplicationWindow appWnd = (ApplicationWindow)wnd;
+                            appWnd.Close();
+                        }
+                    }
+
+                    Close();
+                }
+            }
+        }
+
+        private void playerRB_Checked(object sender, RoutedEventArgs e)
+        {
+            SearchResultLB.ItemsSource = new List<int>();
+        }
+
+        private void teamRB_Checked(object sender, RoutedEventArgs e)
+        {
+            SearchResultLB.ItemsSource = new List<int>();
+        }
+
+        private void tournamentRB_Checked(object sender, RoutedEventArgs e)
+        {
+            SearchResultLB.ItemsSource = new List<int>();
+        }
+    }
+
+    class PlayerItem
+    {
+        public string Name { get; set; }
+        public string Nickname { get; set; }
+        public string PhotoPath { get; set; }
+        public string CountryName { get; set; }
+        public string CountryIconPath { get; set; }
+        public string DisciplineName { get; set; }
+        public int UserId { get; set; }
+    }
+
+    class TeamItem
+    {
+        public string Name { get; set; }
+        public string FoundationDate { get; set; }
+        public string DissolationDate { get; set; }
+        public string LogoPath { get; set; }
+        public string CountryName { get; set; }
+        public string CountryIconPath { get; set; }
+        public string DisciplineName { get; set; }
+        public int TeamId { get; set; }
+    }
+
+    class TournamentItem
+    {
+        public string Name { get; set; }
+        public string DateStart { get; set; }
+        public string DateEnd { get; set; }
+        public string LogoPath { get; set; }
+        public string DisciplineName { get; set; }
+        public string Format { get; set; }
+        public int TournamentId { get; set; }
+    }
+}

+ 133 - 0
Курсовой проект 3.1/Windows/SelectTeamsInMatchWindow.xaml

@@ -0,0 +1,133 @@
+<Window x:Class="Курсовой_проект_3._1.Windows.SelectTeamsInMatchWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+        mc:Ignorable="d"
+        Title="SelectTeamsInMatchWindow" Height="600" Width="500" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
+    <Window.Resources>
+        <!-- Button style -->
+        <Style TargetType="Button">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="5"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" Value="#68A4C8" TargetName="ButtonBorder"/>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="#68A4C8" TargetName="ButtonBorder"/>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+        
+        <!-- TeamList template -->
+        <DataTemplate x:Key="TeamListTemplate">
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition/>
+                    <ColumnDefinition Width="3*"/>
+                </Grid.ColumnDefinitions>
+                <Grid.RowDefinitions>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                </Grid.RowDefinitions>
+
+                <!-- Logo -->
+                <Border Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" BorderBrush="Black" BorderThickness="1" MaxHeight="50" MaxWidth="50">
+                    <Image Margin="5">
+                        <Image.Source>
+                            <Binding Path="LogoPath">
+                                <Binding.TargetNullValue>
+                                    <BitmapImage UriSource="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\WithoutPhoto.png" />
+                                </Binding.TargetNullValue>
+                            </Binding>
+                        </Image.Source>
+                    </Image>
+                </Border>
+                
+                <!-- TeamName -->
+                <Grid Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" VerticalAlignment="Center">
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <TextBlock Text="{Binding Path=TeamName}" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                </Grid>
+            </Grid>
+        </DataTemplate>
+    </Window.Resources>
+    
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition/>
+            <ColumnDefinition/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="0.1*"/>
+            <RowDefinition Height="0.1*"/>
+            <RowDefinition Height="0.6*"/>
+            <RowDefinition Height="0.1*"/>
+        </Grid.RowDefinitions>
+        
+        <!-- Title -->
+        <TextBlock x:Name="FrstTitleTBlock" Grid.Column="0" Grid.Row="0" Text="Команда №1" FontSize="18" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        <TextBlock x:Name="ScndTitleTBlock" Grid.Column="1" Grid.Row="0" Text="Команда №2" FontSize="18" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        
+        <!-- Search -->
+        <StackPanel Grid.Column="0" Grid.Row="1" Orientation="Horizontal" Margin="10 0 0 0">
+            <TextBlock Text="Поиск: " FontSize="14" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <Border MinWidth="160" HorizontalAlignment="Stretch" Margin="20 20 10 20">
+                <TextBox x:Name="FrstSearchTBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" KeyDown="FrstSearchTBox_KeyDown"/>
+            </Border>
+        </StackPanel>
+
+        <StackPanel Grid.Column="1" Grid.Row="1" Orientation="Horizontal" Margin="10 0 0 0">
+            <TextBlock Text="Поиск: " FontSize="14" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <Border MinWidth="160" HorizontalAlignment="Stretch" Margin="20 20 10 20">
+                <TextBox x:Name="ScndSearchTBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" KeyDown="ScndSearchTBox_KeyDown"/>
+            </Border>
+        </StackPanel>
+        
+        <!-- TeamList -->
+        <Border Grid.Column="0" Grid.Row="2" BorderBrush="Black" BorderThickness="2" Margin="10">
+            <ListBox x:Name="FrstList" ItemTemplate="{StaticResource TeamListTemplate}" MouseDoubleClick="TeamList_MouseDoubleClick" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
+        </Border>
+
+        <Border Grid.Column="1" Grid.Row="2" BorderBrush="Black" BorderThickness="2" Margin="10">
+            <ListBox x:Name="ScndList" ItemTemplate="{StaticResource TeamListTemplate}" MouseDoubleClick="TeamList_MouseDoubleClick" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
+        </Border>
+        
+        <!-- Button -->
+        <Button x:Name="AcceptBtn" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="3" Content="Принять" FontSize="18" FontWeight="SemiBold" Margin="10" Click="AcceptBtn_Click"/>
+    </Grid>
+</Window>

+ 171 - 0
Курсовой проект 3.1/Windows/SelectTeamsInMatchWindow.xaml.cs

@@ -0,0 +1,171 @@
+using System;
+using System.Collections.Generic;
+using System.Data.Entity;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Курсовой_проект_3._1.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для SelectTeamsInMatchWindow.xaml
+    /// </summary>
+    public partial class SelectTeamsInMatchWindow : Window
+    {
+        MyTeamContext _context;
+        int nowTournamentId;
+        int roundNum;
+
+        public SelectTeamsInMatchWindow(int tournamentId, int roundNum)
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            nowTournamentId = tournamentId;
+            this.roundNum = roundNum;
+        }
+
+        private void TeamList_MouseDoubleClick(object sender, MouseButtonEventArgs e)
+        {
+            ListBox listBox = (ListBox)sender;
+            if (listBox.SelectedItem != null)
+            {
+                if (listBox.Name == "FrstList")
+                {
+                    Item item = (Item)listBox.SelectedItem;
+                    FrstTitleTBlock.Text = item.TeamName;
+                }
+                else
+                {
+                    Item item = (Item)listBox.SelectedItem;
+                    ScndTitleTBlock.Text = item.TeamName;
+                }
+            }
+        }
+
+        private void AcceptBtn_Click(object sender, RoutedEventArgs e)
+        {
+            // если команды не выбраны
+            if (FrstTitleTBlock.Text == "Команда №1" || ScndTitleTBlock.Text == "Команда №2")
+            {
+                MessageBox.Show("Выберите обе команды!");
+                return;
+            }
+
+            // если выбраны одинаковые команды
+            if (FrstTitleTBlock.Text == ScndTitleTBlock.Text)
+            {
+                MessageBox.Show("Выберите разные команды!");
+                return;
+            }
+
+            MatchWindow wnd = new MatchWindow(nowTournamentId, FrstTitleTBlock.Text, ScndTitleTBlock.Text, roundNum);
+            wnd.Show();
+            Close();
+        }
+
+        private void FrstSearchTBox_KeyDown(object sender, KeyEventArgs e)
+        {
+            if (e.Key == Key.Enter)
+            {
+                List<Matches> matchList = new List<Matches>();
+                List<Teams> teamList = new List<Teams>();
+                if (roundNum != 1)
+                {
+                    matchList = _context.Matches.Where(t => (DbFunctions.Like(t.Teams.Name, "%" + FrstSearchTBox.Text + "%") || DbFunctions.Like(t.Teams1.Name, "%" + FrstSearchTBox.Text + "%"))
+                                                           && t.RoundNum == 1 && t.FK_Tournament_Id == nowTournamentId ).ToList();
+                }
+                else
+                {
+                    teamList = _context.Teams.Where(t => DbFunctions.Like(t.Name, "%" + FrstSearchTBox.Text + "%")).ToList();
+                }
+
+                foreach (Matches match in matchList)
+                {
+                    teamList.Add(match.Teams);
+                    teamList.Add(match.Teams1);
+                }
+
+                List<Item> itemList = new List<Item>();
+                foreach (Teams team in teamList)
+                {
+                    if (team.DissolationDate == null && team.Users.Disciplines.Id == _context.Users.Find(App.UserId).Disciplines.Id)
+                    {
+                        Item item = new Item()
+                        {
+                            TeamName = team.Name,
+                            LogoPath = team.LogoPath
+                            //Country = team.Countries.Name,
+                            //Discipline = team.Users.Disciplines.Name,
+                            //DateOfFoundation = team.FoundationDate.ToString("d")
+                        };
+                        itemList.Add(item);
+                    }
+                }
+
+                FrstList.ItemsSource = new List<byte>();
+                FrstList.ItemsSource = itemList;
+            }
+        }
+
+        private void ScndSearchTBox_KeyDown(object sender, KeyEventArgs e)
+        {
+            if (e.Key == Key.Enter)
+            {
+                List<Matches> matchList = new List<Matches>();
+                List<Teams> teamList = new List<Teams>();
+                if (roundNum != 1)
+                {
+                    matchList = _context.Matches.Where(t => (DbFunctions.Like(t.Teams.Name, "%" + ScndSearchTBox.Text + "%") || DbFunctions.Like(t.Teams1.Name, "%" + ScndSearchTBox.Text + "%"))
+                                                           && t.RoundNum == 1 && t.FK_Tournament_Id == nowTournamentId).ToList();
+                }
+                else
+                {
+                    teamList = _context.Teams.Where(t => DbFunctions.Like(t.Name, "%" + ScndSearchTBox.Text + "%")).ToList();
+                }
+
+                foreach (Matches match in matchList)
+                {
+                    teamList.Add(match.Teams);
+                    teamList.Add(match.Teams1);
+                }
+
+                List<Item> itemList = new List<Item>();
+                foreach (Teams team in teamList)
+                {
+                    if (team.DissolationDate == null && team.Users.Disciplines.Id == _context.Users.Find(App.UserId).Disciplines.Id)
+                    {
+                        Item item = new Item()
+                        {
+                            TeamName = team.Name,
+                            LogoPath = team.LogoPath
+                            //Country = team.Countries.Name,
+                            //Discipline = team.Users.Disciplines.Name,
+                            //DateOfFoundation = team.FoundationDate.ToString("d")
+                        };
+                        itemList.Add(item);
+                    }
+                }
+
+                ScndList.ItemsSource = new List<byte>();
+                ScndList.ItemsSource = itemList;
+            }
+        }
+    }
+
+    class Item
+    {
+        public string TeamName { get; set; }
+        public string LogoPath { get; set; }
+        public string Discipline { get; set; }
+        public string Country { get; set; }
+        public string DateOfFoundation { get; set; }
+    }
+}

+ 81 - 0
Курсовой проект 3.1/Windows/TeamApplicationAddWindow.xaml

@@ -0,0 +1,81 @@
+<Window x:Class="Курсовой_проект_3._1.Windows.TeamApplicationAddWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:uc="clr-namespace:Курсовой_проект_3._1.UserControls"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+        mc:Ignorable="d"
+        Title="TeamApplicationAddWindow" Height="450" Width="800">
+    <Window.Resources>
+        <!-- Button style -->
+        <Style TargetType="Button">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="10"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="WhiteSmoke" TargetName="ButtonBorder">
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </Window.Resources>
+
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition/>
+            <RowDefinition Height="*"/>
+            <RowDefinition Height="3*"/>
+            <RowDefinition/>
+        </Grid.RowDefinitions>
+
+        <TextBlock Grid.Row="0" Text="Заявка" FontSize="22" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        <uc:LimitedTextBlock x:Name="TitleLimTBox" Grid.Row="1" Title="Заголовок:" MaxLength="20" Margin="30 0 30 0" VerticalContentAlignment="Center" FontSize="14"/>
+        <uc:LimitedTextBlock x:Name="TextLimTBox" Grid.Row="2" Title="Заявка:" MaxLength="255" Margin="30 0 30 0" FontSize="14"/>
+        <Button x:Name="CreateBtn" Grid.Row="3" Content="Создать" HorizontalAlignment="Right" MinWidth="200" Margin="0 5 30 5" Click="CreateBtn_Click"/>
+    </Grid>
+</Window>

+ 70 - 0
Курсовой проект 3.1/Windows/TeamApplicationAddWindow.xaml.cs

@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Курсовой_проект_3._1.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для TeamApplicationAddWindow.xaml
+    /// </summary>
+    public partial class TeamApplicationAddWindow : Window
+    {
+        MyTeamContext _context;
+
+        public TeamApplicationAddWindow()
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+        }
+
+        private void CreateBtn_Click(object sender, RoutedEventArgs e)
+        {
+            string title = TitleLimTBox.txtLimitedInput.Text;
+            string text = TextLimTBox.txtLimitedInput.Text;
+
+            if (string.IsNullOrWhiteSpace(title) || string.IsNullOrWhiteSpace(text))
+            {
+                MessageBox.Show("Все поля должны быть заполнены!");
+                return;
+            }
+            else
+            {
+                int teamId = _context.TeamsUsers.Where(tu => tu.FK_User_Id == App.UserId && tu.DateEnd == null).Select(tu => tu.FK_Team_Id).Single();
+
+                TeamApps app = new TeamApps();
+                app.Title = title;
+                app.AppText = text;
+                app.AppDate = DateTime.Now;
+
+                app.FK_Team_Id = teamId;
+
+                List<TeamApps> apps = _context.TeamApps.Where(a => a.FK_Team_Id == teamId).ToList();
+                if (apps.Count() != 0)
+                {
+                    apps[0].Title = title;
+                    apps[0].AppText = text;
+                    apps[0].AppDate = DateTime.Now;
+
+                    MessageBox.Show("Предыдущая заявка изменена!");
+                }
+                else
+                {
+                    _context.TeamApps.Add(app);
+                    MessageBox.Show("Заявка добавлена!");
+                }
+            }
+
+            _context.SaveChanges();
+        }
+    }
+}

+ 114 - 0
Курсовой проект 3.1/Windows/TeamProfileSettingsWindow.xaml

@@ -0,0 +1,114 @@
+<Window x:Class="Курсовой_проект_3._1.Windows.TeamProfileSettingsWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:uc="clr-namespace:Курсовой_проект_3._1.UserControls"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1.Windows"
+        mc:Ignorable="d"
+        Title="TeamProfileSettingsWindow" Height="450" Width="800">
+    <Window.Resources>
+        <!-- Button style -->
+        <Style TargetType="Button">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="5"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="WhiteSmoke" TargetName="ButtonBorder">
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </Window.Resources>
+
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition/>
+            <ColumnDefinition Width="2*"/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="3*"/>
+            <RowDefinition/>
+        </Grid.RowDefinitions>
+
+        <!-- Photo -->
+        <Border Grid.Column="0" Grid.Row="0" BorderBrush="#FF68A4C8" BorderThickness="2" Margin="10">
+            <Image x:Name="LogoImg" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\WithoutPhoto.png" Margin="5"/>
+        </Border>
+        <Button x:Name="ChangePhotoBtn" Grid.Column="0" Grid.Row="1" Margin="20 30 20 30" Content="Выбрать изображение" FontSize="16" FontWeight="SemiBold" Click="ChangePhotoBtn_Click"/>
+
+        <!-- Country, phone, email, about me -->
+        <Grid Grid.Column="1" Grid.Row="0">
+            <Grid.RowDefinitions>
+                <RowDefinition/>
+                <RowDefinition/>
+                <RowDefinition/>
+                <RowDefinition Height="2*"/>
+            </Grid.RowDefinitions>
+
+            <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="5 0 0 0">
+                <TextBlock Text="Страна: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                <ComboBox x:Name="CountryCB" MinWidth="150" Margin="20"/>
+            </StackPanel>
+
+            <StackPanel Grid.Row="1" Orientation="Horizontal" Margin="5 0 0 0">
+                <TextBlock Text="Номер телефона: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                <TextBox x:Name="PhoneNumberTBox" MinWidth="150" Margin="20" VerticalContentAlignment="Center" MaxLength="16"/>
+            </StackPanel>
+
+            <StackPanel Grid.Row="2" Orientation="Horizontal" Margin="5 0 0 0">
+                <TextBlock Text="Email: " FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                <TextBox x:Name="EmailTBox" MinWidth="150" Margin="20" VerticalContentAlignment="Center" MaxLength="16"/>
+            </StackPanel>
+
+            <uc:LimitedTextBlock x:Name="AboutTBox" Grid.Row="3" Title="О команде:" MaxLength="255" TitleFontSize="16" Margin="0 0 10 10"/>
+        </Grid>
+
+        <!-- AcceptBtn -->
+        <Button x:Name="AcceptBtn" Grid.Column="1" Grid.Row="1" Content="Сохранить изменения" FontSize="16" FontWeight="SemiBold" HorizontalAlignment="Right" MinWidth="200" Margin="0 20 20 20" Click="AcceptBtn_Click"/>
+    </Grid>
+</Window>

+ 158 - 0
Курсовой проект 3.1/Windows/TeamProfileSettingsWindow.xaml.cs

@@ -0,0 +1,158 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Курсовой_проект_3._1.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для TeamProfileSettingsWindow.xaml
+    /// </summary>
+    public partial class TeamProfileSettingsWindow : Window
+    {
+        MyTeamContext _context;
+        Teams team;
+        bool isPhotoChanged;
+
+        public TeamProfileSettingsWindow()
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            isPhotoChanged = false;
+
+            List<string> countryList = _context.Countries.Select(c => c.Name).ToList();
+            CountryCB.ItemsSource = countryList;
+
+
+            int teamId = _context.TeamsUsers.Where(tu => tu.FK_User_Id == App.UserId && tu.DateEnd == null).Select(tu => tu.FK_Team_Id).Single();
+            team = _context.Teams.Find(teamId);
+            EmailTBox.Text = team.Email;
+            PhoneNumberTBox.Text = "+" + team.PhoneNumber;
+            CountryCB.Text = team.Countries.Name;
+            AboutTBox.txtLimitedInput.Text = team.About;
+        }
+
+        private void AcceptBtn_Click(object sender, RoutedEventArgs e)
+        {
+            string email, phoneNumber, selectedCountry;
+
+            // проверка на корректность введенной почты
+            if (!string.IsNullOrWhiteSpace(EmailTBox.Text))
+            {
+                email = EmailTBox.Text;
+                string nowEmailTeam = team.Email;
+
+                if (email != nowEmailTeam)
+                {
+                    if (_context.Teams.Where(u => u.Email == email).Count() == 0)
+                    {
+                        if (Func.IsValidEmail(email))
+                        {
+                            team.Email = email;
+                        }
+                        else
+                        {
+                            MessageBox.Show("Некорректный формат Email!");
+                            return;
+                        }
+                    }
+                    else
+                    {
+                        MessageBox.Show("Такой Email уже зарегистриован!");
+                        return;
+                    }
+                }
+            }
+            else
+            {
+                MessageBox.Show("Email должен быть заполнен!");
+                return;
+            }
+
+            // проверка на корректность введенного номера телефона
+            if (!string.IsNullOrWhiteSpace(PhoneNumberTBox.Text))
+            {
+                phoneNumber = PhoneNumberTBox.Text.TrimStart('+');
+                string nowPhoneNumberTeam = team.PhoneNumber;
+
+                if (phoneNumber != nowPhoneNumberTeam)
+                {
+                    if (_context.Teams.Where(u => u.PhoneNumber == phoneNumber).Count() == 0)
+                    {
+                        if (Func.IsValidPhoneNumber(phoneNumber))
+                        {
+                            team.PhoneNumber = phoneNumber;
+                        }
+                        else
+                        {
+                            MessageBox.Show("Некорректный формат номера телефона!");
+                            return;
+                        }
+                    }
+                    else
+                    {
+                        MessageBox.Show("Такой номер телефона уже зарегистриован!");
+                        return;
+                    }
+                }
+            }
+            else
+            {
+                MessageBox.Show("Номер телефона должен быть заполнен!");
+                return;
+            }
+
+            // проверка на корректность страны
+            if (!string.IsNullOrWhiteSpace(CountryCB.Text))
+            {
+                selectedCountry = CountryCB.Text;
+                team.FK_Country_Id = _context.Countries.Where(c => c.Name == selectedCountry).Select(c => c.Id).Single();
+            }
+
+            // проверка на корректность поля о себе
+            team.About = AboutTBox.txtLimitedInput.Text;
+
+            // если фото изменено
+            if (isPhotoChanged)
+            {
+                team.LogoPath = LogoImg.Source.ToString();
+            }
+
+            _context.SaveChanges();
+
+            MessageBox.Show("Изменения успешно применены!");
+        }
+
+        private void ChangePhotoBtn_Click(object sender, RoutedEventArgs e)
+        {
+            // Создаем OpenFileDialog 
+            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
+
+            // Устанавливаем фильтры и стандартное расширение файла
+            dlg.DefaultExt = ".png";
+            dlg.Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif";
+
+            // Отображаем OpenFileDialog
+            Nullable<bool> result = dlg.ShowDialog();
+
+
+            // Получаем и устанавливаем новое изображение 
+            if (result == true)
+            {
+                // Open document 
+                string filename = dlg.FileName;
+                LogoImg.Source = new BitmapImage(new Uri(filename));
+                isPhotoChanged = true;
+            }
+        }
+    }
+}

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 71 - 37
Курсовой проект 3.1/TeamProfileWindow.xaml


+ 406 - 0
Курсовой проект 3.1/Windows/TeamProfileWindow.xaml.cs

@@ -0,0 +1,406 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Windows;
+using System.Windows.Media.Imaging;
+using Курсовой_проект_3._1.Windows;
+
+namespace Курсовой_проект_3._1
+{
+    /// <summary>
+    /// Логика взаимодействия для TeamProfileWindow.xaml
+    /// </summary>
+    public partial class TeamProfileWindow : Window
+    {
+        MyTeamContext _context;
+        int nowTeamId;
+
+        List<PlayerInTeamList> teamList = new List<PlayerInTeamList>();
+
+        List<Match> matchList = new List<Match>();
+        List<int> matchIds = new List<int>();
+        int offsetMatch = 0;
+
+        List<Achievement> achievementList = new List<Achievement>();
+        List<int> tournamentIds = new List<int>();
+        int offsetAchievment = 0;
+
+        public TeamProfileWindow(int teamId)
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            nowTeamId = teamId;
+
+            // Адаптация к размеру окна
+            SizeChanged += MainWindow_SizeChanged;
+
+            // Доступность доп. кнопок
+            if (_context.TeamsUsers.Where(tu => tu.FK_User_Id == App.UserId && tu.FK_Team_Id == nowTeamId && tu.DateEnd == null).Count() > 0)
+            {
+                ExitBtn.Visibility = Visibility.Visible;
+            }
+
+            if (_context.Teams.Find(teamId).FK_Creater_Id == App.UserId)
+            {
+                AddPlayerBtn.Visibility = Visibility.Visible;
+                SettingsBtn.Visibility = Visibility.Visible;
+            }
+
+            // Подгрузка краткой информации
+            Teams team = _context.Teams.Where(t => t.Id == nowTeamId).ToList()[0];
+
+            TeamNameTB.Text = team.Name;
+            CountryTB.Text = "Страна: " + _context.Countries.Where(c => c.Id == team.FK_Country_Id).Select(c => c.Name).Single().ToString();
+            FoundationDateTB.Text = "Дата основания: " + team.FoundationDate.ToString("D");
+
+            PhoneNumberTB.Text = "Номер телефона: " + "+" + team.PhoneNumber;
+            EmailTB.Text = "Email: " + team.Email;
+            AboutTeamTB.Text = "О команде: " + team.About;
+
+            // Подгрузка аватара
+            if (team.LogoPath != null)
+            {
+                TeamLogoImg.Source = new BitmapImage(new Uri(team.LogoPath));
+            }
+
+            // Подгрузка кубков и призовых
+            int frstCupCount = _context.Achievements.Where(a => a.FK_Team_Id == nowTeamId && a.Place == "1").Count();
+            int scndCupCount = _context.Achievements.Where(a => a.FK_Team_Id == nowTeamId && a.Place == "2").Count();
+            int thrdCupCount = _context.Achievements.Where(a => a.FK_Team_Id == nowTeamId && a.Place == "3").Count();
+            decimal prize = 0;
+            if (_context.Achievements.Where(a => a.FK_Team_Id == nowTeamId).Select(a => a.Prize).Count() != 0)
+            {
+                prize = _context.Achievements.Where(a => a.FK_Team_Id == nowTeamId).Select(a => a.Prize).Sum();
+            }
+
+            if (prize == 0)
+            {
+                PriceMoneyTB.Text = "Призовые: " + Convert.ToString(prize) + "$";
+                FirstPlaceCountTB.Text = ":" + Convert.ToString(frstCupCount);
+                SecondPlaceCountTB.Text = ":" + Convert.ToString(scndCupCount);
+                ThirdPlaceCountTB.Text = ":" + Convert.ToString(thrdCupCount);
+            }
+
+            // Подгрузка статистики
+            var (winCount, drawCount, loseCount) = Func.GetWinDrawLoseCountTeam(nowTeamId);
+            int gamesCount = winCount + drawCount + loseCount;
+            if (gamesCount != 0)
+            {
+                LineBarWin.Width = new GridLength(winCount * 100 / gamesCount, GridUnitType.Star);
+                LineBarDraw.Width = new GridLength(drawCount * 100 / gamesCount, GridUnitType.Star);
+                LineBarLose.Width = new GridLength(loseCount * 100 / gamesCount, GridUnitType.Star);
+
+                WinCountTB.Text = winCount.ToString() + " побед";
+                DrawCountTB.Text = drawCount.ToString() + " ничьих";
+                LoseCountTB.Text = loseCount.ToString() + " поражений";
+
+                WinPercentTB.Text = Math.Round(Convert.ToDouble(winCount) * 100.0 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
+                DrawPercentTB.Text = Math.Round(Convert.ToDouble(drawCount) * 100.0 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
+                LosePercentTB.Text = Math.Round(Convert.ToDouble(loseCount) * 100.0 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
+            }
+
+            // Подгрузка состава -- происходит в NowStatusRB_Checked
+            NowStatusRB.IsChecked = true;
+
+            // Подгрузка истории матчей
+            matchIds = Func.GetTeamMatchIds(nowTeamId);
+            int offsetMatchInc = 0;
+            if (matchIds.Count > 5)
+            {
+                for (int i = offsetMatch; i < 5; i++)
+                {
+                    int id = matchIds[i];
+                    matchList.Add(GetMatch(_context.Matches.Where(m => m.Id == id).ToList()[0]));
+                    offsetMatchInc++;
+                }
+            }
+            else
+            {
+                for (int i = offsetMatch; i < matchIds.Count; i++)
+                {
+                    int id = matchIds[i];
+                    matchList.Add(GetMatch(_context.Matches.Where(m => m.Id == id).ToList()[0]));
+                    offsetMatchInc++;
+                }
+            }
+            offsetMatch += offsetMatchInc;
+            MatchesGrid.ItemsSource = matchList;
+
+            // Подгрузка достижений
+            tournamentIds = Func.GetTeamTournamentIds(nowTeamId);
+            int offsetAchievementInc = 0;
+            if (tournamentIds.Count > 5)
+            {
+                for (int i = 0; i < 5; i++)
+                {
+                    achievementList.Add(GetAchievement(nowTeamId, tournamentIds[i]));
+                    offsetAchievementInc++;
+                }
+            }
+            else
+            {
+                for (int i = 0; i < tournamentIds.Count; i++)
+                {
+                    achievementList.Add(GetAchievement(nowTeamId, tournamentIds[i]));
+                    offsetAchievementInc++;
+                }
+            }
+            offsetAchievment += offsetAchievementInc;
+            AchievementDataGrid.ItemsSource = achievementList;
+        }
+
+        private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
+        {
+            ProfileDockPanel.MinHeight = MyWindow.Height * 4 / 10;
+            ProfileDockPanel.MaxHeight = ProfileDockPanel.MinHeight + 100;
+        }
+
+        private void NowStatusRB_Checked(object sender, RoutedEventArgs e)
+        {
+            TeamListStatusExpander.Header = NowStatusRB.Content;
+            TeamListStatusExpander.IsExpanded = false;
+
+            teamList = new List<PlayerInTeamList>();
+            List<int> userIds = Func.GetPlayerIdsInTeamPresent(nowTeamId);
+            foreach (int userId in userIds)
+            {
+                teamList.Add(GetPlayerInTeamList(userId));
+            }
+            TeamLB.ItemsSource = new List<int>();
+            TeamLB.ItemsSource = teamList;
+        }
+
+        private void PastStatusRB_Checked(object sender, RoutedEventArgs e)
+        {
+            TeamListStatusExpander.Header = PastStatusRB.Content;
+            TeamListStatusExpander.IsExpanded = false;
+
+            teamList = new List<PlayerInTeamList>();
+            List<int> userIds = Func.GetPlayerIdsInTeamPast(nowTeamId);
+            foreach (int userId in userIds)
+            {
+                teamList.Add(GetPlayerInTeamList(userId));
+            }
+            TeamLB.ItemsSource = new List<int>();
+            TeamLB.ItemsSource = teamList;
+        }
+
+        private void MoreAchievementBtn_Click(object sender, RoutedEventArgs e)
+        {
+            if (tournamentIds.Count <= achievementList.Count)
+            {
+                MessageBox.Show("Больше достижений нет!");
+                return;
+            }
+
+            int offsetInc = 0;
+            if (tournamentIds.Count - achievementList.Count > 5)
+            {
+                for (int i = offsetAchievment; i < offsetAchievment + 5; i++)
+                {
+                    achievementList.Add(GetAchievement(nowTeamId, tournamentIds[i]));
+                    offsetInc++;
+                }
+                offsetAchievment += offsetInc;
+            }
+            else
+            {
+                int achievementListCount = achievementList.Count;
+                for (int i = offsetAchievment; i < tournamentIds.Count - achievementListCount + offsetAchievment; i++)
+                {
+                    achievementList.Add(GetAchievement(nowTeamId, tournamentIds[i]));
+                }
+            }
+            AchievementDataGrid.ItemsSource = new List<Achievement>();
+            AchievementDataGrid.ItemsSource = achievementList;
+        }
+
+        private void MoreGamesBtn_Click(object sender, RoutedEventArgs e)
+        {
+            if (matchIds.Count == matchList.Count)
+            {
+                MessageBox.Show("Больше матчей нет!");
+                return;
+            }
+
+            int offsetInc = 0;
+            if (matchIds.Count - matchList.Count > 5)
+            {
+                for (int i = offsetMatch; i < offsetMatch + 5; i++)
+                {
+                    matchList.Add(GetMatch(_context.Matches.Where(m => m.Id == matchIds[i]).ToList()[0]));
+                    offsetInc++;
+                }
+                offsetMatch += offsetInc;
+            }
+            else
+            {
+                int matchListCount = matchList.Count;
+                for (int i = offsetMatch; i < matchIds.Count - matchListCount + offsetMatch; i++)
+                {
+                    matchList.Add(GetMatch(_context.Matches.Where(m => m.Id == matchIds[i]).ToList()[0]));
+                }
+            }
+            MatchesGrid.ItemsSource = new List<Match>();
+            MatchesGrid.ItemsSource = matchList;
+        }
+
+        private void AddPlayerBtn_Click(object sender, RoutedEventArgs e)
+        {
+            AddPlayerInTeamWindow wnd = new AddPlayerInTeamWindow();
+            wnd.ShowDialog();
+        }
+
+        private void SettingsBtn_Click(object sender, RoutedEventArgs e)
+        {
+            TeamProfileSettingsWindow wnd = new TeamProfileSettingsWindow();
+            wnd.ShowDialog();
+        }
+
+        private void ExitBtn_Click(object sender, RoutedEventArgs e)
+        {
+            TeamsUsers teamUsersRow = _context.TeamsUsers.Where(tu => tu.FK_User_Id == App.UserId && tu.FK_Team_Id == nowTeamId && tu.DateEnd == null).FirstOrDefault();
+            teamUsersRow.DateEnd = DateTime.Now;
+
+            _context.SaveChanges();
+
+            // переинициализируем окном
+            TeamProfileWindow wnd = new TeamProfileWindow(nowTeamId);
+            wnd.Show();
+            Close();
+        }
+
+        private void ToMainBtn_Click(object sender, RoutedEventArgs e)
+        {
+            ApplicationWindow wnd = new ApplicationWindow();
+            wnd.Show();
+            Close();
+        }
+
+        private void ToSearchBtn_Click(object sender, RoutedEventArgs e)
+        {
+            SearchWindow wnd = new SearchWindow();
+            wnd.ShowDialog();
+        }
+
+        private void ToProfileBtn_Click(object sender, RoutedEventArgs e)
+        {
+            MainWindow wnd = new MainWindow(App.UserId);
+            wnd.Show();
+            Close();
+        }
+
+        // Возвращает объект класса PlayerInTeamList
+        private PlayerInTeamList GetPlayerInTeamList(int userId)
+        {
+            PlayerInTeamList player = new PlayerInTeamList();
+
+            Users user = _context.Users.Find(userId);
+
+            // имя
+            player.RealName = $"{user.LName} {user.FName} {user.MName}";
+            player.Nickname = user.Nickname;
+
+            // фото игрока
+            if (user.PhotoPath != null)
+            {
+                player.UserPhotoPath = user.PhotoPath;
+            }
+            else
+            {
+                player.UserPhotoPath = "C:/Users/nikich4523/source/repos/Курсовой проект 3.1/Images/WithoutPhoto.png";
+            }
+
+            // иконка страны
+            if (user.Countries.IconPath != null)
+            {
+                player.CountryIconPath = user.Countries.IconPath;
+            }
+            else
+            {
+                player.CountryIconPath = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\countrys - 24\_unknown.png";
+            }
+
+            // даты в команде
+            string dateIn = _context.TeamsUsers.Where(tu => tu.FK_Team_Id == nowTeamId && tu.FK_User_Id == userId).Select(tu => tu.DateStart).ToList()[0].ToString("d");
+            string dateOut = _context.TeamsUsers.Where(tu => tu.FK_Team_Id == nowTeamId && tu.FK_User_Id == userId).Select(tu => tu.DateEnd).ToList()[0] == null? "наст. время" : _context.TeamsUsers.Where(tu => tu.FK_Team_Id == nowTeamId && tu.FK_User_Id == userId).Select(tu => tu.DateStart).ToList()[0].ToString("d");
+            player.Dates = dateIn  + " - " + dateOut;
+
+
+            // статистика в команде
+            int winCount, drawCount, loseCount;
+            (winCount, drawCount, loseCount) = Func.GetWinDrawLoseCountUserInOneTeam(userId, nowTeamId);
+            player.Statistick = winCount.ToString() + " побед, " + drawCount.ToString() + " ничьих, " + loseCount.ToString() + " поражений";
+
+            return player;
+        }
+
+        // Возвращает объект класса Achievment
+        private Achievement GetAchievement(int teamId, int tournamentId)
+        {
+            Achievement achievement = new Achievement();
+            Tournaments tournament = _context.Tournaments.Where(t => t.Id == tournamentId).ToList()[0];
+
+
+            string place = Func.GetPlaceInTournament(tournamentId, teamId);
+            int prize = Func.GetPrizeInTournament(tournamentId, teamId);
+
+            achievement.Tournament = tournament.Name;
+            achievement.Venue = tournament.Venue + ",";
+            achievement.DateOfVenue = tournament.DateStart.ToString("d") + " - " + tournament.DateStart.ToString("d");
+            achievement.Place = place;
+            achievement.Prize = prize.ToString();
+            achievement.PrizeFond = tournament.PrizeFond.ToString();
+
+            return achievement;
+        }
+
+        // Возвращает объект класса Match
+        private Match GetMatch(Matches oldMatch)
+        {
+            Match match = new Match();
+            match.FrstTeamName = Func.GetTeamName(oldMatch.FK_FrstTeam_Id);
+            match.ScndTeamName = Func.GetTeamName(oldMatch.FK_ScndTeam_Id);
+            match.Scores = oldMatch.FrstScore + " : " + oldMatch.ScndScore;
+            match.Tournament = Func.GetTournamentName(oldMatch.FK_Tournament_Id);
+            match.GameDate = oldMatch.GameDate.ToString("D");
+
+            if (oldMatch.FK_WinnerTeam_Id != 1)
+            {
+                if (oldMatch.FK_WinnerTeam_Id == oldMatch.FK_FrstTeam_Id)
+                {
+                    match.WinTeam = match.FrstTeamName;
+                }
+                else
+                {
+                    match.WinTeam = match.ScndTeamName;
+                }
+            }
+
+            return match;
+        }
+    }
+
+    // Класс, описывающий объект/элемент ListBox - TeamListGroupBox
+    public class PlayerInTeamList
+    {
+        public string UserPhotoPath { get; set; }
+        public string CountryIconPath { get; set; }
+        public string Nickname { get; set; }
+        public string RealName { get; set; }
+        public string Dates { get; set; }
+        public string Statistick { get; set; }
+    }
+
+    // Класс, описывающий объект/элемент DataGrid - AchievementListGroupBox
+    public class Achievement
+    {
+        public string Place { get; set; }
+        public string Tournament { get; set; }
+        public string Venue { get; set; }
+        public string DateOfVenue { get; set; }
+        public string Prize { get; set; }
+        public string PrizeFond { get; set; }
+    }
+}

+ 294 - 0
Курсовой проект 3.1/Windows/TournamentWindow.xaml

@@ -0,0 +1,294 @@
+<Window x:Class="Курсовой_проект_3._1.TournamentWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:uc="clr-namespace:Курсовой_проект_3._1.UserControls"
+        xmlns:local="clr-namespace:Курсовой_проект_3._1"
+        mc:Ignorable="d"
+        Title="TournamentWindow" Height="650" Width="1000" x:Name="MyWindow" WindowStartupLocation="CenterScreen">
+    <Window.Resources>
+        <!-- Grid styles -->
+        <Style TargetType="Grid">
+            <Setter Property="Background" Value="#fffff0"/>
+        </Style>
+        
+        <!-- Result List Box template -->
+        <DataTemplate x:Key="ResultLBTemplate">
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="0.3*"/>
+                    <ColumnDefinition Width="0.5*"/>
+                    <ColumnDefinition Width="0.5*"/>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="0.6*"/>
+                </Grid.ColumnDefinitions>
+                
+                <!-- Place -->
+                <TextBlock Text="{Binding Path=Place}" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18" FontWeight="SemiBold" Visibility="Visible"/>
+                <Image Source="{Binding Path=PlacePath}" Grid.Column="0" Margin="5" MaxHeight="30" Visibility="Visible"/>
+
+                <!-- Logo -->
+                <Image Grid.Column="1" Source="{Binding Path=LogoPath}" MaxHeight="120" MaxWidth="120" Margin="5"/>
+
+                <!-- CountryIcon, TeamName -->
+                <Grid Grid.Column="2" Grid.ColumnSpan="2">
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                        <Image Source="{Binding Path=CountryIconPath}" MaxHeight="50" MaxWidth="50"/>
+                        <TextBlock Text="{Binding Path=TeamName}" FontSize="30" FontWeight="SemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                    </StackPanel>
+                </Grid>
+
+                <!-- Prize -->
+                <Viewbox Grid.Column="4" Stretch="Uniform" HorizontalAlignment="Left" Margin="40">
+                    <TextBlock Text="{Binding Path=Prize}" FontWeight="SemiBold"/>
+                </Viewbox>
+            </Grid>
+        </DataTemplate>
+
+        <!-- TextBlock styles -->
+        <Style TargetType="TextBox">
+            <Setter Property="VerticalAlignment" Value="Center"/>
+            
+            <!-- Border -->
+            <Setter Property="BorderThickness" Value="1 1 2 2"/>
+            <Setter Property="BorderBrush" Value="Black"/>
+        </Style>
+
+        <!-- Buttom style -->
+        <Style TargetType="Button">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="Button">
+                        <Border CornerRadius="0"
+                                Background="{TemplateBinding Background}" x:Name="ButtonBorder">
+
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="True">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsMouseOver" Value="True">
+                                <Setter Property="Background" Value="WhiteSmoke" TargetName="ButtonBorder">
+                                </Setter>
+                            </Trigger>
+
+                            <Trigger Property="IsEnabled" Value="False">
+                                <Setter Property="Background" TargetName="ButtonBorder">
+                                    <Setter.Value>
+                                        <RadialGradientBrush GradientOrigin="0.496,1.052">
+                                            <RadialGradientBrush.RelativeTransform>
+                                                <TransformGroup>
+                                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
+                                                    <TranslateTransform X="0.02" Y="0.3"/>
+                                                </TransformGroup>
+                                            </RadialGradientBrush.RelativeTransform>
+                                            <GradientStop Color="#00000000" Offset="1"/>
+                                            <GradientStop Color="#FF303030" Offset="0.3"/>
+                                        </RadialGradientBrush>
+                                    </Setter.Value>
+                                </Setter>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </Window.Resources>
+
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="0.1*"></RowDefinition>
+            <RowDefinition Height="0.05*"></RowDefinition>
+            <RowDefinition Height="*"></RowDefinition>
+        </Grid.RowDefinitions>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition></ColumnDefinition>
+        </Grid.ColumnDefinitions>
+
+        <!-- Navigation -->
+        <Grid  Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Background="#68A4C8">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition/>
+                <ColumnDefinition/>
+                <ColumnDefinition/>
+            </Grid.ColumnDefinitions>
+
+            <Border Grid.Column="0" BorderBrush="Black" BorderThickness="0 0 1 0">
+                <Button x:Name="ToMainBtn" Background="#68A4C8" Content="Главная" Foreground="White" FontSize="18" FontWeight="SemiBold" Style="{StaticResource NavigationBtnTemplate}" Click="ToMainBtn_Click"/>
+            </Border>
+
+            <Border Grid.Column="1" BorderBrush="Black" BorderThickness="0 0 1 0">
+                <Button x:Name="ToSearchBtn" Grid.Column="1" Background="#68A4C8" Content="Поиск" Foreground="White" FontSize="18" FontWeight="SemiBold" Style="{StaticResource NavigationBtnTemplate}" Click="ToSearchBtn_Click"/>
+            </Border>
+
+            <Border Grid.Column="2">
+                <Button x:Name="ToProfileBtn" Grid.Column="2" Background="#68A4C8" Content="Профиль" Foreground="White" FontSize="18" FontWeight="SemiBold" Style="{StaticResource NavigationBtnTemplate}" Click="ToProfileBtn_Click"/>
+            </Border>
+        </Grid>
+
+        <!-- BackStep -->
+        <StackPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Background="#81AEC8" Orientation="Horizontal"/>
+
+        <!-- MAIN -->
+        <ScrollViewer Grid.Row="2" Grid.Column="0">
+            <Grid Background="White">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="0.1*"/>
+                    <RowDefinition Height="0.01*" MaxHeight="2" MinHeight="2"/>
+                    <RowDefinition Height="0.1*"/>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                </Grid.RowDefinitions>
+
+                <!-- Tournament Name -->
+                <Grid Grid.Row="0" Background="White">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="1.8*"/>
+                        <ColumnDefinition Width="1.2*"/>
+                        <ColumnDefinition Width="0.2*"/>
+                        <ColumnDefinition Width="3*"/>
+                        <ColumnDefinition Width="1.8*"/>
+                    </Grid.ColumnDefinitions>
+
+                    <Grid Grid.Column="1" HorizontalAlignment="Right" Background="White">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="0.25*"/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+
+                        <Image x:Name="DiciplineLogoImg" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\Default\discipline.png"/>
+                        <Viewbox Grid.Column="1" Stretch="Uniform" Margin="5 0 0 0">
+                            <TextBlock x:Name="DiciplineNameTB" Text="Game" FontWeight="Thin"/>
+                        </Viewbox>
+                    </Grid>
+
+                    <TextBlock Grid.Column="2" Text="|" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="18" Foreground="#FF68A4C8"/>
+
+                    <Viewbox Grid.Column="3" Stretch="Uniform" HorizontalAlignment="Left">
+                        <TextBlock x:Name="TournamentNameTB" Text="ESL One Summer 2021" FontWeight="Thin"/>
+                    </Viewbox>
+                </Grid>
+
+                <!-- Separator -->
+                <Rectangle Grid.Row="1" Fill="#FF68A4C8" Margin="10 0 10 0" RadiusX="3" RadiusY="3"/>
+
+                <!-- Tournament Info -->
+                <Grid Background="White" Grid.Row="2" Margin="0 5 0 0">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition MinWidth="150"/>
+                        <ColumnDefinition MinWidth="150"/>
+                        <ColumnDefinition MinWidth="100"/>
+                        <ColumnDefinition MinWidth="50"/>
+                        <ColumnDefinition MinWidth="50"/>
+                    </Grid.ColumnDefinitions>
+
+                    
+                    <!-- Name -->
+                    <Grid Grid.Column="0" HorizontalAlignment="Center" Background="White">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="0.8*"/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+
+                        <TextBlock Grid.Column="0" FontWeight="SemiBold" VerticalAlignment="Center" TextAlignment="Center" Margin="0 0 6 0">Название <LineBreak/> турнира:</TextBlock>
+                        <TextBlock x:Name="TournamentShortNameTB" Grid.Column="2" TextWrapping="Wrap" Text="ESL One Summer 2021" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+                    </Grid>
+
+                    <!-- Organizer -->
+                    <Grid Grid.Column="1" HorizontalAlignment="Center" Background="White">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="0.8*"/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+
+                        <TextBlock Grid.Column="0" Text="Организатор:" FontWeight="SemiBold" VerticalAlignment="Center" Margin="0 0 5 0"/>
+                        <TextBlock x:Name="OrganizerTB" Grid.Column="2" TextWrapping="Wrap" Text="PGL" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+                    </Grid>
+
+                    <!-- Venue -->
+                    <Grid Grid.Column="2" HorizontalAlignment="Center" Background="White">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="0.8*"/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+
+                        <TextBlock Grid.Column="0" Margin="0 0 10 0" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" FontWeight="SemiBold">Место <LineBreak/> проведения:</TextBlock>
+                        <TextBlock x:Name="VenueTB" Grid.Column="2" TextWrapping="Wrap" Text="Онлайн" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+                    </Grid>
+
+                    <!-- Format -->
+                    <Grid Grid.Column="3" HorizontalAlignment="Center" Background="White">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="0.8*"/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+
+                        <TextBlock Grid.Column="0" Text="Формат:" VerticalAlignment="Center" FontWeight="SemiBold" Margin="0 0 5 0"/>
+                        <TextBlock x:Name="FormatTB" Grid.Column="2" TextWrapping="Wrap" Text="Single Elimination" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+                    </Grid>
+
+                    <!-- PrizeFond -->
+                    <Grid Grid.Column="4" HorizontalAlignment="Center" Background="White">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="0.8*"/>
+                            <ColumnDefinition/>
+                        </Grid.ColumnDefinitions>
+
+                        <TextBlock Grid.Column="0" Margin="0 0 10 0" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" FontWeight="SemiBold">Сумма<LineBreak/>призовых:</TextBlock>
+                        <TextBlock x:Name="PrizeFondTB" Grid.Column="2" TextWrapping="Wrap" Text="40 000$" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+                    </Grid>
+                </Grid>
+
+                <!-- TOURNAMENT BRACKET -->
+                <Border Grid.Row="3" BorderBrush="#FF68A4C8" BorderThickness="2" Margin="10" CornerRadius="1" MaxHeight="400">
+                    <ScrollViewer Background="WhiteSmoke">
+                        <Grid x:Name="MainGrid" Margin="0 20 0 20">
+                        </Grid>
+                    </ScrollViewer>
+                </Border>
+
+                <!-- Results -->
+                <GroupBox Grid.Row="4" MinHeight="100" Margin="300 10 300 10" BorderThickness="2" BorderBrush="#FF68A4C8">
+                    <GroupBox.Header>
+                        <Grid>
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition/>
+                                <ColumnDefinition/>
+                            </Grid.ColumnDefinitions>
+
+                            <TextBlock Grid.Column="0" Text="Результаты: "/>
+                            <Button x:Name="AddResultBtn" Grid.Column="1" Content="+" FontSize="12" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="1 3 1 3" MinWidth="20" Click="AddResultBtn_Click" Visibility="Collapsed"/>
+                        </Grid>
+                    </GroupBox.Header>
+                    
+                    <Grid>
+                        <ListBox x:Name="ResultLB" ItemTemplate="{StaticResource ResultLBTemplate}" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" MouseDoubleClick="ResultLB_MouseDoubleClick"/>
+                    </Grid>
+                </GroupBox>
+            </Grid>
+        </ScrollViewer>
+    </Grid>
+</Window>

+ 442 - 0
Курсовой проект 3.1/Windows/TournamentWindow.xaml.cs

@@ -0,0 +1,442 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using Курсовой_проект_3._1.UserControls;
+using Курсовой_проект_3._1.Windows;
+
+namespace Курсовой_проект_3._1
+{
+    /// <summary>
+    /// Логика взаимодействия для TournamentWindow.xaml
+    /// </summary>
+    public partial class TournamentWindow : Window
+    {
+        MyTeamContext _context;
+        int nowTournamentId;
+        bool isAccess;
+
+        public TournamentWindow(int tournamentId)
+        {
+            InitializeComponent();
+            _context = new MyTeamContext();
+            nowTournamentId = tournamentId;
+            isAccess = false;
+
+            // Подгрузка краткой информации
+            Tournaments tournament = _context.Tournaments.Find(nowTournamentId);
+
+            // Доступность кнопок
+            if (App.UserId == tournament.FK_Organizer_Id)
+            {
+                AddResultBtn.Visibility = Visibility.Visible;
+                isAccess = true;
+            }
+
+            if (tournament.Users.Disciplines != null)
+            {
+                DiciplineLogoImg.Source = new BitmapImage(new Uri(tournament.Users.Disciplines.IconPath));
+                DiciplineNameTB.Text = tournament.Users.Disciplines.Name;
+            }
+            TournamentNameTB.Text = tournament.Name;
+            TournamentShortNameTB.Text = tournament.Name;
+            OrganizerTB.Text = tournament.Users.Nickname;
+            VenueTB.Text = tournament.Venue;
+            FormatTB.Text = tournament.TournamentFormats.Name;
+            PrizeFondTB.Text = Func.ConvertIntToStringMoney(tournament.PrizeFond) + "$";
+
+            // Получаем кол-во команд на турнире
+            int teamCount = _context.Tournaments.Find(nowTournamentId).MaxTeamsCount;
+
+            // Создаем сетку на такой размер
+            MainGrid.Children.Add(GenerateSingleEliminationBracket(teamCount));
+
+            // Получаем все матчи турнира
+            List<TournamentMatch> matchList = new List<TournamentMatch>();
+            List<Matches> matchesDb = _context.Matches.Where(m => m.FK_Tournament_Id == nowTournamentId).OrderBy(m => m.GameDate).ToList();
+            int addGameCounter = 0;
+            foreach (Matches match in matchesDb)
+            {
+                matchList.Add(new TournamentMatch(match.FK_FrstTeam_Id.ToString(), match.FK_ScndTeam_Id.ToString(), match.FrstScore.ToString(), 
+                                                  match.ScndScore.ToString(), match.RoundNum, match.FK_WinnerTeam_Id.ToString(), addGameCounter));
+                addGameCounter++;
+            }
+
+            // Высчитывание размеров сетки
+            int roundCount = (int)Math.Log(teamCount, 2);  // количество раундов
+            int gridColumnCount = roundCount + roundCount - 1 + 2;  // количество колонок в grid
+            int gridRowCount = teamCount + (teamCount - 2) + 4;  // количество строк в grid
+            int roundCounter = 0;
+            int gameCounter = 0;
+            Grid bracketGrid = (Grid)MainGrid.Children[0];
+            for (int column = 1; column < gridColumnCount; column++)
+            {
+                if (column % 2 != 0)
+                {
+                    roundCounter++;
+
+                    for (int row = 0; row < gridRowCount; row++)
+                    {
+
+                        UIElement element = GetElementInGridPosition(column, row, bracketGrid);
+
+                        if (element is MatchControl)
+                        {
+                            foreach (TournamentMatch match in matchList)
+                            {
+                                if (match.roundNum == roundCounter && match.gameNum == gameCounter)
+                                {
+                                    bracketGrid.Children.Remove(GetElementInGridPosition(column, row, bracketGrid));
+
+                                    MatchControl newElement = new MatchControl();
+                                    if (isAccess)
+                                    {
+                                        newElement.MouseDown += MatchControl_Click;
+                                        newElement.Cursor = Cursors.Hand;
+                                    }
+
+                                    newElement.TeamNameFrst = _context.Teams.Find(Convert.ToInt32(match.teamIdFrst)).Name;
+                                    newElement.ScoreFrst = match.ScoreFrst;
+
+                                    newElement.TeamNameScnd = _context.Teams.Find(Convert.ToInt32(match.teamIdScnd)).Name;
+                                    newElement.ScoreScnd = match.ScoreScnd;
+                                    newElement.RoundNum = roundCounter.ToString();
+
+
+
+                                    Grid.SetColumn(newElement, column);
+                                    Grid.SetRow(newElement, row);
+                                    Grid.SetRowSpan(newElement, 2);
+                                    bracketGrid.Children.Add(newElement);
+                                }
+                            }
+
+                            gameCounter++;
+                        }
+                    }
+                }
+            }
+
+            // Результаты
+            List<Achievements> achievementList = _context.Achievements.Where(a => a.FK_Tournament_Id == nowTournamentId).ToList();
+
+            List<Result> resultList = new List<Result>();
+            foreach (Achievements achievement in achievementList)
+            {
+                Result result = new Result();
+                result.Place = achievement.Place;
+                result.Prize = Func.ConvertIntToStringMoney(achievement.Prize) + " $";
+                result.TeamName = achievement.Teams.Name;
+                result.LogoPath = _context.Teams.Find(achievement.FK_Team_Id).LogoPath;
+                result.CountryIconPath = _context.Teams.Find(achievement.FK_Team_Id).Countries.IconPath;
+
+                if (result.Place == "1")
+                {
+                    result.Place = "";
+                    result.PlacePath = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\Default\cupGold.png";
+                }
+                else if (result.Place == "2")
+                {
+                    result.Place = "";
+                    result.PlacePath = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\Default\cupSilver.png";
+                }
+                else if (result.Place == "3")
+                {
+                    result.Place = "";
+                    result.PlacePath = @"C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Курсовой проект 3.1\img\Default\cupBronze.png";
+                }
+
+                resultList.Add(result);
+            }
+
+            ResultLB.ItemsSource = resultList;
+        }
+
+        // Генерирует турнирную сетку SingleElimination (работает со степенями 2ки) - работает не трогай
+        public Grid GenerateSingleEliminationBracket(int teamCount)
+        {
+            Grid grid = new Grid();
+            grid.Background = Brushes.WhiteSmoke;
+            grid.ShowGridLines = false;
+
+            // Создание Grid'ов ///
+            // Высчитывание размеров сетки
+            int roundCount = (int)Math.Log(teamCount, 2);  // количество раундов
+            int gridColumnCount = roundCount + roundCount - 1 + 2;  // количество колонок в grid
+            int gridRowCount = teamCount + (teamCount - 2) + 4;  // количество строк в grid
+
+            // Добавление колонок
+            for (int i = 0; i < gridColumnCount; i++)
+            {
+                grid.ColumnDefinitions.Add(new ColumnDefinition());
+            }
+
+            // Добавление строк
+            for (int j = 0; j < gridRowCount; j++)
+            {
+                grid.RowDefinitions.Add(new RowDefinition());
+            }
+
+            // Всё остальное
+            int roundNum = 1;  // номер раунда
+            int skipStart = 2;  // сколько пропустить строк с начала
+            int skipBetween = 2;  // сколько пропускать строк между играми
+
+            // Наполнение сетки
+            for (int i = 1; i < gridColumnCount - 1; i++)
+            {
+                if (i % 2 != 0)  // раунды через одну колонку
+                {
+                    for (int j = skipStart; j < gridRowCount - 2; j++)
+                    {
+                        MatchControl match = new MatchControl();
+                        if (isAccess)
+                        {
+                            match.MouseDown += MatchControl_Click;
+                            match.Cursor = Cursors.Hand;
+                            match.RoundNum = roundNum.ToString();
+                        }
+
+                        Grid.SetColumn(match, i);
+                        Grid.SetRow(match, j);
+                        Grid.SetRowSpan(match, 2);
+                        grid.Children.Add(match);
+
+                        // после каждой игры нужен пропуск (skipBetween) до следующей игры
+                        j += skipBetween + 1;
+
+                    }
+                    // пересчет значений для следующего раунда
+                    roundNum++;
+                    int gamesInRoundCount = (int)(teamCount / Math.Pow(2, roundNum));
+                    skipStart *= 2;
+                    skipBetween = roundNum == roundCount ? skipStart : (gridRowCount - (skipStart * 2) - (gamesInRoundCount * 2)) / (gamesInRoundCount - 1);
+                }
+            }
+
+            // соединяющие линии между раундами
+            int skipStartOrEnd = 4;
+            for (int i = 2; i < gridColumnCount - 1; i++)
+            {
+                if (i % 2 == 0)
+                {
+                    if (i == 2)
+                    {
+                        for (int j = 4; j < gridRowCount; j++)
+                        {
+                            TextBox linetb1 = new TextBox();
+                            linetb1.BorderBrush = Brushes.Black;
+                            linetb1.IsReadOnly = true;
+                            var bc = new BrushConverter();
+                            linetb1.Background = Brushes.Transparent;
+                            linetb1.BorderThickness = new Thickness(2, 0, 0, 2);
+
+                            Grid.SetColumn(linetb1, i);
+                            Grid.SetRow(linetb1, j);
+                            grid.Children.Add(linetb1);
+
+                            TextBox linetb2 = new TextBox();
+                            linetb2.BorderBrush = Brushes.Black;
+                            linetb2.IsReadOnly = true;
+                            linetb2.Background = Brushes.Transparent;
+                            linetb2.BorderThickness = new Thickness(2, 2, 0, 0);
+
+                            Grid.SetColumn(linetb2, i);
+                            Grid.SetRow(linetb2, j + 1);
+                            grid.Children.Add(linetb2);
+
+                            j += 7;
+                        }
+                    }
+                    else
+                    {
+                        int drawStatus = 0; // 0 - не рисовать, 1 - leftonly
+
+                        for (int j = 4; j < gridRowCount - skipStartOrEnd; j++)
+                        {
+                            // тут leftonly
+                            if (drawStatus == 1)
+                            {
+                                // leftonly
+                                TextBox linetb3 = new TextBox();
+                                linetb3.BorderBrush = Brushes.Black;
+                                linetb3.IsReadOnly = true;
+                                var bc = new BrushConverter();
+                                linetb3.Background = Brushes.Transparent;
+                                linetb3.BorderThickness = new Thickness(2, 0, 0, 0);
+
+                                Grid.SetColumn(linetb3, i);
+                                Grid.SetRow(linetb3, j);
+                                grid.Children.Add(linetb3);
+                            }
+
+
+                            // тут проверка
+                            if (GetElementInGridPosition(i - 1, j, grid) is MatchControl)
+                            {
+                                if (drawStatus == 1)
+                                {
+                                    grid.Children.Remove(GetElementInGridPosition(i, j, grid));
+                                }
+
+                                j += 2; // пропуск текущего MatchControl
+
+                                if (j < gridRowCount - skipStartOrEnd)
+                                {
+                                    // leftonly
+                                    TextBox linetb3 = new TextBox();
+                                    linetb3.BorderBrush = Brushes.Black;
+                                    linetb3.IsReadOnly = true;
+                                    var bc = new BrushConverter();
+                                    linetb3.Background = Brushes.Transparent;
+                                    linetb3.BorderThickness = new Thickness(2, 0, 0, 0);
+
+                                    Grid.SetColumn(linetb3, i);
+                                    Grid.SetRow(linetb3, j);
+                                    grid.Children.Add(linetb3);
+                                }
+
+                                drawStatus = 1;
+                            }
+                            else if (GetElementInGridPosition(i + 1, j, grid) is MatchControl)
+                            {
+                                var bc = new BrushConverter();
+
+                                // leftbottom
+                                TextBox linetb1 = new TextBox();
+                                linetb1.BorderBrush = Brushes.Black;
+                                linetb1.IsReadOnly = true;
+                                linetb1.Background = Brushes.Transparent;
+                                linetb1.BorderThickness = new Thickness(2, 0, 0, 2);
+                                Grid.SetColumn(linetb1, i);
+                                Grid.SetRow(linetb1, j);
+                                grid.Children.Add(linetb1);
+
+                                j++; // переход на следующую строку
+
+                                // lefttop
+                                TextBox linetb2 = new TextBox();
+                                linetb2.BorderBrush = Brushes.Black;
+                                linetb2.IsReadOnly = true;
+                                linetb2.Background = Brushes.Transparent;
+                                linetb2.BorderThickness = new Thickness(2, 2, 0, 0);
+                                Grid.SetColumn(linetb2, i);
+                                Grid.SetRow(linetb2, j);
+                                grid.Children.Add(linetb2);
+                            }
+                        }
+                        skipStartOrEnd = skipStartOrEnd * 2;
+                    }
+                }
+            }
+            
+            return grid;
+        }
+
+        private UIElement GetElementInGridPosition(int column, int row, Grid RootGrid)
+        {
+            foreach (UIElement element in RootGrid.Children)
+            {
+                if (Grid.GetColumn(element) == column && Grid.GetRow(element) == row)
+                    return element;
+            }
+
+            return null;
+        }
+
+        private void MatchControl_Click(object sender, RoutedEventArgs e)
+        {
+            MatchControl match = (MatchControl)sender;
+            if(match.TeamNameFrst == "" && match.TeamNameScnd == "")
+            {
+                SelectTeamsInMatchWindow wnd = new SelectTeamsInMatchWindow(nowTournamentId, Convert.ToInt32(match.RoundNum));
+                wnd.ShowDialog();
+            }
+            else
+            {
+                MatchWindow wnd = new MatchWindow(match, nowTournamentId, Convert.ToInt32(match.RoundNum));
+                wnd.ShowDialog();
+            }
+        }
+
+        private void AddResultBtn_Click(object sender, RoutedEventArgs e)
+        {
+            ResultAddWindow wnd = new ResultAddWindow(nowTournamentId);
+            wnd.ShowDialog();
+        }
+
+        private void ResultLB_MouseDoubleClick(object sender, MouseButtonEventArgs e)
+        {
+            if (ResultLB.SelectedItem != null)
+            {
+                Result result = (Result)ResultLB.SelectedItem;
+                ResultAddWindow wnd = new ResultAddWindow(result.TeamName, nowTournamentId);
+                wnd.ShowDialog();
+            }
+        }
+
+        private void ToMainBtn_Click(object sender, RoutedEventArgs e)
+        {
+            ApplicationWindow wnd = new ApplicationWindow();
+            wnd.Show();
+            Close();
+        }
+
+        private void ToSearchBtn_Click(object sender, RoutedEventArgs e)
+        {
+            SearchWindow wnd = new SearchWindow();
+            wnd.ShowDialog();
+        }
+
+        private void ToProfileBtn_Click(object sender, RoutedEventArgs e)
+        {
+            MainWindow wnd = new MainWindow(App.UserId);
+            wnd.Show();
+            Close();
+        }
+    }
+
+    // Класс, описывающий матч в турнирной сетке
+    public class TournamentMatch
+    {
+        public string teamIdFrst { get; private set; }
+        public string teamIdScnd { get; private set; }
+        public string ScoreFrst { get; private set; }
+        public string ScoreScnd { get; private set; }
+        public int roundNum { get; private set; }
+        public int gameNum { get; private set; }
+        public string teamIdWinner { get; private set; }
+
+
+        public TournamentMatch(string teamIdFrst, string teamIdScnd, string ScoreFrst, string ScoreScnd, int roundNum, string teamIdWinner, int gameNum)
+        {
+            this.teamIdFrst = teamIdFrst;
+            this.teamIdScnd = teamIdScnd;
+            this.ScoreFrst = ScoreFrst;
+            this.ScoreScnd = ScoreScnd;
+            this.roundNum = roundNum;
+            this.gameNum = gameNum;
+            this.teamIdWinner = teamIdWinner;
+        }
+    }
+
+    // Класс, описывающий результат в ResultLB
+    public class Result
+    {
+        public string Place { get; set; }
+        public string PlacePath { get; set; }
+        public string LogoPath { get; set; }
+        public string CountryIconPath { get; set; }
+        public string TeamName { get; set; }
+        public string Prize { get; set; }
+    }
+}

BIN
Курсовой проект 3.1/img/Default/addPlayer.png


BIN
Курсовой проект 3.1/img/Default/cupBronze.png


BIN
Курсовой проект 3.1/img/Default/cupGold.png


BIN
Курсовой проект 3.1/img/Default/cupSilver.png


BIN
Курсовой проект 3.1/img/Default/discipline.png


BIN
Курсовой проект 3.1/img/Default/log-out.png


BIN
Курсовой проект 3.1/img/Default/settings.png


BIN
Курсовой проект 3.1/img/countrys - 24/Abkhazia.png


BIN
Курсовой проект 3.1/img/countrys - 24/Afghanistan.png


BIN
Курсовой проект 3.1/img/countrys - 24/Aland.png


BIN
Курсовой проект 3.1/img/countrys - 24/Albania.png


BIN
Курсовой проект 3.1/img/countrys - 24/Algeria.png


BIN
Курсовой проект 3.1/img/countrys - 24/American-Samoa.png


BIN
Курсовой проект 3.1/img/countrys - 24/Andorra.png


BIN
Курсовой проект 3.1/img/countrys - 24/Angola.png


BIN
Курсовой проект 3.1/img/countrys - 24/Anguilla.png


BIN
Курсовой проект 3.1/img/countrys - 24/Antarctica.png


BIN
Курсовой проект 3.1/img/countrys - 24/Antigua-and-Barbuda.png


BIN
Курсовой проект 3.1/img/countrys - 24/Argentina.png


BIN
Курсовой проект 3.1/img/countrys - 24/Armenia.png


BIN
Курсовой проект 3.1/img/countrys - 24/Aruba.png


BIN
Курсовой проект 3.1/img/countrys - 24/Australia.png


BIN
Курсовой проект 3.1/img/countrys - 24/Austria.png


BIN
Курсовой проект 3.1/img/countrys - 24/Azerbaijan.png


+ 0 - 0
Курсовой проект 3.1/img/countrys - 24/Bahamas.png


Vissa filer visades inte eftersom för många filer har ändrats