Add project files.
This commit is contained in:
58
Activity/formActivity.xaml
Normal file
58
Activity/formActivity.xaml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.formActivity"
|
||||||
|
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:SportsTrainingApp"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Система учета спортивных тренировок" Height="450" Width="800" Icon="/free-icon-fitness-4729328.png" WindowStartupLocation="CenterScreen">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.3*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock x:Name="tbCurUser" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="6"
|
||||||
|
Text="Текущий пользователь: " VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||||
|
<DataGrid Grid.Column="0" Grid.Row="3" x:Name="gridActivity" AutoGenerateColumns="False"
|
||||||
|
ColumnWidth="*" Grid.ColumnSpan="6" Grid.RowSpan="3" Margin="10" IsReadOnly="True">
|
||||||
|
<DataGrid.Resources>
|
||||||
|
<Style TargetType="TextBlock" x:Key="WrapText">
|
||||||
|
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
|
||||||
|
</Style>
|
||||||
|
<Style TargetType="DataGridColumnHeader">
|
||||||
|
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||||||
|
</Style>
|
||||||
|
<Style TargetType="DataGridCell">
|
||||||
|
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||||||
|
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||||||
|
</Style>
|
||||||
|
</DataGrid.Resources>
|
||||||
|
<DataGrid.Columns>
|
||||||
|
<DataGridTextColumn Header="ID" Binding="{Binding ID}" Visibility="Hidden" />
|
||||||
|
<DataGridTextColumn Header="Вид спорта" Binding="{Binding Name}"/>
|
||||||
|
<DataGridTextColumn Header="Дата" Binding="{Binding Date}" />
|
||||||
|
<DataGridTextColumn Header="Длительность (мин.)" Binding="{Binding Duration}" ElementStyle="{StaticResource WrapText}"/>
|
||||||
|
<DataGridTextColumn Header="Интенсивность" Binding="{Binding Intensity}" ElementStyle="{StaticResource WrapText}"/>
|
||||||
|
<DataGridTextColumn Header="Заметки" Binding="{Binding Notes}" ElementStyle="{StaticResource WrapText}"/>
|
||||||
|
</DataGrid.Columns>
|
||||||
|
</DataGrid>
|
||||||
|
<Button Grid.Column="0" Grid.Row="2" x:Name="btnAddActivity" Grid.ColumnSpan="2" Margin="10" Content="Добавить занятие в план" Click="btnAddActivity_Click"/>
|
||||||
|
<Button Grid.Column="2" Grid.Row="2" x:Name="btnUpdActivity" Grid.ColumnSpan="2" Margin="10" Content="Изменить занятие в плане" Click="btnUpdActivity_Click"/>
|
||||||
|
<Button Grid.Column="4" Grid.Row="2" x:Name="btnDelActivity" Grid.ColumnSpan="2" Margin="10" Content="Удалить занятие" Click="btnDelActivity_Click"/>
|
||||||
|
<Button Grid.Column="0" Grid.Row="1" x:Name="btNutrition" Grid.ColumnSpan="3" Margin="10" Content="Питание" Click="btNutrition_Click"/>
|
||||||
|
<Button Grid.Column="3" Grid.Row="1" x:Name="btChallenges" Grid.ColumnSpan="3" Margin="10" Content="Испытание" Click="btChallenges_Click"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
|
|
||||||
141
Activity/formActivity.xaml.cs
Normal file
141
Activity/formActivity.xaml.cs
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using Npgsql;
|
||||||
|
using SportsTrainingApp.Activity;
|
||||||
|
using SportsTrainingApp.Challenges;
|
||||||
|
using SportsTrainingApp.Nutrition;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for formActivity.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class formActivity : Window
|
||||||
|
{
|
||||||
|
int user_id = -1;
|
||||||
|
public formActivity(int _user_id)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
user_id = _user_id;
|
||||||
|
ShowCurUser(user_id);
|
||||||
|
FillDataGrid(user_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Workout
|
||||||
|
{
|
||||||
|
public int ID { get; set; }
|
||||||
|
public string? Name { get; set; }
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
public int Duration { get; set; }
|
||||||
|
public string? Intensity { get; set; }
|
||||||
|
public string? Notes { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShowCurUser(int _user_id)
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (var cmd = new NpgsqlCommand($@"SELECT
|
||||||
|
CONCAT(USERNAME, ' (email - ', EMAIL, ')')
|
||||||
|
FROM
|
||||||
|
DBO.USERS
|
||||||
|
WHERE
|
||||||
|
ID = {_user_id}", conn))
|
||||||
|
{
|
||||||
|
var reader = cmd.ExecuteReader();
|
||||||
|
if (reader.Read())
|
||||||
|
{
|
||||||
|
tbCurUser.Text += reader.GetString(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FillDataGrid(int _user_id)
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (var cmd = new NpgsqlCommand($@"SELECT
|
||||||
|
WORKOUTS.ID,
|
||||||
|
S.NAME,
|
||||||
|
DATE,
|
||||||
|
DURATION,
|
||||||
|
INTENSITY,
|
||||||
|
NOTES
|
||||||
|
FROM
|
||||||
|
DBO.WORKOUTS
|
||||||
|
LEFT JOIN DBO.SPORTS S ON S.ID = WORKOUTS.SPORT_ID
|
||||||
|
WHERE
|
||||||
|
USER_ID = {_user_id}
|
||||||
|
ORDER BY DATE", conn))
|
||||||
|
{
|
||||||
|
var reader = cmd.ExecuteReader();
|
||||||
|
var workouts = new List<Workout>();
|
||||||
|
while (reader.Read())
|
||||||
|
{
|
||||||
|
workouts.Add(new Workout
|
||||||
|
{
|
||||||
|
ID = reader.GetInt32(0),
|
||||||
|
Name = reader.GetString(1),
|
||||||
|
Date = reader.GetDateTime(2),
|
||||||
|
Duration = reader.GetInt32(3),
|
||||||
|
Intensity = reader.GetString(4),
|
||||||
|
Notes = reader.GetString(5)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
gridActivity.ItemsSource = workouts;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnAddActivity_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
new formAddActivity(user_id).ShowDialog();
|
||||||
|
FillDataGrid(user_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnDelActivity_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var selectedItem = (Workout)gridActivity.SelectedItem;
|
||||||
|
|
||||||
|
if (selectedItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (var cmd = new NpgsqlCommand(@$"DELETE FROM DBO.WORKOUTS
|
||||||
|
WHERE
|
||||||
|
ID = {selectedItem.ID}",conn))
|
||||||
|
{
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FillDataGrid(user_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnUpdActivity_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var selectedItem = (Workout)gridActivity.SelectedItem;
|
||||||
|
|
||||||
|
if (selectedItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
new formUpdActivity(selectedItem).ShowDialog();
|
||||||
|
|
||||||
|
FillDataGrid(user_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btNutrition_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
new formNutrition(user_id).ShowDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btChallenges_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
new formChallenges().ShowDialog();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
35
Activity/formAddActivity.xaml
Normal file
35
Activity/formAddActivity.xaml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.Activity.formAddActivity"
|
||||||
|
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:SportsTrainingApp.Activity"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Добавить занятие" Height="150" Width="800" ResizeMode="NoResize" Icon="/free-icon-fitness-4729328.png" WindowStartupLocation="CenterScreen">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="1.5*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="2*"></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<ComboBox x:Name="cbSports" Grid.Row="1" Grid.Column="0" Height="25" Margin="10"/>
|
||||||
|
<DatePicker Name="dtPicker" Grid.Row="1" Grid.Column="1" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbDuration" Grid.Row="1" Grid.Column="2" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbIntensivity" Grid.Row="1" Grid.Column="3" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbNote" Grid.Row="1" Grid.Column="4" Height="25" Margin="10"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="0" Text="Вид спорта" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="1" Text="Дата" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="2" Text="Длительность (мин.)" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="3" Text="Интенсивность" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="4" Text="Примечание" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<Button Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" Height="25" Width="200" Content="Добавить" Click="Button_Click_1"/>
|
||||||
|
<Button Grid.Column="3" Grid.Row="2" Grid.ColumnSpan="3" Height="25" Width="200" Content="Отмена" Click="Button_Click_2"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
93
Activity/formAddActivity.xaml.cs
Normal file
93
Activity/formAddActivity.xaml.cs
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using Npgsql;
|
||||||
|
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp.Activity
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for formAddActivity.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class formAddActivity : Window
|
||||||
|
{
|
||||||
|
int user_id = -1;
|
||||||
|
public formAddActivity(int _user_id)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
user_id = _user_id;
|
||||||
|
FillCbSports(cbSports);
|
||||||
|
dtPicker.SelectedDate = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SportType
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FillCbSports(ComboBox cb)
|
||||||
|
{
|
||||||
|
var items = GetData();
|
||||||
|
cbSports.ItemsSource = items;
|
||||||
|
cbSports.DisplayMemberPath = "name";
|
||||||
|
cbSports.SelectedValuePath = "id";
|
||||||
|
cbSports.SelectedIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<SportType> GetData()
|
||||||
|
{
|
||||||
|
var items = new List<SportType>();
|
||||||
|
string query = "SELECT id, name FROM dbo.sports";
|
||||||
|
|
||||||
|
using (var connection = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
connection.Open();
|
||||||
|
using (var command = new NpgsqlCommand(query, connection))
|
||||||
|
using (var reader = command.ExecuteReader())
|
||||||
|
{
|
||||||
|
while (reader.Read())
|
||||||
|
{
|
||||||
|
items.Add(new SportType
|
||||||
|
{
|
||||||
|
id = reader.GetInt32(0),
|
||||||
|
name = reader.GetString(1)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_2(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_1(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
AddActivity();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddActivity()
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
|
||||||
|
using (var cmd = new NpgsqlCommand("INSERT INTO dbo.workouts(user_id, sport_id, date, duration, intensity, notes) " +
|
||||||
|
"VALUES(@user_id, @sport_id, @date, @duration, @intensity, @note); ", conn))
|
||||||
|
{
|
||||||
|
cmd.Parameters.AddWithValue("user_id", user_id);
|
||||||
|
cmd.Parameters.AddWithValue("date", dtPicker.SelectedDate.Value);
|
||||||
|
cmd.Parameters.AddWithValue("sport_id", cbSports.SelectedValue);
|
||||||
|
cmd.Parameters.AddWithValue("duration", Convert.ToInt32(tbDuration.Text));
|
||||||
|
cmd.Parameters.AddWithValue("intensity", tbIntensivity.Text);
|
||||||
|
cmd.Parameters.AddWithValue("note", tbNote.Text);
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
35
Activity/formUpdActivity.xaml
Normal file
35
Activity/formUpdActivity.xaml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.Activity.formUpdActivity"
|
||||||
|
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:SportsTrainingApp.Activity"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Изменить занятие" Height="150" Width="800" ResizeMode="NoResize" Icon="/free-icon-fitness-4729328.png" WindowStartupLocation="CenterScreen">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="1.5*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="2*"></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<ComboBox x:Name="cbSports" Grid.Row="1" Grid.Column="0" Height="25" Margin="10"/>
|
||||||
|
<DatePicker Name="dtPicker" Grid.Row="1" Grid.Column="1" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbDuration" Grid.Row="1" Grid.Column="2" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbIntensivity" Grid.Row="1" Grid.Column="3" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbNote" Grid.Row="1" Grid.Column="4" Height="25" Margin="10"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="0" Text="Вид спорта" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="1" Text="Дата" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="2" Text="Длительность (мин.)" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="3" Text="Интенсивность" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="4" Text="Примечание" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<Button Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" Height="25" Width="200" Content="Изменить" Click="ButtonUpd_Click"/>
|
||||||
|
<Button Grid.Column="3" Grid.Row="2" Grid.ColumnSpan="3" Height="25" Width="200" Content="Отмена" Click="ButtonCancel_Click"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
102
Activity/formUpdActivity.xaml.cs
Normal file
102
Activity/formUpdActivity.xaml.cs
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using Npgsql;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp.Activity
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for formUpdActivity.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class formUpdActivity : Window
|
||||||
|
{
|
||||||
|
formActivity.Workout item;
|
||||||
|
|
||||||
|
public formUpdActivity(formActivity.Workout _item)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
item = _item;
|
||||||
|
FillFormFields(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FillFormFields(formActivity.Workout _item)
|
||||||
|
{
|
||||||
|
FillCbSports(cbSports);
|
||||||
|
for (int i = 0; i < cbSports.Items.Count; i++)
|
||||||
|
{
|
||||||
|
var sport = cbSports.Items[i] as SportType;
|
||||||
|
if (_item.Name == sport?.name.ToString())
|
||||||
|
{
|
||||||
|
cbSports.SelectedIndex = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dtPicker.SelectedDate = _item.Date;
|
||||||
|
tbDuration.Text = _item.Duration.ToString();
|
||||||
|
tbIntensivity.Text = _item.Intensity?.ToString();
|
||||||
|
tbNote.Text = _item.Notes?.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SportType
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FillCbSports(ComboBox cb)
|
||||||
|
{
|
||||||
|
var items = GetData();
|
||||||
|
cbSports.ItemsSource = items;
|
||||||
|
cbSports.DisplayMemberPath = "name";
|
||||||
|
cbSports.SelectedValuePath = "id";
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<SportType> GetData()
|
||||||
|
{
|
||||||
|
var items = new List<SportType>();
|
||||||
|
string query = "SELECT id, name FROM dbo.sports";
|
||||||
|
|
||||||
|
using (var connection = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
connection.Open();
|
||||||
|
using (var command = new NpgsqlCommand(query, connection))
|
||||||
|
using (var reader = command.ExecuteReader())
|
||||||
|
{
|
||||||
|
while (reader.Read())
|
||||||
|
{
|
||||||
|
items.Add(new SportType
|
||||||
|
{
|
||||||
|
id = reader.GetInt32(0),
|
||||||
|
name = reader.GetString(1)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ButtonCancel_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ButtonUpd_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using(var cmd = new NpgsqlCommand(@$"UPDATE dbo.workouts
|
||||||
|
SET sport_id=@sport_id, date=@date, duration=@dur, intensity=@intensity, notes=@notes
|
||||||
|
WHERE id = {item.ID};", conn))
|
||||||
|
{
|
||||||
|
cmd.Parameters.AddWithValue("date", dtPicker.SelectedDate.Value);
|
||||||
|
cmd.Parameters.AddWithValue("sport_id", cbSports.SelectedValue);
|
||||||
|
cmd.Parameters.AddWithValue("dur", Convert.ToInt32(tbDuration.Text));
|
||||||
|
cmd.Parameters.AddWithValue("intensity", tbIntensivity.Text);
|
||||||
|
cmd.Parameters.AddWithValue("notes", tbNote.Text);
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
9
App.xaml
Normal file
9
App.xaml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<Application x:Class="SportsTrainingApp.App"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:local="clr-namespace:SportsTrainingApp"
|
||||||
|
StartupUri="formMain.xaml">
|
||||||
|
<Application.Resources>
|
||||||
|
|
||||||
|
</Application.Resources>
|
||||||
|
</Application>
|
||||||
13
App.xaml.cs
Normal file
13
App.xaml.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using System.Configuration;
|
||||||
|
using System.Data;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for App.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class App : Application
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
10
AssemblyInfo.cs
Normal file
10
AssemblyInfo.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
[assembly:ThemeInfo(
|
||||||
|
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
|
||||||
|
//(used if a resource is not found in the page,
|
||||||
|
// or application resource dictionaries)
|
||||||
|
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
|
||||||
|
//(used if a resource is not found in the page,
|
||||||
|
// app, or any theme specific resource dictionaries)
|
||||||
|
)]
|
||||||
32
Challenges/formAddChallenges.xaml
Normal file
32
Challenges/formAddChallenges.xaml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.Challenges.formAddChallenges"
|
||||||
|
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:SportsTrainingApp.Challenges"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Добавить испытание" Height="150" Width="800" ResizeMode="NoResize" Icon="/free-icon-fitness-4729328.png" WindowStartupLocation="CenterScreen">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBox x:Name="tbName" Grid.Row="1" Grid.Column="0" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbDescription" Grid.Row="1" Grid.Column="1" Height="25" Margin="10"/>
|
||||||
|
<DatePicker x:Name="dtStart" Grid.Row="1" Grid.Column="2" Height="25" Margin="10"/>
|
||||||
|
<DatePicker x:Name="dtEnd" Grid.Row="1" Grid.Column="3" Height="25" Margin="10"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="0" Text="Название" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="1" Text="Описание" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="2" Text="Дата начала" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="3" Text="Дата окончания" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<Button Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" Height="25" Width="200" Content="Добавить" Click="Button_Click_1"/>
|
||||||
|
<Button Grid.Column="2" Grid.Row="2" Grid.ColumnSpan="2" Height="25" Width="200" Content="Отмена" Click="Button_Click_2"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
46
Challenges/formAddChallenges.xaml.cs
Normal file
46
Challenges/formAddChallenges.xaml.cs
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using Npgsql;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp.Challenges
|
||||||
|
{
|
||||||
|
|
||||||
|
public partial class formAddChallenges : Window
|
||||||
|
{
|
||||||
|
|
||||||
|
public formAddChallenges()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
dtStart.SelectedDate = DateTime.Now;
|
||||||
|
dtEnd.SelectedDate = DateTime.Now.AddDays(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddChallenges()
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (var cmd = new NpgsqlCommand($@"INSERT INTO dbo.challenges(
|
||||||
|
name, description, start_date, end_date)
|
||||||
|
VALUES (@name, @description, @start_date, @end_date);", conn))
|
||||||
|
{
|
||||||
|
cmd.Parameters.AddWithValue("name", tbName.Text);
|
||||||
|
cmd.Parameters.AddWithValue("description", tbDescription.Text);
|
||||||
|
cmd.Parameters.AddWithValue("start_date", dtStart.SelectedDate);
|
||||||
|
cmd.Parameters.AddWithValue("end_date", dtEnd.SelectedDate);
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_1(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
AddChallenges();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_2(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
45
Challenges/formChallenges.xaml
Normal file
45
Challenges/formChallenges.xaml
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.Challenges.formChallenges"
|
||||||
|
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:SportsTrainingApp.Challenges"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Испытание" Height="450" Width="800" Icon="/free-icon-fitness-4729328.png" WindowStartupLocation="CenterScreen">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<DataGrid Grid.Column="0" Grid.Row="3" x:Name="gridChallenges" AutoGenerateColumns="False"
|
||||||
|
ColumnWidth="*" Grid.ColumnSpan="3" Margin="10" IsReadOnly="True">
|
||||||
|
<DataGrid.Resources>
|
||||||
|
<Style TargetType="TextBlock" x:Key="WrapText">
|
||||||
|
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
|
||||||
|
</Style>
|
||||||
|
<Style TargetType="DataGridColumnHeader">
|
||||||
|
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||||||
|
</Style>
|
||||||
|
<Style TargetType="DataGridCell">
|
||||||
|
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||||||
|
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||||||
|
</Style>
|
||||||
|
</DataGrid.Resources>
|
||||||
|
<DataGrid.Columns>
|
||||||
|
<DataGridTextColumn Header="id" Binding="{Binding ID}" Visibility="Hidden" />
|
||||||
|
<DataGridTextColumn Header="Название" Binding="{Binding Name}" />
|
||||||
|
<DataGridTextColumn Header="Описание" Binding="{Binding Description}" ElementStyle="{StaticResource WrapText}"/>
|
||||||
|
<DataGridTextColumn Header="Дата начала" Binding="{Binding Start_date}" ElementStyle="{StaticResource WrapText}"/>
|
||||||
|
<DataGridTextColumn Header="Дата окончания" Binding="{Binding End_date}" ElementStyle="{StaticResource WrapText}"/>
|
||||||
|
</DataGrid.Columns>
|
||||||
|
</DataGrid>
|
||||||
|
<Button x:Name="btAddChallenges" Grid.Column="0" Grid.Row="0" Content="Добавить" Margin="10" Click="btAddChallenges_Click"/>
|
||||||
|
<Button x:Name="btUpdChallenges" Grid.Column="1" Grid.Row="0" Content="Изменить" Margin="10" Click="btUpdChallenges_Click"/>
|
||||||
|
<Button x:Name="btDelChallenges" Grid.Column="2" Grid.Row="0" Content="Удалить" Margin="10" Click="btDelChallenges_Click"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
96
Challenges/formChallenges.xaml.cs
Normal file
96
Challenges/formChallenges.xaml.cs
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
using Npgsql;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp.Challenges
|
||||||
|
{
|
||||||
|
public partial class formChallenges : Window
|
||||||
|
{
|
||||||
|
|
||||||
|
public formChallenges()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
FillDataGrid();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Challenges
|
||||||
|
{
|
||||||
|
public int ID { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string Description { get; set; }
|
||||||
|
public DateTime Start_date { get; set; }
|
||||||
|
public DateTime End_date { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FillDataGrid()
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (var cmd = new NpgsqlCommand($@"SELECT
|
||||||
|
ID,
|
||||||
|
NAME,
|
||||||
|
DESCRIPTION,
|
||||||
|
START_DATE,
|
||||||
|
END_DATE
|
||||||
|
FROM
|
||||||
|
DBO.CHALLENGES
|
||||||
|
ORDER BY
|
||||||
|
START_DATE", conn))
|
||||||
|
{
|
||||||
|
var reader = cmd.ExecuteReader();
|
||||||
|
var challenges = new List<Challenges>();
|
||||||
|
while (reader.Read())
|
||||||
|
{
|
||||||
|
challenges.Add(new Challenges
|
||||||
|
{
|
||||||
|
ID = reader.GetInt32(0),
|
||||||
|
Name = reader.GetString(1),
|
||||||
|
Description = reader.GetString(2),
|
||||||
|
Start_date = reader.GetDateTime(3),
|
||||||
|
End_date = reader.GetDateTime(4)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
gridChallenges.ItemsSource = challenges;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btAddChallenges_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
new formAddChallenges().ShowDialog();
|
||||||
|
FillDataGrid();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btDelChallenges_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var selectedItem = (Challenges)gridChallenges.SelectedItem;
|
||||||
|
|
||||||
|
if (selectedItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (var cmd = new NpgsqlCommand(@$"DELETE FROM DBO.CHALLENGES
|
||||||
|
WHERE
|
||||||
|
ID = {selectedItem.ID}", conn))
|
||||||
|
{
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FillDataGrid();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btUpdChallenges_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var selectedItem = (Challenges)gridChallenges.SelectedItem;
|
||||||
|
|
||||||
|
if (selectedItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
new formUpdChallenges(selectedItem).ShowDialog();
|
||||||
|
|
||||||
|
FillDataGrid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
32
Challenges/formUpdChallenges.xaml
Normal file
32
Challenges/formUpdChallenges.xaml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.Challenges.formUpdChallenges"
|
||||||
|
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:SportsTrainingApp.Challenges"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Изменить испытание" Height="150" Width="800" ResizeMode="NoResize" Icon="/free-icon-fitness-4729328.png" WindowStartupLocation="CenterScreen">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBox x:Name="tbName" Grid.Row="1" Grid.Column="0" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbDescription" Grid.Row="1" Grid.Column="1" Height="25" Margin="10"/>
|
||||||
|
<DatePicker x:Name="dtStart" Grid.Row="1" Grid.Column="2" Height="25" Margin="10"/>
|
||||||
|
<DatePicker x:Name="dtEnd" Grid.Row="1" Grid.Column="3" Height="25" Margin="10"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="0" Text="Название" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="1" Text="Описание" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="2" Text="Дата начала" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="3" Text="Дата окончания" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<Button Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" Height="25" Width="200" Content="Изменить" Click="Button_Click_1"/>
|
||||||
|
<Button Grid.Column="2" Grid.Row="2" Grid.ColumnSpan="2" Height="25" Width="200" Content="Отмена" Click="Button_Click_2"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
49
Challenges/formUpdChallenges.xaml.cs
Normal file
49
Challenges/formUpdChallenges.xaml.cs
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using Npgsql;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp.Challenges
|
||||||
|
{
|
||||||
|
|
||||||
|
public partial class formUpdChallenges : Window
|
||||||
|
{
|
||||||
|
formChallenges.Challenges item;
|
||||||
|
public formUpdChallenges(formChallenges.Challenges _item)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
item = _item;
|
||||||
|
FillFormFields(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FillFormFields(formChallenges.Challenges _item)
|
||||||
|
{
|
||||||
|
tbName.Text = _item.Name;
|
||||||
|
tbDescription.Text = _item.Description;
|
||||||
|
dtEnd.SelectedDate = _item.End_date.Date;
|
||||||
|
dtStart.SelectedDate = _item.Start_date.Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_2(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_1(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (var cmd = new NpgsqlCommand(@$"UPDATE dbo.challenges
|
||||||
|
SET name=@name, description=@description, start_date=@start_date, end_date=@end_date
|
||||||
|
WHERE id = {item.ID};", conn))
|
||||||
|
{
|
||||||
|
cmd.Parameters.AddWithValue("name", tbName.Text);
|
||||||
|
cmd.Parameters.AddWithValue("description", tbDescription.Text);
|
||||||
|
cmd.Parameters.AddWithValue("start_date", dtStart.SelectedDate);
|
||||||
|
cmd.Parameters.AddWithValue("end_date", dtEnd.SelectedDate);
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
35
Nutrition/formAddNutrition.xaml
Normal file
35
Nutrition/formAddNutrition.xaml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.Nutrition.formAddNutrition"
|
||||||
|
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:SportsTrainingApp.Nutrition"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Добавить питание" Height="150" Width="800" ResizeMode="NoResize" Icon="/free-icon-fitness-4729328.png" WindowStartupLocation="CenterScreen">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<DatePicker Name="dtPicker" Grid.Row="1" Grid.Column="0" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbCalories" Grid.Row="1" Grid.Column="1" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbProtein" Grid.Row="1" Grid.Column="2" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbCarbs" Grid.Row="1" Grid.Column="3" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbFats" Grid.Row="1" Grid.Column="4" Height="25" Margin="10"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="0" Text="Дата" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="1" Text="Калории" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="2" Text="Белки" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="3" Text="Углеводы" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="4" Text="Жиры" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<Button Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" Height="25" Width="200" Content="Добавить" Click="Button_Click_1"/>
|
||||||
|
<Button Grid.Column="3" Grid.Row="2" Grid.ColumnSpan="2" Height="25" Width="200" Content="Отмена" Click="Button_Click_2"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
50
Nutrition/formAddNutrition.xaml.cs
Normal file
50
Nutrition/formAddNutrition.xaml.cs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using Npgsql;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp.Nutrition
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for formAddNutrition.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class formAddNutrition : Window
|
||||||
|
{
|
||||||
|
int user_id = -1;
|
||||||
|
public formAddNutrition(int _user_id)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
user_id = _user_id;
|
||||||
|
dtPicker.SelectedDate = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddNutrition()
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (var cmd = new NpgsqlCommand($@"INSERT INTO dbo.nutrition(
|
||||||
|
user_id, date, calories, protein, carbs, fats)
|
||||||
|
VALUES (@user_id, @date, @calories, @protein, @carbs, @fats);", conn))
|
||||||
|
{
|
||||||
|
cmd.Parameters.AddWithValue("user_id", user_id);
|
||||||
|
cmd.Parameters.AddWithValue("date", dtPicker.SelectedDate.Value);
|
||||||
|
cmd.Parameters.AddWithValue("calories", Convert.ToInt32(tbCalories.Text));
|
||||||
|
cmd.Parameters.AddWithValue("protein", Convert.ToDouble(tbProtein.Text));
|
||||||
|
cmd.Parameters.AddWithValue("carbs", Convert.ToDouble(tbCarbs.Text));
|
||||||
|
cmd.Parameters.AddWithValue("fats", Convert.ToDouble(tbFats.Text));
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_1(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
AddNutrition();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_2(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
47
Nutrition/formNutrition.xaml
Normal file
47
Nutrition/formNutrition.xaml
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.Nutrition.formNutrition"
|
||||||
|
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:SportsTrainingApp.Nutrition"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Питание" Height="450" Width="800" Icon="/free-icon-fitness-4729328.png" WindowStartupLocation="CenterScreen">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<DataGrid Grid.Column="0" Grid.Row="3" x:Name="gridNutrition" AutoGenerateColumns="False"
|
||||||
|
ColumnWidth="*" Grid.ColumnSpan="3" Margin="10" IsReadOnly="True">
|
||||||
|
<DataGrid.Resources>
|
||||||
|
<Style TargetType="TextBlock" x:Key="WrapText">
|
||||||
|
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
|
||||||
|
</Style>
|
||||||
|
<Style TargetType="DataGridColumnHeader">
|
||||||
|
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||||||
|
</Style>
|
||||||
|
<Style TargetType="DataGridCell">
|
||||||
|
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||||||
|
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||||||
|
</Style>
|
||||||
|
</DataGrid.Resources>
|
||||||
|
<DataGrid.Columns>
|
||||||
|
<DataGridTextColumn Header="id" Binding="{Binding ID}" Visibility="Hidden" />
|
||||||
|
<DataGridTextColumn Header="user_id" Binding="{Binding User_id}" Visibility="Hidden"/>
|
||||||
|
<DataGridTextColumn Header="Дата" Binding="{Binding Date}" />
|
||||||
|
<DataGridTextColumn Header="Калории" Binding="{Binding Calories}" ElementStyle="{StaticResource WrapText}"/>
|
||||||
|
<DataGridTextColumn Header="Белки" Binding="{Binding Protein}" ElementStyle="{StaticResource WrapText}"/>
|
||||||
|
<DataGridTextColumn Header="Углеводы" Binding="{Binding Carbs}" ElementStyle="{StaticResource WrapText}"/>
|
||||||
|
<DataGridTextColumn Header="Жиры" Binding="{Binding Fats}" ElementStyle="{StaticResource WrapText}"/>
|
||||||
|
</DataGrid.Columns>
|
||||||
|
</DataGrid>
|
||||||
|
<Button x:Name="btAddNutrition" Grid.Column="0" Grid.Row="0" Content="Добавить" Margin="10" Click="btAddNutrition_Click"/>
|
||||||
|
<Button x:Name="btUpdNutrution" Grid.Column="1" Grid.Row="0" Content="Изменить" Margin="10" Click="btUpdNutrution_Click"/>
|
||||||
|
<Button x:Name="btDelNutrition" Grid.Column="2" Grid.Row="0" Content="Удалить" Margin="10" Click="btDelNutrition_Click"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
107
Nutrition/formNutrition.xaml.cs
Normal file
107
Nutrition/formNutrition.xaml.cs
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
using Npgsql;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp.Nutrition
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for fromNutrition.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class formNutrition : Window
|
||||||
|
{
|
||||||
|
int user_id = -1;
|
||||||
|
public formNutrition(int _user_id)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
user_id = _user_id;
|
||||||
|
FillDataGrid(user_id);
|
||||||
|
|
||||||
|
}
|
||||||
|
public class Nutrition
|
||||||
|
{
|
||||||
|
public int ID { get; set; }
|
||||||
|
public int User_id { get; set; }
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
public int Calories { get; set; }
|
||||||
|
public double Protein { get; set; }
|
||||||
|
public double Carbs { get; set; }
|
||||||
|
public double Fats { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FillDataGrid(int _user_id)
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (var cmd = new NpgsqlCommand($@"SELECT
|
||||||
|
ID,
|
||||||
|
USER_ID,
|
||||||
|
DATE,
|
||||||
|
CALORIES,
|
||||||
|
PROTEIN,
|
||||||
|
CARBS,
|
||||||
|
FATS
|
||||||
|
FROM
|
||||||
|
DBO.NUTRITION
|
||||||
|
WHERE
|
||||||
|
USER_ID = {_user_id}
|
||||||
|
ORDER BY DATE", conn))
|
||||||
|
{
|
||||||
|
var reader = cmd.ExecuteReader();
|
||||||
|
var nutrition = new List<Nutrition>();
|
||||||
|
while (reader.Read())
|
||||||
|
{
|
||||||
|
nutrition.Add(new Nutrition
|
||||||
|
{
|
||||||
|
ID = reader.GetInt32(0),
|
||||||
|
User_id = reader.GetInt32(1),
|
||||||
|
Date = reader.GetDateTime(2),
|
||||||
|
Calories = reader.GetInt32(3),
|
||||||
|
Protein = reader.GetDouble(4),
|
||||||
|
Carbs = reader.GetDouble(5),
|
||||||
|
Fats = reader.GetDouble(6)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
gridNutrition.ItemsSource = nutrition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btAddNutrition_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
new formAddNutrition(user_id).ShowDialog();
|
||||||
|
FillDataGrid(user_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btDelNutrition_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var selectedItem = (Nutrition)gridNutrition.SelectedItem;
|
||||||
|
|
||||||
|
if (selectedItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (var cmd = new NpgsqlCommand(@$"DELETE FROM DBO.NUTRITION
|
||||||
|
WHERE
|
||||||
|
ID = {selectedItem.ID}", conn))
|
||||||
|
{
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FillDataGrid(user_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btUpdNutrution_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var selectedItem = (Nutrition)gridNutrition.SelectedItem;
|
||||||
|
|
||||||
|
if (selectedItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
new formUpdNutrition(selectedItem).ShowDialog();
|
||||||
|
|
||||||
|
FillDataGrid(user_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
35
Nutrition/formUpdNutrition.xaml
Normal file
35
Nutrition/formUpdNutrition.xaml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.Nutrition.formUpdNutrition"
|
||||||
|
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:SportsTrainingApp.Nutrition"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Изменить питание" Height="150" Width="800" ResizeMode="NoResize" Icon="/free-icon-fitness-4729328.png" WindowStartupLocation="CenterScreen">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
<RowDefinition ></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<DatePicker Name="dtPicker" Grid.Row="1" Grid.Column="0" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbCalories" Grid.Row="1" Grid.Column="1" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbProtein" Grid.Row="1" Grid.Column="2" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbCarbs" Grid.Row="1" Grid.Column="3" Height="25" Margin="10"/>
|
||||||
|
<TextBox x:Name="tbFats" Grid.Row="1" Grid.Column="4" Height="25" Margin="10"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="0" Text="Дата" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="1" Text="Калории" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="2" Text="Белки" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="3" Text="Углеводы" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="4" Text="Жиры" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
|
||||||
|
<Button Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" Height="25" Width="200" Content="Изменить" Click="Button_Click_1"/>
|
||||||
|
<Button Grid.Column="3" Grid.Row="2" Grid.ColumnSpan="2" Height="25" Width="200" Content="Отмена" Click="Button_Click_2"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
54
Nutrition/formUpdNutrition.xaml.cs
Normal file
54
Nutrition/formUpdNutrition.xaml.cs
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using Npgsql;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp.Nutrition
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for formUpdNutrition.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class formUpdNutrition : Window
|
||||||
|
{
|
||||||
|
formNutrition.Nutrition item;
|
||||||
|
public formUpdNutrition(formNutrition.Nutrition _item)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
item = _item;
|
||||||
|
FillFormFields(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FillFormFields(formNutrition.Nutrition _item)
|
||||||
|
{
|
||||||
|
dtPicker.SelectedDate = _item.Date;
|
||||||
|
tbCalories.Text = _item.Calories.ToString();
|
||||||
|
tbCarbs.Text = _item.Carbs.ToString();
|
||||||
|
tbProtein.Text = _item.Protein.ToString();
|
||||||
|
tbFats.Text = _item.Fats.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_2(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_1(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
using (var cmd = new NpgsqlCommand(@$"UPDATE dbo.nutrition
|
||||||
|
SET user_id=@user_id, date=@date, calories=@calories, protein=@protein, carbs=@carbs, fats=@fats
|
||||||
|
WHERE id = {item.ID};", conn))
|
||||||
|
{
|
||||||
|
cmd.Parameters.AddWithValue("user_id", item.User_id);
|
||||||
|
cmd.Parameters.AddWithValue("date", dtPicker.SelectedDate.Value);
|
||||||
|
cmd.Parameters.AddWithValue("calories", Convert.ToInt32(tbCalories.Text));
|
||||||
|
cmd.Parameters.AddWithValue("protein", Convert.ToDouble(tbProtein.Text));
|
||||||
|
cmd.Parameters.AddWithValue("carbs", Convert.ToDouble(tbCarbs.Text));
|
||||||
|
cmd.Parameters.AddWithValue("fats", Convert.ToDouble(tbFats.Text));
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
41
SportsTrainingApp.csproj
Normal file
41
SportsTrainingApp.csproj
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<UseWPF>true</UseWPF>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Remove="Activity\rajo4eib.oid~" />
|
||||||
|
<None Remove="free-icon-fitness-4729328.png" />
|
||||||
|
<None Remove="l2itol0i.q13~" />
|
||||||
|
<None Remove="MainWindow.xaml.cs~RF63ae882.TMP" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Npgsql" Version="9.0.3" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Resource Include="free-icon-fitness-4729328.png" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Update="Challenges\formAddChallenges.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="Challenges\formChallenges.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="Challenges\formUpdChallenges.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="formLogin.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
25
SportsTrainingApp.sln
Normal file
25
SportsTrainingApp.sln
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.13.35828.75 d17.13
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SportsTrainingApp", "SportsTrainingApp.csproj", "{76018E6A-7200-4E33-A2AE-152867198A3B}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{76018E6A-7200-4E33-A2AE-152867198A3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{76018E6A-7200-4E33-A2AE-152867198A3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{76018E6A-7200-4E33-A2AE-152867198A3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{76018E6A-7200-4E33-A2AE-152867198A3B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {A06D3EF8-E3D3-4284-8150-A4FE3B0CCCEE}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
33
formLogin.xaml
Normal file
33
formLogin.xaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.formLogin"
|
||||||
|
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:SportsTrainingApp"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Вход" Height="130" Width="400" WindowStartupLocation="CenterScreen" ResizeMode="NoResize" Icon="/free-icon-fitness-4729328.png">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="0.2*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="0.2*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="0.2*"></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Button Grid.Column="1" Grid.Row="5" Content="Вход" Click="Button_Click_1" />
|
||||||
|
<Button Grid.Column="3" Grid.Row="5" Content="Отмена" Click="Button_Click_2"/>
|
||||||
|
<TextBox Grid.Column="1" Grid.Row="3" TextAlignment="Center" x:Name="loginBox"/>
|
||||||
|
<PasswordBox Grid.Column="3" Grid.Row="3" x:Name="passwordBox"/>
|
||||||
|
<TextBlock Grid.Column="1" Grid.Row="1" Text="Логин" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Column="3" Grid.Row="1" Text="Пароль" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
59
formLogin.xaml.cs
Normal file
59
formLogin.xaml.cs
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using System;
|
||||||
|
using Npgsql;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp
|
||||||
|
{
|
||||||
|
|
||||||
|
public partial class formLogin : Window
|
||||||
|
{
|
||||||
|
formMain formMain;
|
||||||
|
public formLogin(formMain _formMain)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
formMain = _formMain;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_2(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_1(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
int user_id = CheckUser(loginBox.Text, passwordBox.Password);
|
||||||
|
if (user_id != -1)
|
||||||
|
{
|
||||||
|
new formActivity(user_id).Show();
|
||||||
|
this.Close();
|
||||||
|
formMain.Close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
MessageBox.Show("Неверный логин/пароль!");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int CheckUser(string username, string password)
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
|
||||||
|
using (var cmd = new NpgsqlCommand("SELECT id FROM dbo.users WHERE username = @username " +
|
||||||
|
"AND password_hash = dbo.crypt(@password, password_hash)", conn))
|
||||||
|
{
|
||||||
|
cmd.Parameters.AddWithValue("username", username);
|
||||||
|
cmd.Parameters.AddWithValue("password", password);
|
||||||
|
|
||||||
|
using (var reader = cmd.ExecuteReader())
|
||||||
|
{
|
||||||
|
if (reader.Read())
|
||||||
|
{
|
||||||
|
return reader.GetInt32(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
25
formMain.xaml
Normal file
25
formMain.xaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.formMain"
|
||||||
|
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:SportsTrainingApp"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Система учета спортивных тренировок" Height="200" Width="300" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" Icon="/free-icon-fitness-4729328.png">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="0.2*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="0.2*"></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Button Grid.Column="1" Grid.Row="1" Content="Вход" Click="Button_Click_1" Margin="10"/>
|
||||||
|
<Button Grid.Column="1" Grid.Row="3" Content="Регистрация" Click="Button_Click_2" Margin="10"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
26
formMain.xaml.cs
Normal file
26
formMain.xaml.cs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for MainWindow.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class formMain : Window
|
||||||
|
{
|
||||||
|
public const string connectionString = "Host=192.168.0.110:5432;Username=KhasanovAM;Password=Admin123;Database=SportsTrainingApp";
|
||||||
|
public formMain()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_1(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var formLogin = new formLogin(this);
|
||||||
|
formLogin.ShowDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_2(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
new formRegistration().ShowDialog();
|
||||||
|
}
|
||||||
|
}
|
||||||
38
formRegistration.xaml
Normal file
38
formRegistration.xaml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<Window x:Class="SportsTrainingApp.formRegistration"
|
||||||
|
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:SportsTrainingApp"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Регистрация" Height="130" Width="600" WindowStartupLocation="CenterScreen" ResizeMode="NoResize" Icon="/free-icon-fitness-4729328.png">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.2*"></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="0.2*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="0.2*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="0.2*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="0.2*"></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Button Grid.Column="1" Grid.Row="5" Content="OK" Click="Button_Click_OK"/>
|
||||||
|
<Button Grid.Column="5" Grid.Row="5" Content="Отмена" Click="Button_Click_Cancel"/>
|
||||||
|
<Button Grid.Column="3" Grid.Row="5" Content="Показать пароль" Click="Button_Click_ShowPass"/>
|
||||||
|
<TextBox Grid.Column="1" Grid.Row="3" TextAlignment="Center" x:Name="loginBox"/>
|
||||||
|
<PasswordBox Grid.Column="3" Grid.Row="3" x:Name="passwordBox"/>
|
||||||
|
<TextBox Grid.Column="5" Grid.Row="3" TextAlignment="Center" x:Name="emailBox"/>
|
||||||
|
<TextBlock Grid.Column="1" Grid.Row="1" Text="Логин" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Column="3" Grid.Row="1" Text="Пароль" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||||
|
<TextBlock Grid.Column="5" Grid.Row="1" Text="Email" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
53
formRegistration.xaml.cs
Normal file
53
formRegistration.xaml.cs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using Npgsql;
|
||||||
|
|
||||||
|
namespace SportsTrainingApp
|
||||||
|
{
|
||||||
|
|
||||||
|
public partial class formRegistration : Window
|
||||||
|
{
|
||||||
|
public formRegistration()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_ShowPass(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
MessageBox.Show($"Ваш пароль: {passwordBox.Password}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_Cancel(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_OK(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (loginBox.Text == "" || passwordBox.Password == "" || emailBox.Text == "")
|
||||||
|
{
|
||||||
|
MessageBox.Show("Введены не все данные.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CreateUser(loginBox.Text, passwordBox.Password, emailBox.Text);
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void CreateUser(string username, string password, string email)
|
||||||
|
{
|
||||||
|
using (var conn = new NpgsqlConnection(formMain.connectionString))
|
||||||
|
{
|
||||||
|
conn.Open();
|
||||||
|
|
||||||
|
using (var cmd = new NpgsqlCommand("INSERT INTO dbo.users (username, email, password_hash) " +
|
||||||
|
"VALUES (@username, @email, dbo.crypt(@password, dbo.gen_salt('bf')))", conn))
|
||||||
|
{
|
||||||
|
cmd.Parameters.AddWithValue("username", username);
|
||||||
|
cmd.Parameters.AddWithValue("email", email);
|
||||||
|
cmd.Parameters.AddWithValue("password", password);
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MessageBox.Show("Пользователь создан!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
free-icon-fitness-4729328.png
Normal file
BIN
free-icon-fitness-4729328.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
Reference in New Issue
Block a user