Аналог базы данных в объектах

99
22 июня 2021, 19:40

Дали задание написать консольное приложение, база студентов, не используя баз данных, а только объекты для хранения. В чем суть задания.Пользователь должен ввести сначала институт, далее кафедры, потом предметы. Причем институт один, а кафедры естественно несколько, так же и не сколько предметов ну это логично в принципе. И далее идет регистрация студента водится его ФИО идет выбор института кафедры. Институтов в приложении может быть не сколько, так как считается что мы пишем для университета. И далее будет выбор заполнение баллов для студента (поиск будет изначально при выборе института, кафедры, группы, потом поиск по фИО).

Приблизительное меню
0.Добавить институт
1.Добавить студента
3.Заполнение баллов
4.Изменить данные студента(ред. баллов, может группы)
5.Вывести весь список
select 0
Ведите институт : 
а
Ведите кафедры : 
в
Exit ? y 
в
Exit ? y 
Ведите предметы :
в
Exit ? y 
в
Exit ? y 
select 1
Выберите институт : 
1 - a
2 - какой то другой
1
Выберите кафедру : 
1 - и
2 - какой то другой
2
Ведите группу  : 
179
Ведите ФИО : Иван И.И.
select 5 (пример списка)
Институт компьютерной науки | Кафедра системного анализа
Группа - 134
ФИО         Высшая математика  Программирование  
Иванов и.и.         80               75
Институт компьютерной науки | Кафедра системных наук
Группа - 144
ФИО         Высшая математика  Программирование  
Иванов и.и.         80               75

Вот в основном в чем заключается вопрос, как мне связать институт кафедры и предметы.

Думал сделать массив объектов

Inst[] inst = new Inst[100];
Pulpit[] pul = new Pulpit[100];
Subjects[] sub = new Subjects[100];

Но как мне их связать, может я совсем не так представляю архитектуру приложение. Прошу помочь.

Думал делать так записать в массив обьектов Inst[] inst, массив обьектов Pulpit[] pul = new Pulpit[100]; и так далее но понимаю это совсем не верно.

Answer 1

Хоть в задании указано не использовать базы данных - советую все таки хотя бы поверхностно их работу изучить. За последние 50 лет в работе реляционных баз данных ничего кардинально не менялось, вряд ли вы придумаете что-то новое =) С нереляционными чуть поинтереснее история, но все равно вероятность, что вы изобретете вместо велосипеда ионный двигатель весьма мала

Суть в том, что вам следует использовать логику бд. Если говорим про реляционные бд - для каждого класса объектов заводим некий id, который уникален в рамках класса. То есть среди всех предметов нет двух, у которых id совпадает. Нет двух факультетов, у которых id совпадает и т.п. Теперь чтобы указать, что предмет А есть на факультете Б, то

  1. если предмет может быть только в одном факультете, то просто в описании предмета делаем поле dep_id, в котором указывается id нужного факультета
  2. если предмет может быть на нескольких факультетах, то создаем мапу, в которой храним пары id факультета-id предмета

Альтернативный вариант, а-ля нереляционные бд. создается объект класса институт. Внутри него создается поле, содержащие список объектов класса факультет. Внутри каждого факультета создается поле, содержащее список предметов и т.д. Но с таким подходом возникают сложности в поддержании консистентности в случае дублирования.

Можете комбинировать подходы. И никогда, ни при каких обстоятельствах, ни в коем случае, ни за что, вообще никогда не используйте массивы фиксированной длины, когда эта длина не фиксирована. ArrayList вам в помощь

READ ALSO
Анимация прогресс-бара

Анимация прогресс-бара

Я пытаюсь сделать анимацию прогресс-бара https://codepenio/mihail-kamahin/pen/YzKZjWd Я хочу сделать так, чтобы из одной точки круга анимация начиналась сразу...

104
Последовательное выполнение задач

Последовательное выполнение задач

Есть две Gulp задачиКогда я пытаюсь ввести предвыполнение pug:data перед pug, выполняется только pug:data

77
Как это называется в JS?

Как это называется в JS?

с JS знаком очень мало, в основном пытался что нибудь делать на JQКак это реализовать

116