Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/92: Рейтинг темы: голосов - 92, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175

Программа успеваемости учащихся

18.09.2021, 00:37. Показов 19326. Ответов 98
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите программу которая отслеживает успеваемость учащихся
Она должна иметь следующие особенности
1.Меню с опциями добавления данных учени
2.Вывод данных на экран
3.Программа запрашивает имя студента
4.Программа добавляет в дневник оценки по четырем предметам(C#,Manual,English,History)
5.Программа определяет максимальную оценку по каждому предмету
6.Программа определяет минимальную оценку по каждому предмету
7.Программа определяет средний балл по всем предметам

Помогите пожалуйста.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
class Program
    {
 
        static void Main(string[] args)
        {
            //Напишите программу которая отслеживает успеваемость учащихся
            //Она должна иметь следующие особенности
            //     1.Меню с опциями добавления данных ученика
            //     2.Вывод данных на экран
            //     3.Программа запрашивает имя студента
            //     4.Программа добавляет в дневник оценки по четырем предметам(C#,Manual,English,History)
            //     5.Программа определяет максимальную оценку по каждому предмету
            //     6.Программа определяет минимальную оценку по каждому предмету
            //     7.Программа определяет средний балл по всем предметам
 
            Console.OutputEncoding = Encoding.Unicode;
            Console.InputEncoding = Encoding.Unicode;
 
            Menu();
            int marks = AddMark();
            int midmark = MiddleMarks();
            int maxmark = MaxMark();
            int minmark = MinMark();
            List<string> students = new List<string>() {"Ira", "Inna", "Ima"};
        }
 
        static string Menu()
        {
            Console.WriteLine("С статистикой кокого студента желаете ознакомиться: Ira, Inna, Ima? ");
            string name = CheckName();
            Console.WriteLine("Выберите искомую операцию из следующих: ");
            Console.WriteLine("\top 1 - добавить оценку");
            Console.WriteLine("\top 2 - средний балл студента");
            Console.WriteLine("\top 3 - максимальная оценка");
            Console.WriteLine("\top 4 - минимальная оценка");
            Console.Write("Ваш выбор: ");
            char op;
            op = char.Parse(Console.ReadLine());
            switch (op)
            {
                case '1':
                    AddMark();
                    break;
                case '2':
                    MiddleMark();
                    break;
                case '3':
                   MaxMark();
                    break;
                case '4':
                    MinMark();
                    break;
                default:
                    Console.WriteLine("Не правильный ввод");
                    break;
            }
            Console.WriteLine(" Для выхода нажмите \"ESC\"");
            Console.ReadKey();
        }
        static string CheckName()
        {
            string name = " ";
 
            while (name == " ")
            {
                Console.WriteLine("Введите имя и нажмите \"Enter\"");
                name = Console.ReadLine().Trim();
                foreach (char x in name)
                {
                    if (!char.IsLetter(x))
                    {
                        name = " ";
                        Console.WriteLine("Wrong name. Try again.");
                        break;
                    }
                }
            }
            return name;
        }
        static int AddMark(int marks)
        {
           List<int> mark = new List<int>();
 
            if (marks > 0 && marks <= 100)
            {
                mark.Add(marks);
            }
            return marks;
        }
 
        static int MiddleMark(int midmark)
        {
 
        }
        static int MaxMark(int maxmark)
        {
 
        }
        static int MinMark(int minmark)
        {
 
        }
 
    }
    
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2021, 00:37
Ответы с готовыми решениями:

Программа для отслеживания успеваемости школьника
Здравствуйте помагите пожалуйста написать программу для отслеживания успеваемости школьника используя листы . В ней должны быть следующие...

Вывести список студентов, у которых средний балл успеваемости ниже среднего балла успеваемости в группе
Известны данные по успеваемости студентов группы. Вывести студентов имеющих успеваемости ниже средней по группе, в порядке возрастания...

Необходимо, чтобы программа тестирования учащихся работала через локальную сеть
Доброго времени суток! Есть небольшая программка, написанная на C#, для тестирования учащихся (включающая создание и прохождение...

98
296 / 120 / 33
Регистрация: 06.03.2016
Сообщений: 453
19.09.2021, 13:44
Лучший ответ Сообщение было отмечено HatakeIra как решение

Решение

Студворк — интернет-сервис помощи студентам
Student

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
    /// <summary>
    /// Представляет студента.
    /// </summary>
    public class Student
    {
        private static int id = 4275;
 
        public Student()
        {
            UserId = id++;
            Subjects = new Dictionary<Subject, List<int>>();
        }
 
        public Student(string name) : this()
        {
            Name = name;
        }
 
        /// <summary>
        /// Уникальный Id студента.
        /// </summary>
        public int UserId { get; }
 
        /// <summary>
        /// Имя студента.
        /// </summary>
        public string Name { get; }
 
        /// <summary>
        /// Список предметов.
        /// </summary>
        public Dictionary<Subject, List<int>> Subjects { get; }
 
        /// <summary>
        /// Добавить предмет.
        /// </summary>
        /// <param name="subject"></param>
        public void AddSubject(Subject subject)
        {
            Subjects.Add(subject, default);
        }
 
        /// <summary>
        /// Удалить предмет.
        /// </summary>
        /// <param name="subject"></param>
        public void RemoveSubject(Subject subject)
        {
            Subjects.Remove(subject);
        }
 
        /// <summary>
        /// Добавить предмет и оценку.
        /// </summary>
        /// <param name="subject">Предмет</param>
        /// <param name="raiting">Оценка</param>
        /// <param name="option"></param>
        public void AddSubjectWithRaiting(Subject subject, int raiting, Option option = Option.None)
        {
            if (!Subjects.ContainsKey(subject))
            {
                Subjects.Add(subject, new List<int> { raiting });
                return;
            }
 
            switch (option)
            {
                case Option.None:
                    return; // Ничего не делать
                case Option.Update:
                    Subjects[subject] = new List<int> { raiting }; // Заменить оценки
                    break;
                case Option.Add:
                    Subjects[subject].Add(raiting); // Добавить оценки
                    break;
            }          
        }
 
        /// <summary>
        /// Добавить предмет и оценку.
        /// </summary>
        /// <param name="subject">Предмет</param>
        /// <param name="raitings">Оценки</param>
        /// <param name="option"></param>
        public void AddSubjectWithRaiting(Subject subject, int[] raitings, Option option = Option.None)
        {
            if (!Subjects.ContainsKey(subject))
            {
                Subjects.Add(subject, raitings.ToList());
                return;
            }
 
            switch (option)
            {
                case Option.None:
                    return; // Ничего не делать
                case Option.Update:
                    Subjects[subject] = raitings.ToList(); // Заменить оценки
                    break;
                case Option.Add:
                    Subjects[subject].AddRange(raitings); // Добавить оценки
                    break;
            }
        }
 
        public enum Option
        {
            /// <summary>
            /// 
            /// </summary>
            None, 
            /// <summary>
            /// Перезаписать все оценки
            /// </summary>
            Update, 
            /// <summary>
            /// Добавить оценки к существующим
            /// </summary>
            Add
        }
    }

Subject

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    /// <summary>
    /// Представляет предмет.
    /// </summary>
    public class Subject
    {
        public Subject(string theme)
        {
            Theme = theme;
        }
 
        /// <summary>
        /// Название курса.
        /// </summary>
        public string Theme { get; }
 
        /// <summary>
        /// Преподаватель.
        /// </summary>
        public string Teacher { get; set; }
 
        public override bool Equals(object obj)
        {
            return obj is Subject subject &&
                string.Compare(Theme, subject.Theme, true) == 0;
        }
    }

Условная менюшка
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
    /// <summary>
    /// Меню
    /// </summary>
    public class Work
    {
        public List<Student> Students { get; set; }
 
        /// <summary>
        /// Показать всех студентов и оценки
        /// </summary>
        public void ShowAll()
        {
            foreach (Student s in Students)
            {
                Console.WriteLine($"Имя студента: {s.Name}");
                Console.WriteLine("Оценки по предметам:");
                Console.WriteLine();
 
                foreach (var item in s.Subjects)
                {
                    Console.WriteLine(item.Key.Theme);
                    string str = string.Empty;
                    for (int i = 0; i < item.Value.Count; i++)
                    {
                        str += item.Value[i] + " ";
                    }
                    Console.WriteLine($"Все: {str}\nМаксимальная: {item.Value.Max()}\nСредняя: {item.Value.Average()}\nМинимальная: {item.Value.Min()}");
                    Console.WriteLine();
 
                }
                Console.WriteLine();
                Console.WriteLine("=============================================================================");
            }
        }
 
        /// <summary>
        /// Показать студентов для дальнейшего их выбора
        /// </summary>
        public void GetStudents()
        {
            foreach (Student s in Students)
            {
                Console.WriteLine($"UserId: {s.UserId}\tИмя студента: {s.Name}");
            }
        }
 
        /// <summary>
        /// Получает студента по его UserId. Возращает <see langword="null"/>, если не найдено.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Student FindStudent(int id)
        {
            return (from stud in Students where stud.UserId == id select stud).FirstOrDefault();
        }
    }

пример использования в main
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
        static void Main(string[] args)
        {
            Student Ira = new("Ирина");
            Student Inna = new("Инна");
            Student Ima = new("Имма");
 
            Subject subject1 = new("C#");
            Subject subject2 = new("History");
            Subject subject3 = new("English");
 
            Work work = new()
            {
                Students = new() { Ira, Inna, Ima }
            };
 
            Ira.AddSubjectWithRaiting(subject1, new int[] { 23, 15, 42 });
            Ira.AddSubjectWithRaiting(subject2, new int[] { 62, 65, 59, 52 });
            //Ira.AddSubjectWithRaiting(subject2, new int[] { 22, 11, 34, 34 }, Student.Option.Update); // перезапись оценок
            //Ira.AddSubjectWithRaiting(subject2, new int[] { 33, 55 }, Student.Option.Add); // добавление оценок
            Ira.AddSubjectWithRaiting(subject3, new int[] { 54, 67, 77, 15 });
 
            Inna.AddSubjectWithRaiting(subject1, new int[] { 36, 56, 82, 10 });
            Inna.AddSubjectWithRaiting(subject2, new int[] { 14, 41, 8, 90 });
            Inna.AddSubjectWithRaiting(subject3, new int[] { 78, 61, 77, 55 });
 
            Ima.AddSubjectWithRaiting(subject1, new int[] { 55, 52, 49, 78 });
            Ima.AddSubjectWithRaiting(subject2, new int[] { 99, 100, 98, 89 });
            Ima.AddSubjectWithRaiting(subject3, new int[] { 31, 62, 18, 59 });
 
            work.ShowAll(); 
 
            work.GetStudents();
 
            var id = int.Parse(Console.ReadLine()); // Надо проверять на корректность вводимых данных
            var stud = work.FindStudent(id);
            Console.WriteLine($"{stud.Name}");
        }
2
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 15:51
Лучший ответ Сообщение было отмечено HatakeIra как решение

Решение

Тоже вот пока набросал следующее:
Класс Student
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
        class Student
        {
            public string Name { get; private set; }
            public Dictionary<Subjects, List<int>> Diary { get; private set; }
 
 
            //Конструктор Студента
            public Student( string name )
            {
                Name = name;
                Diary = new( 4 )
                {
                    { Subjects.CSharp, new List<int>() { 10, 20 } },            //Начальные оценки.
                    { Subjects.Manual, new List<int>() { 15, 25, 35 } },        //Можно их убрать.
                    { Subjects.English, new List<int>() { 22, 32, 42, 52 } },
                    { Subjects.History, new List<int>() { 47, 57, 67, 77, 99 } }
                };
            }
 
 
            public enum Subjects
            {
                CSharp,
                Manual,
                English,
                History
            }
 
 
            //Можно ставить одну оценку
            public void PutMark( Subjects subject, int mark )
            {
                if ( mark < 0 && mark > 100 )
                    throw new Exception( "Оценка вне диапазона!" );
 
                if ( Diary.ContainsKey( subject ) )
                    Diary[ subject ].Add( mark );
            }
 
 
            //А можно ставить сразу несколько оценок
            public void PutMark( Subjects subject, int[] mark )
            {
                if ( Diary.ContainsKey( subject ) )
                {
                    foreach ( int m in mark )
                    {
                        if ( m < 0 && m > 100 )
                            throw new Exception( "Оценка вне диапазона!" );
                        else
                            Diary[ subject ].Add( m );
                    } 
                } 
            }
 
 
            //Get MAX Mark
            public int GetMax( Subjects subject )
            {
                int max = 0;
                if ( Diary.ContainsKey( subject ) )
                {
                    foreach ( int i in Diary[ subject ] )
                        if ( i > max ) max = i;
                }
                return max;
            }
 
 
            //Get MIN Mark
            public int GetMin( Subjects subject )
            {
                int min = 0;
                if ( Diary.ContainsKey( subject ) )
                {
                    min = Diary[ subject ][ 0 ];
                    foreach ( int i in Diary[ subject ] )
                        if ( i < min ) min = i;
                }
                return min;
            }
 
 
            //Get AVERAGE Mark (все предметы)
            public int GetAverage()
            {
                int aver = 0;
                List<int> AllMarks = new();
 
                foreach ( KeyValuePair<Subjects, List<int>> keyValue in Diary )
                    foreach ( int mark in keyValue.Value )
                        AllMarks.Add( mark );
 
                foreach ( int i in AllMarks )
                    aver += i;
                aver /= AllMarks.Count;
                return aver;
            }
        }

Функция проверки введенного студента
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        //Возвращает bool = true, если студент существует
        //и его позицию (индекс) в списке студентов
        private static ( bool, int ) CheckStudent( string name, List<Student> s )
        {
            int res;
            bool b = false;
 
            for ( res = 0; res < s.Count; res++ )
            {
                if ( name == s[ res ].Name )
                {
                    b = true;
                    break;
                }      
            }
            return ( b, res );
        }

Обратите внимание - функция возвращает кортеж! Удивите преподавателя
Main пока не закончил...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
        static void Main( string[] args )
        {
            List<Student> stlist = new() { new Student( "Ирина" ), new Student( "Инна" ), new Student( "Имма" ) };
 
            while ( true )
            {
                Console.WriteLine( "Выберите действие:" );
                Console.WriteLine( "1. Поставить оценку \n2. Максимальная оценка по предмету \n3. Минимальная оценка по предмету" );
                Console.WriteLine( "4. Средний балл по всем предметам" );
                Console.Write( "Выбор: " );
                int action = Convert.ToInt32( Console.ReadLine() );
 
                Console.Write( "Введите имя студента: " );
                string student = Console.ReadLine();
 
                var result = CheckStudent( student, stlist );
                if ( result.Item1 )
                {
                    Console.WriteLine( $"Выбран студент: {stlist[ result.Item2 ].Name}" );
 
                    switch ( action )
                    {
                        case 1: //Поставить оценку
                            {
                                Console.WriteLine( "<---Добавить оценку--->" );
                                Console.WriteLine( "Выберите предмет:" );
                                Console.Write( "Выбор: " );
                                int subj = Convert.ToInt32( Console.ReadLine() );
                                Console.Write( "Поставьте оценку (0-100): " );
                                int mark = Convert.ToInt32( Console.ReadLine() );
 
                            }
                            break;
 
                        case 2: //Максимальная оценка
                            break;
 
                        case 3: //Минимальная оценка
                            break;
 
                        case 4: //Средний балл
                            break;
 
                        default:
                            Console.WriteLine( "Не правильный ввод" );
                            break;
                    }
                }
                else
                {
                    Console.WriteLine( $"Студент с именем {student} не найден!" );
                    Console.WriteLine();
                }
            }
        }

От класса Subject отказался - собственно, его представляет словарь Diary внутри класса Student.
Мельком просмотрел решение от ipsorokin, весьма неплохой вариант. Разве что кол-во студентов и предметов статичное.
1
296 / 120 / 33
Регистрация: 06.03.2016
Сообщений: 453
19.09.2021, 15:57
Цитата Сообщение от wizard41 Посмотреть сообщение
Мельком просмотрел решение от ipsorokin, весьма неплохой вариант. Разве что кол-во студентов и предметов статичное.
Почему же?) Никто не запрещает создавать новых студентов и предметы)) Просто я это не реализовывал.
Тут в теме столько раз все менялось, что к концу уже вообще стало непонятно, что нужно
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 16:08
ipsorokin, ну так то да )
Завтра еще потребуется стипендию им начислять, в зависимости от успеваемости
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 17:52  [ТС]
ipsorokin, wizard41, спасибо вам большое))) вы мои волшебники)))

Добавлено через 8 минут
Обойдутся без стипендии))

Добавлено через 54 минуты
Так, кортежи - караваны, это у нас сокращенный синтаксис для работы с группой значений?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 18:14
Цитата Сообщение от HatakeIra Посмотреть сообщение
Так, кортежи
Это когда надо вернуть из функции несколько значений

Добавлено через 1 минуту
хотя int можно в аргументы выкинуть с приставкой out. Тогда кортеж отпадает.

Добавлено через 1 минуту
вот тут можно почитать про них.
1
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 18:18  [ТС]
Сейчас почитаю, законспектирую
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 18:28
Изменил немного условие в функции проверки введенного студента:
C#
1
if ( name.ToLower() == s[ res ].Name.ToLower() )
Чтобы имена проверялись без учета регистра.
0
296 / 120 / 33
Регистрация: 06.03.2016
Сообщений: 453
19.09.2021, 18:40
Предлагаю добить))
Модели

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
    public class BaseEntity
    {
        public int Id { get; init; }
        public string Name { get; init; }
    }
 
    /// <summary>
    /// Студент
    /// </summary>
    public class Student : BaseEntity
    {
        private static int id = 4275;
 
        private Student()
        {
            Id = id++;
            Subjects = new Dictionary<Subject, List<int>>();
        }
 
        public Student(string name) : this()
        {
            Name = name;
        }
 
        /// <summary>
        /// Список предметов.
        /// </summary>
        public Dictionary<Subject, List<int>> Subjects { get; }
    }
 
    /// <summary>
    /// Предмет
    /// </summary>
    public class Subject : BaseEntity
    {
        private static int id = 9485;
 
        private Subject()
        {
            Id = id++;
        }
 
        public Subject(string theme) : this()
        {
            Theme = theme;
            Name = theme;
        }
 
        /// <summary>
        /// Название курса.
        /// </summary>
        public string Theme { get; }
 
        /// <summary>
        /// Преподаватель.
        /// </summary>
        public string Teacher { get; set; }
    }

