Вы говорите, что должны написать это приложение? Это домашнее задание?
Похоже, вы страдаете от паралича анализа. В вашей голове слишком много модных слов.
Хватит беспокоиться о шаблонах, а что нет. Разложите проблему на части и начните писать код.
Единственная рекомендация, которую я бы дал, - не допускать ввод-вывод на наши занятия Положите всю логику, которая не имеет ничего общего с взаимодействием с пользователями в базовых классах. Таким образом, они все равно будут работать, если вас попросят создать веб-интерфейс для замены вашей текстовой версии.
Что должно быть проверено? Весь код, который вы думаете, может сломаться.
Наиболее подходящий метод объектно-ориентированного проектирования? Сделайте очевидную вещь: существительные являются потенциальными объектами в вашей постановке задачи, глаголы являются потенциальными методами.
Вот некоторые потенциальные объекты, которые я вижу: студент, курс, ролл.
Вот несколько потенциальных методов: операции CRUD для Студента и Курса; установка оценок и маркировка ученика как неудачного.
Это не так сложно. Думайте «просто» и заставляйте что-то работать, затем улучшайте это.
UPDATE:
Было бы легче ответить вам, если бы вы могли описать, что вы сделали.
Если я думаю, что это проблема с домашней работой, я сомневаюсь, что это будет иметь большое значение. Вместо того, чтобы заставлять нас догадываться, почему бы вам не прочитать SOLID и начать смотреть на созданные вами классы, спросите себя, соответствует ли оно этим принципам.
Patterns? Overrated. Не беспокойся о них.