Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
4 / 4 / 0
Регистрация: 26.06.2016
Сообщений: 115

Построить иерархию классов для контрольных мероприятий

16.09.2016, 21:57. Показов 5366. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условие задачи
Построить иерархию классов для контрольных мероприятий, которые включают в себя:

1- Два экзамена, за каждый из которых участник контрольного мероприятия (далее по тексту кандидат) получает целую оценку в диапазоне от 1 до 10. Контрольное мероприятие пройдено успешно, если кандидат набрал сумму, не меньшую, чем заранее заданное значение.

2- Два экзамена, за каждый из которых кандидат получает целую оценку в диапазоне от 1 до 10. Контрольное мероприятие пройдено успешно, если кандидат за каждый экзамен получил оценку, не меньшую, чем заданную.

3-Два экзамена, за каждый из которых кандидат получает целую или половинную оценку в диапазоне от 1 до 10 (1, 1.5, 2, 2.5, … , 9, 9.5, 10), а также один зачет (оценки: сдан и не сдан). Контрольное мероприятие пройдено успешно, если кандидат за каждый экзамен получил оценку, не меньшую, чем заданную, и зачет сдан.

4-Три экзамена. За первых два экзамена кандидат получает целую оценку в диапазоне от 1 до 10. За третий экзамен кандидат получает целую или половинную оценку в диапазоне от 0 до 20. Контрольное мероприятие пройдено успешно, если кандидат набрал сумму, не меньшую, чем заранее заданное значение.

5-Два зачета (оценки: сдан и не сдан) и один экзамен, за который кандидат получает целую оценку в диапазоне от 0 до 100. Контрольное мероприятие пройдено успешно, если кандидат сдал два зачета и получил оценку, не меньшую, чем заданную.

Создать консольное приложение с единственным аргументом командной строки – имя входного файла. Данный файл должен содержать информацию о контрольных мероприятиях, которые проходили кандидаты. В одном файле могут быть данные о контрольных мероприятиях различного типа. Формат входного файла разработать самостоятельно.
В приложении выполнить следующие задания:
– прочитать входной файл;
– создать коллекцию из кандидатов, которые успешно его прошли;
– вывести коллекцию (формат вывода произвольный);
– упорядочить коллекцию по убыванию наибольшей среди всех оценок, полученных кандидатом;
– вывести коллекцию;
– вывести такого кандидата из коллекции, у которого наибольшая оценка больше, чем 15, и она наименьшая среди наибольших оценок других кандидатов (если таких кандидатов больше одного, то вывести любого из них; например, наибольшие оценки кандидатов: 35, 24, 20, 19.5, 17, 16.5, 16.5, 14.5, 12, 10, 9.5, 8, 7; тогда надо вывести любого из кандидатов, у кого наибольшая оценка 16.5).

Требования:
– Использовать объектно-ориентированный подход для описания сущностей предметной области.
– Приложение должно быть консольным. Не использовать графический интерфейс!
– Входной файл текстовый.
– Все исходные данные во входном файле корректные. Если в исходных данных есть ошибка, то результат работы программы может быть любым, в том числе программа может завершиться аварийно.
Предпочтения по выбору языка программирования: 1) Java; 2) C++; 3) другой ООП язык.

Прошу вашей помощи.Интересует не само решение а именно с чего начать или приступить.Не понятно как это все должно выглядить. Т.к. когда прочитал то не понял многого, надеюсь найдутся люди которые смогу подробно объяснить так чтобы можно было реализовать . Заранее спасибо. Просто очень надо кто поможет буду безумно благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.09.2016, 21:57
Ответы с готовыми решениями:

Построить иерархию классов
1. Построить иерархию классов в соответствии с заданием. Задание: Рабочий, кадры, инженер, администрация (задание можно выполнить в...

Иерархию классов для хранения информации
Доброго времени суток Интересует ход решения задачи: Необходимо разработать иерархию классов для хранения информации об выполненных...

Разработать иерархию классов для определения стоимости различных коктейлей
Ребят, срочно нужна помощь. Не пинайте сильно тапками, я новичёк, решил серьезно этим заниматься 3-4 дня назад, вот которую ночь сижу...

11
 Аватар для FatNinja
82 / 82 / 32
Регистрация: 17.02.2016
Сообщений: 226
18.09.2016, 20:00
От вас требуется:
1. Построить объектно-ориентированную иерархию сущностей: экзамен, зачёт, контрольные мероприятия (с 2 экзаменами, с 2 экзаменами и зачётом, с 3 экзаменами, с 1 экзаменом и 2 зачётами).
2. Создать колллекцию мероприятий из файла (гугли паттерн фабрика).
3. Для контрольные мероприятия создать компаратор для сортировки(вок) (или реализовать компарабл-интерфейс)

Я так понимаю, это тестовое задание для курсов epam - немного похожее задание уже проскакивало на этом и других java-форумах раньше: thread939932, thread654252, thread1260309.
1
4 / 4 / 0
Регистрация: 26.06.2016
Сообщений: 115
18.09.2016, 22:22  [ТС]
FatNinja, спасибо большое половину не понял буду гуглить
0
0 / 0 / 0
Регистрация: 18.09.2016
Сообщений: 1
19.09.2016, 19:45
FatNinja, Вопрос, я тоже начинающий, а какой шаблон проектирования лучше использовать при построении данной иерархии? Думаю Стратегия вроде подходит, но уверенности никакой))
0
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 12
06.06.2017, 21:34
Всем здравствуйте. Я хочу попасть на тренинг в epam. Поэтому решаю задачи с предыдущих потоков. Добрался до этой. Чтобы не создавать новой темы спрошу тут. Ниже приведена моя иерархия классов. Остался один вопрос: в каждом мероприятия есть некое значение суммы оценок либо каждой оценки для сравнения. Вот не знаю куда запихнуть это значение. Если в абстрактный класс Event, то для каждого объекта каждого из пяти мероприятий нужно будет вводить свое значение а нужно одно значение для Event1, Event2.....Event5, которое будет едино для всех объектов данного класса. Если в каждом из пяти мероприятий создавать свое статическое поле value и сеттер для него, то получается то что нужно, но будет дублирование кода. Какой есть выход в этом случае или в таких случаях допускается дублирование кода?