Манагер
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
    public class JournalManager
    {
        public JournalManager()
        {
            Students = new();
            Subjects = new();
        }
 
        /// <summary>
        /// Список студентов
        /// </summary>
        public List<Student> Students { get; }
        /// <summary>
        /// Список предметов
        /// </summary>
        public List<Subject> Subjects { get; }
 
        /// <summary>
        /// Добавляет новый объект в журнал
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <exception cref="ArgumentNullException"></exception>
        public void Add<T>(T entity) where T: class
        {
            if (entity == null)
                throw new ArgumentNullException(nameof(entity));
 
            if (entity is Student obj)
                Students.Add(obj);
            else
                Subjects.Add(entity as Subject);
        }
 
        /// <summary>
        /// Удаляет объект из журнала
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        public bool Remove<T>(T entity) where T : class
        {
            if (entity is Student obj)
                return Students.Remove(obj);
            else
                return Subjects.Remove(entity as Subject);
        }
 
        /// <summary>
        /// Добавить предмет и оценку.
        /// </summary>
        /// <param name="subject">Предмет</param>
        /// <param name="raiting">Оценка</param>
        /// <param name="option"></param>
        public void AddSubjectWithRaiting(Student student, Subject subject, int raiting, Option option = Option.None)
        {
            if (!student.Subjects.ContainsKey(subject))
            {
                student.Subjects.Add(subject, new List<int> { raiting });
                return;
            }
 
            switch (option)
            {
                case Option.None:
                    return; // Ничего не делать
                case Option.Update:
                    student.Subjects[subject] = new List<int> { raiting }; // Заменить оценки
                    break;
                case Option.Add:
                    student.Subjects[subject].Add(raiting); // Добавить оценки
                    break;
            }
        }
 
        /// <summary>
        /// Добавить предмет и оценку.
        /// </summary>
        /// <param name="subject">Предмет</param>
        /// <param name="raitings">Оценки</param>
        /// <param name="option"></param>
        public void AddSubjectWithRaiting(Student student, Subject subject, int[] raitings, Option option = Option.None)
        {
            if (!student.Subjects.ContainsKey(subject))
            {
                student.Subjects.Add(subject, raitings.ToList());
                return;
            }
 
            switch (option)
            {
                case Option.None:
                    return; // Ничего не делать
                case Option.Update:
                    student.Subjects[subject] = raitings.ToList(); // Заменить оценки
                    break;
                case Option.Add:
                    student.Subjects[subject].AddRange(raitings); // Добавить оценки
                    break;
            }
        }
 
        public enum Option
        {
            None,
            /// <summary>
            /// Перезаписать все оценки
            /// </summary>
            Update,
            /// <summary>
            /// Добавить оценки к существующим
            /// </summary>
            Add
        }
    }

