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

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

18.09.2021, 00:37. Показов 19248. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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 и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru