first
This commit is contained in:
commit
248d3e25d2
46
AdminWindow.axaml
Normal file
46
AdminWindow.axaml
Normal file
@ -0,0 +1,46 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
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"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="kursovaya.AdminWindow"
|
||||
x:CompileBindings="False"
|
||||
Title="AdminWindow">
|
||||
<Border Background="Bisque">
|
||||
<DockPanel>
|
||||
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Background="LightBlue" Height="30">
|
||||
<Button DockPanel.Dock="Left" Content="Назад" Click="ButtonBack_OnClick" Width="100" HorizontalAlignment="Left" Foreground="Black" Background="LightGray"/>
|
||||
<ComboBox x:Name="GroupComboBox" HorizontalAlignment="Center"/>
|
||||
<ComboBox x:Name="DisciplineComboBox" HorizontalAlignment="Center"/>
|
||||
<ComboBox x:Name="TeacherComboBox" HorizontalAlignment="Center"/>
|
||||
<!-- <Button Content="Просмотр аттестации" Foreground="Black"/> -->
|
||||
</StackPanel>
|
||||
<Grid DockPanel.Dock="Top" ColumnDefinitions="3*,1*,3*" Background="LightGray" Height="35">
|
||||
<TextBlock Grid.Column="0" Text="Дисциплина" VerticalAlignment="Center" Margin="5" Foreground="Black" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="1" Text="Группа" VerticalAlignment="Center" Margin="5" Foreground="Black" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="2" Text="Преподаватель" VerticalAlignment="Center" Margin="5" Foreground="Black" FontWeight="Bold"/>
|
||||
</Grid>
|
||||
<ScrollViewer>
|
||||
<ItemsControl x:Name="FlatGrid" ItemsSource="{Binding DisciplineGroupTeachers}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Grid ColumnDefinitions="3*,1*,3*" Margin="2" Background="LightGray" Height="40">
|
||||
<Border Grid.Column="0" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding DisciplineName}" VerticalAlignment="Center" Margin="10,0" Foreground="Black"/>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="1" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding GroupId}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black"/>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="2" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding TeacherFio}" VerticalAlignment="Center" Margin="10,0" Foreground="Black"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</ScrollViewer>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
</Window>
|
70
AdminWindow.axaml.cs
Normal file
70
AdminWindow.axaml.cs
Normal file
@ -0,0 +1,70 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using kursovaya.Models;
|
||||
|
||||
namespace kursovaya;
|
||||
|
||||
public partial class AdminWindow : Window
|
||||
{
|
||||
List<Discipline> Disciplines = new List<Discipline>();
|
||||
List<Group> Groups = new List<Group>();
|
||||
List<Teacher> Teachers = new List<Teacher>();
|
||||
ObservableCollection<DisciplineGroupTeacher> DisciplineGroupTeachers = new ObservableCollection<DisciplineGroupTeacher>();
|
||||
public AdminWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
var ctx = new DatabaseContext();
|
||||
|
||||
Disciplines = ctx.Disciplines.ToList();
|
||||
Groups = ctx.Groups.ToList();
|
||||
Teachers = ctx.Teachers.ToList();
|
||||
|
||||
var disciplineTeachers = ctx.DisciplineTeachers.ToList();
|
||||
|
||||
foreach (DisciplineTeacher disciplineTeacher in disciplineTeachers)
|
||||
{
|
||||
//todo
|
||||
//var group =
|
||||
var teacher = ctx.Teachers.FirstOrDefault(t => t.Id == disciplineTeacher.IdTeacher);
|
||||
var discipline = ctx.Disciplines.FirstOrDefault(d => d.Id == disciplineTeacher.IdDiscipline);
|
||||
DisciplineGroupTeachers.Add(new DisciplineGroupTeacher(){Teacher = teacher, Discipline = discipline, Group = new Group() {Id = 777, YearAdmission = 777}});
|
||||
}
|
||||
|
||||
GroupComboBox.ItemsSource = Groups.Select(g => g.Id);
|
||||
DisciplineComboBox.ItemsSource = Disciplines.Select(d => d.Name);
|
||||
TeacherComboBox.ItemsSource = Teachers.Select(t => t.Fio);
|
||||
FlatGrid.ItemsSource = DisciplineGroupTeachers;
|
||||
|
||||
}
|
||||
|
||||
public class DisciplineGroupTeacher()
|
||||
{
|
||||
public Group Group { get; set; }
|
||||
public Discipline Discipline { get; set; }
|
||||
public Teacher Teacher { get; set; }
|
||||
|
||||
public string DisciplineName
|
||||
{
|
||||
get => Discipline.Name;
|
||||
}
|
||||
public string TeacherFio
|
||||
{
|
||||
get => Teacher.Fio;
|
||||
}
|
||||
public int GroupId
|
||||
{
|
||||
get => Group.Id;
|
||||
}
|
||||
}
|
||||
|
||||
private void ButtonBack_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
}
|
10
App.axaml
Normal file
10
App.axaml
Normal file
@ -0,0 +1,10 @@
|
||||
<Application xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Class="kursovaya.App"
|
||||
RequestedThemeVariant="Default">
|
||||
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
|
||||
|
||||
<Application.Styles>
|
||||
<FluentTheme />
|
||||
</Application.Styles>
|
||||
</Application>
|
23
App.axaml.cs
Normal file
23
App.axaml.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
using Avalonia.Markup.Xaml;
|
||||
|
||||
namespace kursovaya;
|
||||
|
||||
public partial class App : Application
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
}
|
||||
|
||||
public override void OnFrameworkInitializationCompleted()
|
||||
{
|
||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
{
|
||||
desktop.MainWindow = new MainWindow();
|
||||
}
|
||||
|
||||
base.OnFrameworkInitializationCompleted();
|
||||
}
|
||||
}
|
18
EditAttestWindow.axaml
Normal file
18
EditAttestWindow.axaml
Normal file
@ -0,0 +1,18 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
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"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="kursovaya.EditAttestWindow"
|
||||
x:CompileBindings="False"
|
||||
Title="EditAttestWindow">
|
||||
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Spacing="10">
|
||||
<TextBlock Text="Введите новую оценку:"/>
|
||||
<TextBlock TextAlignment="Center" TextWrapping="Wrap">
|
||||
<Run Text="Не больше "/>
|
||||
<Run Text="{Binding MaxAttestNumber}"/>
|
||||
</TextBlock>
|
||||
<TextBox x:Name="AttestTextBox" Width="100" HorizontalAlignment="Center"/>
|
||||
<Button Content="OK" Click="Button_OnClick" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Window>
|
50
EditAttestWindow.axaml.cs
Normal file
50
EditAttestWindow.axaml.cs
Normal file
@ -0,0 +1,50 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Markup.Xaml;
|
||||
|
||||
namespace kursovaya;
|
||||
|
||||
public partial class EditAttestWindow : Window
|
||||
{
|
||||
public int MaxAttestNumber { get; set; }
|
||||
public int outputAttestNumber;
|
||||
public EditAttestWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public EditAttestWindow(int number) : this()
|
||||
{
|
||||
switch(number)
|
||||
{
|
||||
case 1:
|
||||
MaxAttestNumber = 20;
|
||||
break;
|
||||
case 2:
|
||||
MaxAttestNumber = 30;
|
||||
break;
|
||||
case 3:
|
||||
MaxAttestNumber = 50;
|
||||
break;
|
||||
default:
|
||||
// code block
|
||||
break;
|
||||
}
|
||||
DataContext = this;
|
||||
}
|
||||
|
||||
private void Button_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!int.TryParse(AttestTextBox.Text, out int output)) return;
|
||||
if (output > MaxAttestNumber || output == null)
|
||||
{
|
||||
outputAttestNumber = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
outputAttestNumber = output;
|
||||
}
|
||||
Close(outputAttestNumber);
|
||||
}
|
||||
}
|
21
MainWindow.axaml
Normal file
21
MainWindow.axaml
Normal file
@ -0,0 +1,21 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
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"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="kursovaya.MainWindow"
|
||||
Title="kursovaya">
|
||||
<DockPanel Background="Bisque">
|
||||
<Grid>
|
||||
<Border Width="200" HorizontalAlignment="Center">
|
||||
<StackPanel Spacing="10" VerticalAlignment="Center">
|
||||
<TextBox x:Name="LoginName" Watermark="login"/>
|
||||
<TextBox x:Name="PasswordName" Watermark="password"/>
|
||||
<Button x:Name="TogglePasswordVisibility" Content="Show" Background="LightGray" Click="TogglePasswordVisibilityClick"/>
|
||||
<Button Click="Button_OnClick" Foreground="Black" Background="LightGray" Content="Войти"/>
|
||||
<TextBlock x:Name="ErrorMessage" Foreground="Red" FontSize="14" Height="40" Width="300" TextWrapping="Wrap" TextAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</DockPanel>
|
||||
</Window>
|
74
MainWindow.axaml.cs
Normal file
74
MainWindow.axaml.cs
Normal file
@ -0,0 +1,74 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using kursovaya.Models;
|
||||
|
||||
namespace kursovaya;
|
||||
|
||||
public partial class MainWindow : Window
|
||||
{
|
||||
private bool _isPasswordVisible = false;
|
||||
public MainWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
PasswordName.PasswordChar = '•';
|
||||
}
|
||||
|
||||
private void Button_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var login = LoginName.Text;
|
||||
var password = PasswordName.Text;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(login) || string.IsNullOrWhiteSpace(password))
|
||||
{
|
||||
ErrorMessage.Text = "Поля не должны быть пустыми!";
|
||||
return;
|
||||
}
|
||||
|
||||
var ctx = new DatabaseContext();
|
||||
|
||||
var user = ctx.Users.FirstOrDefault(u => u.Login == login && u.Password == password);
|
||||
|
||||
|
||||
if (user == null)
|
||||
{
|
||||
ErrorMessage.Text = "Вы ввели неверный логин или пароль. Пожалуйста, проверьте ещё раз данные";
|
||||
return;
|
||||
}
|
||||
|
||||
ErrorMessage.Text = "";
|
||||
|
||||
switch (user.RoleId)
|
||||
{
|
||||
case 1:
|
||||
StudentWindow studentWindow = new StudentWindow(user);
|
||||
studentWindow.ShowDialog(this);
|
||||
break;
|
||||
case 2:
|
||||
TeacherWindow teacherWindow = new TeacherWindow(user);
|
||||
teacherWindow.ShowDialog(this);
|
||||
break;
|
||||
case 3:
|
||||
AdminWindow adminWindow = new AdminWindow();
|
||||
adminWindow.ShowDialog(this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void TogglePasswordVisibilityClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
_isPasswordVisible = !_isPasswordVisible;
|
||||
|
||||
if (_isPasswordVisible)
|
||||
{
|
||||
PasswordName.PasswordChar = '\0';
|
||||
TogglePasswordVisibility.Content = "Hide";
|
||||
}
|
||||
else
|
||||
{
|
||||
PasswordName.PasswordChar = '•';
|
||||
TogglePasswordVisibility.Content = "Show";
|
||||
}
|
||||
}
|
||||
}
|
25
Models/Attestation.cs
Normal file
25
Models/Attestation.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace kursovaya.Models;
|
||||
|
||||
public partial class Attestation
|
||||
{
|
||||
public int IdUser { get; set; }
|
||||
|
||||
public int IdDiscipline { get; set; }
|
||||
|
||||
public int AttestFirst { get; set; }
|
||||
|
||||
public int AttestSecond { get; set; }
|
||||
|
||||
public int AttestThird { get; set; }
|
||||
|
||||
public int Total { get; set; }
|
||||
|
||||
public string Grade { get; set; } = null!;
|
||||
|
||||
public virtual Discipline IdDisciplineNavigation { get; set; } = null!;
|
||||
|
||||
public virtual Student IdUserNavigation { get; set; } = null!;
|
||||
}
|
213
Models/DatabaseContext.cs
Normal file
213
Models/DatabaseContext.cs
Normal file
@ -0,0 +1,213 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace kursovaya.Models;
|
||||
|
||||
public partial class DatabaseContext : DbContext
|
||||
{
|
||||
public DatabaseContext()
|
||||
{
|
||||
}
|
||||
|
||||
public DatabaseContext(DbContextOptions<DatabaseContext> options)
|
||||
: base(options)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual DbSet<Attestation> Attestations { get; set; }
|
||||
|
||||
public virtual DbSet<Discipline> Disciplines { get; set; }
|
||||
|
||||
public virtual DbSet<DisciplineTeacher> DisciplineTeachers { get; set; }
|
||||
|
||||
public virtual DbSet<FormAttest> FormAttests { get; set; }
|
||||
|
||||
public virtual DbSet<Group> Groups { get; set; }
|
||||
|
||||
public virtual DbSet<Role> Roles { get; set; }
|
||||
|
||||
public virtual DbSet<Student> Students { get; set; }
|
||||
|
||||
public virtual DbSet<Teacher> Teachers { get; set; }
|
||||
|
||||
public virtual DbSet<User> Users { get; set; }
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263.
|
||||
=> optionsBuilder.UseNpgsql("Host=localhost;Database=postgres;Username=postgres;Password=5432");
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<Attestation>(entity =>
|
||||
{
|
||||
entity.HasKey(e => new { e.IdUser, e.IdDiscipline }).HasName("attestation_pkey");
|
||||
|
||||
entity.ToTable("attestation");
|
||||
|
||||
entity.Property(e => e.IdUser).HasColumnName("id_user");
|
||||
entity.Property(e => e.IdDiscipline).HasColumnName("id_discipline");
|
||||
entity.Property(e => e.AttestFirst).HasColumnName("attest_first");
|
||||
entity.Property(e => e.AttestSecond).HasColumnName("attest_second");
|
||||
entity.Property(e => e.AttestThird).HasColumnName("attest_third");
|
||||
entity.Property(e => e.Grade)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("grade");
|
||||
entity.Property(e => e.Total).HasColumnName("total");
|
||||
|
||||
entity.HasOne(d => d.IdDisciplineNavigation).WithMany(p => p.Attestations)
|
||||
.HasForeignKey(d => d.IdDiscipline)
|
||||
.HasConstraintName("attestation_id_discipline_fkey");
|
||||
|
||||
entity.HasOne(d => d.IdUserNavigation).WithMany(p => p.Attestations)
|
||||
.HasForeignKey(d => d.IdUser)
|
||||
.HasConstraintName("attestation_id_user_fkey");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Discipline>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id).HasName("discipline_pkey");
|
||||
|
||||
entity.ToTable("discipline");
|
||||
|
||||
entity.Property(e => e.Id).HasColumnName("id");
|
||||
entity.Property(e => e.IdFormAttest).HasColumnName("id_form_attest");
|
||||
entity.Property(e => e.Name)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("name");
|
||||
|
||||
entity.HasOne(d => d.IdFormAttestNavigation).WithMany(p => p.Disciplines)
|
||||
.HasForeignKey(d => d.IdFormAttest)
|
||||
.HasConstraintName("discipline_id_form_attest_fkey");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<DisciplineTeacher>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id).HasName("discipline_teachers_pkey");
|
||||
|
||||
entity.ToTable("discipline_teachers");
|
||||
|
||||
entity.HasIndex(e => new { e.IdDiscipline, e.IdTeacher }, "unique_discipline_teacher").IsUnique();
|
||||
|
||||
entity.Property(e => e.Id).HasColumnName("id");
|
||||
entity.Property(e => e.IdDiscipline).HasColumnName("id_discipline");
|
||||
entity.Property(e => e.IdTeacher).HasColumnName("id_teacher");
|
||||
|
||||
entity.HasOne(d => d.IdDisciplineNavigation).WithMany(p => p.DisciplineTeachers)
|
||||
.HasForeignKey(d => d.IdDiscipline)
|
||||
.HasConstraintName("discipline_teachers_id_discipline_fkey");
|
||||
|
||||
entity.HasOne(d => d.IdTeacherNavigation).WithMany(p => p.DisciplineTeachers)
|
||||
.HasForeignKey(d => d.IdTeacher)
|
||||
.HasConstraintName("discipline_teachers_id_teacher_fkey");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<FormAttest>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id).HasName("form_attest_pkey");
|
||||
|
||||
entity.ToTable("form_attest");
|
||||
|
||||
entity.Property(e => e.Id).HasColumnName("id");
|
||||
entity.Property(e => e.Name)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("name");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Group>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id).HasName("groups_pkey");
|
||||
|
||||
entity.ToTable("groups");
|
||||
|
||||
entity.Property(e => e.Id).HasColumnName("id");
|
||||
entity.Property(e => e.YearAdmission).HasColumnName("year_admission");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Role>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id).HasName("roles_pkey");
|
||||
|
||||
entity.ToTable("roles");
|
||||
|
||||
entity.Property(e => e.Id).HasColumnName("id");
|
||||
entity.Property(e => e.RoleName)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("role_name");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Student>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id).HasName("students_pkey");
|
||||
|
||||
entity.ToTable("students");
|
||||
|
||||
entity.Property(e => e.Id).HasColumnName("id");
|
||||
entity.Property(e => e.Fio)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("fio");
|
||||
entity.Property(e => e.IdGroup).HasColumnName("id_group");
|
||||
entity.Property(e => e.Login)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("login");
|
||||
|
||||
entity.HasOne(d => d.IdGroupNavigation).WithMany(p => p.Students)
|
||||
.HasForeignKey(d => d.IdGroup)
|
||||
.HasConstraintName("students_id_group_fkey");
|
||||
|
||||
entity.HasOne(d => d.LoginNavigation).WithMany(p => p.Students)
|
||||
.HasPrincipalKey(p => p.Login)
|
||||
.HasForeignKey(d => d.Login)
|
||||
.HasConstraintName("students_login_fkey");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Teacher>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id).HasName("teachers_pkey");
|
||||
|
||||
entity.ToTable("teachers");
|
||||
|
||||
entity.Property(e => e.Id).HasColumnName("id");
|
||||
entity.Property(e => e.Fio)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("fio");
|
||||
entity.Property(e => e.Login)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("login");
|
||||
|
||||
entity.HasOne(d => d.LoginNavigation).WithMany(p => p.Teachers)
|
||||
.HasPrincipalKey(p => p.Login)
|
||||
.HasForeignKey(d => d.Login)
|
||||
.HasConstraintName("teachers_login_fkey");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<User>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id).HasName("users_pkey");
|
||||
|
||||
entity.ToTable("users");
|
||||
|
||||
entity.HasIndex(e => e.Login, "login").IsUnique();
|
||||
|
||||
entity.Property(e => e.Id).HasColumnName("id");
|
||||
entity.Property(e => e.Email)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("email");
|
||||
entity.Property(e => e.Login)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("login");
|
||||
entity.Property(e => e.Password)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("password");
|
||||
entity.Property(e => e.RoleId).HasColumnName("role_id");
|
||||
|
||||
entity.HasOne(d => d.Role).WithMany(p => p.Users)
|
||||
.HasForeignKey(d => d.RoleId)
|
||||
.HasConstraintName("users_role_id_fkey");
|
||||
});
|
||||
|
||||
OnModelCreatingPartial(modelBuilder);
|
||||
}
|
||||
|
||||
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
|
||||
}
|
19
Models/Discipline.cs
Normal file
19
Models/Discipline.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace kursovaya.Models;
|
||||
|
||||
public partial class Discipline
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
public int IdFormAttest { get; set; }
|
||||
|
||||
public virtual ICollection<Attestation> Attestations { get; set; } = new List<Attestation>();
|
||||
|
||||
public virtual ICollection<DisciplineTeacher> DisciplineTeachers { get; set; } = new List<DisciplineTeacher>();
|
||||
|
||||
public virtual FormAttest IdFormAttestNavigation { get; set; } = null!;
|
||||
}
|
17
Models/DisciplineTeacher.cs
Normal file
17
Models/DisciplineTeacher.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace kursovaya.Models;
|
||||
|
||||
public partial class DisciplineTeacher
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public int IdDiscipline { get; set; }
|
||||
|
||||
public int IdTeacher { get; set; }
|
||||
|
||||
public virtual Discipline IdDisciplineNavigation { get; set; } = null!;
|
||||
|
||||
public virtual Teacher IdTeacherNavigation { get; set; } = null!;
|
||||
}
|
13
Models/FormAttest.cs
Normal file
13
Models/FormAttest.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace kursovaya.Models;
|
||||
|
||||
public partial class FormAttest
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
public virtual ICollection<Discipline> Disciplines { get; set; } = new List<Discipline>();
|
||||
}
|
13
Models/Group.cs
Normal file
13
Models/Group.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace kursovaya.Models;
|
||||
|
||||
public partial class Group
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public int YearAdmission { get; set; }
|
||||
|
||||
public virtual ICollection<Student> Students { get; set; } = new List<Student>();
|
||||
}
|
13
Models/Role.cs
Normal file
13
Models/Role.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace kursovaya.Models;
|
||||
|
||||
public partial class Role
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string RoleName { get; set; } = null!;
|
||||
|
||||
public virtual ICollection<User> Users { get; set; } = new List<User>();
|
||||
}
|
21
Models/Student.cs
Normal file
21
Models/Student.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace kursovaya.Models;
|
||||
|
||||
public partial class Student
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Fio { get; set; } = null!;
|
||||
|
||||
public int IdGroup { get; set; }
|
||||
|
||||
public string Login { get; set; } = null!;
|
||||
|
||||
public virtual ICollection<Attestation> Attestations { get; set; } = new List<Attestation>();
|
||||
|
||||
public virtual Group IdGroupNavigation { get; set; } = null!;
|
||||
|
||||
public virtual User LoginNavigation { get; set; } = null!;
|
||||
}
|
17
Models/Teacher.cs
Normal file
17
Models/Teacher.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace kursovaya.Models;
|
||||
|
||||
public partial class Teacher
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Fio { get; set; } = null!;
|
||||
|
||||
public string Login { get; set; } = null!;
|
||||
|
||||
public virtual ICollection<DisciplineTeacher> DisciplineTeachers { get; set; } = new List<DisciplineTeacher>();
|
||||
|
||||
public virtual User LoginNavigation { get; set; } = null!;
|
||||
}
|
23
Models/User.cs
Normal file
23
Models/User.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace kursovaya.Models;
|
||||
|
||||
public partial class User
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Login { get; set; } = null!;
|
||||
|
||||
public string Password { get; set; } = null!;
|
||||
|
||||
public string Email { get; set; } = null!;
|
||||
|
||||
public int RoleId { get; set; }
|
||||
|
||||
public virtual Role Role { get; set; } = null!;
|
||||
|
||||
public virtual ICollection<Student> Students { get; set; } = new List<Student>();
|
||||
|
||||
public virtual ICollection<Teacher> Teachers { get; set; } = new List<Teacher>();
|
||||
}
|
21
Program.cs
Normal file
21
Program.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
namespace kursovaya;
|
||||
|
||||
class Program
|
||||
{
|
||||
// Initialization code. Don't use any Avalonia, third-party APIs or any
|
||||
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
|
||||
// yet and stuff might break.
|
||||
[STAThread]
|
||||
public static void Main(string[] args) => BuildAvaloniaApp()
|
||||
.StartWithClassicDesktopLifetime(args);
|
||||
|
||||
// Avalonia configuration, don't remove; also used by visual designer.
|
||||
public static AppBuilder BuildAvaloniaApp()
|
||||
=> AppBuilder.Configure<App>()
|
||||
.UsePlatformDetect()
|
||||
.WithInterFont()
|
||||
.LogToTrace();
|
||||
}
|
65
StudentWindow.axaml
Normal file
65
StudentWindow.axaml
Normal file
@ -0,0 +1,65 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
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"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="kursovaya.StudentWindow"
|
||||
x:CompileBindings="False"
|
||||
Title="StudentWindow">
|
||||
<Border Background="Bisque">
|
||||
<DockPanel>
|
||||
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Background="LightBlue" Height="30">
|
||||
<Button DockPanel.Dock="Left" Content="Назад" Click="ButtonBack_OnClick" Width="100" HorizontalAlignment="Left" Foreground="Black" Background="LightGray"/>
|
||||
<ComboBox x:Name="DisciplineComboBox" HorizontalAlignment="Center" SelectionChanged="DisciplineCombobox_OnSelectionChanged"/>
|
||||
<Button Content="Просмотр аттестации" Click="CheckAttest_OnClick" Foreground="Black"/>
|
||||
<TextBlock x:Name="InfoTextBlock" HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="15" DockPanel.Dock="Right" Foreground="Black"/>
|
||||
</StackPanel>
|
||||
<Grid DockPanel.Dock="Top" ColumnDefinitions="3*,3*,1*,1*,1*,1*,1*" Background="LightGray" Height="35">
|
||||
<TextBlock Grid.Column="0" Text="Дисциплина" VerticalAlignment="Center" Margin="5" FontWeight="Bold" Foreground="Black"/>
|
||||
<TextBlock Grid.Column="1" Text="Преподаватель" VerticalAlignment="Center" Margin="5" FontWeight="Bold" Foreground="Black"/>
|
||||
<TextBlock Grid.Column="2" Text="1 Аттестация" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="Black"/>
|
||||
<TextBlock Grid.Column="3" Text="2 Аттестация" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="Black"/>
|
||||
<TextBlock Grid.Column="4" Text="3 Аттестация" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="Black"/>
|
||||
<TextBlock Grid.Column="5" Text="Итог" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="Black"/>
|
||||
<TextBlock Grid.Column="6" Text="Оценка" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="Black"/>
|
||||
</Grid>
|
||||
<ScrollViewer>
|
||||
<ItemsControl x:Name="FlatAttestationGrid" ItemsSource="{Binding Attestations}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Grid ColumnDefinitions="3*,3*,1*,1*,1*,1*,1*" Margin="2" Background="LightGray" Height="40">
|
||||
<Border Grid.Column="0" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding DisciplineName}" VerticalAlignment="Center" Margin="10,0" Foreground="Black"/>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="1" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding TeacherName}" VerticalAlignment="Center" Margin="10,0" Foreground="Black"/>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="2" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding AttestFirst}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black"/>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="3" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding AttestSecond}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black"/>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="4" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding AttestThird}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black"/>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="5" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding Total}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black"/>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="6" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding Grade}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</ScrollViewer>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
</Window>
|
105
StudentWindow.axaml.cs
Normal file
105
StudentWindow.axaml.cs
Normal file
@ -0,0 +1,105 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using kursovaya.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace kursovaya;
|
||||
|
||||
public partial class StudentWindow : Window
|
||||
{
|
||||
public ObservableCollection<AttestationPresenter> Attestations = new ObservableCollection<AttestationPresenter>();
|
||||
List<AttestationPresenter> dataSourceAttestations;
|
||||
private Student student;
|
||||
public StudentWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public StudentWindow(User user): this()
|
||||
{
|
||||
var ctx = new DatabaseContext();
|
||||
student = ctx.Students.FirstOrDefault(s => s.Login == user.Login);
|
||||
|
||||
string infoPrint = $"ФИО: {student.Fio} Группа: {student.IdGroup}";
|
||||
InfoTextBlock.Text = infoPrint;
|
||||
|
||||
var disciplineIds = ctx.Attestations.Where(d => d.IdUser == student.Id).Select(d => d.IdDiscipline).ToList();
|
||||
var disciplines = ctx.Disciplines.Where(d => disciplineIds.Contains(d.Id)).Select(d => d.Name).ToList();
|
||||
|
||||
dataSourceAttestations = ctx.Attestations.Where(at => at.IdUser == student.Id).Select(at => new AttestationPresenter()
|
||||
{
|
||||
IdUser = at.IdUser,
|
||||
IdDiscipline = at.IdDiscipline,
|
||||
AttestFirst = at.AttestFirst,
|
||||
AttestSecond = at.AttestSecond,
|
||||
AttestThird = at.AttestThird,
|
||||
Total = at.Total,
|
||||
Grade = at.Grade,
|
||||
}).ToList();
|
||||
|
||||
DisciplineComboBox.ItemsSource = disciplines;
|
||||
FlatAttestationGrid.ItemsSource = Attestations;
|
||||
// ListBoxAttestation.ItemsSource = Attestations;
|
||||
}
|
||||
|
||||
public class AttestationPresenter() : Attestation
|
||||
{
|
||||
public string DisciplineName
|
||||
{
|
||||
get
|
||||
{
|
||||
var ctx = new DatabaseContext();
|
||||
return ctx.Disciplines.Where(d => d.Id == IdDiscipline).FirstOrDefault().Name;
|
||||
}
|
||||
}
|
||||
|
||||
public string TeacherName
|
||||
{
|
||||
get
|
||||
{
|
||||
var ctx = new DatabaseContext();
|
||||
return ctx.Teachers.Include(t => t.DisciplineTeachers).FirstOrDefault(t => t.DisciplineTeachers.Any(dt => dt.IdDiscipline == IdDiscipline))?.Fio ?? "empty";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void DisplayServices()
|
||||
{
|
||||
var ctx = new DatabaseContext();
|
||||
var temp = dataSourceAttestations;
|
||||
Attestations.Clear();
|
||||
|
||||
if (DisciplineComboBox.SelectionBoxItem != null)
|
||||
{
|
||||
var idDiscipline = ctx.Disciplines.Where(d => d.Name == DisciplineComboBox.SelectionBoxItem)
|
||||
.Select(d => d.Id).FirstOrDefault();
|
||||
temp = temp.Where(u => u.IdDiscipline == idDiscipline && u.IdUser == student.Id).ToList();
|
||||
}
|
||||
|
||||
foreach (var item in temp)
|
||||
{
|
||||
Attestations.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
private void DisciplineCombobox_OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
// DisplayServices();
|
||||
}
|
||||
|
||||
private void ButtonBack_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
private void CheckAttest_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
DisplayServices();
|
||||
}
|
||||
}
|
90
TeacherWindow.axaml
Normal file
90
TeacherWindow.axaml
Normal file
@ -0,0 +1,90 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
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"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="kursovaya.TeacherWindow"
|
||||
x:CompileBindings="False"
|
||||
Title="TeacherWindow">
|
||||
<Border Background="Bisque">
|
||||
<DockPanel>
|
||||
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Background="LightBlue" Height="30">
|
||||
<Button DockPanel.Dock="Left" Content="Назад" Click="ButtonBack_OnClick" Width="100" HorizontalAlignment="Left" Foreground="Black" Background="LightGray"/>
|
||||
<ComboBox x:Name="GroupComboBox" HorizontalAlignment="Center"/>
|
||||
<ComboBox x:Name="DisciplineComboBox" HorizontalAlignment="Center"/>
|
||||
<Button Content="Просмотр аттестации" Click="CheckAttest_OnClick" Foreground="Black"/>
|
||||
|
||||
</StackPanel>
|
||||
<Grid DockPanel.Dock="Top" ColumnDefinitions="3*,1*,1*,1*,1*,1*" Background="LightGray" Height="35">
|
||||
<TextBlock Grid.Column="0" Text="ФИО Студента" VerticalAlignment="Center" Margin="5" FontWeight="Bold" Foreground="Black"/>
|
||||
<TextBlock Grid.Column="1" Text="1 Аттестация" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="Black"/>
|
||||
<TextBlock Grid.Column="2" Text="2 Аттестация" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="Black"/>
|
||||
<TextBlock Grid.Column="3" Text="3 Аттестация" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="Black"/>
|
||||
<TextBlock Grid.Column="4" Text="Итог" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="Black"/>
|
||||
<TextBlock Grid.Column="5" Text="Оценка" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="Black"/>
|
||||
</Grid>
|
||||
<ScrollViewer>
|
||||
<ItemsControl x:Name="FlatAttestationGrid" ItemsSource="{Binding AttestationsTeachers}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Grid ColumnDefinitions="3*,1*,1*,1*,1*,1*" Margin="2" Background="LightGray" Height="40">
|
||||
<Border BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding StudentFIO}" VerticalAlignment="Center" Margin="10,0" Foreground="Black"/>
|
||||
</Border>
|
||||
<Border Grid.Column="1" BorderBrush="Black" BorderThickness="0.5">
|
||||
<Button Content="{Binding AttestFirst}" Tag="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Foreground="Black" Background="Transparent" BorderThickness="0" Padding="0" Click="FirstAttest_OnClick">
|
||||
<Button.Styles>
|
||||
<Style Selector="Button">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="BorderBrush" Value="Transparent"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
||||
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
||||
</Style>
|
||||
</Button.Styles>
|
||||
</Button>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="2" BorderBrush="Black" BorderThickness="0.5">
|
||||
<Button Content="{Binding AttestSecond}" Tag="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Foreground="Black" Background="Transparent" BorderThickness="0" Padding="0" Click="SecondAttest_OnClick">
|
||||
<Button.Styles>
|
||||
<Style Selector="Button">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="BorderBrush" Value="Transparent"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
||||
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
||||
</Style>
|
||||
</Button.Styles>
|
||||
</Button>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="3" BorderBrush="Black" BorderThickness="0.5">
|
||||
<Button Content="{Binding AttestThird}" Tag="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Foreground="Black" Background="Transparent" BorderThickness="0" Padding="0" Click="ThirdAttest_OnClick">
|
||||
<Button.Styles>
|
||||
<Style Selector="Button">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="BorderBrush" Value="Transparent"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
||||
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
||||
</Style>
|
||||
</Button.Styles>
|
||||
</Button>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="4" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding Total}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black"/>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="5" BorderBrush="Black" BorderThickness="0.5">
|
||||
<TextBlock Text="{Binding Grade}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</ScrollViewer>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
</Window>
|
253
TeacherWindow.axaml.cs
Normal file
253
TeacherWindow.axaml.cs
Normal file
@ -0,0 +1,253 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using kursovaya.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace kursovaya;
|
||||
|
||||
public partial class TeacherWindow : Window
|
||||
{
|
||||
List<DiscGroup> discGroups = new();
|
||||
public ObservableCollection<AttestationPresenterTeacher> AttestationsTeachers = new ObservableCollection<AttestationPresenterTeacher>();
|
||||
List<AttestationPresenterTeacher> dataSourceAttestationsTeachers;
|
||||
public TeacherWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public TeacherWindow(User user) : this()
|
||||
{
|
||||
var ctx = new DatabaseContext();
|
||||
|
||||
var groups = ctx.Groups.ToList();
|
||||
var teacherId = ctx.Teachers.FirstOrDefault(t => t.Login == user.Login).Id;
|
||||
var disciplinesIds = ctx.Disciplines.Include(d => d.DisciplineTeachers).Where(d => d.DisciplineTeachers.Any(dt => dt.IdTeacher == teacherId)).Select(d => d.Id).ToList();
|
||||
var disciplines = ctx.Disciplines.Include(d => d.DisciplineTeachers).Where(d => d.DisciplineTeachers.Any(dt => dt.IdTeacher == teacherId)).ToList();
|
||||
dataSourceAttestationsTeachers = ctx.Attestations.Where(a => disciplinesIds.Contains(a.IdDiscipline)).Select(a => new AttestationPresenterTeacher()
|
||||
{
|
||||
IdUser = a.IdUser,
|
||||
IdDiscipline = a.IdDiscipline,
|
||||
AttestFirst = a.AttestFirst,
|
||||
AttestSecond = a.AttestSecond,
|
||||
AttestThird = a.AttestThird,
|
||||
Total = a.Total,
|
||||
Grade = a.Grade,
|
||||
StudentFIO = ctx.Students.Where(s => s.Id == a.IdUser).Select(s => s.Fio).FirstOrDefault(),
|
||||
}).ToList();
|
||||
foreach (var group in groups)
|
||||
{
|
||||
foreach (var discipline in disciplines)
|
||||
{
|
||||
var attestationsToDiscGroup = dataSourceAttestationsTeachers.Where(a => ctx.Students.Any(s => s.Id == a.IdUser && s.IdGroup == group.Id) && a.IdDiscipline == discipline.Id).ToList();
|
||||
discGroups.Add(new DiscGroup(){discipline = discipline, group = group, attestations = attestationsToDiscGroup});
|
||||
}
|
||||
}
|
||||
discGroups.RemoveAll(d => d.attestations.Count == 0);
|
||||
|
||||
foreach (var discGroup in discGroups)
|
||||
{
|
||||
Console.WriteLine($"{discGroup.discipline.Name} - {discGroup.group.Id} - {discGroup.attestations.Count}");
|
||||
}
|
||||
|
||||
GroupComboBox.ItemsSource = discGroups.Select(dg => dg.group.Id).Distinct().ToList();
|
||||
DisciplineComboBox.ItemsSource = discGroups.Select(dg => dg.discipline.Name).Distinct().ToList();
|
||||
FlatAttestationGrid.ItemsSource = AttestationsTeachers;
|
||||
}
|
||||
|
||||
public class AttestationPresenterTeacher() : Attestation
|
||||
{
|
||||
public string StudentFIO { get; set; }
|
||||
}
|
||||
|
||||
public class DiscGroup
|
||||
{
|
||||
public Discipline discipline;
|
||||
public Group group;
|
||||
public List<AttestationPresenterTeacher> attestations = new();
|
||||
}
|
||||
|
||||
public void DisplayAttestations()
|
||||
{
|
||||
var ctx = new DatabaseContext();
|
||||
var temp = dataSourceAttestationsTeachers;
|
||||
AttestationsTeachers.Clear();
|
||||
|
||||
if (GroupComboBox.SelectionBoxItem != null)
|
||||
{
|
||||
var selectedGroupId = Convert.ToInt32(GroupComboBox.SelectedItem);
|
||||
temp = temp.Where(ap => ctx.Students.Any(s => s.Id == ap.IdUser && s.IdGroup == selectedGroupId)).ToList();
|
||||
}
|
||||
|
||||
if (DisciplineComboBox.SelectionBoxItem != null)
|
||||
{
|
||||
var idDiscipline = ctx.Disciplines.Where(d => d.Name == DisciplineComboBox.SelectionBoxItem)
|
||||
.Select(d => d.Id).FirstOrDefault();
|
||||
temp = temp.Where(ap => ap.IdDiscipline == idDiscipline).ToList();
|
||||
}
|
||||
|
||||
Console.WriteLine("Добавлено элементов: " + temp.Count);
|
||||
|
||||
foreach (var item in temp)
|
||||
{
|
||||
AttestationsTeachers.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
private void ButtonBack_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
private void CheckAttest_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
DisplayAttestations();
|
||||
}
|
||||
|
||||
private string CalculateGrade(int total, int formAttest)
|
||||
{
|
||||
string grade = "";
|
||||
switch (formAttest)
|
||||
{
|
||||
case 1:
|
||||
if (total >= 90) grade = "отлично";
|
||||
else if (total >= 80) grade = "хорошо";
|
||||
else if (total >= 70) grade = "удовлетворительно";
|
||||
else grade = "неудовлетворительно";
|
||||
break;
|
||||
case 2:
|
||||
if (total >= 90) grade = "отлично";
|
||||
else if (total >= 80) grade = "хорошо";
|
||||
else if (total >= 70) grade = "удовлетворительно";
|
||||
else grade = "неудовлетворительно";
|
||||
break;
|
||||
case 3:
|
||||
if (total >= 70) grade = "зачтено";
|
||||
else grade = "не зачтено";
|
||||
break;
|
||||
}
|
||||
return grade;
|
||||
}
|
||||
|
||||
private async void FirstAttest_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is Button button && button.Tag is AttestationPresenterTeacher attestation)
|
||||
{
|
||||
EditAttestWindow editAttestWindow = new EditAttestWindow(1);
|
||||
var newFirstAttest = await editAttestWindow.ShowDialog<int>(this);
|
||||
var ctx = new DatabaseContext();
|
||||
var formAttest = ctx.Disciplines.FirstOrDefault(d => d.Id == attestation.IdDiscipline).IdFormAttest;
|
||||
|
||||
Attestation newAttestation = new Attestation()
|
||||
{
|
||||
IdUser = attestation.IdUser,
|
||||
IdDiscipline = attestation.IdDiscipline,
|
||||
AttestFirst = newFirstAttest,
|
||||
AttestSecond = attestation.AttestSecond,
|
||||
AttestThird = attestation.AttestThird,
|
||||
Total = newFirstAttest + attestation.AttestSecond + attestation.AttestThird,
|
||||
Grade = CalculateGrade(newFirstAttest + attestation.AttestSecond + attestation.AttestThird, formAttest),
|
||||
};
|
||||
|
||||
ctx.Attestations.Update(newAttestation);
|
||||
await ctx.SaveChangesAsync();
|
||||
|
||||
dataSourceAttestationsTeachers.Remove(attestation);
|
||||
dataSourceAttestationsTeachers.Add(new AttestationPresenterTeacher()
|
||||
{
|
||||
IdUser = newAttestation.IdUser,
|
||||
IdDiscipline = newAttestation.IdDiscipline,
|
||||
AttestFirst = newAttestation.AttestFirst,
|
||||
AttestSecond = newAttestation.AttestSecond,
|
||||
AttestThird = newAttestation.AttestThird,
|
||||
Total = newAttestation.Total,
|
||||
Grade = newAttestation.Grade,
|
||||
StudentFIO = ctx.Students.Where(s => s.Id == newAttestation.IdUser).Select(s => s.Fio).FirstOrDefault()
|
||||
});
|
||||
DisplayAttestations();
|
||||
}
|
||||
}
|
||||
|
||||
private async void SecondAttest_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is Button button && button.Tag is AttestationPresenterTeacher attestation)
|
||||
{
|
||||
EditAttestWindow editAttestWindow = new EditAttestWindow(2);
|
||||
var newSecondAttest = await editAttestWindow.ShowDialog<int>(this);
|
||||
var ctx = new DatabaseContext();
|
||||
var formAttest = ctx.Disciplines.FirstOrDefault(d => d.Id == attestation.IdDiscipline).IdFormAttest;
|
||||
|
||||
Attestation newAttestation = new Attestation()
|
||||
{
|
||||
IdUser = attestation.IdUser,
|
||||
IdDiscipline = attestation.IdDiscipline,
|
||||
AttestFirst = attestation.AttestFirst,
|
||||
AttestSecond = newSecondAttest,
|
||||
AttestThird = attestation.AttestThird,
|
||||
Total = attestation.AttestFirst + newSecondAttest + attestation.AttestThird,
|
||||
Grade = CalculateGrade(attestation.AttestFirst + newSecondAttest + attestation.AttestThird, formAttest),
|
||||
};
|
||||
|
||||
ctx.Attestations.Update(newAttestation);
|
||||
await ctx.SaveChangesAsync();
|
||||
|
||||
dataSourceAttestationsTeachers.Remove(attestation);
|
||||
dataSourceAttestationsTeachers.Add(new AttestationPresenterTeacher()
|
||||
{
|
||||
IdUser = newAttestation.IdUser,
|
||||
IdDiscipline = newAttestation.IdDiscipline,
|
||||
AttestFirst = newAttestation.AttestFirst,
|
||||
AttestSecond = newAttestation.AttestSecond,
|
||||
AttestThird = newAttestation.AttestThird,
|
||||
Total = newAttestation.Total,
|
||||
Grade = newAttestation.Grade,
|
||||
StudentFIO = ctx.Students.Where(s => s.Id == newAttestation.IdUser).Select(s => s.Fio).FirstOrDefault()
|
||||
});
|
||||
DisplayAttestations();
|
||||
}
|
||||
}
|
||||
|
||||
private async void ThirdAttest_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is Button button && button.Tag is AttestationPresenterTeacher attestation)
|
||||
{
|
||||
EditAttestWindow editAttestWindow = new EditAttestWindow(3);
|
||||
var newThirdAttest = await editAttestWindow.ShowDialog<int>(this);
|
||||
var ctx = new DatabaseContext();
|
||||
var formAttest = ctx.Disciplines.FirstOrDefault(d => d.Id == attestation.IdDiscipline).IdFormAttest;
|
||||
|
||||
Attestation newAttestation = new Attestation()
|
||||
{
|
||||
IdUser = attestation.IdUser,
|
||||
IdDiscipline = attestation.IdDiscipline,
|
||||
AttestFirst = attestation.AttestFirst,
|
||||
AttestSecond = attestation.AttestSecond,
|
||||
AttestThird = newThirdAttest,
|
||||
Total = attestation.AttestFirst + attestation.AttestSecond + newThirdAttest,
|
||||
Grade = CalculateGrade(attestation.AttestFirst + attestation.AttestSecond + newThirdAttest, formAttest),
|
||||
};
|
||||
|
||||
ctx.Attestations.Update(newAttestation);
|
||||
await ctx.SaveChangesAsync();
|
||||
|
||||
dataSourceAttestationsTeachers.Remove(attestation);
|
||||
dataSourceAttestationsTeachers.Add(new AttestationPresenterTeacher()
|
||||
{
|
||||
IdUser = newAttestation.IdUser,
|
||||
IdDiscipline = newAttestation.IdDiscipline,
|
||||
AttestFirst = newAttestation.AttestFirst,
|
||||
AttestSecond = newAttestation.AttestSecond,
|
||||
AttestThird = newAttestation.AttestThird,
|
||||
Total = newAttestation.Total,
|
||||
Grade = newAttestation.Grade,
|
||||
StudentFIO = ctx.Students.Where(s => s.Id == newAttestation.IdUser).Select(s => s.Fio).FirstOrDefault()
|
||||
});
|
||||
DisplayAttestations();
|
||||
}
|
||||
}
|
||||
}
|
18
app.manifest
Normal file
18
app.manifest
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<!-- This manifest is used on Windows only.
|
||||
Don't remove it as it might cause problems with window transparency and embedded controls.
|
||||
For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->
|
||||
<assemblyIdentity version="1.0.0.0" name="kursovaya.Desktop"/>
|
||||
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<!-- A list of the Windows versions that this application has been tested on
|
||||
and is designed to work with. Uncomment the appropriate elements
|
||||
and Windows will automatically select the most compatible environment. -->
|
||||
|
||||
<!-- Windows 10 -->
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
|
||||
</application>
|
||||
</compatibility>
|
||||
</assembly>
|
BIN
bin/Debug/net8.0/Avalonia.Base.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Base.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Controls.ColorPicker.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Controls.ColorPicker.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Controls.DataGrid.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Controls.DataGrid.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Controls.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Controls.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.DesignerSupport.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.DesignerSupport.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Desktop.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Desktop.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Diagnostics.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Diagnostics.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Dialogs.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Dialogs.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Fonts.Inter.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Fonts.Inter.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.FreeDesktop.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.FreeDesktop.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Markup.Xaml.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Markup.Xaml.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Markup.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Markup.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Metal.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Metal.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.MicroCom.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.MicroCom.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Native.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Native.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.OpenGL.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.OpenGL.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Remote.Protocol.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Remote.Protocol.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Skia.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Skia.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Themes.Fluent.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Themes.Fluent.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Themes.Simple.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Themes.Simple.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Vulkan.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Vulkan.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.Win32.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.Win32.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.X11.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.X11.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Avalonia.dll
Executable file
BIN
bin/Debug/net8.0/Avalonia.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/HarfBuzzSharp.dll
Executable file
BIN
bin/Debug/net8.0/HarfBuzzSharp.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Humanizer.dll
Executable file
BIN
bin/Debug/net8.0/Humanizer.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/MicroCom.Runtime.dll
Executable file
BIN
bin/Debug/net8.0/MicroCom.Runtime.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.Bcl.AsyncInterfaces.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.Bcl.AsyncInterfaces.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.CodeAnalysis.CSharp.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.CodeAnalysis.CSharp.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.CodeAnalysis.Workspaces.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.CodeAnalysis.Workspaces.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.CodeAnalysis.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.CodeAnalysis.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Design.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Design.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Relational.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Relational.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.Extensions.Caching.Abstractions.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.Extensions.Caching.Abstractions.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.Extensions.Caching.Memory.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.Extensions.Caching.Memory.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.Extensions.DependencyModel.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.Extensions.DependencyModel.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.Extensions.Logging.Abstractions.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.Extensions.Logging.Abstractions.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.Extensions.Logging.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.Extensions.Logging.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.Extensions.Options.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.Extensions.Options.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Microsoft.Extensions.Primitives.dll
Executable file
BIN
bin/Debug/net8.0/Microsoft.Extensions.Primitives.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Mono.TextTemplating.dll
Executable file
BIN
bin/Debug/net8.0/Mono.TextTemplating.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll
Executable file
BIN
bin/Debug/net8.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Npgsql.dll
Executable file
BIN
bin/Debug/net8.0/Npgsql.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/SkiaSharp.dll
Executable file
BIN
bin/Debug/net8.0/SkiaSharp.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/System.CodeDom.dll
Executable file
BIN
bin/Debug/net8.0/System.CodeDom.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/System.Composition.AttributedModel.dll
Executable file
BIN
bin/Debug/net8.0/System.Composition.AttributedModel.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/System.Composition.Convention.dll
Executable file
BIN
bin/Debug/net8.0/System.Composition.Convention.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/System.Composition.Hosting.dll
Executable file
BIN
bin/Debug/net8.0/System.Composition.Hosting.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/System.Composition.Runtime.dll
Executable file
BIN
bin/Debug/net8.0/System.Composition.Runtime.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/System.Composition.TypedParts.dll
Executable file
BIN
bin/Debug/net8.0/System.Composition.TypedParts.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/System.IO.Pipelines.dll
Executable file
BIN
bin/Debug/net8.0/System.IO.Pipelines.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/Tmds.DBus.Protocol.dll
Executable file
BIN
bin/Debug/net8.0/Tmds.DBus.Protocol.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
Executable file
BIN
bin/Debug/net8.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll
Executable file
BIN
bin/Debug/net8.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll
Executable file
BIN
bin/Debug/net8.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/cs/Microsoft.CodeAnalysis.resources.dll
Executable file
BIN
bin/Debug/net8.0/cs/Microsoft.CodeAnalysis.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
Executable file
BIN
bin/Debug/net8.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll
Executable file
BIN
bin/Debug/net8.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll
Executable file
BIN
bin/Debug/net8.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/de/Microsoft.CodeAnalysis.resources.dll
Executable file
BIN
bin/Debug/net8.0/de/Microsoft.CodeAnalysis.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
Executable file
BIN
bin/Debug/net8.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll
Executable file
BIN
bin/Debug/net8.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll
Executable file
BIN
bin/Debug/net8.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/es/Microsoft.CodeAnalysis.resources.dll
Executable file
BIN
bin/Debug/net8.0/es/Microsoft.CodeAnalysis.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
Executable file
BIN
bin/Debug/net8.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll
Executable file
BIN
bin/Debug/net8.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll
Executable file
BIN
bin/Debug/net8.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/fr/Microsoft.CodeAnalysis.resources.dll
Executable file
BIN
bin/Debug/net8.0/fr/Microsoft.CodeAnalysis.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
Executable file
BIN
bin/Debug/net8.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
Executable file
Binary file not shown.
BIN
bin/Debug/net8.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll
Executable file
BIN
bin/Debug/net8.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll
Executable file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user