Расширения
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    /// <summary>
    /// Методы расширения для поиска по имени и ID.
    /// </summary>
    public static class Extention
    {
        /// <summary>
        /// Возвращает найденный объекто по Id.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="ts"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static T FindById<T>(this List<T> ts, int id) where T: BaseEntity
        {
            return ts.FirstOrDefault(o => o.Id == id);
        }
 
        /// <summary>
        /// Возвращает коллекцию элементов, найденных по имени (без учета регистра).
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="ts"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static IList<T> FindByName<T>(this List<T> ts, string name) where T : BaseEntity
        {
            return ts.FindAll(o => string.Compare(o.Name, name, true) == 0);
        }
    }

Использование
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
            var jm = new JournalManager();
 
            // Добавление студентов
            jm.Add(new Student(null));
            jm.Add(new Student("Ира"));
            jm.Add(new Student("Ольга"));
 
            // Добавление предметов
            jm.Add(new Subject("English"));
            jm.Add(new Subject("C#"));
            jm.Add(new Subject("JavaScript"));
            jm.Add(new Subject("History"));
 
            // Поиск по Id
            // Возвращается элемент
            var subject = jm.Subjects.FindById(4275);
            var student = jm.Students.FindById(4275);
 
            // Поиск по названию/имени
            // Возвращается коллекция элементов
            var subject1 = jm.Subjects.FindByName("javaScript");
            var student1 = jm.Students.FindByName("ира");


