Add project files.

This commit is contained in:
2025-03-25 22:59:42 +04:00
parent 20e9f92f3a
commit 4445accb75
30 changed files with 1424 additions and 0 deletions

View 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>

View 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();
}
}
}

View 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>

View 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);
}
}
}

View 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>

View 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();
}
}
}