Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 4
1

Определить класс Exam, который имеет три открытых автореализуемых свойства

01.02.2015, 02:03. Показов 5048. Ответов 7
Метки нет (Все метки)

Не могу понять как сделать пункт 3. Помогите, пожалуйста, новичку

1)Определить класс Exam, который имеет три открытых автореализуемых свойства, доступных для чтения и записи:
  • свойство типа string, в котором хранится название предмета
  • свойство типа int, в котором хранится оценка
  • свойство типа System.DateTime для даты экзамена
2) В классе Exam определить:
  • конструктор с параметрами типа string, int и DateTime для инициализации всех свойств класса
  • конструктор без параметров, инициализирующий все свойства класса некоторыми значениями по умолчанию
  • перегруженную(override) версию виртуального метода string ToString() для формирования строки со значениями всех свойств класса


3) В классе Student определить:
  • закрытое поле типа Exam [] для информации об экзаменах, которые сдал студент
  • свойство типа Exam [] для доступа к полю со списком экзаменов
  • метод void AddExams ( params Exam [] ) для добавления элементов в список экзаменов

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
   
class Exam
    {
        public string str_Predmet {get; set;}
        public int int_Ocenka { get; set; }
        public DateTime dt_DExam { get; set; }
 
 
 
        public Exam (string Predmet,int Ocenka, DateTime DExam)
        {
            str_Predmet = Predmet;
            int_Ocenka = Ocenka;
            dt_DExam = DExam;
        }
 
         private Exam ()
        {
            str_Predmet = "Default_Predmet";
            int_Ocenka = 5;
            dt_DExam = new DateTime(2008, 6, 1);
        }
 
         public override string ToString()
         {
             return str_Predmet + " " + int_Ocenka + " " + dt_DExam;
         }
       
    }
 
class Student
    {
 
        private Exam [] infExamStud;
 
       Exam [] f_infExamStud
        {
            get
            {
                return infExamStud;
            }
            set
            {
 
            }
        }
 
       void AddExams(params Exam[] infExamStud)
        {
          
        }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2015, 02:03
Ответы с готовыми решениями:

автореализуемых свойства, доступных для чтения и записи
"автореализуемых свойства, доступных для чтения и записи" - можете объяснить подробно! И...

Создать класс, который имеет параметризованный метод, который рассчитывает, простое ли число
Создать класс, который имеет параметризованный метод, который рассчитывает, простое ли число.

написать макрос,который по произвольному тексту определяет, имеет ли этот текст определенные свойства
Написать макрос, который по произвольному тексту определяет, имеет ли этот текст определенные...

Создать класс вектор, который имеет указатель на double
Создать абстрактный тип данных - класс вектор, который имеет указатель на double, число элементов и...

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
7
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
01.02.2015, 03:13 2
Лучший ответ Сообщение было отмечено Nerviek как решение

Решение

Nerviek,
1. конструкторы можно наследовать, поэтому не надо дублировать (см. ниже)
2. Не надо писать в имя поля его тип - это устарело еще в конце прошлого тысячелетия (я не шучу, уже в конце 90х так мало кто писал )
3. учитесь правильно форматировать строки, а не просто складывать
4. Массив тут использовать не получится, т.к. количество экзаменов может меняться, а массив нужно применять только когда его длина фиксирована.
5. Возвращать метод желательно должен IReadOnlyList, чтобы нельзя было "халтурить" и добавлять такие экзамены, которых студент не сдавал.
6. Последнее по порядку, но далеко не по-важности - именуйте по-английски всё. Все эти Predmet и Ocenka - очень грустно делают


В итоге получаем что-то такое:
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
    public class Exam
    {
        public string Name { get; set; }
        public int Grade { get; set; }
        public DateTime Occured { get; set; }
 
 
        public Exam(string name, int grade, DateTime occured)
        {
            Name = name;
            Grade = grade;
            Occured = occured;
        }
 
        private Exam() : this("Default", 5, new DateTime(2008, 6, 1))
        {}
 
        public override string ToString()
        {
            return string.Format("Student passed an exam {0} for a grade {1}. Occured = {2}", Name, Grade, Occured);
        }
    }
 
    public class Student
    {
        private readonly List<Exam> _passedExams = new List<Exam>();
 
        public IReadOnlyList<Exam> PassedExams
        {
            get { return _passedExams.AsReadOnly();}
        }
 
        public void AddExams(params Exam[] exams)
        {
            _passedExams.AddRange(exams);
        }
    }
1
1 / 1 / 0
Регистрация: 19.12.2013
Сообщений: 193
10.10.2015, 01:34 3
Nerviek, Подскажите пожалуйста как в строку , об экзаменах, которые сдал студент:
----------------------------------------------------------------------------------------------------------------------------------------------
C#
1
2
private List< Exam > _passedExams = new List< Exam >();
//закрытое поле типа Exam [], в котором хранится список экзаменов
----------------------------------------------------------------------------------------------------------------------------------------------
внести конкретные экзамены. Пробовал вот таким образом , не получается :
C#
1
2
3
4
 List< Exam > _passedExams = new List< Exam >();        
        _passedExams.Add("Exam 1");
        _passedExams.Add("Exam 2");
        _passedExams.Add("Exam 3");
0
114 / 114 / 70
Регистрация: 10.11.2013
Сообщений: 446
10.10.2015, 01:50 4
Цитата Сообщение от Владимирл Посмотреть сообщение
внести конкретные экзамены. Пробовал вот таким образом , не получается :
List< Exam > _passedExams = new List< Exam >();
_passedExams.Add("Exam 1");
_passedExams.Add("Exam 2");
_passedExams.Add("Exam 3");
Ну во-первых, нет смысла пересоздавать объект списка, т.к. судя по всем, он создаётся при объявлении.
И вот если этот код
C#
1
2
3
_passedExams.Add("Exam 1");
_passedExams.Add("Exam 2");
_passedExams.Add("Exam 3");
Написать в конструкторе -- всё будет работать.

А если имеется в виду, что поле объекта нужно изменить где-то из вне (метод мэин, скорее всего, в вашем случае). То стоит написат public метод, который будет добавлять определённый экзамен (или сразу params) в ваш лист.
0
1 / 1 / 0
Регистрация: 19.12.2013
Сообщений: 193
10.10.2015, 16:10 5
Anderok, Не знаю как построить свои действия в соответствии с данными пунктами . Теорию читал , разбирал . Отдельные части программы есть представление как делать . А общего представления нет .


Определить класс ResearchTeam , который имеет :

?1 закрытое поле типа Paper*+, в котором хранится список публикаций.
?2 свойство типа Paper*+ для доступа к полю со списком публикаций по теме исследований
В классе ResearchTeam определить :
?3 метод void AddPapers ( params Paper[] ) для добавления элементов в список публикаций;

В методе Main() :
?4 С помощью метода AddPapers (params Paper *+) добавить элементы в список публикаций и вывести данные объекта ResearchTeam.
0
114 / 114 / 70
Регистрация: 10.11.2013
Сообщений: 446
10.10.2015, 18:59 6
Владимирл,
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
class Program
    {
        static void Main(string[] args)
        {
            var student1 = new Student();
            var exam1 = new Exam("Math", 5, DateTime.Now);
            var exam2 = new Exam("Economic", 3, new DateTime(2008, 6, 1));
 
            student1.AddExams(exam1, exam2);
        }
    }
 
    public class Exam
    {
        public string Name { get; private set; }
        public int Grade { get; private set; }
        public DateTime Occured { get; private set; }
 
 
        public Exam(string name, int grade, DateTime occured)
        {
            Name = name;
            Grade = grade;
            Occured = occured;
        }
 
        public Exam()
            : this("Default", 5, new DateTime(2008, 6, 1))
        { }
 
        public override string ToString()
        {
            return string.Format("Student passed an exam {0} for a grade {1}. Occured = {2}", Name, Grade, Occured);
        }
    }
 
    public class Student
    {
        private readonly List<Exam> _passedExams = new List<Exam>();
 
        public List<Exam> PassedExams
        {
            get { return (_passedExams.ToArray().Clone() as Exam[]).ToList(); }
        }
 
        public void AddExams(params Exam[] exams)
        {
            if (exams != null && exams.Any())
            {
                _passedExams.AddRange(exams);
            }
        }
    }
Вот так, например. Я слегка модифицировал код Psilon,
0
1 / 1 / 0
Регистрация: 19.12.2013
Сообщений: 193
11.10.2015, 16:59 7
Anderok, Разбираюсь со строкой : get { return (_passedExams.ToArray().Clone() as Exam[]).ToList(); }
Как-то не очень понятно . Почему Exam[ ] , а не Exam[ ]” имя массива ” ? В книге Т.А. Павловской и в Интернете подобное не нашел .
0
114 / 114 / 70
Регистрация: 10.11.2013
Сообщений: 446
12.10.2015, 03:28 8
Владимирл, вообще говоря, не исключаю, что это плохой код.

...

Писал ответ и понял, что это вообще полный отстой.

Там короче, приведение типа после deep-copy (потому как clone возвращает object). Такой синтаксис.

Вообще правильнее будет реализовать у Exam ICloneable и возвращать new List<Exam>(_passedExams.Select(x => x.Clone()).ToList());
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2015, 03:28

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Проинициализировать класс массивов который имеет конструктор по умолчанию
Или я не знаю как правельно спрасить у гуглы,или это не возможно,кто знает как можно реализовать...

Написать класс, который изменяет свойства компонента DataGridView
У меня на форме размещено 3 пустых компонента DataGridView, хочу создать класс который позволит мне...

Разработать шаблонный класс Deque, который имеет следующие методы:
- addBegin(n) - добавление в начало дека - addEnd(n) - добавление в конец дека - T outBegin() -...

Создать класс который имеет методы для вычисления значений переменных
Народ кто шарит подскажите задачи легкие но проблема что джаву не учила а через 2 дня нужно сдать(...

Создать класс, который имеет метод для исчисления значения функции
Создать класс, который имеет метод для исчисления значения функции f(x)=be^ax^2 в произвольных...

Создать класс, который описывает объект СТУДЕНТ и заполнить его свойства
Ребят, помогите пожалуйста, совсем не разбираюсь, надо создать класс который описывает объект...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.