Добавлено через 1 минуту
Цитата Сообщение от wizard41 Посмотреть сообщение
if ( name.ToLower() == s[ res ].Name.ToLower() )
Лучше использовать
C#
1
string.Compare(name1, name2, true) == 0
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 18:43
Цитата Сообщение от ipsorokin Посмотреть сообщение
Лучше использовать
Да я много чего могу использовать ) Вопрос в том - сможет ли ТС пояснить преподу суть применяемых фич
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 18:46  [ТС]
Так, я тут с кортежами разбираюсь. Погодите)))
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 18:50
HatakeIra, давайте выкинем кортеж. Сделаем через out
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 18:51  [ТС]
Давайте)
0
296 / 120 / 33
Регистрация: 06.03.2016
Сообщений: 453
19.09.2021, 18:51
Цитата Сообщение от wizard41 Посмотреть сообщение
Да я много чего могу использовать ) Вопрос в том - сможет ли ТС пояснить преподу суть применяемых фич
А нефиг задание менять постоянно))) Пусть скажет вдохновение пришло.
Ну... Как пришло так и ушло потом...
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 18:53  [ТС]
Да уже все, больше менять не будут. Ибо до понедельника его никто не сделает)
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 18:57
Цитата Сообщение от HatakeIra Посмотреть сообщение
Давайте)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        //Возвращает bool = true, если студент существует
        //и его позицию (индекс) в списке студентов
        private static bool CheckStudent( string name, List<Student> s, out int res )
        {
            bool b = false;
 
            for ( res = 0; res < s.Count; res++ )
            {
                if ( name.ToLower() == s[ res ].Name.ToLower() )
                {
                    b = true;
                    break;
                }      
            }
            return b;
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
                if ( CheckStudent( student, stlist, out int idx ) )
                {
                    Console.WriteLine( $"Выбран студент: {stlist[ idx ].Name}" );
 
                    switch ( action )
                    {
                        case 1: //Поставить оценку
                            {
                                Console.WriteLine( "<---Добавить оценку--->" );
                                Console.WriteLine( "Выберите предмет:" );
                                var keys = stlist[ idx ].Diary.Keys.ToArray();
 
                                for ( int i = 0; i < keys.Length; i++ )
                                    Console.WriteLine( $"{ i + 1 }. { keys.GetValue( i ) }" );
 
                                Console.Write( "Выбор: " );
                                int subj = Convert.ToInt32( Console.ReadLine() );
                                Console.Write( "Поставьте оценку (0-100): " );
                                int mark = Convert.ToInt32( Console.ReadLine() );
 
                                
 
                            }
                            break;
 
                        case 2: //Максимальная оценка
                            break;
 
                        case 3: //Минимальная оценка
                            break;
 
                        case 4: //Средний балл
                            break;
 
                        default:
                            Console.WriteLine( "Не правильный ввод" );
                            break;
                    }
                }
                else
                {
                    Console.WriteLine( $"Студент с именем {student} не найден!" );
                    Console.WriteLine();
                }
Выкинул.
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 19:06  [ТС]
Спасибо)
Р.S. Вам тут мама привет передает и Спасибо
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 19:07
Цитата Сообщение от HatakeIra Посмотреть сообщение
Да уже все, больше менять не будут. Ибо до понедельника его никто не сделает
А до когда это нужно сделать?
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 19:12  [ТС]
до завтра((
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 19:15
Цитата Сообщение от HatakeIra Посмотреть сообщение
до завтра((
Это плохо. Я тут между делом уделяю немного времени... Не факт что успею закончить все
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.09.2021, 19:15

Программа учета успеваемости на С# 2008 (Windows Appkication)
Задание: Разработать программный модуль &quot;Учет успеваемости студентов&quot;, в которой должны содержаться формы: Предметы, Факультеты,...

Программа для ведения статистического учета успеваемости учащихся
Программа учета успеваемости учащихся. Помогите написать простенькую базу данных или скиньте ,если есть у кого заготовку (шаблон) можно на...

Определение успеваемости учащихся
определения успеваемости учащихся

Определение успеваемости учащихся
определения успеваемости учащихся

Как проверить сайт БД об успеваемости учащихся на уязвимость
Вопрос у меня довольно серьезный . Как проверить сайт Базы Данных об успеваемости учащихся ? Чем можно проверить ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru