vyakimova 7 months ago
parent
commit
321523d579

BIN
img/Снимок экрана 2024-04-27 222231.png


BIN
img/Снимок экрана 2024-04-28 203454.png


BIN
img/Снимок экрана 2024-04-29 083601.png


+ 73 - 182
readme.md

@@ -1,110 +1,6 @@
 # Поиск, сортировка ("Университет")
 ## Поиск
 ```
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Input;
-
-namespace University
-{
-    public partial class MainWindow : Window
-    {
-        private List<Student> students;
-        private Dictionary<string, Func<Student, bool>> filters;
-        private AgeRange selectedAge = new AgeRange { ageFrom = 19, ageTo = 23 };
-        private string searchFilter = "";
-
-        public MainWindow()
-        {
-            InitializeComponent();
-            SearchFilterTextBox.KeyUp += SearchFilter_KeyUp;
-            InitializeData();
-
-            // Отображаем всех студентов в listview
-            UpdateStudentList(students);
-        }
-
-        private void InitializeData()
-        {
-            // Создаем список студентов
-            students = new List<Student>
-            {
-                new Student { Name = "Хэй Вэнь", Course = 3, Nationality = "Китаец", Age = 22 },
-                new Student { Name = "Эдвард Каллен", Course = 1, Nationality = "Американец", Age = 20 },
-                new Student { Name = "Джейк Ли", Course = 1, Nationality = "Китаец", Age = 19 },
-                new Student { Name = "Семен Хомяк", Course = 4, Nationality = "Русский", Age = 23 },
-                new Student { Name = "Эндрю Уилсон", Course = 3, Nationality = "Американец", Age = 21 },
-                new Student { Name = "Ариадна Санчес", Course = 2, Nationality = "Испанец", Age = 20 }
-            };
-
-            // Создаем словарь фильтров
-            filters = new Dictionary<string, Func<Student, bool>>
-            {
-                { "Все", s => true },
-                { "Первый курс", s => s.Course == 1 },
-                { "Второй курс", s => s.Course == 2 },
-                { "Третий курс", s => s.Course == 3 },
-                { "Четвертый курс", s => s.Course == 4 },
-                { "Русские", s => s.Nationality == "Русский" },
-                { "Китайцы", s => s.Nationality == "Китаец" },
-                { "Американцы", s => s.Nationality == "Американец" },
-                { "Испанцы", s => s.Nationality == "Испанец" },
-                { "Возраст 19-20", s => s.Age >= 19 && s.Age <= 20 },
-
-                { "Возраст 21-23", s => s.Age >= 21 && s.Age <= 23 }
-            };
-        }
-
-        private IEnumerable<Student> FilteredStudentList
-        {
-            get
-            {
-                // сохраняем во временную переменную полный список
-                var res = students;
-
-                // фильтруем по возрасту
-                res = (List<Student>)res.Where(s => (s.Age >= selectedAge.ageFrom && s.Age < selectedAge.ageTo));
-
-                // если фильтр не пустой, то ищем ВХОЖДЕНИЕ подстроки поиска в имени без учета регистра
-                if (searchFilter != "")
-                    res = (List<Student>)res.Where(s => s.Name.IndexOf(searchFilter, StringComparison.OrdinalIgnoreCase) >= 0);
-
-                return res;
-            }
-        }
-
-        private void UpdateStudentList(List<Student> studentsToDisplay)
-        {
-            StudentListView.ItemsSource = studentsToDisplay;
-        }
-
-        private void SearchFilter_KeyUp(object sender, KeyEventArgs e)
-        {
-            searchFilter = SearchFilterTextBox.Text;
-            UpdateStudentList(FilteredStudentList.ToList());
-        }
-    }
-
-    public class Student
-    {
-        public string Name { get; set; }
-        public int Course { get; set; }
-        public string Nationality { get; set; }
-        public int Age { get; set; }
-    }
-
-    public class AgeRange
-    {
-        public int ageFrom { get; set; }
-        public int ageTo { get; set; }
-    }
-}
-
-```
-```
 <Window x:Class="University.MainWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -113,50 +9,67 @@ namespace University
         xmlns:local="clr-namespace:University"
         mc:Ignorable="d"
         Title="University" Height="450" Width="800">
-    <Grid>
-        <Grid.RowDefinitions>
-            <RowDefinition Height="Auto" />
-            <RowDefinition Height="*" />
-        </Grid.RowDefinitions>
+	<Grid>
+		<Grid.RowDefinitions>
+			<RowDefinition Height="Auto" />
+			<RowDefinition Height="*" />
+		</Grid.RowDefinitions>
+
+		<StackPanel Orientation="Horizontal" Margin="10">
 
-        <StackPanel Orientation="Horizontal" Margin="10">
             <Label 
-    Content="искать" 
-    VerticalAlignment="Center"/>
+Content="искать" 
+VerticalAlignment="Center"/>
             <TextBox
-    Width="200"
-    VerticalAlignment="Center"
-    x:Name="SearchFilterTextBox" 
-    KeyUp="SearchFilter_KeyUp"/>
+Width="200"
+VerticalAlignment="Center"
+x:Name="SearchFilterTextBox" 
+KeyUp="SearchFilter_KeyUp"/>
+            <Label
+    Content="Возраст:"
+    VerticalAlignment="Center"/>
+			<RadioButton
+				GroupName="Age"
+				Tag="1"
+				Content="по возрастанию"
+				IsChecked="True"
+				Checked="RadioButton_Checked"
+				VerticalAlignment="Center"/>
+            <RadioButton
+				GroupName="Age"
+				Tag="2"
+				Content="по убыванию"
+				Checked="RadioButton_Checked"
+				VerticalAlignment="Center"/>
         </StackPanel>
 
-        <ListView x:Name="StudentListView" Grid.Row="1" Margin="10">
-            <ListView.View>
-                <GridView>
-                    <GridViewColumn Header="Имя" DisplayMemberBinding="{Binding Name}" />
-                    <GridViewColumn Header="Курс" DisplayMemberBinding="{Binding Course}" />
-                    <GridViewColumn Header="Национальность" DisplayMemberBinding="{Binding Nationality}" />
-                    <GridViewColumn Header="Возраст" DisplayMemberBinding="{Binding Age}" />
-                </GridView>
-            </ListView.View>
-        </ListView>
-    </Grid>
+		<ListView x:Name="StudentListView" Grid.Row="1" Margin="10">
+			<ListView.View>
+				<GridView>
+					<GridViewColumn Header="Имя" DisplayMemberBinding="{Binding Name}" />
+					<GridViewColumn Header="Курс" DisplayMemberBinding="{Binding Course}" />
+					<GridViewColumn Header="Национальность" DisplayMemberBinding="{Binding Nationality}" />
+					<GridViewColumn Header="Возраст" DisplayMemberBinding="{Binding Age}" />
+				</GridView>
+			</ListView.View>
+		</ListView>
+	</Grid>
 </Window>
 ```
-![](./img/Снимок%20экрана%202024-04-27%20222231.png)
-## Сортировка
 ```
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Windows;
 using System.Windows.Controls;
+using System.Windows.Input;
 
 namespace University
 {
     public partial class MainWindow : Window
     {
         private List<Student> students;
+        private string searchFilter = "";
         private bool sortAsc = true;
 
         public MainWindow()
@@ -169,18 +82,28 @@ namespace University
             // Отображаем всех студентов в listview
             UpdateStudentList(students);
         }
+        private void SearchFilter_KeyUp(object sender, KeyEventArgs e)
+        {
+            searchFilter = SearchFilterTextBox.Text;
+            Invalidate();
+        }
+
+        private void Invalidate()
+        {
+            throw new NotImplementedException();
+        }
 
         private void InitializeData()
         {
             // Создаем список студентов
             students = new List<Student>
             {
-                new Student { Name = "Хэй Вэнь", Course = 3, Nationality = "Китаец", Age = 22 },
-                new Student { Name = "Эдвард Каллен", Course = 1, Nationality = "Американец", Age = 19 },
                 new Student { Name = "Джейк Ли", Course = 1, Nationality = "Китаец", Age = 19 },
+                new Student { Name = "Ариадна Санчес", Course = 2, Nationality = "Испанец", Age = 20 },
+                new Student { Name = "Эдвард Каллен", Course = 1, Nationality = "Американец", Age = 20 },
+                new Student { Name = "Эндрю Уилсон", Course = 3, Nationality = "Американец", Age = 21 },
+                new Student { Name = "Хэй Вэнь", Course = 3, Nationality = "Китаец", Age = 22 },
                 new Student { Name = "Семен Хомяк", Course = 4, Nationality = "Русский", Age = 23 },
-                new Student { Name = "Эндрю Уилсон", Course = 2, Nationality = "Американец", Age = 21 },
-                new Student { Name = "Мария Гонсалес", Course = 3, Nationality = "Испанец", Age = 20 }
             };
         }
 
@@ -188,7 +111,7 @@ namespace University
         {
             List<Student> filteredStudents = new List<Student>();
 
-            
+            // Фильтруем список студентов по выбранному критерию
 
             UpdateStudentList(filteredStudents);
         }
@@ -204,6 +127,21 @@ namespace University
             InvalidateVisual(); // Исправлено имя метода
         }
 
+        private void SortByAgeButton_Click(object sender, RoutedEventArgs e)
+        {
+            // Сортируем список студентов по возрасту
+            List<Student> sortedStudents = students.OrderBy(student => student.Age).ToList();
+
+            // Если нужно отсортировать по убыванию, разворачиваем список
+            if (!sortAsc)
+            {
+                sortedStudents.Reverse();
+            }
+
+            // Обновляем список студентов в ListView
+            UpdateStudentList(sortedStudents);
+        }
+
         private IEnumerable<Student> FilteredStudentList
         {
             get
@@ -225,51 +163,4 @@ namespace University
     }
 }
 ```
-```
-<Window x:Class="University.MainWindow"
-        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:University"
-        mc:Ignorable="d"
-        Title="University" Height="450" Width="800">
-	<Grid>
-		<Grid.RowDefinitions>
-			<RowDefinition Height="Auto" />
-			<RowDefinition Height="*" />
-		</Grid.RowDefinitions>
-
-		<StackPanel Orientation="Horizontal" Margin="10">
-			<Label
-    Content="Возраст:"
-    VerticalAlignment="Center"/>
-			<RadioButton
-				GroupName="Age"
-				Tag="1"
-				Content="по возрастанию"
-				IsChecked="True"
-				Checked="RadioButton_Checked"
-				VerticalAlignment="Center"/>
-			<RadioButton
-				GroupName="Age"
-				Tag="2"
-				Content="по убыванию"
-				Checked="RadioButton_Checked"
-				VerticalAlignment="Center"/>
-		</StackPanel>
-
-		<ListView x:Name="StudentListView" Grid.Row="1" Margin="10">
-			<ListView.View>
-				<GridView>
-					<GridViewColumn Header="Имя" DisplayMemberBinding="{Binding Name}" />
-					<GridViewColumn Header="Курс" DisplayMemberBinding="{Binding Course}" />
-					<GridViewColumn Header="Национальность" DisplayMemberBinding="{Binding Nationality}" />
-					<GridViewColumn Header="Возраст" DisplayMemberBinding="{Binding Age}" />
-				</GridView>
-			</ListView.View>
-		</ListView>
-	</Grid>
-</Window>
-```
-![](./img/Снимок%20экрана%202024-04-28%20203454.png)
+![](./img/Снимок%20экрана%202024-04-29%20083601.png)