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

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

18.09.2021, 00:37. Показов 19245. Ответов 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
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 19:19  [ТС]
Студворк — интернет-сервис помощи студентам
не корректно написала - дедлайн завтра в 22.00
нам его продлили, ибо никто не успевает до 7 утра сделать)
так, вопрос: несколько оценок для предмета вводим через запятую, пробел, энтер или заново в меню выбираем добавить оценку и предмет?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 20:14
Цитата Сообщение от HatakeIra Посмотреть сообщение
несколько оценок для предмета вводим через запятую, пробел, энтер или заново в меню выбираем добавить оценку и предмет?
если несколько, то ввод пользователя нужно разсплитить по символу и запихать цифры в массив. Символом может быть любой символ: запятая, пробел ... и т.д.
C#
1
Console.ReadLine().Split(',');
Добавлено через 48 минут
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
class Student
        {
            public string Name { get; private set; }
            public Dictionary<string, List<int>> Diary { get; private set; }
 
            public readonly string[] Subjects = { "C#", "Manual", "English", "History" };
 
 
            //Конструктор Студента
            public Student( string name )
            {
                Name = name;
                Diary = new( 4 )
                {
                    { Subjects[ 0 ], new List<int>() { 10, 20 } },            //Начальные оценки.
                    { Subjects[ 1 ], new List<int>() { 15, 25, 35 } },        //Можно их убрать.
                    { Subjects[ 2 ], new List<int>() { 22, 32, 42, 52 } },
                    { Subjects[ 3 ], new List<int>() { 47, 57, 67, 77, 99 } }
                };
            }
 
            //Можно ставить одну оценку
            public bool PutMark( string subject, int mark )
            {
                bool b = false;
 
                if ( Diary.ContainsKey( subject ) )
                {
                    if ( ( mark > 0 ) && ( mark <= 100 ) )
                    {
                        Diary[ subject ].Add( mark );
                        b = true;
                    }      
                }
                return b;
            }
 
 
            //А можно ставить сразу несколько оценок
            public void PutMark( string 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( string 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( string 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<string, 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;
            }
 
            public List<int> GetAllMarksForSubject( string subject )
            {
                List<int> res = new();
 
                if ( Diary.ContainsKey( subject ) )
                {
                    foreach ( int i in Diary[ subject ] )
                        res.Add( i ); 
                }
                return 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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();
 
                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( $"Текущие оценки по предмету {stlist[ idx ].Subjects[ subj - 1 ]}: " );
                                foreach ( int i in stlist[ idx ].GetAllMarksForSubject( stlist[ idx ].Subjects[ subj - 1 ] ) )
                                    Console.Write( i + " " );
                                Console.WriteLine();
 
                                Console.WriteLine( "Поставьте оценку (0-100): " );
                                int mark = Convert.ToInt32( Console.ReadLine() );
                                if ( stlist[ idx ].PutMark( stlist[ idx ].Subjects[ subj - 1 ], mark ) )
                                    Console.WriteLine( "Оценка добавлена!" );
                                else
                                    Console.WriteLine( "Оценка вне диапазона!" );
                                Console.Write( $"Текущие оценки по предмету {stlist[ idx ].Subjects[ subj - 1 ]}: " );
                                foreach ( int i in stlist[ idx ].GetAllMarksForSubject( stlist[ idx ].Subjects[ subj - 1 ] ) )
                                    Console.Write( i + " " );
                                Console.WriteLine();
                                Console.WriteLine();
 
                            }
                            break;
 
                        case 2: //Максимальная оценка
                            break;
 
                        case 3: //Минимальная оценка
                            break;
 
                        case 4: //Средний балл
                            break;
 
                        default:
                            Console.WriteLine( "Не правильный ввод" );
                            break;
                    }
                }
                else
                {
                    Console.WriteLine( $"Студент с именем {student} не найден!" );
                    Console.WriteLine();
                }
            }
        }

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Выберите действие:
1. Поставить оценку
2. Максимальная оценка по предмету
3. Минимальная оценка по предмету
4. Средний балл по всем предметам
Выбор: 1
Введите имя студента: ирина
Выбран студент: Ирина
<---Добавить оценку--->
Выберите предмет:
1. C#
2. Manual
3. English
4. History
Выбор: 1
Текущие оценки по предмету C#: 10 20
Поставьте оценку (0-100):
88
Оценка добавлена!
Текущие оценки по предмету C#: 10 20 88
 
Выберите действие:
Пока вот так.
Получение MIN/MAX и AVERAGE еще легче. Если что, завтра дополню.
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 20:53  [ТС]
спасибо большое))))))

Добавлено через 29 минут
wizard41, я сейчас такую панику поймала. Короче switch-case вообще не такой как мы делаем. у нас в кейсе максимум одна строка и брейк.....
Так много в кейсе писать - можно?
0
296 / 120 / 33
Регистрация: 06.03.2016
Сообщений: 453
19.09.2021, 21:01
Цитата Сообщение от HatakeIra Посмотреть сообщение
wizard41, я сейчас такую панику поймала. Короче switch-case вообще не такой как мы делаем. у нас в кейсе максимум одна строка и брейк.....
Так много в кейсе писать - можно?
Просто тут всё засунуто в одно место. А так можете вынести это в отдельный метод, передать в него нужные параметры и написать
C#
1
2
case 1: method(params object[] param) // тут ваш метод с вашими параметрами
   break;
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 22:19
Цитата Сообщение от HatakeIra Посмотреть сообщение
Так много в кейсе писать - можно?
А почему нельзя то?
Цитата Сообщение от ipsorokin Посмотреть сообщение
Просто тут всё засунуто в одно место.
Естественно. На выходе нет никакой разницы где реализован тот или иной алгоритм. Либо в вызываемых в кейсах методах, либо непосредственно в самом кейсе. Я выбрал второе для наглядности, в конкретном случае.

Добавлено через 33 секунды
Тут, так сказать, на вкус и цвет...
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 22:36  [ТС]
Макс и Мин написала) Подскажите пожалуйста, как в меню прописать выход и програмы вообще?

Добавлено через 7 минут
wizard41,

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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
    class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.Unicode;
            Console.InputEncoding = Encoding.Unicode;
            List<Student> stlist = new() { new Student("Ирина"), new Student("Инна"), new Student("Имма") };
            MenuMain(stlist);
 
        }
 
        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;
 
            //Возвращает bool = true, если студент существует
            //и его позицию (индекс) в списке студентов
        }
 
        static void MenuMain(List<Student> stlist)
        {
            while (true)
            {
                Console.WriteLine("Выберите действие:");
                Console.WriteLine("1.Поставить оценку \n2.Максимальная оценка по предмету \n3.Минимальная оценка по предмету");
                Console.WriteLine("4.Средний балл по всем предметам");
                //дайте выйти
                // как тебя очищать то, после вывода выбранного параметра в меню?
                Console.Write("Выбор: ");
                int action = Convert.ToInt32(Console.ReadLine());
 
                Console.Write("Введите имя студента(Ирина, Инна, Имма) и нажмите \"Enter\": ");
                string student = Console.ReadLine();
                if (CheckStudent(student, stlist, out int idx))
                {
                    Console.WriteLine($"Выбран студент: {stlist[idx].Name}");
 
                    switch (action)
                    {
                        case 1: //Поставить оценку
                            AddMarks(stlist, idx);
                            break;
                        case 2: //Максимальная оценка
                            MaxMark(stlist, idx);
                            break;
                        case 3: //Минимальная оценка
                            MinMark(stlist, idx);
                            break;
                        case 4: //Средний балл
                            MiddleMarkForOll(stlist, idx);
                            break;
                        default:
                            Console.WriteLine("Не правильный ввод");
                            break;
                    }
                }
                else
                {
                    Console.WriteLine($"Студент с именем {student} не найден!");
                    Console.WriteLine();
                }
            }
        }
 
        static void AddMarks(List<Student> stlist, int idx)
        {
            Console.WriteLine("<---Добавить оценку--->");
            Console.WriteLine("Выберите предмет по-номеру и нажмите \"Enter\":");
            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($"Текущие оценки по предмету {stlist[idx].Subjects[subj - 1]}: ");
            foreach (int i in stlist[idx].GetAllMarksForSubject(stlist[idx].Subjects[subj - 1]))
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.WriteLine("Поставьте оценку (0-100) и нажмите \"Enter\": ");
            int mark = Convert.ToInt32(Console.ReadLine());
            if (stlist[idx].PutMark(stlist[idx].Subjects[subj - 1], mark))
            {
                Console.WriteLine("Оценка добавлена!");
            }
            else
            {
                Console.WriteLine("Оценка вне диапазона!");
            }
            Console.Write($"Текущие оценки по предмету {stlist[idx].Subjects[subj - 1]}: ");
            foreach (int i in stlist[idx].GetAllMarksForSubject(stlist[idx].Subjects[subj - 1]))
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.WriteLine();
        }
 
        static void MaxMark(List<Student> stlist, int idx)
        {
            Console.WriteLine("Выберите предмет по-номеру и нажмите \"Enter\":");
            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($"Текущие оценки по предмету {stlist[idx].Subjects[subj - 1]}: ");
            foreach (int i in stlist[idx].GetAllMarksForSubject(stlist[idx].Subjects[subj - 1]))
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.WriteLine("Поставьте оценку (0-100) и нажмите \"Enter\": ");
            int mark = Convert.ToInt32(Console.ReadLine());
            if (stlist[idx].PutMark(stlist[idx].Subjects[subj - 1], mark))
            {
                Console.WriteLine("Оценка добавлена!");
            }
            else
            {
                Console.WriteLine("Оценка вне диапазона!");
            }
            Console.Write($"Максимальная оценка по предмету {stlist[idx].GetMax(stlist[idx].Subjects[subj - 1])}: ");
            for(int i = 0; i == stlist[idx].GetMax(stlist[idx].Subjects[subj - 1]); i++)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.WriteLine();
        }
        
        static void MinMark(List<Student> stlist, int idx)
        {
            Console.WriteLine("Выберите предмет по-номеру и нажмите \"Enter\":");
            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($"Текущие оценки по предмету {stlist[idx].Subjects[subj - 1]}: ");
            foreach (int i in stlist[idx].GetAllMarksForSubject(stlist[idx].Subjects[subj - 1]))
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.WriteLine("Поставьте оценку (0-100) и нажмите \"Enter\": ");
            int mark = Convert.ToInt32(Console.ReadLine());
            if (stlist[idx].PutMark(stlist[idx].Subjects[subj - 1], mark))
            {
                Console.WriteLine("Оценка добавлена!");
            }
            else
            {
                Console.WriteLine("Оценка вне диапазона!");
            }
            Console.Write($"Минимальная оценка по предмету {stlist[idx].GetMin(stlist[idx].Subjects[subj - 1])}: ");
            for (int i = 0; i < stlist[idx].GetMin(stlist[idx].Subjects[subj - 1]); i++)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.WriteLine();
        }
 
        static void MiddleMarkForOll(List<Student> stlist, int idx)
        {
 
        }
    }
}
 
