Selaa lähdekoodia

Добавьте файлы проекта.

Никита 3 vuotta sitten
vanhempi
commit
528ab2274b
27 muutettua tiedostoa jossa 3584 lisäystä ja 0 poistoa
  1. BIN
      Images/Cup.png
  2. BIN
      Images/DotaIcon.png
  3. BIN
      Images/TeamSpiritIcon.png
  4. BIN
      Images/WithoutPhoto.png
  5. 25 0
      Курсовой проект 3.1.sln
  6. 11 0
      Курсовой проект 3.1/App.config
  7. 9 0
      Курсовой проект 3.1/App.xaml
  8. 17 0
      Курсовой проект 3.1/App.xaml.cs
  9. 516 0
      Курсовой проект 3.1/ApplicationWindow.xaml
  10. 48 0
      Курсовой проект 3.1/ApplicationWindow.xaml.cs
  11. 185 0
      Курсовой проект 3.1/Authorization.xaml
  12. 65 0
      Курсовой проект 3.1/Authorization.xaml.cs
  13. 309 0
      Курсовой проект 3.1/MainWindow.xaml
  14. 456 0
      Курсовой проект 3.1/MainWindow.xaml.cs
  15. 55 0
      Курсовой проект 3.1/Properties/AssemblyInfo.cs
  16. 70 0
      Курсовой проект 3.1/Properties/Resources.Designer.cs
  17. 117 0
      Курсовой проект 3.1/Properties/Resources.resx
  18. 29 0
      Курсовой проект 3.1/Properties/Settings.Designer.cs
  19. 7 0
      Курсовой проект 3.1/Properties/Settings.settings
  20. 203 0
      Курсовой проект 3.1/RegistrationWindow.xaml
  21. 93 0
      Курсовой проект 3.1/RegistrationWindow.xaml.cs
  22. 51 0
      Курсовой проект 3.1/SQL.cs
  23. 397 0
      Курсовой проект 3.1/TeamProfileWindow.xaml
  24. 390 0
      Курсовой проект 3.1/TeamProfileWindow.xaml.cs
  25. 165 0
      Курсовой проект 3.1/TournamentWindow.xaml
  26. 231 0
      Курсовой проект 3.1/TournamentWindow.xaml.cs
  27. 135 0
      Курсовой проект 3.1/Курсовой проект 3.1.csproj

BIN
Images/Cup.png


BIN
Images/DotaIcon.png


BIN
Images/TeamSpiritIcon.png


BIN
Images/WithoutPhoto.png


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

@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+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
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{773B5205-4560-4598-8DEB-239FA999E1C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{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
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {058E89E7-0B85-4B80-BA74-8A688AD1114C}
+	EndGlobalSection
+EndGlobal

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

@@ -0,0 +1,11 @@
+<?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>
+</configuration>

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

@@ -0,0 +1,9 @@
+<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">
+    <Application.Resources>
+         
+    </Application.Resources>
+</Application>

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

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace Курсовой_проект_3._1
+{
+    /// <summary>
+    /// Логика взаимодействия для App.xaml
+    /// </summary>
+    public partial class App : Application
+    {
+    }
+}

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

@@ -0,0 +1,516 @@
+<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>

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

@@ -0,0 +1,48 @@
+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;}
+    }
+}

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

@@ -0,0 +1,185 @@
+<Window x:Class="Курсовой_проект_3._1.Authorization"
+        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="Authorization" Height="650" Width="600" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
+    <Window.Resources>
+        <!-- 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>
+
+        <!-- PasswordBox style -->
+        <Style TargetType="PasswordBox">
+            <Setter Property="Foreground" Value="#FF464646"/>
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type PasswordBox}">
+                        <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>
+
+        <!-- Buttom 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" 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.4*"/>
+            <RowDefinition Height="2*"/>
+            <RowDefinition Height="0.4*"/>
+        </Grid.RowDefinitions>
+
+        <Grid Grid.Row="1">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="0.4*"/>
+                <ColumnDefinition Width="2*"/>
+                <ColumnDefinition Width="0.4*"/>
+            </Grid.ColumnDefinitions>
+
+            <Rectangle Grid.Column="1" Fill="#346E91" RadiusX="8" RadiusY="8"/>
+            <Grid Grid.Column="1">
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="0.2*"/>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="0.2*"/>
+                </Grid.ColumnDefinitions>
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="0.5*"/>
+                    <RowDefinition Height="0.5*"/>
+                    <RowDefinition Height="0.5*"/>
+                    <RowDefinition Height="0.8*"/>
+                    <RowDefinition Height="0.1*"/>
+                    <RowDefinition Height="0.5*"/>
+                    <RowDefinition Height="0.8*"/>
+                    <RowDefinition Height="0.5*"/>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="0.5*"/>
+                </Grid.RowDefinitions>
+
+                <TextBlock Grid.Row="1" Grid.Column="1" Text="Авторизация" Foreground="WhiteSmoke" FontSize="24" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                
+                <TextBlock Grid.Row="2" Grid.Column="1" Text="Login:" Foreground="WhiteSmoke" HorizontalAlignment="Left" VerticalAlignment="Bottom"/>
+                <TextBox x:Name="LoginTB" Grid.Row="3" Grid.Column="1" MaxLength="16" FontSize="20" Margin="0 5 0 5" TextAlignment="Justify" VerticalContentAlignment="Center"></TextBox>
+
+                <TextBlock Grid.Row="5" Grid.Column="1" Text="Password:" Foreground="WhiteSmoke" HorizontalAlignment="Left" VerticalAlignment="Bottom"/>
+                <PasswordBox x:Name="PasswordPB" Grid.Row="6" Grid.Column="1" MaxLength="16" FontSize="20" Margin="0 5 0 5" VerticalContentAlignment="Center"></PasswordBox>
+
+                <Button x:Name="LoginBtn" Grid.Row="8" Grid.Column="1" Content="Login" FontSize="20" Margin="10" Click="LoginBtn_Click"></Button>
+                
+                <TextBlock Grid.Row="9" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center">
+                    <Hyperlink x:Name="RegLink" Foreground="Wheat" Click="RegLink_Click">Ещё нет аккаунта?</Hyperlink>
+                </TextBlock>
+            </Grid>
+            
+        </Grid>
+    </Grid>
+</Window>

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

@@ -0,0 +1,65 @@
+using System.Windows;
+using System.Data;
+using System.Configuration;
+using System;
+
+namespace Курсовой_проект_3._1
+{
+    /// <summary>
+    /// Логика взаимодействия для Authorization.xaml
+    /// </summary>
+    public partial class Authorization : Window
+    {
+        public int mainUserId;
+        SQL query;
+
+        public Authorization()
+        {
+            InitializeComponent();
+            TeamProfileWindow wnd = new TeamProfileWindow("1");
+            wnd.ShowDialog();
+            Close();
+
+            // получаем строку подключения из app.config
+            query = new SQL("DefaultConnection");
+        }
+
+        private void LoginBtn_Click(object sender, RoutedEventArgs e)
+        {
+            if (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)
+                {
+                    MessageBox.Show("Вход выполнен");
+
+                    // переход в новое окно
+                    mainUserId = Convert.ToInt32(dt.Rows[0][0]);
+                    MainWindow wnd = new MainWindow(mainUserId);
+                    wnd.Show();
+                    Close();
+                }
+                else
+                {
+                    MessageBox.Show("Такого пользователя не существует!");
+                }
+            }
+            else
+            {
+                MessageBox.Show("Поля логин и пароль должны быть заполнены!");
+            }
+        }
+
+        private void RegLink_Click(object sender, RoutedEventArgs e)
+        {
+            RegistrationWindow wnd = new RegistrationWindow();
+            wnd.Show();
+            Close();
+        }
+    }
+}

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

