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

Работа с абстрактным классом и непонимание задания

03.12.2019, 18:48. Показов 1622. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание: Создать абстрактный класс Employee (служащий) с полями, задающими фамилию,должность и год рождения работника (руководителя и подчиненных) и виртуальными методами вывода списка обязанностей и списка подчиненных на экран. На его основе реализовать классы Manager (руководитель проекта), Developer (разработчик) и Junior_programmer (младший программист). Вычислить максимальный и минимальный возраст среди всех работников заданной категории с указанием ФИО и должности работника.
Создать класс Group (группа), содержащий массив/список/параметризованную коллекцию объектов этих классов в динамической памяти. Предусмотреть возможность вывода всех объектов списка и выборки по фамилии с выводом всего дерева подчиненных. Написать демонстрационную программу, в которой будут использоваться все методы классов.
Проблема: Не понимаю что должно быть в классах наследниках если все поля в родителе? Как реализовать вывод подчиненных и поиск минимального и максимального возраста?
Код:
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
using System;
using System.Collections.Generic;
 
namespace Employee
{
    abstract class Employee
    {
       public string LastName;
       public string Position;
       public int Birthday;
 
        public Employee(string lastname, string position, int birthday)
        {
            LastName = lastname;
            Position = position;
            Birthday = birthday;
        }
 
 
        public virtual void Display()
        {
            Console.WriteLine(LastName,Position);
        }
    }
 
    class Manager : Employee
    {
        public Manager(string lastname, string position, int birthday) : base(lastname, position, birthday)
        {
 
        }
    }
 
    class Developer: Employee
    {
 
        string Superior; // руководитель проекта
 
        public Developer(string lastname, string position, int birthday, string superior) : base(lastname,position,birthday)
        {
            Superior = superior;
        }
        public override void Display()
        {
            Console.WriteLine($"{LastName}, {Position}, {Superior}");
        }
 
    }
 
    class Junior_dev : Employee
    {
 
        string Superior; // ментор
 
        public Junior_dev(string lastname, string position, int birthday, string superior, string developer) : base(lastname,position,birthday)
        {
            Superior = developer;
        }
 
    }
 
    class Group
    {
        public List<Employee> list = new List<Employee>();
        public void AddEmployee(Employee empl)
        {
            list.Add(empl);
        }
        public void FindEdition(string lastname)
        {
            foreach (var p in list.FindAll(p => p.LastName ==lastname ))
                p.Display();
            
        }
        public void FindMaxMinOld()
        {
            
        }
 
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Group c = new Group();
            c.AddEmployee(new Manager("Zolotopup","Manager",1990));
            c.AddEmployee(new Manager("Kulikov", "Manager", 1990));
            c.AddEmployee(new Developer("Bobrov", "Developer", 1998, "Kulikov"));
            c.AddEmployee(new Developer("Petrov", "Developer", 1998, "Kulikov"));
            foreach (var p in c.list)
            {
                p.Display();
            }
 
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2019, 18:48
Ответы с готовыми решениями:

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

Магия с абстрактным классом
Предположим, есть абстрактный класс Funk: abstract public class Func Есть класс Funk1, который унаследован от абстрактного класса: ...

Нюансы работы с абстрактным классом
Добрый день. Вот создаю я абстрактный класс и хочу сделать от него производный. Вопрос такой, как и почему лучше сделать: 1)...

3
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
03.12.2019, 21:10
Цитата Сообщение от lorops Посмотреть сообщение
Как реализовать вывод минимального и максимального возраста?
Можно перебирать всех работников в цикле вручную и запоминать делать выборку по возрасту. Но если вам уже можно использовать LINQ, то можно сделать это быстрее (меньше кода).
C#
1
2
3
4
5
6
7
8
9
10
11
12
using System.Linq;
 
public void FindMaxMinOld()
{
    var birthdayOrderList = list.OrderBy(e => e.Birthday);
            
    Console.WriteLine($"Самый младший в команде:");
    birthdayOrderList.Last().Display();
 
    Console.WriteLine($"Самый старший в команде:");
    birthdayOrderList.First().Display();
}
Здесь в коллекции birthdayOrderList находятся сотрудники, отсортированные по возрасту. На первом месте самый старший (самое маленькое число), а в конце списка - самый младший (его год рождения самый большой).
1
0 / 0 / 0
Регистрация: 05.10.2015
Сообщений: 13
04.12.2019, 21:39  [ТС]
Благодаря samana реализовал поиск старшего и младшего сотрудника по должности, но остается проблема с выводом списка подчиненных. Я в наследниках создал переменные Superior для хранения в ней вышестоящего по должности, чтобы искать подчиненных по этому полю. Но в базовом классе я не могу к ним обращаться. А если перенести эту переменную в базовый класс то что тогда должно быть в наследниках? Просьба к разбирающимся людям проверить код на соответствие заданию и растолковать, что должно быть в наследниках.
Обновленный код:
Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Employee
{
    abstract class Employee
    {
       public string LastName;
       public string Position;
       public int Birthday;
 
        public Employee(string lastname, string position, int birthday)
        {
            LastName = lastname;
            Position = position;
            Birthday = birthday;
        }
        public virtual void Display()
        {
            Console.WriteLine(LastName, Position, Birthday);
        }
    }
 
    class Manager : Employee
    {
        public Manager(string lastname, string position, int birthday) : base(lastname, position, birthday)
        {
 
        }
        public override void Display()
        {
            Console.WriteLine($"Фамилия: {LastName} Должность: {Position} Год рождения: {Birthday}");
        }
    }
    class Developer: Employee
    {
        string Superior;
        public Developer(string lastname, string position, int birthday, string superior) : base(lastname,position,birthday)
        {
            Superior = superior;
        }
        public override void Display()
        {
            Console.WriteLine($"Фамилия: {LastName} Должность: {Position} Год рождения: {Birthday} Менеджер: { Superior}");
        }
    }
    class Junior_dev : Employee
    {
        string Superior;
        public Junior_dev(string lastname, string position, int birthday, string superior, string developer) : base(lastname,position,birthday)
        {
            Superior = developer;
        }
        public override void Display()
        {
            Console.WriteLine($"Фамилия: {LastName} Должность: {Position} Год рождения: {Birthday} Ментор: { Superior}");
        }
    }
 
    class Group
    {
        public List<Employee> list = new List<Employee>();
        public void AddEmployee(Employee empl)
        {
            list.Add(empl);
        }
        public void FindMaxMinOldfromPosition(string pos)
        {
            var birthdayOrderList = list.OrderBy(e => e.Birthday).Where(e => e.Position == pos);
 
            Console.WriteLine($"Самый младший в команде:");
            birthdayOrderList.Last().Display();
 
            Console.WriteLine($"Самый старший в команде:");
            birthdayOrderList.First().Display();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Group c = new Group();
            c.AddEmployee(new Manager("Zolotopup","Manager",1990));
            c.AddEmployee(new Manager("Kulikov", "Manager", 1990));
            c.AddEmployee(new Developer("Kryvsha", "Developer", 1998, "Kulikov"));
            c.AddEmployee(new Developer("Petrov", "Developer", 1998, "Kulikov"));
            c.AddEmployee(new Developer("Babanov", "Developer", 1995, "Kulikov"));
            c.AddEmployee(new Developer("Nosov", "Developer", 1994, "Kulikov"));
            foreach (var p in c.list)
            {
                p.Display();
            }
            c.FindMaxMinOldfromPosition("Developer");
        }
    }
}
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
05.12.2019, 20:52
Лично мне задание не совсем понятно, например:
Цитата Сообщение от lorops Посмотреть сообщение
Создать абстрактный класс Employee (служащий) с полями, задающими фамилию,должность и год рождения работника (руководителя и подчиненных) и виртуальными методами вывода списка обязанностей и списка подчиненных на экран.
Зачем в классе Employee поле даты дня рождения его руководителя и подчинённых? Значит в Employee нужно ещё поле списка подчинённых создавать? И списки обязанностей? Получается, что абстрактный класс Employee должен включать это всё, ну хорошо, пусть будет примерно так:
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
public abstract class Employee
{
    public string LastName; // фамилия
    public string Position; // должность
    public int Birthday;    // год рождения
 
    public Employee supervisor = null; // руководитель
    public List<Employee> subordinates = new List<Employee>();  // подчинённые
    public List<string> responsibilities = new List<string>();  // список обязанностей
 
    public Employee(string lastname, string position, int birthday)
    {
        LastName = lastname;
        Position = position;
        Birthday = birthday;
    }
    public virtual void Display()
    {
        Console.WriteLine($"Фамилия: {LastName} Должность: {Position} Год рождения: {Birthday}");
    }
 
    // виртуальный метод вывода списка обязанностей
    public virtual void DisplayResponsibilitiesList()
    {
        if (subordinates.Count != 0)
        {
            Console.WriteLine(string.Join(", ", responsibilities));
        }
    }
 
    // виртуальный метод вывода списка подчинённых
    public virtual void DisplaySubordinates()
    {
        if (subordinates.Count != 0)
        {
            Console.WriteLine(string.Join(", ", subordinates));
        }
    }
}
Но тогда в последующий классах наследниках действительно нечего переопределять.. И остаётся только делать разные выборки по должностям, обязанностям и прочее. Совершенно не знаю как подсказать, так как задание какое-то не чёткое (для меня).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.12.2019, 20:52
Помогаю со студенческими работами здесь

"Cannot implicitly convert type DbSet to ObjectSet" при попытке сконектить класс с абстрактным классом
Полный код ошибки: Cannot implicitly convert type 'System.Data.Entity.DbSet&lt;ktn.Models.Interactive&gt;' to...

Работа с абстрактным классом
По заданию должен быть один абстрактный-базовый класс и несколько наследников С абстрактными классами раньше не работал, и поэтому...

Работа с абстрактным классом
Доброго времени суток! Имеется небольшой класс: #include &lt;irrlicht.h&gt; class EngineInit { public: IrrlichtDevice* device...

Работа с абстрактным классом, считывание данных
Здравствуйте, уважаемые форумчане! Пишу программу по следующему заданию: Создать класс Изготовитель cо следующими полями: -...

Полиморфизм с абстрактным классом
Добрий день, нуждаюсь в помощи. У меня есть абстрактный класс IStudent_Manip и производный класс Student_Manipulator. Хочу сделать...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru