Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/56: Рейтинг темы: голосов - 56, средняя оценка - 4.75
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448

Создать абстрактный класс Persona с методами, позволяющим вывести на экран информацию о персоне

11.06.2014, 01:26. Показов 11581. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание:
1. Создать абстрактный класс Persona с методами, позволяющим вывести на экран информацию о персоне, а также определить ее возраст (на момент текущей даты).
2. Создать производные классы: Абитуриент (фамилия, дата рождения, факультет), Студент (фамилия, дата рождения, факультет, курс), Преподавать (фамилия, дата рождения, факультет, должность, стаж), со своими методами вывода информации на экран, и определения возраста.
3. Создать базу (массив) из n персон, вывести полную информацию из базы на экран, а также организовать поиск персон, чей возраст попадает в заданный диапазон.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication10
{
    abstract class Persona//основной абстрактный класс
    //  class Persona
    {
        string name;
        int year;
 
        public int YEAR //свойство
        {
            get { return year; }
            set { if (year > 1920 && year < 2000) year = value; }
        }
 
        public string Name//свойство
        {
            get { return name; }
            set { name = value; }
        }
 
        public Persona(string name, int year)//конструктор
        {
            this.name = name;
            this.year = year;
        }
 
        //   int y1 = 2014 - year;
 
 
        public void write_inf()//вывод инфы
        {
            Console.WriteLine("Name: {0}\nAge: {1}-{2} years", name, 2013 - year, 2014 - year);
        }
 
    }
 
    class Entrant : Persona//производный класс "Абитуриент"
    {
        string faculty;
 
        public string Faculty
        {
            get { return faculty; }
            set { if (faculty == "Finance" || faculty == "Programming") faculty = value; }                                                       
        }
 
        public Entrant(string name, int year, string faculty)
            : base(name, year)
        {
            this.faculty = faculty;
        }
 
        public void Cout_Inf()
        {
            base.write_inf();
            Console.WriteLine("Faculty: " + faculty);
        }
    }
 
    class Student : Persona//производный класс "Студент"
    {
        string faculty;
        int kourse;
 
        public string Faculty
        {
            get { return faculty; }
            set { if (faculty == "Finance" || faculty == "Programming") faculty = value; }                              
        }
 
        public int Kourse
        {
            get { return kourse; }
            set { if (kourse > 0 && kourse < 7) kourse = value; }
        }
 
        public Student(string name, int year, string faculty, int kourse)
            : base(name, year)
        {
            this.faculty = faculty;
            this.kourse = kourse;
        }
 
        public void Cout_Inf()
        {
            base.write_inf();
            Console.WriteLine("Faculty: {0}\nKourse: {1}", faculty, kourse);
        }
    }
 
    class Teacher : Persona//производный класс "Преподаватель"
    {
        string faculty;
        int kourse;
 
        public string Faculty
        {
            get { return faculty; }
            set { if (faculty == "Finance" || faculty == "Programming") faculty = value; }                                                                          
        }
 
        public int Kourse
        {
            get { return kourse; }
            set { if (kourse > 0 && kourse < 7) kourse = value; }
        }
 
        public Teacher(string name, int year, string faculty, int kourse)
            : base(name, year)
        {
            this.faculty = faculty;
            this.kourse = kourse;
        }
 
        public void Cout_Inf()
        {
            base.write_inf();
            Console.WriteLine("Faculty: " + faculty);
        }
    }
 
    class Program
    {
        public void CreateClass1();//не важно
        public void CreateClass2();
        public void CreateClass3();
        int[] counter = new int[3] {0,0,0};///создал массив счётчиков для классов(допустим 3 абитуриента,2 студента и 3 приепода {3,2,3})
        static void Main(string[] args)
        {
            /*  Persona p = new Persona("Вася", 1996);
              p.write_inf();
              Ab a = new Ab("Вася", 1996,"Programmability");
              a.Cout_Inf();*/
            Console.Write("Input number of persons: ");//ввод количества классов
            string buf;
            buf = Console.ReadLine();
            int n = int.Parse(buf);
            Console.WriteLine("1-entrant\n2-student\n3-teacher");//"интерфейс" для пользователя
            for (int i = 0; i < n; i++)//создание классов
            {
                Console.Write("Input number of persone: ");
                buf = Console.ReadLine();
                int a = int.Parse(buf);
                switch (a)//в зависимости от а - создаётся класс (на этом этапе застрял)
                {
                    case 1:
                }
            }
        }
        void CreateClass1()//создание класса "Абитуриент"
        {
            Console.Write("Input name of Entrant: ");
            string buf = Console.ReadLine();
            string name = buf;
            Console.Write("Input year of Entrant: ");
            buf = Console.ReadLine();
            int year = int.Parse(buf);
            Console.Write("Input faculty of Entrant: ");
            buf = Console.ReadLine();
            string faculty = buf;
           Entrant abit = new Entrant(name, year, faculty); //не знаю как обьявить имя класса,ибо один и тот самый класс будет перезаписываться
 
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2014, 01:26
Ответы с готовыми решениями:

Создать абстрактный класс Persona с методами, позволяющим вывести на экран информацию о персоне
Помогите пожалуйста=) Задание 5 1) Создать абстрактный класс Persona с методами, позволяющим вывести на экран информацию о персоне, а...

Создать абстрактный класс Persona с методами, позволяющим вывести на экран информацию о персоне
Доброго времени суток! Прошу помочь с решением следующей задачи. Нужно Создать абстрактный класс Persona с методами, позволяющим...

Создать абстрактный класс Persona с методами, позволяющим вывести на экран информацию о персоне, а также определить ее возраст
1. Создать абстрактный класс Persona с методами, позволяющим вывести на экран информацию о персоне, а также определить ее возраст (на...

15
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
11.06.2014, 07:56
Массива классов не бывает. И где вопрос?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.06.2014, 10:16
triadec_96, массив создается так
C#
1
2
3
var persons = new Persona[n];
for(int i = 0; i < persons.Length; i++)
   persons[i] = new Persona("Вася" + i, 1995 + i);
1
17 / 17 / 8
Регистрация: 31.05.2014
Сообщений: 30
11.06.2014, 10:42
triadec_96, судя по этому
Цитата Сообщение от triadec_96 Посмотреть сообщение
//не знаю как обьявить имя класса,ибо один и тот самый класс будет перезаписываться
- Вы не совсем понимаете, что такое классы и объекты. Класс - это шаблон, на основе которого создаются объекты. Каждый объект класса при создании получает свою собственную копию всех нестатических переменных класса. Объекты никак не связаны и ничего друг о друге не знают. И у Вас задание на полиморфизм, почитайте о таких модификаторах как abstract, virtual, override например тут
2
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
11.06.2014, 12:44  [ТС]
Цитата Сообщение от Ray Garraty Посмотреть сообщение
- Вы не совсем понимаете, что такое классы и объекты. Класс - это шаблон, на основе которого создаются объекты. Каждый объект класса при создании получает свою собственную копию всех нестатических переменных класса.
Ну написал в комментариях на быструю руку вместо слова "экземпляр" или "объект" слово "класс" ...
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
11.06.2014, 12:49
Цитата Сообщение от Ray Garraty Посмотреть сообщение
Объекты никак не связаны
да ладно , ну как минимум типом , и всеми статическими полями
1
17 / 17 / 8
Регистрация: 31.05.2014
Сообщений: 30
11.06.2014, 13:39
Metall_Version, да, про никак не связаны, это я загнул че-то

Добавлено через 38 минут
triadec_96, если хотите создавать объект методом, пусть он возвращает этот объект
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
static Persona CreateClass1()//создание класса "Абитуриент"
        {
            Console.Write("Input name of Entrant: ");
            string buf = Console.ReadLine();
            string name = buf;
            Console.Write("Input year of Entrant: ");
            buf = Console.ReadLine();
            int year = int.Parse(buf);
            Console.Write("Input faculty of Entrant: ");
            buf = Console.ReadLine();
            string faculty = buf;
            
            return new Entrant(name, year, faculty);
и дальше в мэин
C#
1
2
List<Persona> persons = new List<Persona>();
persons.Add(CreateClass1());
а вообще я переделал Ваш код под условия задачи
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
abstract class Persona//основной абстрактный класс
    //  class Persona
    {
        string name;
        DateTime birthDay;
 
        public DateTime BirthDay //свойство
        {
            get { return birthDay; }
            set { if (birthDay.Year > 1920 && birthDay.Year < 2000) birthDay = value; }
        }
 
        public string Name//свойство
        {
            get { return name; }
            set { name = value; }
        }
 
        public Persona(string name, DateTime birthDay)//конструктор
        {
            this.name = name;
            this.birthDay = birthDay;
        }
 
        public abstract void write_inf();//вывод инфы
       
 
        public int Age {get{return DateTime.Now.Year - birthDay.Year;}}
        
 
    }
 
    class Entrant : Persona//производный класс "Абитуриент"
    {
        string faculty;
 
        public string Faculty
        {
            get { return faculty; }
            set { if (faculty == "Finance" || faculty == "Programming") faculty = value; }
        }
 
        public Entrant(string name, DateTime birthDay, string faculty)
            : base(name, birthDay)
        {
            this.faculty = faculty;
        }
 
        public override void write_inf()
        {
            Console.WriteLine("name - {0}, age - {1}, faculty - {2}",Name,this.Age,faculty);
        }
    }
 
    class Student : Persona//производный класс "Студент"
    {
        string faculty;
        int kourse;
 
        public string Faculty
        {
            get { return faculty; }
            set { if (faculty == "Finance" || faculty == "Programming") faculty = value; }
        }
 
        public int Kourse
        {
            get { return kourse; }
            set { if (kourse > 0 && kourse < 7) kourse = value; }
        }
 
        public Student(string name, DateTime birthDay, string faculty, int kourse)
            : base(name, birthDay)
        {
            this.faculty = faculty;
            this.kourse = kourse;
        }
 
        public override void write_inf()
        {
            Console.WriteLine("name - {0}, age - {1}, faculty - {2}, kourse - {3}", Name, this.Age, faculty, kourse);
        }
    }
 
    class Teacher : Persona//производный класс "Преподаватель"
    {
        
        public Teacher(string name, DateTime birthDay) : base(name, birthDay){}
        
 
        public override void write_inf()
        {
            Console.WriteLine("name - {0}, age - {1}", Name, this.Age);
        }
    }
 
    class Program
    {
       
        static void Main(string[] args)
        {
            List<Persona> persons = new List<Persona>();
            persons.Add(new Student("Иван",new DateTime(1992,2,23),"Finance",4));
            persons.Add(new Entrant("Петр", new DateTime(1996, 2, 23), "Programming"));
            persons.Add(new Teacher("Василий", new DateTime(1980, 2, 23)));
            foreach (Persona p in persons)
            {
                if (p is Student)
                    Console.Write("Студент ");
                else if (p is Entrant)
                    Console.Write("Абитуриент ");
                else
                    Console.Write("Препод ");
                p.write_inf();
            }
 
            Console.WriteLine("Персоны старше 20 лет ");
 
            foreach (Persona p in persons)
            {
                if(p.Age>20)
                p.write_inf();
            }
 
            Console.ReadLine();
 
        }
      
 
        }
Добавлено через 6 минут
Только преподавателю полей надо добавить
1
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
11.06.2014, 15:33  [ТС]
Цитата Сообщение от Ray Garraty Посмотреть сообщение
а вообще я переделал Ваш код под условия задачи
Благодарю,но пользователь сам должен задавать количество персон и их данные.Ну я переделал свой код до такого вида
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication10
{
    abstract class Persona//основной абстрактный класс
    //  class Persona
    {
        string name;
        int year;
 
        public int YEAR //свойство
        {
            get { return year; }
            set { if (year > 1920 && year < 2000) year = value; }
        }
 
        public string Name//свойство
        {
            get { return name; }
            set { name = value; }
        }
 
        public Persona(string name, int year)//конструктор
        {
            this.name = name;
            this.year = year;
        }
 
        //   int y1 = 2014 - year;
 
 
        public void write_inf()//вывод инфы
        {
            Console.WriteLine("Name: {0}\nAge: {1}-{2} years", name, 2013 - year, 2014 - year);
        }
 
    }
 
    class Entrant : Persona//производный класс "Абитуриент"
    {
        string faculty;
 
        public string Faculty
        {
            get { return faculty; }
            set { if (faculty == "F") faculty = "Finance";
                if( faculty == "P") faculty = "Programming"; }                                                       
        }
 
        public Entrant(string name, int year, string faculty)
            : base(name, year)
        {
            this.faculty = faculty;
        }
 
        public void Cout_Inf()
        {
            Console.WriteLine("\t\tEntrant information");
            base.write_inf();
            Console.WriteLine("Faculty: " + faculty);
        }
    }
 
    class Student : Persona//производный класс "Студент"
    {
        string faculty;
        int kourse;
 
        public string Faculty
        {
            get { return faculty; }
            set
            {
                if (faculty == "F") faculty = "Finance";
                if (faculty == "P") faculty = "Programming";
            }                            
        }
 
        public int Kourse
        {
            get { return kourse; }
            set { if (kourse > 0 && kourse < 7) kourse = value; }
        }
 
        public Student(string name, int year, string faculty, int kourse)
            : base(name, year)
        {
            this.faculty = faculty;
            this.kourse = kourse;
        }
 
        public void Cout_Inf()
        {
            Console.WriteLine("\t\tStudent information");
            base.write_inf();
            Console.WriteLine("Faculty: {0}\nKourse: {1}", faculty, kourse);
        }
    }
 
    class Teacher : Persona//производный класс "Преподаватель"
    {
        string faculty;
        string post;
        int experience;
        public string Faculty
        {
            get { return faculty; }
            set
            {
                if (faculty == "F") faculty = "Finance";
                if (faculty == "P") faculty = "Programming";
            }                                                                          
        }
 
        public int Experience
        {
            get { return experience; }
            set { if (experience > 0 && experience < 70) experience = value; }
        }
 
         public string Post
        {
            get { return post; }
            set { post = value; }                                                                          
        }
 
        public Teacher(string name, int year, string faculty, string post,int experience)
            : base(name, year)
        {
            this.faculty = faculty;
            this.post = post;
            this.experience = experience;
        }
 
        public void Cout_Inf()
        {
            Console.WriteLine("\t\tTeacher information");
            base.write_inf();
            Console.WriteLine("Faculty: {0}\nPost: {1}\nExperience: {2}",faculty,post,experience);
        }
    }
 
    class Program
    {
       /* public void CreateClass1();//не важно
        public void CreateClass2();
        public void CreateClass3();*/
        int[] counter = new int[3] {0,0,0};///создал массив счётчиков для классов(допустим 3 абитуриента,2 студента и 3 приепода {3,2,3})
        static void Main(string[] args)
        {
            /*  Persona p = new Persona("Вася", 1996);
              p.write_inf();
              Ab a = new Ab("Вася", 1996,"Programmability");
              a.Cout_Inf();*/
            Console.Write("Input amount of persons: ");//ввод количества классов
            string buf;
            buf = Console.ReadLine();
            int n = int.Parse(buf);
            var persons = new Persona[n];
 
 
            Console.WriteLine("1-entrant\n2-student\n3-teacher\nF-Finance faculty\nP-Programming faculty");//"интерфейс" для пользователя
            for (int i = 0; i < n; i++)//создание экземпляров
            {
                Console.Write("Input number of persone: ");
                buf = Console.ReadLine();
                int a = int.Parse(buf);
                switch (a)//в зависимости от а - создаётся экземпляр (на этом этапе застрял)
                {
                    case 1:
                        {
                            Console.Write("Input name of Entrant: ");
                            buf = Console.ReadLine();
                            string name = buf;
                            Console.Write("Input year of Entrant: ");
                            buf = Console.ReadLine();
                            int year = int.Parse(buf);
                            Console.Write("Input faculty of Entrant: ");
                            buf = Console.ReadLine();
                            string faculty = buf;
                            persons[i] = new Entrant(name, year,faculty);
                        break;}
                  case 2:
                        {
                            Console.Write("Input name of Student: ");
                            buf = Console.ReadLine();
                            string name = buf;
                            Console.Write("Input year of Student: ");
                            buf = Console.ReadLine();
                            int year = int.Parse(buf);
                            Console.Write("Input faculty of Student: ");
                            buf = Console.ReadLine();
                            string faculty = buf;
                            Console.Write("Input kourse of Student: ");
                            buf = Console.ReadLine();
                            int kourse = int.Parse(buf);
                            persons[i] = new Student(name, year,faculty,kourse);
                        break;}
                         case 3:
                        {
                            Console.Write("Input name of Teacher: ");
                            string name = Console.ReadLine();
                            Console.Write("Input year of Teacher: ");
                            buf = Console.ReadLine();
                            int year = int.Parse(buf);
                            Console.Write("Input faculty of Teacher: ");            
                            string faculty =  Console.ReadLine();
                            Console.Write("Input post of Teacher: ");
                            string post = Console.ReadLine();
                            Console.Write("Input experience of Teacher: ");
                            buf = Console.ReadLine();
                            int experience = int.Parse(buf);
                            persons[i] = new Teacher(name, year,faculty,post,experience);
                        break;}
                    default: {Console.WriteLine("----------------------------------ERROR-----------------------------------"); break;}
                }
            }
            for (int i = 0; i < n; i++)
                persons[i].Cout_Inf();//нельзя вызвать этот метод,ибо идёт доступ до базового класса
            Console.ReadKey();
        }
 
        }
    }
//}
Как бы вызвать методы экземпляров Cout_Inf()?
0
17 / 17 / 8
Регистрация: 31.05.2014
Сообщений: 30
11.06.2014, 15:52
Еще раз говорю, почитайте о полиморфизме. В базовом классе напишите public abstract void Cout_Inf();, в наследниках добавьте override к ней public override void Cout_Inf(){реализация}
1
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
11.06.2014, 17:22  [ТС]
Цитата Сообщение от Ray Garraty Посмотреть сообщение
Еще раз говорю, почитайте о полиморфизме. В базовом классе напишите public abstract void Cout_Inf();, в наследниках добавьте override к ней public override void Cout_Inf(){реализация}
Может лучше public virtual void Cout_Inf();?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
11.06.2014, 17:26
virtual void() если в базовом классе есть какая-либо реализация, а abstract void() -если реализация в базовом не предусмотрена вообще. А в наследниках - override void().
1
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
11.06.2014, 17:42  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
virtual void() если в базовом классе есть какая-либо реализация, а abstract void() -если реализация в базовом не предусмотрена вообще. А в наследниках - override void().
Получился вот такой код
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication10
{
    abstract class Persona//основной абстрактный класс
    //  class Persona
    {
        string name;
        int year;
 
        public int YEAR //свойство
        {
            get { return year; }
            set { if (year > 1920 && year < 2000) year = value; }
        }
 
        public string Name//свойство
        {
            get { return name; }
            set { name = value; }
        }
 
        public Persona(string name, int year)//конструктор
        {
            this.name = name;
            this.year = year;
        }
 
        //   int y1 = 2014 - year;
 
 
        public virtual void Cout_Inf()//вывод инфы
        {
            Console.WriteLine("Name: {0}\nAge: {1}-{2} years", name, 2013 - year, 2014 - year);
        }
 
    }
 
    class Entrant : Persona//производный класс "Абитуриент"
    {
        string faculty;
 
        public string Faculty
        {
            get
            {
                if (faculty == "F") return "Finance";
                if (faculty == "P") return "Programming";
                else return "Unknown";
            }
            set { if (faculty == "F") faculty = "Finance";
                if( faculty == "P") faculty = "Programming"; }                                                       
        }
 
        public Entrant(string name, int year, string faculty)
            : base(name, year)
        {
            this.faculty = faculty;
        }
 
        public override void Cout_Inf()
        {
            Console.WriteLine("\t\tEntrant information");
            base.Cout_Inf();
            Console.WriteLine("Faculty: " + faculty);
        }
    }
 
    class Student : Persona//производный класс "Студент"
    {
        string faculty;
        int kourse;
 
        public string Faculty
        {
            get
            {
                if (faculty == "F") return "Finance";
                if (faculty == "P") return "Programming";
                else return "Unknown";
            }
            set
            {
                if (faculty == "F") faculty = "Finance";
                if (faculty == "P") faculty = "Programming";
            }                            
        }
 
        public int Kourse
        {
            get { return kourse; }
            set { if (kourse > 0 && kourse < 7) kourse = value; }
        }
 
        public Student(string name, int year, string faculty, int kourse)
            : base(name, year)
        {
            this.faculty = faculty;
            this.kourse = kourse;
        }
 
        public override void Cout_Inf()
        {
            Console.WriteLine("\t\tStudent information");
            base.Cout_Inf();
            Console.WriteLine("Faculty: {0}\nKourse: {1}", faculty, kourse);
        }
    }
 
    class Teacher : Persona//производный класс "Преподаватель"
    {
        string faculty;
        string post;
        int experience;
        public string Faculty
        {
            get
            {
                if (faculty == "F") return "Finance";
                if (faculty == "P") return "Programming";
                else return "Unknown";
            }
            set
            {
                if (faculty == "F") faculty = "Finance";
                if (faculty == "P") faculty = "Programming";
            }                                                                          
        }
 
        public int Experience
        {
            get { return experience; }
            set { if (experience > 0 && experience < 70) experience = value; }
        }
 
         public string Post
        {
            get { return post; }
            set { post = value; }                                                                          
        }
 
        public Teacher(string name, int year, string faculty, string post,int experience)
            : base(name, year)
        {
            this.faculty = faculty;
            this.post = post;
            this.experience = experience;
        }
 
        public override void Cout_Inf()
        {
            Console.WriteLine("\t\tTeacher information");
            base.Cout_Inf();
            Console.WriteLine("Faculty: {0}\nPost: {1}\nExperience: {2}",faculty,post,experience);
        }
    }
 
    class Program
    {
       /* public void CreateClass1();//не важно
        public void CreateClass2();
        public void CreateClass3();*/
        int[] counter = new int[3] {0,0,0};///создал массив счётчиков для классов(допустим 3 абитуриента,2 студента и 3 приепода {3,2,3})
        static void Main(string[] args)
        {
            /*  Persona p = new Persona("Вася", 1996);
              p.write_inf();
              Ab a = new Ab("Вася", 1996,"Programmability");
              a.Cout_Inf();*/
            Console.Write("Input amount of persons: ");//ввод количества классов
            string buf;
            buf = Console.ReadLine();
            int n = int.Parse(buf);
            var persons = new Persona[n];
 
 
            Console.WriteLine("1-entrant\n2-student\n3-teacher\nF-Finance faculty\nP-Programming faculty");//"интерфейс" для пользователя
            for (int i = 0; i < n; i++)//создание экземпляров
            {
                Console.Write("Input number of persone: ");
                buf = Console.ReadLine();
                int a = int.Parse(buf);
                switch (a)//в зависимости от а - создаётся экземпляр (на этом этапе застрял)
                {
                    case 1:
                        {
                            Console.Write("Input name of Entrant: ");
                            buf = Console.ReadLine();
                            string name = buf;
                            Console.Write("Input year of Entrant: ");
                            buf = Console.ReadLine();
                            int year = int.Parse(buf);
                            Console.Write("Input faculty of Entrant: ");
                            buf = Console.ReadLine();
                            string faculty = buf;
                            persons[i] = new Entrant(name, year,faculty);
                        break;}
                  case 2:
                        {
                            Console.Write("Input name of Student: ");
                            buf = Console.ReadLine();
                            string name = buf;
                            Console.Write("Input year of Student: ");
                            buf = Console.ReadLine();
                            int year = int.Parse(buf);
                            Console.Write("Input faculty of Student: ");
                            buf = Console.ReadLine();
                            string faculty = buf;
                            Console.Write("Input kourse of Student: ");
                            buf = Console.ReadLine();
                            int kourse = int.Parse(buf);
                            persons[i] = new Student(name, year,faculty,kourse);
                        break;}
                         case 3:
                        {
                            Console.Write("Input name of Teacher: ");
                            string name = Console.ReadLine();
                            Console.Write("Input year of Teacher: ");
                            buf = Console.ReadLine();
                            int year = int.Parse(buf);
                            Console.Write("Input faculty of Teacher: ");            
                            string faculty =  Console.ReadLine();
                            Console.Write("Input post of Teacher: ");
                            string post = Console.ReadLine();
                            Console.Write("Input experience of Teacher: ");
                            buf = Console.ReadLine();
                            int experience = int.Parse(buf);
                            persons[i] = new Teacher(name, year,faculty,post,experience);
                        break;}
                    default: {Console.WriteLine("----------------------------------ERROR-----------------------------------"); break;}
                }
            }
            for (int i = 0; i < n; i++)
                persons[i].Cout_Inf();
            Console.ReadKey();
        }
     
 
        }
    }
Вот не могу понять почему оно выводит название факультета не полностью,а только соответственную букву,которую вводит пользователь. Вроде, свойства правильно прописал.Не могу понять в чём дело.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
11.06.2014, 18:24
triadec_96, не совсем понял, зачем вам какой-то метод переопределять? Используйте имеющийся ToString() и переопределяйте его сколько угодно... Сейчас накидаю пример.

Добавлено через 28 минут
triadec_96, класс Student реализуете сами, думаю тут все понятно. И студента (ятд) лучше наследовать не от персоны, а от абитуриента, у них много общего.
Вот пример. Сортировать потом можно как угодно, к примеру через LINQ.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> personsList = new List<Person>
            {
                new Entrant("Alex",1998,"F"),
                new Teacher("Nick",1950,"P","Director",25),
                new Entrant("Mary",2000,"P")
            };
 
            foreach (Person p in personsList)
                Console.WriteLine(p.ToString());
 
            Console.ReadLine();
        }
    }
    //Абстрактный класс Персона
    public abstract class Person
    {
        private string name;
        private int year;
 
        public Person(string n,int y)
        {
            name = n; year = y;
        }
        public string Name
        {
            get { return name; }
        }
        public int Year
        {
            get
            {
                return year;
            }
            private set
            {
                if (year > 1920 && year < 2000)
                    year = value;
                else
                    throw new ArgumentException("Неверный возраст!");
            }
        }
        public override string ToString()
        {
            return string.Format("Name: {0}, Year: {1}", name, year);
        }
    }
    //Класс Абитуриент
    public class Entrant : Person
    {
        private string faculity;
        public Entrant(string n,int y,string f)
            :base(n,y)
        {
            faculity = f;
        }
        public string Faculity
        {
            get
            {
                switch (faculity)
                {
                    case "F":
                        return "Finance";
                    case "P":
                        return "Programming";
                    default:
                        return "Unknown";
                }
            }
        }
        public override string ToString()
        {
            return string.Format("{0}, Faculity: {1}", base.ToString(), Faculity);
        }
    }
    //public class Student : Entrant
    //{
        
    //}
 
    //Класс Преподаватель
    public class Teacher : Person
    {
        private string faculity;
        private string position;
        private int labour;
 
        public Teacher(string n,int y,string f,string p,int l)
            :base(n,y)
        {
            faculity = f; position = p; labour = l;
        }
        public string Faculity
        {
            get
            {
                switch (faculity)
                {
                    case "F":
                        return "Finance";
                    case "P":
                        return "Programming";
                    default:
                        return "Unknown";
                }
            }
        }
        public string Position
        {
            get { return position; }
        }
        public int Labour
        {
            get { return labour; }
        }
        public override string ToString()
        {
            return string.Format("{0}, Faculity: {1}, Position: {2}, Labour: {3}",
                base.ToString(), Faculity, Position, Labour);
        }
    }
}
1
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
11.06.2014, 18:31
insite2012,
можно просто
C#
1
2
             foreach (Person p in personsList)
                Console.WriteLine(p);
writeline и так использует TOString()
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
11.06.2014, 18:32
Metall_Version, я это знаю. Но сделал так специально для ТС, чтобы было понятнее.
0
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
11.06.2014, 18:33  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Вот пример.
Но я спросил "почему не выводится полное название факультета" в моём коде.А так то можно считать мой код уже почти готовый.Осталось только догадаться где я допустил ошибку с факультетом и сделать поиск возраста по диапазону.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2014, 18:33
Помогаю со студенческими работами здесь

Создать абстрактный класс Издание с методами позволяющим вывести на экран информацию об издании
C# 1) Создать абстрактный класс Издание с методами позволяющим вывести на экран информацию об издании, а также определить, является ли...

Создать абстрактный класс "Издание" с методами позволяющим вывести на экран информацию о нем
Создать абстрактный класс Издание с методами позволяющим вывести на экран информацию об издании, а также определить является ли данное...

Создать абстрактный класс PO с методами, позволяющими вывести на экран информацию о ПО
Задание: Создать абстрактный класс PO с методами, позволяющими вывести на экран информацию о программном обеспечении, а также определить...

Создать абстрактный класс «Avto» с методами позволяющими вывести на экран информацию о транспортном средстве
1. Создать абстрактный класс «Avto» с методами позволяющими вывести на экран информацию о транспортном средстве, а также определить...

Создать абстрактный класс «Avto» с методами позволяющими вывести на экран информацию о транспортном средстве
1. Создать абстрактный класс «Avto» с методами позволяющими вывести на экран информацию о транспортном средстве, а также определить...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru