Skip to content

cPhasma/LostFoundUniversity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LostFoundUniversity

Информационная система учёта найденных вещей в университете

Учебный проект по курсу баз данных.
Приложение предназначено для сотрудника бюро находок университета и позволяет вести учёт найденных предметов, обращений владельцев и возврата вещей.

Система учитывает ситуацию, когда несколько человек могут претендовать на один однотипный предмет без явных отличительных признаков, например зарядное устройство, беспроводную мышь или ручку. Для одной найденной вещи можно создать несколько обращений, но одобрить можно только одно из них.


Возможности приложения

Программа позволяет:

  • просматривать список найденных вещей;
  • искать вещи по названию, описанию, категории и месту находки;
  • добавлять найденные вещи;
  • редактировать найденные вещи двойным кликом по строке;
  • добавлять новые категории вещей;
  • добавлять новые места находки;
  • создавать обращения людей за найденной вещью;
  • редактировать обращения двойным кликом по строке;
  • одобрять обращение и отмечать вещь как возвращённую;
  • запрещать повторное одобрение второго обращения по той же вещи;
  • работать с PostgreSQL и Microsoft SQL Server через JDBC;
  • переключать СУБД через файл настроек без изменения Java-кода.

Стек технологий

  • Java 17
  • Swing
  • FlatLaf
  • JDBC
  • Maven
  • PostgreSQL
  • Microsoft SQL Server
  • DBeaver
  • SQL Server Management Studio
  • NetBeans

Структура проекта

LostFoundUniversity/
├── app/
│   └── LostFoundApp/
│       ├── pom.xml
│       └── src/
│           └── main/
│               ├── java/
│               │   └── ru/
│               │       └── lostfound/
│               │           └── MainApp.java
│               └── resources/
│                   └── config.properties.example
│
├── db/
│   ├── postgres/
│   │   ├── 01_create_and_fill_postgres.sql
│   │   └── 03_test_constraints_postgres.sql
│   │
│   └── sqlserver/
│       ├── 01_create_and_fill_sqlserver.sql
│       ├── 02_create_login_sqlserver.sql
│       └── 03_test_constraints_sqlserver.sql
│
├── docs/
│   └── screenshots/
│
├── .gitignore
└── README.md

Таблицы базы данных

В проекте используется 5 связанных таблиц.

Таблица Назначение
employees сотрудники бюро находок
locations места находки
categories категории найденных вещей
found_items найденные вещи
claims обращения людей за найденными вещами

Основные бизнес-правила

  1. Каждая найденная вещь относится к одной категории.
  2. Каждая найденная вещь связана с одним местом находки.
  3. Каждая найденная вещь регистрируется сотрудником.
  4. По одной найденной вещи может быть несколько обращений.
  5. Только одно обращение по одной вещи может иметь статус APPROVED.
  6. После одобрения обращения вещь получает статус RETURNED.
  7. Статус вещи может быть только FOUND, RETURNED или WRITTEN_OFF.
  8. Статус обращения может быть только NEW, APPROVED или REJECTED.

Быстрый запуск через PostgreSQL

Это основной и самый простой вариант запуска проекта на другом компьютере.

1. Установить необходимое ПО

Нужно установить:

  • JDK 17 или новее;
  • Apache Maven;
  • PostgreSQL;
  • DBeaver;
  • NetBeans или другую Java IDE.

2. Создать базу данных PostgreSQL

В DBeaver или pgAdmin создать базу данных:

CREATE DATABASE study_local;

3. Выполнить SQL-скрипт

В DBeaver подключиться к базе study_local и выполнить файл:

db/postgres/01_create_and_fill_postgres.sql

Скрипт создаёт схему:

lost_found

и таблицы:

employees
locations
categories
found_items
claims

Также скрипт добавляет тестовые данные.

4. Настроить файл подключения

В папке:

app/LostFoundApp/src/main/resources

скопировать файл:

config.properties.example

и создать рядом файл:

config.properties

Для PostgreSQL указать:

activeDb=postgres

postgres.url=jdbc:postgresql://localhost:5432/study_local?currentSchema=lost_found
postgres.user=postgres
postgres.password=your_postgres_password

sqlserver.url=jdbc:sqlserver://127.0.0.1:14330;databaseName=LostFoundDB;encrypt=false;trustServerCertificate=true
sqlserver.user=lf_java
sqlserver.password=12345

Вместо your_postgres_password нужно указать свой пароль от PostgreSQL.

5. Запустить приложение

Открыть проект:

app/LostFoundApp

в NetBeans.

Далее выполнить:

Clean and Build
Run

Или через терминал из папки app/LostFoundApp:

mvn clean package
mvn exec:java

Запуск через Microsoft SQL Server

1. Установить необходимое ПО

Нужно установить:

  • Microsoft SQL Server;
  • SQL Server Management Studio;
  • JDK 17 или новее;
  • Maven;
  • NetBeans.

2. Создать базу данных

В SQL Server Management Studio создать базу:

CREATE DATABASE LostFoundDB;

3. Выполнить основной SQL-скрипт

В SSMS открыть и выполнить файл:

db/sqlserver/01_create_and_fill_sqlserver.sql

Скрипт создаёт схему lost_found, таблицы и тестовые данные.

4. Создать пользователя для Java

В SSMS выполнить файл:

db/sqlserver/02_create_login_sqlserver.sql

Скрипт создаёт SQL Server пользователя:

lf_java

Пароль для локального учебного запуска:

12345

5. Настроить TCP/IP порт SQL Server

Открыть SQL Server Configuration Manager.

Перейти:

SQL Server Network Configuration
→ Protocols for MSSQLSERVER02
→ TCP/IP

На вкладке Protocol указать:

Enabled: Yes
Listen All: Yes

На вкладке IP Addresses, в блоке IPAll указать:

TCP Dynamic Ports: пусто
TCP Port: 14330

После этого перезапустить службу:

SQL Server (MSSQLSERVER02)

Проверить порт можно запросом:

SELECT 
    ip_address,
    port,
    type_desc,
    state_desc
FROM sys.dm_tcp_listener_states;

В результате должен отображаться порт:

14330

6. Настроить файл подключения

В файле:

app/LostFoundApp/src/main/resources/config.properties

указать:

activeDb=sqlserver

postgres.url=jdbc:postgresql://localhost:5432/study_local?currentSchema=lost_found
postgres.user=postgres
postgres.password=your_postgres_password

sqlserver.url=jdbc:sqlserver://127.0.0.1:14330;databaseName=LostFoundDB;encrypt=false;trustServerCertificate=true
sqlserver.user=lf_java
sqlserver.password=12345

7. Запустить приложение

В NetBeans:

Clean and Build
Run

При успешном подключении появится сообщение:

Подключение к БД выполнено: sqlserver

Переключение между PostgreSQL и SQL Server

Для переключения СУБД не нужно менять Java-код.
Нужно изменить только параметр activeDb в файле:

app/LostFoundApp/src/main/resources/config.properties

Для PostgreSQL:

activeDb=postgres

Для SQL Server:

activeDb=sqlserver

Работа с приложением

Найденные вещи

На вкладке Найденные вещи можно:

  1. просмотреть все найденные предметы;
  2. выполнить поиск;
  3. добавить новую вещь;
  4. добавить новую категорию;
  5. добавить новое место находки;
  6. выбрать категорию из выпадающего списка;
  7. выбрать место из выпадающего списка;
  8. выбрать сотрудника из выпадающего списка;
  9. открыть редактирование вещи двойным кликом.

Обращения

На вкладке Обращения можно:

  1. просмотреть все обращения;
  2. добавить новое обращение;
  3. выбрать вещь из выпадающего списка;
  4. редактировать обращение двойным кликом;
  5. одобрить выбранное обращение;
  6. проверить запрет второго одобренного обращения по той же вещи.

Форматы даты

В приложении можно вводить дату в разных форматах:

4 мая
04.05.2026
4.05.2026
2026-05-04
04/05/2026

Приложение автоматически преобразует дату в формат, подходящий для сохранения в базе данных.


Проверка ограничений базы данных

PostgreSQL

В DBeaver выполнить файл:

db/postgres/03_test_constraints_postgres.sql

Проверяется:

  • запрет повторяющейся категории;
  • запрет неправильного статуса вещи;
  • проверка внешних ключей;
  • запрет второго обращения со статусом APPROVED по одной вещи.

SQL Server

В SSMS выполнить файл:

db/sqlserver/03_test_constraints_sqlserver.sql

Проверяется та же логика ограничений.


Главное ограничение по замечанию преподавателя

В таблице claims реализовано ограничение:

по одной найденной вещи может быть только одно обращение со статусом APPROVED

При этом обращений по одной вещи может быть несколько.
Это нужно для случаев, когда несколько человек претендуют на похожий предмет без явных отличительных признаков.

Например:

1. Алексеев Никита заявил, что потерял чёрную мышь Logitech.
2. Соколов Артём тоже заявил, что потерял похожую мышь.
3. Сотрудник может одобрить только одно обращение.
4. При попытке одобрить второе обращение база данных выдаст ошибку.

Проверочные SQL-запросы

После запуска приложения данные можно проверить в DBeaver или SSMS.

PostgreSQL

SELECT * FROM lost_found.employees;
SELECT * FROM lost_found.locations;
SELECT * FROM lost_found.categories;
SELECT * FROM lost_found.found_items;
SELECT * FROM lost_found.claims;

SQL Server

SELECT * FROM lost_found.employees;
SELECT * FROM lost_found.locations;
SELECT * FROM lost_found.categories;
SELECT * FROM lost_found.found_items;
SELECT * FROM lost_found.claims;

Сценарий проверки для одногруппника

Для быстрой проверки проекта достаточно PostgreSQL.

  1. Скачать репозиторий.
  2. Открыть проект app/LostFoundApp в NetBeans.
  3. Создать локальную базу PostgreSQL study_local.
  4. Выполнить скрипт:
db/postgres/01_create_and_fill_postgres.sql
  1. Скопировать:
config.properties.example

в:

config.properties
  1. Указать свой пароль PostgreSQL.
  2. Запустить приложение через Clean and Build → Run.
  3. Проверить:
    • список найденных вещей;
    • поиск;
    • добавление вещи;
    • добавление обращения;
    • редактирование двойным кликом;
    • одобрение обращения.

Демонстрация

  1. ER-диаграмму базы данных.
  2. Скрипты PostgreSQL.
  3. Скрипты SQL Server.
  4. Таблицы с тестовыми данными.
  5. Проверку ограничений.
  6. Java-приложение с PostgreSQL.
  7. Java-приложение с SQL Server.
  8. Переключение СУБД через config.properties.
  9. Добавление новой вещи.
  10. Добавление нового места.
  11. Добавление новой категории.
  12. Создание нескольких обращений на одну вещь.
  13. Ошибку при попытке одобрить второе обращение.

Скриншоты

Скриншоты работы проекта находятся в папке:

docs/screenshots

Примеры содержимого:

02_er_diagram_postgres.png
03_postgres_schema_created.png
04_postgres_claims_data.png
09_error_second_approved_claim.png
11_sqlserver_schema_created.png
18_sqlserver_error_second_approved_claim.png
20_java_items_list.png
21_java_search_item.png
22_java_add_item.png

Особенности реализации

  • Приложение реализовано на Java.
  • Интерфейс сделан на Swing.
  • Для современного внешнего вида используется FlatLaf.
  • Работа с базой данных выполняется через JDBC.
  • ORM и фреймворки для работы с БД не используются.
  • Для подключения используется внешний файл config.properties.
  • Реализована поддержка PostgreSQL и Microsoft SQL Server.
  • SQL-скрипты для двух СУБД расположены отдельно.
  • Настоящий файл config.properties не добавляется в репозиторий, чтобы не публиковать локальные пароли.

Автор

Учебный проект по курсу баз данных.
Тема: информационная система учёта найденных вещей в университете.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors