КУРСОВАЯ РАБОТА, ТЕСТЫ, ПДД, ПРАВИЛА ДОРОЖНОГО ДВИЖЕНИЯ, INTELLIJ IDEA, JAVA, THYMELEAF, БАЗА ДАННЫХ, SQL .Данный проект идеально подходит для курсовой работы. В нём используется база данных MySql, она находится в самом проекте. Интерфейс приложения понятный для всех.
Задание
Разработать приложение на Java с использованием базы данных для управления тестами, вопросами, ответами, выполнения тестов и просмотра результатов тестов правил дорожного движения. Программа должна позволять добавлять и изменять тесты ПДД, вопросы и ответы к ним, просматривать их, выполнять тесты, просмратривать результаты тестирования, а также управлять личными данными пользователя и просматривать отчеты о ранее выполненных тестах.
Функционал программы
В приложении есть 2 вида пользователей:
а) Администратор;
б) Пользователь;
Администратор имеет доступ ко всему функционалу, может добавлять и изменять любые данные.
Пользователь имеет возможность выполнения тестов, просмотра результата, а также доступ к просмотру личных данных и изменении их. Может просматривать результаты ранее выполненных тестов.
Функции программы:
а) Авторизация и регистрация;
б) Добавление тестов и вопросов с ответами к ним;
в) Изменение тестов и вопросов с ответами к ним;
г) Просмотр информации о пользователях, тестах и вопросов с ответами к ним;
д) Просмотр результатов тестирования с обозначениями правильных и неправильных ответов;
е) Просмотр результатов ранее выполненных тестов;
ё) Просмотр и изменение личных данных.
Фрагмент программного кода (форма авторизации)
@Controller
@RequestMapping("/admin/tests/{testId}/questions")
@RequiredArgsConstructor
public class AdminQuestionController {
@Autowired
private final TestRepository testRepository;
private final QuestionRepository questionRepository;
@GetMapping("/manage")
public String manageQuestions(@PathVariable Long testId, Model model) {
TestEntity test = testRepository.findById(testId).orElse(null);
if (test == null) {
return "redirect:/admin/dashboard";
}
model.addAttribute("test", test);
return "admin_manage_questions";
}
@PostMapping("/save")
public String saveQuestion(
@PathVariable Long testId,
@RequestParam String questionText,
@RequestParam String answer1,
@RequestParam String answer2,
@RequestParam(required = false) String answer3,
@RequestParam(required = false) String answer4,
@RequestParam Integer correctAnswer,
HttpSession session,
RedirectAttributes redirectAttributes) {
session.removeAttribute("errors");
session.removeAttribute("formData");
Map<String, String> errors = new HashMap<>();
Map<String, String> formData = new HashMap<>();
formData.put("questionText", questionText);
formData.put("answer1", answer1);
formData.put("answer2", answer2);
formData.put("answer3", answer3 != null ? answer3 : "");
formData.put("answer4", answer4 != null ? answer4 : "");
session.setAttribute("formData", formData);
if (questionText == null || questionText.trim().isEmpty()) {
errors.put("questionText", "Текст вопроса обязателен");
}
if (answer1 == null || answer1.trim().isEmpty()) {
errors.put("answer1", "Ответ 1 обязателен");
}
if (answer2 == null || answer2.trim().isEmpty()) {
errors.put("answer2", "Ответ 2 обязателен");
}
if (correctAnswer == null) {
errors.put("correctAnswer", "Укажите правильный ответ");
}
List<Integer> existingAnswers = new ArrayList<>();
if (answer1 != null && !answer1.trim().isEmpty()) existingAnswers.add(1);
if (answer2 != null && !answer2.trim().isEmpty()) existingAnswers.add(2);
if (answer3 != null && !answer3.trim().isEmpty()) existingAnswers.add(3);
if (answer4 != null && !answer4.trim().isEmpty()) existingAnswers.add(4);
if (correctAnswer != null && !existingAnswers.contains(correctAnswer)) {
errors.put("correctAnswer", "Выберите существующий ответ");
}
if (!errors.isEmpty()) {
session.setAttribute("errors", errors);
return "redirect:/admin/tests/" + testId + "/questions/add";
}
TestEntity test = testRepository.findById(testId).orElse(null);
if (test == null) {
return "redirect:/admin/dashboard";
}
Question question = Question.builder()
.text(questionText.trim())
.test(test)
.build();
List<Answer> answers = new ArrayList<>();
addAnswerIfNotEmpty(answer1, 1, correctAnswer, question, answers);
addAnswerIfNotEmpty(answer2, 2, correctAnswer, question, answers);
addAnswerIfNotEmpty(answer3, 3, correctAnswer, question, answers);
addAnswerIfNotEmpty(answer4, 4, correctAnswer, question, answers);
question.setAnswers(answers);
questionRepository.save(question);
session.removeAttribute("formData");
redirectAttributes.addFlashAttribute("success", "Вопрос успешно добавлен");
return "redirect:/admin/tests/" + testId + "/questions/manage";
}
private void addAnswerIfNotEmpty(String text, int number, int correctAnswer, Question question, List<Answer> answers) {
if (text != null && !text.trim().isEmpty()) {
answers.add(Answer.builder()
.text(text.trim())
.correct(number == correctAnswer)
.question(question)
.build());
}
}
Пояснения по запуску программы
Для запуска программы необходимо иметь postgreSQL или другую и выполнить файл pdd_test_db.sql из корня проекта для создания базы даннных, далее в файле application.properties изменить значения в случае другого пути и использования другой базы данных:
Данные для входа администратора создаются вручную в базе данных
Содержание архива
- Исходник программы для InyellijIDEA на языке Java, база данных, пояснительная записка к курсовой работе, диаграммы
Телеграм
-