@@ -0,0 +1,309 @@
+<Window x:Class="Курсовой_проект_3._1.MainWindow" x:Name="MyWindow"
+        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="MainWindow" Height="700" Width="900" MinWidth="550" MinHeight="600" WindowStartupLocation="CenterScreen">
+    <!-- Стили -->
+    <Window.Resources>
+        <!-- GroupBox in Profile-->
+        <Style TargetType="GroupBox">
+            <Setter Property="Margin" Value="5 15 5 5"/>
+            <Setter Property="BorderThickness" Value="2"/>
+            <Setter Property="BorderBrush" Value="#81AEC8"/>
+        </Style>
+        
+        <!-- Line in Statistic -->
+        <Style TargetType="Rectangle">
+            <Setter Property="Margin" Value="3 0 5 0"/>
+            <Setter Property="Height" Value="6"/>
+            <Setter Property="RadiusX" Value="3"/>
+            <Setter Property="RadiusY" Value="3"/>
+        </Style>
+
+        <local:MyConverter x:Key="StatusWinToBrushConverter"/>
+    </Window.Resources>
+    
+    <Grid ShowGridLines="False">
+        <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.ColumnSpan="3">
+            <StackPanel>
+                <DockPanel x:Name="ProfileDockPanel" MinHeight="300" MaxHeight="400">
+                    <!-- ABOUT BLOCK -->
+                    <Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" ShowGridLines="True">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition></ColumnDefinition>
+                            <ColumnDefinition></ColumnDefinition>
+                            <ColumnDefinition></ColumnDefinition>
+                        </Grid.ColumnDefinitions>
+
+                        <!-- UserPhoto, Cups, Money -->
+                        <Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="1">
+                            <Grid.RowDefinitions>
+                                <RowDefinition Height="*"></RowDefinition>
+                                <RowDefinition Height="0.3*"></RowDefinition>
+                                <RowDefinition Height="0.2*"></RowDefinition>
+                            </Grid.RowDefinitions>
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition></ColumnDefinition>
+                            </Grid.ColumnDefinitions>
+
+                            <!-- UserPhoto -->
+                            <Grid Grid.Row="0" Grid.Column="0">
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition></RowDefinition>
+                                </Grid.RowDefinitions>
+                                
+                                <Image x:Name="UserPhotoImg" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\WithoutPhoto.png" Margin="15 15 15 5" Grid.Column="0" Grid.Row="0"/>
+                            </Grid>
+
+                            <!-- Cup -->
+                            <Grid Grid.Row="1" HorizontalAlignment="Center">
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition></ColumnDefinition>
+                                    <ColumnDefinition></ColumnDefinition>
+                                    <ColumnDefinition></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+
+                                <Grid Grid.Column="0" Margin="5 0 0 0">
+                                    <!-- First Places -->
+                                    <Grid.ColumnDefinitions>
+                                        <ColumnDefinition></ColumnDefinition>
+                                        <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>
+                                    </Viewbox>
+
+                                </Grid>
+
+                                <Grid Grid.Column="1">
+                                    <!-- Second Places -->
+                                    <Grid.ColumnDefinitions>
+                                        <ColumnDefinition></ColumnDefinition>
+                                        <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>
+                                    </Viewbox>
+                                </Grid>
+
+                                <Grid Grid.Column="2" Margin="0 0 5 0">
+                                    <!-- Third Places -->
+                                    <Grid.ColumnDefinitions>
+                                        <ColumnDefinition></ColumnDefinition>
+                                        <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>
+                                    </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> <!-- Money -->
+                        </Grid> <!-- UserPhoto, Cups, Money -->
+                        
+                        <!-- ShortInfo -->
+                        <Grid Grid.Column="1" Grid.ColumnSpan="2">
+                            <Grid.RowDefinitions>
+                                <RowDefinition Height="1.5*"/>
+                                <RowDefinition Height="0.8*"/>
+                                <RowDefinition Height="0.8*"/>
+                                <RowDefinition Height="0.8*"/>
+                                <RowDefinition Height="0.8*"/>
+                                <RowDefinition Height="3*"/>
+                            </Grid.RowDefinitions>
+                            
+                            <!-- Icon, Nickname, Team -->
+                            <Grid>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="0.2*"/>
+                                    <ColumnDefinition Width="*"/>
+                                    <ColumnDefinition Width="*"/>
+                                </Grid.ColumnDefinitions>
+
+                                <Image Grid.Column="0" Source="C:\Users\nikich4523\source\repos\Курсовой проект 3.1\Images\DotaIcon.png" Margin="5 10 5 10"/>
+                                <Viewbox Grid.Column="1" Stretch="Uniform" HorizontalAlignment="Left" Margin="5 10 0 10">
+                                    <TextBlock x:Name="NicknameTB" Text=""></TextBlock>
+                                </Viewbox>
+                            </Grid>
+                            
+                            <!-- RealName -->
+                            <Viewbox Grid.Row="1" Stretch="Uniform" HorizontalAlignment="Left" Margin="5 10 0 10">
+                                <TextBlock x:Name="RealNameTB" Text="Имя: "></TextBlock>
+                            </Viewbox>
+
+                            <!-- DateOfBirth, Age -->
+                            <Viewbox Grid.Row="2" Stretch="Uniform" HorizontalAlignment="Left" Margin="5 10 0 10">
+                                <TextBlock x:Name="BirthDateTB" Text="Дата рождения: "></TextBlock>
+                            </Viewbox>
+                            
+                            <!-- Country -->
+                            <Viewbox Grid.Row="3" Stretch="Uniform" HorizontalAlignment="Left" Margin="5 10 0 10">
+                                <TextBlock x:Name="CountryTB" Text="Страна: "></TextBlock>
+                            </Viewbox>
+                            
+                            <!-- Contacts -->
+                            <Grid Grid.Row="4" Margin="5 10 0 10">
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition/>
+                                    <ColumnDefinition/>
+                                    <ColumnDefinition/>
+                                </Grid.ColumnDefinitions>
+                                
+                                <!-- PhoneNumber -->
+                                <Viewbox Grid.Column="0" Stretch="Uniform" HorizontalAlignment="Left">
+                                    <TextBlock x:Name="PhoneNumberTB" Text="Телефон: "></TextBlock>
+                                </Viewbox>
+                                
+                                <!-- Email -->
+                                <Viewbox Grid.Column="1" Stretch="Uniform" HorizontalAlignment="Left">
+                                    <TextBlock x:Name="EmailTB" Text="E-mail: "></TextBlock>
+                                </Viewbox>
+                            </Grid>
+                            
+                            <!-- AboutMe -->
+                            <TextBlock Grid.Row="5" x:Name="AboutMeTB" TextWrapping="Wrap" Margin="5 0 20 0" FontSize="14" Text="О себе: "></TextBlock>
+
+                        </Grid> <!-- ShortInfo -->
+                    </Grid> <!-- ABOUT BLOCK -->
+                </DockPanel>
+                
+                <!-- StatisticGroupBox -->
+                <GroupBox Header="Статистика" MinHeight="100">
+                    <Grid>
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition x:Name="LineBarWin" MinWidth="80" Width="*"></ColumnDefinition>
+                            <ColumnDefinition x:Name="LineBarDraw" MinWidth="80" Width="*"></ColumnDefinition>
+                            <ColumnDefinition x:Name="LineBarLose" MinWidth="80" Width="*"></ColumnDefinition>
+                        </Grid.ColumnDefinitions>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="0.25*"></RowDefinition>
+                            <RowDefinition Height="0.15*"></RowDefinition>
+                            <RowDefinition Height="0.25*"></RowDefinition>
+                        </Grid.RowDefinitions>
+
+
+                        <TextBlock x:Name="WinCountTB"  Grid.Row="0" Grid.Column="0" Text="0 побед" VerticalAlignment="Bottom" Margin="3 0 0 0"></TextBlock>
+                        <Rectangle Grid.Row="1" Grid.Column="0" Fill="#33CC00"></Rectangle>
+                        <TextBlock x:Name="WinPercentTB" Grid.Row="2" Grid.Column="0" Text="0%" VerticalAlignment="Top" Margin="4 0 0 0"></TextBlock>
+
+                        <TextBlock x:Name="DrawCountTB" Grid.Row="0" Grid.Column="1" Text="0 ничьих" VerticalAlignment="Bottom" Margin="3 0 0 0"></TextBlock>
+                        <Rectangle Grid.Row="1" Grid.Column="1" Fill="#999999"></Rectangle>
+                        <TextBlock x:Name="DrawPercentTB" Grid.Row="2" Grid.Column="1" Text="0%" VerticalAlignment="Top" Margin="4 0 0 0"></TextBlock>
+
+                        <TextBlock x:Name="LoseCountTB" Grid.Row="0" Grid.Column="2" Text="0 поражений" VerticalAlignment="Bottom" Margin="3 0 0 0"></TextBlock>
+                        <Rectangle Grid.Row="1" Grid.Column="2" Fill="#FF0000"></Rectangle>
+                        <TextBlock x:Name="LosePercentTB" Grid.Row="2" Grid.Column="2" Text="0%" VerticalAlignment="Top" Margin="4 0 0 0"></TextBlock>
+                    </Grid>
+                </GroupBox> <!-- StatisticGroupBox -->
+                
+                <!-- TeamsGroupBox -->
+                <GroupBox Header="Участие в командах" MinHeight="200">
+                    <Grid>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="0.8*"></RowDefinition>
+                            <RowDefinition Height="0.2*"></RowDefinition>
+                        </Grid.RowDefinitions>
+
+                        <DataGrid x:Name="TeamsGrid" Grid.Row="0" AutoGenerateColumns="False" ColumnWidth="*" IsReadOnly="True" CanUserResizeColumns="False">
+                            <DataGrid.Columns>
+                                <DataGridTextColumn Header="Команда" Binding="{Binding Path=TeamName}"/>
+                                <DataGridTextColumn Header="Дата начала" Binding="{Binding Path=DateOfStart}" FontFamily="Arial" FontWeight="Bold"/>
+                                <DataGridTextColumn Header="Дата окончания" Binding="{Binding Path=DateOfEnd}" FontFamily="Arial" FontWeight="Bold"/>
+                                <DataGridTextColumn Header="Статистика" Binding="{Binding Path=Stat}" Width="220" FontFamily="Arial" FontWeight="Bold"/>
+                            </DataGrid.Columns>
+                        </DataGrid>
+                        
+                        <Button x:Name="MoreTeamsBtn" Grid.Row="1" Content="Показать ещё" Click="MoreTeamsBtn_Click"></Button>
+                    </Grid>
+                </GroupBox> <!-- TeamsGroupBox -->
+                
+                <!-- GamesHistoryGroupBox -->
+                <GroupBox Header="История матчей" MinHeight="200">
+                    <Grid>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="0.8*"></RowDefinition>
+                            <RowDefinition Height="0.2*"></RowDefinition>
+                        </Grid.RowDefinitions>
+                        
+                        <!-- GamesHistory -->
+                        <DataGrid x:Name="MatchesGrid" Grid.Row="0" AutoGenerateColumns="False" ColumnWidth="*" IsReadOnly="True" CanUserResizeColumns="False">
+                            <DataGrid.Columns>
+
+                                <DataGridTextColumn Header="Команда" Binding="{Binding Path=FrstTeamName}">
+                                    <DataGridTextColumn.ElementStyle>
+                                        <Style TargetType="{x:Type TextBlock}">
+                                            <Setter Property="Background">
+                                                <Setter.Value>
+                                                    <MultiBinding Converter="{StaticResource StatusWinToBrushConverter}">
+                                                        <Binding Path="FrstTeamName"/>
+                                                        <Binding Path="WinTeam"/>
+                                                    </MultiBinding>
+                                                </Setter.Value>
+                                            </Setter>
+                                        </Style>
+                                    </DataGridTextColumn.ElementStyle>
+                                </DataGridTextColumn>
+
+                                <DataGridTextColumn Header="Счет" Binding="{Binding Path=Scores}" FontFamily="Arial" FontWeight="Bold"/>
+
+                                <DataGridTextColumn Header="Команда" Binding="{Binding Path=ScndTeamName}">
+                                    <DataGridTextColumn.ElementStyle>
+                                        <Style TargetType="{x:Type TextBlock}">
+                                            <Setter Property="Background">
+                                                <Setter.Value>
+                                                    <MultiBinding Converter="{StaticResource StatusWinToBrushConverter}">
+                                                        <Binding Path="ScndTeamName"/>
+                                                        <Binding Path="WinTeam"/>
+                                                    </MultiBinding>
+                                                </Setter.Value>
+                                            </Setter>
+                                        </Style>
+                                    </DataGridTextColumn.ElementStyle>
+                                </DataGridTextColumn>
+
+                                <DataGridTextColumn Header="Дата" Binding="{Binding Path=GameDate}" FontFamily="Arial" FontWeight="Bold"/>
+                                <DataGridTextColumn Header="Турнир" Binding="{Binding Path=Tournament}" FontFamily="Arial" FontWeight="Bold" Width="150"/>
+                            </DataGrid.Columns>
+                        </DataGrid>
+                        
+                        <!-- MoreButton -->
+                        <Button x:Name="MoreGamesButton" Grid.Row="1" Content="Показать ещё" Click="MoreGamesButton_Click"></Button>
+                    </Grid>
+                </GroupBox> <!-- GamesHistoryGroupBox -->
+            </StackPanel>
+        </ScrollViewer>
+    </Grid>
+</Window>

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

@@ -0,0 +1,456 @@
+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

+ 55 - 0
Курсовой проект 3.1/Properties/AssemblyInfo.cs

@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// Общие сведения об этой сборке предоставляются следующим набором
+// набор атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("Курсовой проект 3.1")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Курсовой проект 3.1")]
+[assembly: AssemblyCopyright("Copyright ©  2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
+// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
+// из модели COM, установите атрибут ComVisible для этого типа в значение true.
+[assembly: ComVisible(false)]
+
+//Чтобы начать создание локализуемых приложений, задайте
+//<UICulture>CultureYouAreCodingWith</UICulture> в файле .csproj
+//в <PropertyGroup>. Например, при использовании английского (США)
+//в своих исходных файлах установите <UICulture> в en-US.  Затем отмените преобразование в комментарий
+//атрибута NeutralResourceLanguage ниже.  Обновите "en-US" в
+//строка внизу для обеспечения соответствия настройки UICulture в файле проекта.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None, //где расположены словари ресурсов по конкретным тематикам
+                                     //(используется, если ресурс не найден на странице,
+                                     // или в словарях ресурсов приложения)
+    ResourceDictionaryLocation.SourceAssembly //где расположен словарь универсальных ресурсов
+                                              //(используется, если ресурс не найден на странице,
+                                              // в приложении или в каких-либо словарях ресурсов для конкретной темы)
+)]
+
+
+// Сведения о версии для сборки включают четыре следующих значения:
+//
+//      Основной номер версии
+//      Дополнительный номер версии
+//      Номер сборки
+//      Номер редакции
+//
+// Можно задать все значения или принять номера сборки и редакции по умолчанию 
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 70 - 0
Курсовой проект 3.1/Properties/Resources.Designer.cs

@@ -0,0 +1,70 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код был создан программным средством.
+//     Версия среды выполнения: 4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильному поведению и будут утрачены, если
+//     код создан повторно.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+
+namespace Курсовой_проект_3._1.Properties
+{
+    /// <summary>
+    ///   Класс ресурсов со строгим типом для поиска локализованных строк и пр.
+    /// </summary>
+    // Этот класс был автоматически создан при помощи StronglyTypedResourceBuilder
+    // класс с помощью таких средств, как ResGen или Visual Studio.
+    // Для добавления или удаления члена измените файл .ResX, а затем перезапустите ResGen
+    // с параметром /str или заново постройте свой VS-проект.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   Возврат кэшированного экземпляра ResourceManager, используемого этим классом.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Курсовой_проект_3._1.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   Переопределяет свойство CurrentUICulture текущего потока для всех
+        ///   подстановки ресурсов с помощью этого класса ресурсов со строгим типом.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 117 - 0
Курсовой проект 3.1/Properties/Resources.resx

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

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

@@ -0,0 +1,29 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+
+namespace Курсовой_проект_3._1.Properties
+{
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 7 - 0
Курсовой проект 3.1/Properties/Settings.settings

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

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

@@ -0,0 +1,203 @@
+<Window x:Class="Курсовой_проект_3._1.RegistrationWindow"
+        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="RegistrationWindow"  Height="650" Width="600" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
+    <Window.Resources>
+        <!-- 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>
+
+        <!-- PasswordBox style -->
+        <Style TargetType="PasswordBox">
+            <Setter Property="Foreground" Value="#FF464646"/>
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type PasswordBox}">
+                        <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>
+
+        <!-- Buttom 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"/>
+                            </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.1*"/>
+            <ColumnDefinition Width="1*"/>
+            <ColumnDefinition Width="0.1*"/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="0.1*"/>
+            <RowDefinition Height="1*"/>
+            <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">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="0.2*"/>
+                <ColumnDefinition/>
+                <ColumnDefinition Width="0.2*"/>
+                <ColumnDefinition/>
+                <ColumnDefinition Width="0.2*"/>
+            </Grid.ColumnDefinitions>
+            <Grid.RowDefinitions>
+                <RowDefinition/>
+                <RowDefinition/>
+                <RowDefinition Height="0.5*"/>
+                <RowDefinition/>
+                <RowDefinition/>
+                <RowDefinition Height="0.5*"/>
+                <RowDefinition/>
+                <RowDefinition Height="0.5*"/>
+                <RowDefinition/>
+                <RowDefinition/>
+                <RowDefinition/>
+                <RowDefinition Height="0.5*"/>
+                <RowDefinition/>
+                <RowDefinition Height="0.8*"/>
+                <RowDefinition/>
+                <RowDefinition/>
+                <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="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"/>
+
+            <TextBlock Grid.Row="4" Grid.Column="1" Text="Пароль" Foreground="WhiteSmoke" FontSize="20" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <PasswordBox x:Name="PasswordPB" Grid.Row="4" Grid.Column="3" MaxLength="16" Margin="5" VerticalContentAlignment="Center"/>
+
+            <TextBlock Grid.Row="6" Grid.Column="1" Text="Никнейм" Foreground="WhiteSmoke" FontSize="20" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="NicknameTB" Grid.Row="6" Grid.Column="3" MaxLines="1" MaxLength="50" Margin="5" VerticalContentAlignment="Center"/>
+
+            <TextBlock Grid.Row="8" Grid.Column="1" Text="Имя" Foreground="WhiteSmoke" FontSize="20" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="FNameTB" Grid.Row="8" Grid.Column="3" MaxLines="1" MaxLength="50" Margin="5" VerticalContentAlignment="Center"/>
+
+            <TextBlock Grid.Row="9" Grid.Column="1" Text="Фамилия" Foreground="WhiteSmoke" FontSize="20" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="LNameTB" Grid.Row="9" Grid.Column="3" MaxLines="1" MaxLength="50" Margin="5" VerticalContentAlignment="Center"/>
+
+            <TextBlock Grid.Row="10" Grid.Column="1" Text="Отчество" Foreground="WhiteSmoke" FontSize="20" FontWeight="SemiBold"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
+            <TextBox x:Name="MNameTB" Grid.Row="10" Grid.Column="3" MaxLines="1" MaxLength="50" Margin="5" VerticalContentAlignment="Center"/>
+
+            <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">
+                <Hyperlink x:Name="AuthLink" Foreground="Wheat" Click="AuthLink_Click">Вернуться к авторизации</Hyperlink>
+            </TextBlock>
+        </Grid>
+    </Grid>
+</Window>

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

@@ -0,0 +1,93 @@
+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();
+                }
+            }
+        }
+    }
+}

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

@@ -0,0 +1,51 @@
+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;
+        }
+    }
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 397 - 0
Курсовой проект 3.1/TeamProfileWindow.xaml


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

@@ -0,0 +1,390 @@
+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>();
+
+        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 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
+                LosePercentTB.Text = Math.Round(Convert.ToDouble(loseCount) * 100 / Convert.ToDouble(gamesCount), 2).ToString() + "%";
+            }
+
+            // Подгрузка состава -- происходит в NowStatusRB_Checked
+            NowStatusRB.IsChecked = true;
+
+            // Подгрузка истории матчей
+
+            // Подгрузка достижений
+            List<Achievement> achievementList = new List<Achievement>(3)
+            {
+                new Achievement { Place="1", Tournament="The International 10 (2021)", Venue="Бухарест, Румыния", DateOfVenue="17.10.2021", Prize="18 000 000$", PrizeFond="40 000 000$"},
+                new Achievement { Place="7", Tournament="ESL One Summer 2021", Venue="Онлайн", DateOfVenue="20.07.2021", Prize="30 000$", PrizeFond="1 000 000$"},
+            };
+            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 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;
+        }
+    }
+}
+
+    // Класс, описывающий объект/элемент 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; }
+    }

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

@@ -0,0 +1,165 @@
+<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>

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

@@ -0,0 +1,231 @@
+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;
+        }
+    }
+}

+ 135 - 0
Курсовой проект 3.1/Курсовой проект 3.1.csproj

@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <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>{773B5205-4560-4598-8DEB-239FA999E1C2}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>Курсовой_проект_3._1</RootNamespace>
+    <AssemblyName>Курсовой проект 3.1</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <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' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <ApplicationDefinition Include="App.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </ApplicationDefinition>
+    <Compile Include="ApplicationWindow.xaml.cs">
+      <DependentUpon>ApplicationWindow.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Authorization.xaml.cs">
+      <DependentUpon>Authorization.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="RegistrationWindow.xaml.cs">
+      <DependentUpon>RegistrationWindow.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="SQL.cs" />
+    <Compile Include="TeamProfileWindow.xaml.cs">
+      <DependentUpon>TeamProfileWindow.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="TournamentWindow.xaml.cs">
+      <DependentUpon>TournamentWindow.xaml</DependentUpon>
+    </Compile>
+    <Page Include="ApplicationWindow.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+    <Page Include="Authorization.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+    <Page Include="MainWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="App.xaml.cs">
+      <DependentUpon>App.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="MainWindow.xaml.cs">
+      <DependentUpon>MainWindow.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Page Include="RegistrationWindow.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+    <Page Include="TeamProfileWindow.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+    <Page Include="TournamentWindow.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>