КУРСОВАЯ РАБОТА, ТЕСТЫ, ПДД, ПРАВИЛА ДОРОЖНОГО ДВИЖЕНИЯ, 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, база данных, пояснительная записка к курсовой работе, диаграммы
-