Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ТПКС_Лаб5(семестр2)

.docx
Скачиваний:
19
Добавлен:
17.01.2020
Размер:
520.04 Кб
Скачать

МИНИСТЕРТСВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ РАДИОЭЛЕКТРОНИКИ

Кафедра КИТАМ

ОТЧЁТ

по лабораторной работе №5

по дисциплине «Технологии программирования компьютерных систем»

Выполнил: Проверил:

ст. гр. АКТСІу-17-1 ассистент каф. КИТАМ

Черкашин В.А. Гурин Д. В.

Харьков 2019

  1. БАЗА ДАННЫХ И ИНТЕРФЕЙС ДОСТУПА К НЕЙ

5.1 Цель работы: Спроектировать и разработать базу данных с соответствующей структурой (таблицы, связи) согласно выбранной предметной области. Получить практические навыки: анализа предметной области и проектирование на этой основе структуры БД.

4.2 Хoд рaботы

Рисунок 4.1 – Use Case Diagram

Рисунок 4.2 – ER diagram БД

Класс DAOFactory

public class DAOFactory {

private static IDAO dao = null;

public static IDAO getDAOInstance(TypeDAO type) throws ClassNotFoundException, SQLException {

if(type == TypeDAO.MySQL){

if(dao == null){

dao = new MySQLDAO();

}

} return dao;}}

Интерфейс IDAO

package DAO;

public interface IDAO {

public boolean SignIn(String login, String password) throws SQLException;

public void Registration(String login, String password, String email) throws SQLException;

public ArrayList<Book> GetBooksForFirstCategory() throws SQLException;

public ArrayList<Category> getCategoryes() throws SQLException;

public ArrayList<Book> GetBooksForCategory(String param) throws SQLException;

public LendedBook GetIdFromLendedBookByNameAndUser(String nameOfBook, String username ) throws SQLException;

public Book GetIdFromBooks(String nameOfBook) throws SQLException ;

public void InsertIntoLendedBooks (int id, String username) throws SQLException;

public void UpdateLendedBooks (int id) throws SQLException;

public void DeleteLendedBooks (int id , String username) throws SQLException;

}

Класс MySQLDAO