Java
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
class Exam {
 
public Exam(double mark) {
this.mark = mark;
}
 
private double mark;
 
public void setMark(double mark) {
this.mark = mark;
}
 
public double getMark() {
return mark;
}
 
}
 
class Test {
 
public Test(boolean r) {
result = r;
}
 
private boolean result;
 
public void setResult(boolean r) {
result = r;
}
 
public boolean getResult() {
return result;
}
 
}
 
abstract class Event {
 
public abstract boolean isPassed();
}
 
class Event1 extends Event {
 
public Event1(double m1, double m2) {
ex1 = new Exam(m1);
ex2 = new Exam(m2);
}
 
private Exam ex1, ex2;
 
@Override
public boolean isPassed() {
return (ex1.getMark() + ex2.getMark()) >= getValue();
}
 
}
Добавлено через 17 минут
Может объяснил немного непонятно чего жду) Попробую написать, что я имел в виду

1-й вариант. У всех мероприятий есть некое установленное значение value. Я засовываю это поле в абстрактный класс Event, затем это поле наследуют Event1,..., Event5. Но в таком случае для каждого кандидата нужно устанавливать свое значение каждый раз. Получается как то так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
abstract class Event {
 
private double value;
 
public void setValue(double v) {
value = v;
}
 
public double getValue() {
return value;
}
 
public abstract boolean isPassed();
}
Можно ли сделать чтобы это значение value было одинаковым для всех экземпляров Event1,...,Event5???

Либо вариант 2. Объявлять статическое поле value в каждом из классов Event1, ...., Event5. Вроде бы все хорошо, но код дублируется

Java
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
class Event1 extends Event {
 
public Event1(double m1, double m2) {
ex1 = new Exam(m1);
ex2 = new Exam(m2);
}
 
private Exam ex1, ex2;
 
private static double value;
 
public static void setValue(double v) {
value = v;
}
 
public static double getValue() {
return value;
}
 
@Override
public boolean isPassed() {
return (ex1.getMark() + ex2.getMark()) >= getValue();
}
 
}
0
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
08.06.2017, 15:30
В классе School создаются несколько объектов Examen, в конструкторах которых указывается верхний лимит оценки и один объект Zachet. Также создается ArrayList из обучающихся типа Applicant.
Java
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
package cyberforumOOP.School;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
 
public class TestSchool {
    public static void main(String[] args) {
        School school = new School(5);
        System.out.println("=======Список курсантов до контрольных мероприятий=======\n");
        school.getAlltApplicants();
        school.controlEvent1();
        school.controlEvent2();
        school.sortApplicant();
        System.out.println("\n=======Список курсантов после контрольных мероприятий 1 и 2 =======\n");
        school.getAlltApplicants();
    }
}
//==========================================
class School {
    private ArrayList<Applicant> kursants;
    private int countKursants;
    private Event exam10 = new Examen(10);
    private Event exam10AndHalf = new Examen(10, true);
    private Event exam20 = new Examen(20);
    private Event zachet = new Zachet();
 
    public School(int countKursants) {
        this.countKursants = countKursants;
        this.kursants = new ArrayList<>();
        createKursants();
    }
 
    public void getAlltApplicants() {
        for (int i = 0; i < this.kursants.size(); i++) {
            System.out.println(this.kursants.get(i));
        }
    }
 
 
    public void sortApplicant() {
        Collections.sort(kursants, new ApplicantComporator());
    }
 
    private void createKursants() {
        for (int i = 0; i < this.countKursants; i++)
            kursants.add(new Applicant("Kursant " + (i + 1)));
    }
 
    private void controlEventTipe1() {
        for (int i = 0; i < this.countKursants; i++)
            exam10.chgangeReitingApplicants(kursants.get(i));
    }
 
    public void controlEvent1() {
        controlEventTipe1();
        controlEventTipe1();
    }
 
    public void controlEvent2() {
        controlEventTipe2();
        controlEventTipe2();
    }
 
    private void controlEventTipe2() {
        for (int i = 0; i < this.countKursants; i++) {
            if (Math.random() > 0.49)
                exam10.chgangeReitingApplicants(kursants.get(i));
            else
                exam10AndHalf.chgangeReitingApplicants(kursants.get(i));
 
            zachet.chgangeReitingApplicants(kursants.get(i));
        }
    }
}
//====================================
class Applicant {
    private String name;
    private double reitingExam;
    private int zaschetCounter;
 
    public Applicant(String name) {
        this.name = name;
    }
 
    public String toString() {
        return this.name+" рейтиг по экзаменам "+this.reitingExam+" и сдано "+this.zaschetCounter+" зачет(в)";
    }
 
    public double getReitingExam() {
        return reitingExam;
    }
 
    public void setReitingExam(double reitingExam) {
        this.reitingExam = reitingExam;
    }
 
    public int getZaschetCounter() {
        return zaschetCounter;
    }
 
    public void chageZaschetCounter() {
        this.zaschetCounter++;
    }
}
//=======================================
 
class ApplicantComporator implements Comparator<Applicant> {
    public int compare(Applicant kursant1, Applicant kursant2){
        double reitingCompare = kursant2.getReitingExam() - kursant1.getReitingExam();
        if (reitingCompare != 0)
            return (int)(reitingCompare*10);
        return 0;
    }
}
//=======================================
 
abstract class Event {
    abstract void chgangeReitingApplicants(Applicant unApplicant);
 
    protected int reitingGenerator(int limit) {
        return (int)(limit*Math.random()) + 1;
    }
}
//======================================
 
class Examen extends Event {
    private int highLimit;
    private boolean half = false;
 
    public Examen(int limit) {
        this.highLimit = limit;
    }
 
    public Examen(int limit, boolean plusHalf) {
        this.highLimit = limit;
        this.half = plusHalf;
    }
 
    void chgangeReitingApplicants(Applicant unApplicant) {
        double newReit = reitingGenerator(this.highLimit);
        if (!this.half) {
            newReit += unApplicant.getReitingExam();
            unApplicant.setReitingExam((int)newReit);
        }
        else {
            newReit += 0.5 + (int)unApplicant.getReitingExam();
            unApplicant.setReitingExam(newReit);
        }
    }
}
//================================
class Zachet extends Event {
    @Override
    protected void chgangeReitingApplicants(Applicant unApplicant) {
        if (Math.random() > 0.6)
            unApplicant.chageZaschetCounter();
    }
}
Результат работы для 5 курсантов
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
=======Список курсантов до контрольных мероприятий=======
 
Kursant 1 рейтиг по экзаменам 0.0 и сдано 0 зачет(в)
Kursant 2 рейтиг по экзаменам 0.0 и сдано 0 зачет(в)
Kursant 3 рейтиг по экзаменам 0.0 и сдано 0 зачет(в)
Kursant 4 рейтиг по экзаменам 0.0 и сдано 0 зачет(в)
Kursant 5 рейтиг по экзаменам 0.0 и сдано 0 зачет(в)
 
=======Список курсантов после контрольных мероприятий 1 и 2 =======
 
Kursant 1 рейтиг по экзаменам 21.0 и сдано 0 зачет(в)
Kursant 3 рейтиг по экзаменам 18.0 и сдано 2 зачет(в)
Kursant 4 рейтиг по экзаменам 17.5 и сдано 0 зачет(в)
Kursant 5 рейтиг по экзаменам 16.0 и сдано 1 зачет(в)
Kursant 2 рейтиг по экзаменам 13.0 и сдано 1 зачет(в)
0
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 12
09.06.2017, 12:11
А можно ли переопределить метод toString под форматированный вывод?
0
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
09.06.2017, 12:15
Да, можно.
0
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 12
09.06.2017, 13:35
А не подскажете как? Что нужно прописывать в строке после rerurn метода toString() чтобы в консоль при выводе на консоль объекта через System.out.println() форматированный текст печатался? Спасибо
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
09.06.2017, 13:40
Цитата Сообщение от ruina Посмотреть сообщение
Что нужно прописывать
это вам решать. Задавайте формат, который вам необходим
1
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
09.06.2017, 13:57
Java
1
2
3
public String toString() {
return String.format("%d",p1);
}
1
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 12
09.06.2017, 14:09
Спасибо большое) все легко
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.06.2017, 14:09
Помогаю со студенческими работами здесь

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

Cоздать иерархию классов
1) Создать абстрактный класс Программное_обеспечение с методами, позволяющими вывести на экран информацию о программном обеспечении, а...

Создать иерархию классов
создать иерархию класса Animal &gt;Cat &gt;Siamskaya Persidskai и определить , общие методы и уникальные методы для каждого класса, Не могу...

Разработать иерархию классов
Помогите пожалуйста, не знаю как сделать 1. Разработать иерархию классов – коктейлей. Коктейль определяется ингредиентами, их...

Создать на Java иерархию классов
Создать на Java иерархию классов -Graph -- Point --- Arc ----Bezier curves -Background Класс Graph должен содержать...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru