Java (Spring + Swing/JavaFX), Кросс-платформенная система хранения и работы с данными резюме соискателей, осуществляющая парсинг резюме пользователей, передаваемых в json-формате и хранение полученных данных в реляционной БД

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование java
  • 44 44 страницы
  • 13 + 13 источников
  • Добавлена 08.02.2024
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
ВВЕДЕНИЕ 3
1. Постановка задачи 5
2. Описание предметной области 6
3. Актуальность приложения 7
4. Описание программы 8
4.1. Алгоритмические решения 8
4.1.1 Сервер 8
4.1.2 Клиент 9
4.2 Описание интерфейса программы 10
Вход в систему 10
Окно программы 10
4.3 Состав приложения 12
4.3.1 База данных 12
4.3.2 Настройка базы данных 12
4.3.3 Сервер 15
4.3.4 Клиент 16
5. Назначение и состав классов программы 17
5.1 Сервер 17
Пакеты 17
5.2 Клиент 18
Пакеты 18
ЗАКЛЮЧЕНИЕ 20
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 22
ПРИЛОЖЕНИЯ 22
ЛИСТИНГ ПРОГРАММНОГО КОДА 23
Фрагмент для ознакомления

hibernate.boot.Metadata;import org.hibernate.boot.MetadataSources;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;/** * Вспомогательныйкласс, которыйобеспечиваетнастройкуиуправлениесессиями Hibernate.* Класс используется для получения фабрики сессий (SessionFactory) * из Hibernate и создания новых сессий в приложении.*/public class HibernateUtil {private static StandardServiceRegistryregistry; private static SessionFactorysessionFactory;/** * Методпредназначендляработысбазойданных * @return*/public static SessionFactorygetSessionFactory() {if (sessionFactory== null) {try {// Create registryregistry= new StandardServiceRegistryBuilder().configure().build();// Create MetadataSourcesMetadataSources sources = new MetadataSources(registry);// Create MetadataMetadatametadata = sources.getMetadataBuilder().build();// Create SessionFactorysessionFactory= metadata.getSessionFactoryBuilder().build();} catch (Exception e) {e.printStackTrace(); if (registry != null) {StandardServiceRegistryBuilder.destroy(registry);} } }return sessionFactory;}public static void shutdown() {if (registry != null) {StandardServiceRegistryBuilder.destroy(registry);} }}package com.example.ResumeSeacrhServer.hibernate;import jakarta.persistence.*;/** * Класссущности, взаимодействуетстаблицей resumes */@Entity@Table(name = "resumes")public class Resumes {@Id @GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "id")private int id;@Column(name = "city")private String city;@Column(name = "title")private String title;@Column(name = "skills")private String skills;@Column(name = "gender")private String gender;@Column(name = "url", length = 65535, columnDefinition = "TEXT")private String url; public Resumes() {}public Resumes(String city, String title, String skills, String gender, String url) {this.city= city;this.title= title;this.skills= skills;this.gender= gender; this.url = url;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCity() {return city;}public void setCity(String city) {this.city= city;}public String getTitle() {return title;}public void setTitle(String title) {this.title= title;}public String getSkills() {return skills;}public void setSkills(String skills) {this.skills= skills;}public String getGender() {return gender;}public void setGender(String gender) {this.gender= gender;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}}package com.example.ResumeSeacrhServer.hibernate;import jakarta.persistence.*;/** * Класссущности, взаимодействуетстаблицей users */@Entity@Table(name = "users")public class Users {@Id @GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "id")private int id;@Column(name = "login")private String login;@Column(name = "password")private String password; public Users(){}public Users(String login, String password) {this.login= login;this.password= password;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getLogin() {return login;}public void setLogin(String login) {this.login= login;}public String getPassword() {return password;}public void setPassword(String password) {this.password= password;}}package com.example.ResumeSeacrhServer.parsing;import com.example.ResumeSeacrhServer.hibernate.Admins;import com.example.ResumeSeacrhServer.hibernate.HibernateUtil;import com.example.ResumeSeacrhServer.hibernate.Resumes;import com.example.ResumeSeacrhServer.hibernate.Users;import com.google.gson.*;import org.hibernate.Session;import org.hibernate.Transaction;import java.io.FileNotFoundException;import java.io.FileReader;import java.util.ArrayList;import java.util.List;/** * КласспредназначендляпарсингафайловjsonизаписиданныхвБД */public class FileParser {/** * Методзаписываетвмассивспарсенныеданныерезюме * @param resumes Массиввакансий * @throws FileNotFoundException */public void getFileParser(List resumes) throws FileNotFoundException {FileReader reader_1 = new FileReader("src/main/resources/resume_1.json");FileReader reader_2 = new FileReader("src/main/resources/resume_2.json");FileReader reader_3 = new FileReader("src/main/resources/resume_3.json");List readers = new ArrayList<>();readers.add(reader_1);readers.add(reader_2);readers.add(reader_3); for (FileReader reader: readers) {// Преобразуем JSON объектизфайлавJsonElementJsonElement root = JsonParser.parseReader(reader); int length = root.getAsJsonArray().size(); for (int i = 0; i < length; i++) {JsonElementdataObject = root.getAsJsonArray().get(i);JsonObjectresumeObject = dataObject.getAsJsonObject();JsonObject resume = resumeObject.getAsJsonObject("resume");JsonElementareaObject = resume.getAsJsonObject("area");//ГородString city = areaObject.getAsJsonObject().get("name").getAsString();JsonPrimitive title = resume.getAsJsonPrimitive("title");//ДолжностьString titleAsString = title.getAsString();JsonPrimitive skills = null;//НавыкиString skillsAsString; try { skills = resume.getAsJsonPrimitive("skills");skillsAsString = skills.getAsString();} catch (ClassCastException e) {skillsAsString = "Неуказан";}JsonElement gender = resume.getAsJsonObject("gender");//ПолString genderAsString = gender.getAsJsonObject().get("name").getAsString();//СсылканарезюмеJsonPrimitivealternative_url = resume.getAsJsonPrimitive("alternate_url");String alternative_url_getAsString = alternative_url.getAsString();resumes.add(new Resume(city, titleAsString, skillsAsString, genderAsString, alternative_url_getAsString));} } }/** * * @return возвращаетмассивюзеровизБД */public synchronized List getUsers() { Transaction transaction = null;List users = new ArrayList<>(); try (Session session = HibernateUtil.getSessionFactory().openSession()) { users = session.createQuery("from Users", Users.class).list();} catch (Exception e) {if (transaction != null) {transaction.rollback();}e.printStackTrace();}return users;}/** * * @return возвращаетмассивадминовизБД */public synchronized List getAdmins() { Transaction transaction = null;List admins = new ArrayList<>(); try (Session session = HibernateUtil.getSessionFactory().openSession()) { admins = session.createQuery("from Admins", Admins.class).list();} catch (Exception e) {if (transaction != null) {transaction.rollback();}e.printStackTrace();}return admins;}/** * * @return возвращаетмассиврезюмеизБД */public synchronized List getResumes() { Transaction transaction = null;List resumes = new ArrayList<>(); try (Session session = HibernateUtil.getSessionFactory().openSession()) { resumes = session.createQuery("from Resumes", Resumes.class).list();} catch (Exception e) {if (transaction != null) {transaction.rollback();}e.printStackTrace();}return resumes;}/** * МетодочищаеттаблицувБД * @param database задаемназваниетаблицы */public synchronized void truncateTable(String database) { Session session = HibernateUtil.getSessionFactory().openSession();Transaction transaction = null; try { transaction = session.beginTransaction();session.createNativeQuery("truncate table " + database).executeUpdate();transaction.commit();} catch (Exception e) {if (transaction != null) {transaction.rollback();}e.printStackTrace();} finally {session.close();} }/** * Методзаписываетвтаблицу resumes результатыпарсинга * @param resumesDataпередаемрезультатыпарсинга */public synchronized void writeResumes(List resumesData) {//ЧистимтаблицупередзаписьюtruncateTable("resumes");Transaction transaction = null; try (Session session = HibernateUtil.getSessionFactory().openSession()) {// Старттранзакцииtransaction = session.beginTransaction();// ДобавимвБДрезюмеfor (Resume resume: resumesData) { Resumes resumes = new Resumes(resume.getCity(), resume.getTitle(), resume.getSkills(), resume.getGender(), resume.getAlternative_url());session.persist(resumes);}// Коммиттранзакцииtransaction.commit();} catch (Exception e) {if (transaction != null) {transaction.rollback();}e.printStackTrace();} }/** * Методзаписываетвтаблицу resumes отправленныесклиентаданные * @param resumeTempпередаемрезультатыпарсинга */public synchronized void createResumes(ResumeTempresumeTemp) { Transaction transaction = null; try (Session session = HibernateUtil.getSessionFactory().openSession()) {// Старттранзакцииtransaction = session.beginTransaction();// ДобавимвБДрезюмеResumes resumes = new Resumes(resumeTemp.getCity(), resumeTemp.getTitle(), resumeTemp.getSkills(), resumeTemp.getGender(), resumeTemp.getUrl());session.persist(resumes);// Коммиттранзакцииtransaction.commit();} catch (Exception e) {if (transaction != null) {transaction.rollback();}e.printStackTrace();} }}package com.example.ResumeSeacrhServer.parsing;/** * Классхранитданныерезюмесоискателей */public class Resume {private String city; private String title; private String skills; private String gender; private String alternative_url; public Resume(String city, String title, String skills, String gender, String alternative_url) {this.city= city;this.title= title;this.skills= skills;this.gender= gender;this.alternative_url= alternative_url;}public String getCity() {return city;}public void setCity(String city) {this.city= city;}public String getTitle() {return title;}public void setTitle(String title) {this.title= title;}public String getSkills() {return skills;}public void setSkills(String skills) {this.skills= skills;}public String getGender() {return gender;}public void setGender(String gender) {this.gender= gender;}public String getAlternative_url() {return alternative_url;}public void setAlternative_url(String alternative_url) {this.alternative_url= alternative_url;}}package com.example.ResumeSeacrhServer.parsing;/** * Классиспользуетсядляобертки POST сообщенияотклиентаидальнейшейзаписивБД */public class ResumeTemp {public String city; public String title; public String skills; public String gender; public String url; public ResumeTemp(String city, String title, String skills, String gender, String url) {this.city= city;this.title= title;this.skills= skills;this.gender= gender; this.url = url;}public String getCity() {return city;}public void setCity(String city) {this.city= city;}public String getTitle() {return title;}public void setTitle(String title) {this.title= title;}public String getSkills() {return skills;}public void setSkills(String skills) {this.skills= skills;}public String getGender() {return gender;}public void setGender(String gender) {this.gender= gender;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}}package com.example.ResumeSeacrhServer;import com.example.ResumeSeacrhServer.hibernate.Admins;import com.example.ResumeSeacrhServer.hibernate.Resumes;import com.example.ResumeSeacrhServer.hibernate.Users;import com.example.ResumeSeacrhServer.parsing.FileParser;import com.example.ResumeSeacrhServer.parsing.Resume;import com.example.ResumeSeacrhServer.parsing.ResumeTemp;import org.springframework.web.bind.annotation.*;import java.io.FileNotFoundException;import java.util.ArrayList;import java.util.List;/** * Контроллердлявзаимосвязисклиентамипо RESTful */@RestController@RequestMappingpublic class Controller {private FileParserfileParser= new FileParser();@GetMapping("/")public String getMainInfo(){return "Кросс-платформеннаясистемахраненияиработысданнымирезюмесоискателей, осуществляющаяпарсингрезюмепользователей, передаваемыхвjson-форматеихранениеполученныхданныхвреляционнойБД";}@PostMapping("/resumes")ResumeTempsetDBEmployee(@RequestBody ResumeTempresumeTemp) {fileParser.createResumes(resumeTemp); return resumeTemp;}@GetMapping("/getResumes")public List getResumes() throws FileNotFoundException {return fileParser.getResumes();}@GetMapping("/authorized/{login}&{password}")private String getAuthorized(@PathVariable String login, @PathVariable String password) { List users = new ArrayList<>();List admins = new ArrayList<>();admins = fileParser.getAdmins();users = fileParser.getUsers();booleanauthorized = false;booleanauthorized_admins = false; for (Admins admin: admins) {if (admin.getLogin().equals(login) && admin.getPassword().equals(password)) {authorized_admins = true;} else {} }for (Users user: users) {if (user.getLogin().equals(login) && user.getPassword().equals(password)) { authorized = true;} else {} }if (authorized_admins) {return "AUTHORIZED_ADMIN";} else if (authorized) {return "AUTHORIZED";} else {return "UNAUTHORIZED";} }}package com.example.ResumeSeacrhServer;import com.example.ResumeSeacrhServer.parsing.FileParser;import com.example.ResumeSeacrhServer.parsing.Resume;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import java.io.FileNotFoundException;import java.util.ArrayList;import java.util.List;@SpringBootApplicationpublic class ResumeSeacrhServerApplication {public static void main(String[] args) throws FileNotFoundException {SpringApplication.run(ResumeSeacrhServerApplication.class, args);FileParserfileParser = new FileParser();List resumes = new ArrayList<>();fileParser.getFileParser(resumes);fileParser.writeResumes(resumes);}} com.mysql.cj.jdbc.Driver jdbc:mysql://192.168.1.38:3306/resume_search rewoly Marshmellow89 true update

1Прохоренок Н.А, Дронов В.А. HTML, JavaScript, PHP и MySQL Джентльменский набор Web – мастера. Санкт – Петербург, 2015. – 747 с.
2Патрик Нимейер, Дэниэл Леук. Программирование на Java. Исчерпывающее руководство для профессионалов. Пер. с англ. Райтман С.А. Москва, 2014. – 1215 с.
3Прохоренок Н.А, JavaFX. – СПБ.: БХВ-Петербург, 2020. – 768 с.
4C. Gupta, Apache Maven: Beginner's Guide. Packt Publishing, 2014. - 500 с.
5Herbert Schildt, Java: A Beginner's Guide. McGraw-Hill Education, 2014. - 720 с.
6Joshua Bloch, Effective Java. Addison-Wesley Professional, 2017. - 416 с.
7Kathy Sierra and Bert Bates. Head First Java. O’Reilly Media, 2005. - 720 с.
8Brian Goetz, Java Concurrency in Practice. Addison-Wesley Professional, 2006. - 384 с.
9Herbert Schildt, Java: The Complete Reference, McGraw-Hill Education, 2018. - 1312 с.
10Scott Oaks, Java Performance: The Definitive Guide, O'Reilly Media, 2014. - 426 с.
11Paul Deitel and Harvey Deitel, Java: How to Program, Pearson, 2017. - 1232 с.
12Pratik Patel, Java Database Programming with JDBC, O'Reilly Media, 2000. – 300 с.
13Craig Walls, "Spring Boot in Action", Manning Publications, 2016. - 384 с