ТПКС_Лаб5(семестр2)
.docxМИНИСТЕРТСВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ РАДИОЭЛЕКТРОНИКИ
Кафедра КИТАМ
ОТЧЁТ
по лабораторной работе №5
по дисциплине «Технологии программирования компьютерных систем»
Выполнил: Проверил:
ст. гр. АКТСІу-17-1 ассистент каф. КИТАМ
Черкашин В.А. Гурин Д. В.
Харьков 2019
-
БАЗА ДАННЫХ И ИНТЕРФЕЙС ДОСТУПА К НЕЙ
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 Интерфейс программы.