public class MySQLDAO implements IDAO {

private static Connection conn = null;

private static String SignIn = "SELECT id FROM user WHERE login = ? and password = ?";

private static String Auth = "INSERT INTO user (id,login, password, email) VALUES (NULL,?, ?, ?)";

private static String GetBooksForFirstCategory = "SELECT * FROM books WHERE category_id = (SELECT id FROM category ORDER BY name DESC LIMIT 1)";

private static String GetCategoryes = "SELECT name FROM category ORDER BY name DESC";

private static String GetBooksByCategory = "SELECT * FROM books WHERE category_id = (SELECT id FROM category WHERE name = ?)";

private static String GetIdFromLendedBookByNameAndUser = "SELECT id FROM lendedBooks WHERE user_id=(SELECT id FROM user WHERE login = ?) AND books_id = (SELECT id FROM books WHERE name =?)";

private static String GetIdFromBooks = "SELECT id FROM books WHERE name =? ";

private static String InsertIntoLendedBooks = "INSERT INTO lendedBooks (books_id, user_id) VALUES (?, (SELECT id FROM user WHERE login =?)";

private static String UpdateLendedBooks = "UPDATE lendedBooks SET isReadyToReturn=1 WHERE id=?";

private static String DeleteLendedBooks = "DELETE FROM lendedBooks WHERE books_id = ? AND user_id=(SELECT id FROM user WHERE login =?)";

private static String FindBookByName = "SELECT * FROM books WHERE name LIKE ?";

public MySQLDAO() throws ClassNotFoundException,SQLException{

Class.forName("com.mysql.cj.jdbc.Driver");

this.conn = DriverManager.getConnection("jdbc:mysql://localhost/laba4?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "root", "");

}

public boolean SignIn(String login, String password) throws SQLException{

PreparedStatement statement = conn.prepareStatement(SignIn);

statement.setString(1, login);

statement.setString(2, password);

ResultSet rs = statement.executeQuery();

if (rs.next() == false) {

return true;

}

else {

return false;

}

}

public void Registration(String login, String password, String email) throws SQLException{

PreparedStatement statement = conn.prepareStatement(Auth);

statement.setString(1, login);

statement.setString(2, password);

statement.setString(3, email);

statement.executeUpdate();

}

public ArrayList<Book> GetBooksForFirstCategory() throws SQLException{

Statement statement = conn.createStatement();

ResultSet rs = statement.executeQuery(GetBooksForFirstCategory );

ArrayList<Book> books = new ArrayList<>();

while (rs.next()) {

Book book = new Book();

book.setName(rs.getString("name"));

book.setImage(rs.getString("image"));

book.setDescription(rs.getString("description"));

book.setQuantity(rs.getInt("quantity"));

books.add(book);

}

return books;

}

public ArrayList<Category> getCategoryes() throws SQLException{

Statement statement = conn.createStatement();

ResultSet rs = statement.executeQuery(GetCategoryes);

ArrayList<Category> categoryes = new ArrayList<>();

while (rs.next()){

Category category = new Category();

category.setName(rs.getString("name"));

categoryes.add(category);

}

return categoryes;

}

public ArrayList<Book> GetBooksForCategory(String param) throws SQLException {

PreparedStatement statement = conn.prepareStatement(GetBooksByCategory);

statement.setString(1, param);

ResultSet rs = statement.executeQuery();

ArrayList<Book> books = new ArrayList<>();

while (rs.next()) {

Book book = new Book();

book.setName(rs.getString("name"));

book.setImage(rs.getString("image"));

book.setDescription(rs.getString("description"));

book.setQuantity(rs.getInt("quantity"));

books.add(book);

}

return books;

}

public LendedBook GetIdFromLendedBookByNameAndUser(String nameOfBook, String username ) throws SQLException {

PreparedStatement statement = conn.prepareStatement(GetIdFromLendedBookByNameAndUser);

statement.setString(1, nameOfBook);

statement.setString(2, username);

ResultSet rs = statement.executeQuery();

LendedBook lendedBook = new LendedBook();

rs.next();

lendedBook.setId(rs.getInt("id"));

return lendedBook;

}

public Book GetIdFromBooks(String nameOfBook) throws SQLException {

PreparedStatement statement = conn.prepareStatement(GetIdFromBooks);

statement.setString(1, nameOfBook);

ResultSet rs = statement.executeQuery();

Book book = new Book();

rs.next();

book.setId(rs.getInt("id"));

return book;

}

public void InsertIntoLendedBooks (int id, String username) throws SQLException {

PreparedStatement statement = conn.prepareStatement(InsertIntoLendedBooks);

statement.setString(1, id);

statement.setString(2, username);

ResultSet rs = statement.executeUpdate();

}

public void UpdateLendedBooks (int id) throws SQLException {

PreparedStatement statement = conn.prepareStatement(UpdateLendedBooks);

statement.setString(1, id);

ResultSet rs = statement.executeUpdate();

}

public void DeleteLendedBooks (int id , String username) throws SQLException {

PreparedStatement statement = conn.prepareStatement(DeleteLendedBooks);

statement.setString(1, id);

statement.setString(1, username);

ResultSet rs = statement.executeUpdate();

}

}

Перечисление TypeDAO

package DAO;

public enum TypeDAO {

MySQL;

}

package DAO;

Класс Book

public class Book {

private int id;

private String name;

private String description;

private String image;

private int quantity;

private int category_id;

public String getImage() {

return image;

}

public void setImage(String image) {

this.image = image;

}

public int getId() {

return id;

}

public int getCategory_id() {

return category_id;

}

public int getQuantity() {

return quantity;

}

public String getDescription() {

return description;

}

public String getName() {

return name;

}

public void setId(int id) {

this.id = id;

}

public void setCategory_id(int category_id) {

this.category_id = category_id;

}

public void setDescription(String description) {

this.description = description;

}

public void setName(String name) {

this.name = name;

}

public void setQuantity(int quantity) {

this.quantity = quantity;

}

}

package DAO;

public class Category {

private int id;

private String name;

public String getName() {

return name;

}

public int getId() {

return id;

}

public void setName(String name) {

this.name = name;

}

public void setId(int id) {

this.id = id;

}

}

package sample;

import java.io.IOException;

import java.net.URL;

import java.sql.*;

import java.util.ResourceBundle;

import DAO.DAOFactory;

import DAO.IDAO;

import DAO.TypeDAO;

import org.apache.commons.validator.routines.EmailValidator;

import javafx.fxml.FXML;

import javafx.fxml.FXMLLoader;

import javafx.scene.Parent;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.control.PasswordField;

import javafx.scene.control.TextField;

import javafx.scene.layout.AnchorPane;

import javafx.stage.Stage;

public class AuthController {

private IDAO dao = null;

@FXML

private ResourceBundle resources;

@FXML

private URL location;

@FXML

private AnchorPane AuthControler;

@FXML

private TextField loginReg;

@FXML

private PasswordField passwordReg;

@FXML

private Button SingUpReg;

@FXML

private TextField emailReg;

@FXML

private Button AuthBtn;

@FXML

void initialize() {

try {

dao = DAOFactory.getDAOInstance(TypeDAO.MySQL);

}

catch (SQLException e){

e.printStackTrace();

}catch (ClassNotFoundException e){

e.printStackTrace();

}

AuthBtn.setOnAction(actionEvent -> {

try {

Stage stage = (Stage)AuthBtn.getScene().getWindow();

FXMLLoader loader = new FXMLLoader();

loader.setLocation(getClass().getResource("/sample/sample.fxml"));

loader.load();

Parent root = loader.getRoot();

stage.setScene(new Scene(root));

stage.show();

}

catch (IOException e){

e.printStackTrace();

}

});

SingUpReg.setOnAction(actionEvent -> {

boolean isCorrect = true;

String login = loginReg.getText().trim();

String password = passwordReg.getText().trim();

String email = emailReg.getText().trim();

if(login.equals("")){

System.out.println("Поле login не заполнено");

isCorrect = false;

}

if(password.equals("")){

System.out.println("Поле password не заполнено");

isCorrect = false;

}

if(email.equals("")){

System.out.println("Поле email не заполнено");

isCorrect = false;

}else if(!EmailValidator.getInstance().isValid(email)) {

isCorrect = false;

System.out.println("Поле email не валидно");

}

if(isCorrect) {

try {

dao.Registration(login,password,email);

Stage stage = (Stage)SingUpReg.getScene().getWindow();

FXMLLoader loader = new FXMLLoader();

loader.setLocation(getClass().getResource("/sample/sample.fxml"));

loader.load();

Parent root = loader.getRoot();

stage.setScene(new Scene(root));

stage.show();

} catch (SQLException e) {

e.printStackTrace();

} catch (IOException e){

e.printStackTrace();

}

}

});

}

}

package sample;

import java.io.IOException;

import java.net.URL;

import java.sql.*;

import java.util.ResourceBundle;

import DAO.DAOFactory;

import DAO.IDAO;

import DAO.MySQLDAO;

import DAO.TypeDAO;

import javafx.fxml.FXML;

import javafx.fxml.FXMLLoader;

import javafx.scene.Parent;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.control.PasswordField;

import javafx.scene.control.TextField;

import javafx.scene.layout.AnchorPane;

import javafx.stage.Stage;

public class Controller {

private IDAO dao = null;

@FXML

private ResourceBundle resources;

@FXML

private URL location;

@FXML

private AnchorPane Controler;

@FXML

private TextField loginAuth;

@FXML

private PasswordField passwordAuth;

@FXML

private Button SignInBtn;

@FXML

private Button signUpBtn;

@FXML

void initialize() {

try {

dao = DAOFactory.getDAOInstance(TypeDAO.MySQL);

}

catch (SQLException e){

e.printStackTrace();

}catch (ClassNotFoundException e){

e.printStackTrace();

}

signUpBtn.setOnAction(actionEvent -> {

try {

Stage stage = (Stage)signUpBtn.getScene().getWindow();

FXMLLoader loader = new FXMLLoader();

loader.setLocation(getClass().getResource("/sample/signUp.fxml"));

loader.load();

Parent root = loader.getRoot();

stage.setScene(new Scene(root));

stage.show();

}

catch (IOException e){

e.printStackTrace();

}

});

SignInBtn.setOnAction(actionEvent -> {

boolean isCorrect = true;

String login = loginAuth.getText().trim();

String password = passwordAuth.getText().trim();

if (login.equals("")) {

System.out.println("Поле login не заполнено");

isCorrect = false;

}

if (password.equals("")) {

System.out.println("Поле password не заполнено");

isCorrect = false;

}

if (isCorrect) {

try {

if(dao.SignIn(login,password)){

System.out.println("логин или пароль введены неверно");

}else {

Stage stage = (Stage) SignInBtn.getScene().getWindow();

FXMLLoader loader = new FXMLLoader();

loader.setLocation(getClass().getResource("/sample/main.fxml"));

loader.load();

Parent root = loader.getRoot();

mainController ctrl = loader.getController();

ctrl.setLogin(login);

stage.setScene(new Scene(root));

stage.show();

}

} catch (IOException e) {

e.printStackTrace();

} catch (SQLException e){

e.printStackTrace();

}

}

});

}

}

package sample;

import javafx.application.Application;

import javafx.fxml.FXMLLoader;

import javafx.scene.Parent;

import javafx.scene.Scene;

import javafx.stage.Stage;

public class Main extends Application {

@Override

public void start(Stage primaryStage) throws Exception{

Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));

primaryStage.setTitle("Library");

primaryStage.setScene(new Scene(root, 700, 400));

primaryStage.show();

primaryStage.setResizable(false);

}

public static void main(String[] args) {

launch(args);

}

}

ВЫВОДЫ

В ходе лабараторной работы была спроектирована база данных библиотеки. Было разработа приложение на технологии FX, use case диаграмма к этому приложению, а так же ER модель БД.

Рисунок 5.3 Интерфейс программы.