class Student
{
    public string Name { get; private set; }
    public Dictionary<string, List<int>> Diary { get; private set; }
 
    public readonly string[] Subjects = { "C#", "Manual", "English", "History" };
 
    //Конструктор Студента
    public Student(string name)
    {
        Name = name;
        Diary = new(4)
        {
            { Subjects[0], new List<int>() { 50, 79, 88, 98 } },
            { Subjects[1], new List<int>() { 45, 65, 80, 36 } },
            { Subjects[2], new List<int>() { 55, 58, 89, 52 } },
            { Subjects[3], new List<int>() { 57, 67, 77, 99 } }
        };
    }
 
    public bool PutMark(string subject, int mark)
    {
        bool b = false;
 
        if (Diary.ContainsKey(subject))
        {
            if ((mark > 0) && (mark <= 100))
            {
                Diary[subject].Add(mark);
                b = true;
            }
        }
        return b;
    }
    //Get MAX Mark
    public int GetMax(string 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(string 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<string, 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;
    }
    public List<int> GetAllMarksForSubject(string subject)
    {
        List<int> res = new();
 
        if (Diary.ContainsKey(subject))
        {
            foreach (int i in Diary[subject])
                res.Add(i);
        }
        return res;
    }
}
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 22:42
Цитата Сообщение от HatakeIra Посмотреть сообщение
Макс и Мин написала)
Неправильно )
Цитата Сообщение от HatakeIra Посмотреть сообщение
как в меню прописать выход и програмы вообще
C#
1
2
3
4
5
case N:
      {
            Environment.Exit( 0 );
      }
      break;
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 22:53  [ТС]
ну оно ж работает))

Добавлено через 30 секунд
wizard41, я пыталась))
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 23:05
Цитата Сообщение от HatakeIra Посмотреть сообщение
ну оно ж работает))
Криво работает. Зачем в методе static void MaxMark вы используете добавление оценок PutMark, скопированное из предыдущего кейса?
Я к чему клоню:
это консольное приложение. Вывод в консоль лежит в рамках этого приложения. Если завтра вас попросят сделать тоже самое на формах, то ваши методы отправятся прямиком в мусорное ведро, а заместо них нужно будет писать новые.
Количество методов не особо разгружает код: если вы в кейсе вызываете некий метод Someone(); и вроде выглядит красиво и кратко, то это нельзя сказать о самой реализации метода Someone().
Т.е. с точки зрения исполняемого кода никакой разницы нет.
Если уж и применять методы, то возвращающие готовое значение/результат операции, которое, в свою очередь, будет выведено на консоль внутри Main().
Плохая практика запихивать Console.Write() / Console.ReadLine() внутрь методов, а тем более классов.
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 23:20  [ТС]
Эх, учиться и учиться.
Надеюсь, что к Формам не дойдет(((
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 23:25
HatakeIra, если программирование у вас это факультативное направление, то особо переживать не стоит. "И так сойдет", как говорится. А если проф-целевое, то да, лучше поднапрячься
Сделаем паузу. Завтра доведем до окончательного варианта.

Не по теме:

Кошка оккупировала кресло, явно давая понять - хорош работать!

0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
19.09.2021, 23:32  [ТС]
факультатив, пока что)
спокойной ночи))
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
19.09.2021, 23:49
HatakeIra, а чем вас не устраивает решение от ipsorokin? По моему тут все отлично, можно конечно убрать Id студентов и поиск студентов переписать без LINQ. А так вариант как раз ваш.

Добавлено через 1 минуту
И меню добротно сделано. Отдельным методом, как просили )
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
20.09.2021, 00:00  [ТС]
Хочу вашу)

Добавлено через 6 минут
wizard41, я и конспектик по нему написала)
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
20.09.2021, 08:51
HatakeIra, понятно.
Вообщем теперь все работает. Можно половину упростить, кое-что вообще внутри класса делать.
Кликните здесь для просмотра всего текста
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
        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();
 
                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() );
                                subj -= 1;
 
                                Console.Write( $"Текущие оценки по предмету {stlist[ idx ].Subjects[ subj ]}: " );
                                foreach ( int i in stlist[ idx ].GetAllMarksForSubject( stlist[ idx ].Subjects[ subj ] ) )
                                    Console.Write( i + " " );
                                Console.WriteLine();
 
                                Console.WriteLine( "Поставьте оценку (0-100): " );
                                int mark = Convert.ToInt32( Console.ReadLine() );
                                if ( stlist[ idx ].PutMark( stlist[ idx ].Subjects[ subj ], mark ) )
                                    Console.WriteLine( "Оценка добавлена!" );
                                else
                                    Console.WriteLine( "Оценка вне диапазона!" );
 
                                Console.Write( $"Текущие оценки по предмету {stlist[ idx ].Subjects[ subj ]}: " );
                                foreach ( int i in stlist[ idx ].GetAllMarksForSubject( stlist[ idx ].Subjects[ subj ] ) )
                                    Console.Write( i + " " );
                                Console.WriteLine();
                                Console.WriteLine();
                            }
                            break;
 
                        case 2: //Максимальная оценка
                            {
                                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() );
                                subj -= 1;
                                Console.Write( $"Максимальный балл по предмету {stlist[ idx ].Subjects[ subj ]}: " +
                                    $"{stlist[ idx ].GetMax( stlist[ idx ].Subjects[ subj ] )}" );
                                Console.WriteLine();
                                Console.WriteLine();
                            }
                            break;
 
                        case 3: //Минимальная оценка
                            {
                                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() );
                                subj -= 1;
                                Console.Write( $"Минимальный балл по предмету {stlist[ idx ].Subjects[ subj ]}: " +
                                    $"{stlist[ idx ].GetMin( stlist[ idx ].Subjects[ subj ] )}" );
                                Console.WriteLine();
                                Console.WriteLine();
                            }
                            break;
 
                        case 4: //Средний балл
                            {
                                Console.WriteLine( "<---Средний балл по всем предметам--->" );
                                Console.WriteLine( $"Средний балл: {stlist[ idx ].GetAverage()}" );
                                Console.WriteLine();
                                Console.WriteLine();
                            }
                            break;
 
                        default:
                            Console.WriteLine( "Не правильный ввод" );
                            break;
                    }
                }
                else
                {
                    Console.WriteLine( $"Студент с именем {student} не найден!" );
                    Console.WriteLine();
                }
            }
        }

Если хотите, выносите кейсы в отд. методы, хотя по мне так это излишне (смысла особого нет).
Code
1
2
3
4
5
6
7
8
9
10
Выберите действие:
1. Поставить оценку
2. Максимальная оценка по предмету
3. Минимальная оценка по предмету
4. Средний балл по всем предметам
Выбор: 4
Введите имя студента: ирина
Выбран студент: Ирина
<---Средний балл по всем предметам--->
Средний балл: 42
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Выберите действие:
1. Поставить оценку
2. Максимальная оценка по предмету
3. Минимальная оценка по предмету
4. Средний балл по всем предметам
Выбор: 2
Введите имя студента: инна
Выбран студент: Инна
<---Максимальная оценка по предмету--->
Выберите предмет:
1. C#
2. Manual
3. English
4. History
Выбор: 4
Максимальный балл по предмету History: 99
Добавлено через 12 минут
Вот идея выбора действий через перечисления в самом классе у ipsorokin мне понравилась. Но пока не стал у себя переделывать.
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
20.09.2021, 09:05  [ТС]
Спасибо большое
С добрым утром)
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
20.09.2021, 09:09
Цитата Сообщение от HatakeIra Посмотреть сообщение
С добрым утром
С добрым утром)
Основная масса клинописи в кейсах - это просто для красивого вывода в консоль. Все действенные методы находятся в классе Student.
0
296 / 120 / 33
Регистрация: 06.03.2016
Сообщений: 453
20.09.2021, 10:25
Продолжая тему "портянок", длинных кейсов и кейсов в кейсах
Использование LINQ в нескольких местах допустимо, так как у ТС они тоже были. Можно сказать, что "первое что выдал поиск". Min(), Max(), Average(), Find(), FirstOrDefault()

Модели

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
    /// <summary>
    /// Студент
    /// </summary>
    public class Student
    {
        private static int id = 4;
 
        private Student()
        {
            Id = id++;
            Subjects = new Dictionary<Subject, List<int>>();
        }
 
        public Student(string name) : this()
        {
            Name = name;
        }
 
        public int Id { get; init; }
 
        public string Name { get; init; }
        /// <summary>
        /// Список предметов.
        /// </summary>
        public Dictionary<Subject, List<int>> Subjects { get; }
    }
 
    /// <summary>
    /// Предмет
    /// </summary>
    public class Subject
    {
        private static int id = 2;
 
        private Subject()
        {
            Id = id++;
        }
 
        public Subject(string theme) : this()
        {
            Theme = theme;
        }
 
        public int Id { get; init; }
        /// <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
    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>
        /// <param name="student"></param>
        public void AddStudent(Student student)
        {
            if (student == null)
                throw new ArgumentNullException(nameof(student));
            Students.Add(student);
        }
        /// <summary>
        /// Добавить предмет
        /// </summary>
        /// <param name="subject"></param>
        public void AddSubject(Subject subject)
        {
            if (subject == null)
                throw new ArgumentNullException(nameof(subject));
            Subjects.Add(subject);
        }
        /// <summary>
        /// Удалить студента
        /// </summary>
        /// <param name="student"></param>
        /// <returns></returns>
        public bool RemoveStudent(Student student)
        {
            return Students.Remove(student);
        }
        /// <summary>
        /// Удалить предмет
        /// </summary>
        /// <param name="subject"></param>
        /// <returns></returns>
        public bool RemoveSubject(Subject subject)
        {
            return Subjects.Remove(subject);
        }
        
        /// <summary>
        /// Добавить предмет и/или оценку.
        /// </summary>
        /// <param name="subject">Предмет</param>
        /// <param name="raitings">Оценки</param>
        /// <param name="option"></param>
        public void AddRaiting(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;
            }
        }
        /// <summary>
        /// Удалить предмет у студента
        /// </summary>
        /// <param name="student"></param>
        /// <param name="subject"></param>
        public void Remove(Student student, Subject subject)
        {
            if (!student.Subjects.ContainsKey(subject))
                return;
 
            student.Subjects.Remove(subject);
        }
 
        public enum Option
        {
            None,
            /// <summary>
            /// Перезаписать все оценки
            /// </summary>
            Update,
            /// <summary>
            /// Добавить оценки к существующим
            /// </summary>
            Add
        }
    }

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
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
        static void Main(string[] args)
        {
            // Инициализация манагера
            JournalManager jm = new();
 
            // блок начальных данных
            Student Ira = new("Ирина");
            Student Inna = new("Инна");
            Student Ima = new("Имма");
 
            Subject subject1 = new("C#");
            Subject subject2 = new("History");
            Subject subject3 = new("English");
 
            jm.AddStudent(Ira);
            jm.AddStudent(Inna);
            jm.AddStudent(Ima);
            jm.AddSubject(subject1);
            jm.AddSubject(subject2);
            jm.AddSubject(subject3);
 
            jm.AddRaiting(Ira, subject1, new int[] { 23, 15, 42 });
            jm.AddRaiting(Ira, subject2, new int[] { 62, 65, 59, 52 });
            jm.AddRaiting(Ira, subject3, new int[] { 54, 67, 77, 15 });
 
            jm.AddRaiting(Inna, subject1, new int[] { 36, 56, 82, 10 });
            jm.AddRaiting(Inna, subject2, new int[] { 14, 41, 8, 90 });
            jm.AddRaiting(Inna, subject3, new int[] { 78, 61, 77, 55 });
 
            jm.AddRaiting(Ima, subject1, new int[] { 55, 52, 49, 78 });
            jm.AddRaiting(Ima, subject2, new int[] { 99, 100, 98, 89 });
            jm.AddRaiting(Ima, subject3, new int[] { 31, 62, 18, 59 });
 
            // меню
            Console.WriteLine("Вы вошли в журнал.");
            do
            {
                Console.WriteLine("==========================================================");
                Console.WriteLine("Выберите действие:\n" +
                    "1. Показать всех студентов\n2. Добавить студента\n3. Изменить студента\n4. Удалить студента\n" +
                    "5. Показать все предметы\n6. Добавить предмет\n7. Удалить предмет\n" +
                    "0. Выход");
                Console.WriteLine("==========================================================");
 
                int idSt;
                Student st = null;
                int idSub;
                Subject sub = null;
 
                int actionId;
                while (!int.TryParse(Console.ReadLine(), out actionId))
                    Console.WriteLine("Некорректный номер действия.");
 
                Console.Clear();
                switch (actionId)
                {
                    case 1:
                        Console.WriteLine("Список студентов");
                        Console.WriteLine("Id\tName");
                        foreach (var item in jm.Students)
                            Console.WriteLine($"{item.Id}\t{item.Name}");
                        break;
 
                    case 2:
                        string name;
                        do
                        {
                            Console.WriteLine("Введите имя:");
                            name = Console.ReadLine();
                        }
                        while (string.IsNullOrWhiteSpace(name));
                        jm.AddStudent(new Student(name));
                        Console.WriteLine($"Добавлен студент '{name}'");
                        break;
 
                    case 3:
                        Console.WriteLine("Список студентов");
                        Console.WriteLine("Id\tName");
                        foreach (var item in jm.Students)
                            Console.WriteLine($"{item.Id}\t{item.Name}");
 
                        while(st == null)
                        {
                            do
                            {
                                Console.WriteLine("Введите Id студента для изменения:");
                            }
                            while (!int.TryParse(Console.ReadLine(), out idSt));
 
                            st = jm.Students.Find(o => o.Id == idSt);
                            if (st == null)
                            {
                                Console.WriteLine("Студент не найден.");
                                continue;
                            }
 
                            Console.WriteLine();
                            Console.WriteLine($"Список предметов студента {st.Name}:");
                            Console.WriteLine("Id\tTheme\tAll\t\tMin\tMax\tAvg");
                            foreach (var item in st.Subjects)
                            {
                                string val = string.Empty;
                                for (int i = 0; i < item.Value.Count; i++)
                                    val = string.Concat(val, " ", item.Value[i]);
                                
                                Console.WriteLine($"{item.Key.Id}\t{item.Key.Theme}\t{val}\t{item.Value.Min()}\t{item.Value.Max()}\t{item.Value.Average()}");
                            }
 
                            Console.WriteLine();
                            Console.WriteLine("Список всех предметов");
                            Console.WriteLine("Id\tTheme");
                            foreach (var item in jm.Subjects)
                                Console.WriteLine($"{item.Id}\t{item.Theme}");
                        }
 
                        Console.WriteLine("==========================================================");
                        Console.WriteLine("Выберите действие:\n1. Добавить оценку(и)\n2. Обновить оценки\n3. Удалить оценки\n4. Удалить предмет\n");
                        Console.WriteLine("==========================================================");
 
                        int actionId1;
                        while (!int.TryParse(Console.ReadLine(), out actionId1))
                            Console.WriteLine("Некорректный номер действия.");
 
                        while (sub == null)
                        {
                            do
                            {
                                Console.WriteLine("Введите Id предмета:");
                            }
                            while (!int.TryParse(Console.ReadLine(), out idSub));
 
                            sub = jm.Subjects.Find(o => o.Id == idSub);
                            if (sub == null)
                                Console.WriteLine("Предмет не найден.");
                        }
 
                        switch (actionId1)
                        {
                            case 1:
                                string values;
                                do
                                {
                                    Console.WriteLine("Введите оценку(и):");
                                    values = Console.ReadLine();
                                }
                                while (string.IsNullOrWhiteSpace(values));
 
                                // Допускаем, что все данные корректны и являются числами
                                var strItems = values.Split(',', ' ', '\\', '/');
                                int[] raitings = new int[strItems.Length];
                                for (int i = 0; i < strItems.Length; i++)
                                    raitings[i] = int.Parse(strItems[i]);
                                jm.AddRaiting(st, sub, raitings, JournalManager.Option.Add);
                                break;
 
                            case 2:
                                string values1;
                                do
                                {
                                    Console.WriteLine("Введите оценку(и):");
                                    values1 = Console.ReadLine();
                                }
                                while (string.IsNullOrWhiteSpace(values1));
 
                                // Допускаем, что все данные корректны и являются числами
                                var strItems1 = values1.Split(',', ' ', '\\', '/');
                                int[] raitings1 = new int[strItems1.Length];
                                for (int i = 0; i < strItems1.Length; i++)
                                    raitings1[i] = int.Parse(strItems1[i]);
                                jm.AddRaiting(st, sub, raitings1, JournalManager.Option.Update);
                                break;
 
                            case 3:
                                jm.AddRaiting(st, sub, Array.Empty<int>(), JournalManager.Option.Update);
                                break;
                            case 4:
                                jm.Remove(st, sub);
                                break;
                        }
 
                        Console.WriteLine();
                        Console.WriteLine($"Список предметов студента {st.Name}:");
                        Console.WriteLine("Id\tTheme\tAll\t\tMin\tMax\tAvg");
                        foreach (var item in st.Subjects)
                        {
                            string val = string.Empty;
                            for (int i = 0; i < item.Value.Count; i++)
                                val = string.Concat(val, " ", item.Value[i]);
 
                            Console.WriteLine($"{item.Key.Id}\t{item.Key.Theme}\t{val}\t{item.Value.Min()}\t{item.Value.Max()}\t{item.Value.Average()}");
                        }
                        break;
                    case 4:
                        Console.WriteLine("Список студентов");
                        Console.WriteLine("Id\tName");
                        foreach (var item in jm.Students)
                            Console.WriteLine($"{item.Id}\t{item.Name}");
 
                        while (st == null)
                        {
                            do
                            {
                                Console.WriteLine("Введите Id студента для удаления:");
                            }
                            while (!int.TryParse(Console.ReadLine(), out idSt));
 
                            st = jm.Students.Find(o => o.Id == idSt);
                            if (st == null)
                            {
                                Console.WriteLine("Студент не найден.");
                                continue;
                            }
                            jm.RemoveStudent(st);
                        }
                        break;
                    case 5:
                        Console.WriteLine("Cписок предметов");
                        Console.WriteLine("Id\tTheme");
                        foreach (var item in jm.Subjects)
                            Console.WriteLine($"{item.Id}\t{item.Theme}");
                        break;
                    case 6:
                        string theme;
                        do
                        {
                            Console.WriteLine("Введите название:");
                            theme = Console.ReadLine();
                        }
                        while (string.IsNullOrWhiteSpace(theme));
                        jm.AddSubject(new Subject(theme));
                        Console.WriteLine($"Добавлен предмет '{theme}'");
                        break;
                    case 7:
                        Console.WriteLine("Cписок предметов");
                        Console.WriteLine("Id\tTheme");
                        foreach (var item in jm.Subjects)
                            Console.WriteLine($"{item.Id}\t{item.Theme}");
 
                        while (sub == null)
                        {
                            do
                            {
                                Console.WriteLine("Введите Id предмета для удаления:");
                            }
                            while (!int.TryParse(Console.ReadLine(), out idSub));
 
                            sub = jm.Subjects.Find(o => o.Id == idSub);
                            if (sub == null)
                            {
                                Console.WriteLine("Предмет не найден.");
                                continue;
                            }
                            jm.RemoveSubject(sub);
                        }
                        break;
                    case 0:
                        return;
                }
 
            }
            while (true);
        }
    }

Возможно, что-то забыл

Как для новичка, так вполне подойдёт. Куча повторяющегося кода, лишних переменных и т.д.

Добавлено через 6 минут
Касаемо использования Id: а если у нас две Иры? Или три? Если сравнивать строки надо, то тогда использовать Id не int, а string , и заменить
C#
1
2
st = jm.Students.Find(o => o.Id == idSt); // с этого
st = jm.Students.Find(o => string.Compare(o.Id, idSt, true)); // на это
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
20.09.2021, 12:50
Лучший ответ Сообщение было отмечено HatakeIra как решение

Решение

Цитата Сообщение от ipsorokin Посмотреть сообщение
Main, впечатлительным не смотреть
Зря я посмотрел Теперь целый день будет бить озноб
Цитата Сообщение от ipsorokin Посмотреть сообщение
а если у нас две Иры? Или три?
Я еще в самом начале задавал подобный вопрос. Выяснилось что кол-во студентов строго фиксировано. Поэтому функционал добавления/удаления студентов отсутствует.
И LINQ вроде тоже запретили ТС'у...

Добавлено через 2 часа 20 минут
Забыл доработать функцию для добавления нескольких оценок:
В классе Student:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//А можно ставить сразу несколько оценок
            public bool PutMark( string subject, int[] mark )
            {
                bool b = false;
 
                if ( Diary.ContainsKey( subject ) )
                {
                    foreach ( int m in mark )
                    {
                        if ( ( m > 0 ) && ( m <= 100 ) )
                            b = true;
                        else
                        {
                            b = false;
                            return b;
                        }
                    }
                    Diary[ subject ].AddRange( mark );
                }
                return b;
            }
В первом кейсе:
C#
1
2
3
4
5
6
7
8
9
10
Console.Write( "Поставьте оценку (0-100) или несколько оценок, через запятую: " );
                                string[] input = Console.ReadLine().Split( ',' );
                                int[] Marks = new int[ input.Length ];
                                for ( int i = 0; i < input.Length; i++ )
                                    Marks[ i ] = Convert.ToInt32( input[ i ].Trim() );
 
                                if ( stlist[ idx ].PutMark( stlist[ idx ].Subjects[ subj ], Marks ) )
                                    Console.WriteLine( "Оценки добавлены!" );
                                else
                                    Console.WriteLine( "Оценка вне диапазона!" );
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
Введите имя студента: инна
Выбран студент: Инна
<---Добавить оценку--->
Выберите предмет:
1. C#
2. Manual
3. English
4. History
Выбор: 1
Текущие оценки по предмету C#: 10 20
Поставьте оценку (0-100) или несколько оценок, через запятую: 55, 56,57 ,58
Оценки добавлены!
Текущие оценки по предмету C#: 10 20 55 56 57 58
В классе метод добавления одной оценки public bool PutMark( string subject, int mark ) можно удалить. Он не используется.
1
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 175
20.09.2021, 20:00  [ТС]
У меня от мейна плохо стало.

Добавлено через 13 минут
а у меня оно не работает( оценки не добавляет ((

Добавлено через 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
 static void AddMarks(List<Student> stlist, int idx)
        {
            Console.WriteLine("<---Добавить оценку--->");
            Console.WriteLine("Выберите предмет по-номеру и нажмите \"Enter\":");
            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;
            while (true)
            {
                if (int.TryParse(Console.ReadLine(), out subj ) && subj > 0 && subj <= 4) break;
                Console.WriteLine("Ошибка ввода. Выберете опцию от 1 до 4 и нажмите \"Enter\"");
            }
            Console.Write($"Текущие оценки по предмету {stlist[idx].Subjects[subj - 1]}: ");
            foreach (int i in stlist[idx].GetAllMarksForSubject(stlist[idx].Subjects[subj - 1]))
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.WriteLine("Поставьте оценку (0-100) или несколько оценок, через запятую ',' и нажмите \"Enter\": ");
            string[] input = Console.ReadLine().Split(',');
            int[] Marks = new int[input.Length];
            for (int i = 0; i < input.Length; i++)
            {
                Marks[i] = Convert.ToInt32(input[i].Trim());
            }
            if (stlist[idx].PutMark(stlist[idx].Subjects[subj], Marks))
            {
                Console.WriteLine("Оценки добавлены!");
            }
            else
            {
                Console.WriteLine("Оценка вне диапазона!");
            }
            Console.Write($"Текущие оценки по предмету {stlist[idx].Subjects[subj - 1]}: ");
            foreach (int i in stlist[idx].GetAllMarksForSubject(stlist[idx].Subjects[subj - 1]))
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.WriteLine();
        }
Добавлено через 2 минуты
все, нашла))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.09.2021, 20:00

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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