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