Учебный проект по курсу баз данных.
Приложение предназначено для сотрудника бюро находок университета и позволяет вести учёт найденных предметов, обращений владельцев и возврата вещей.
Система учитывает ситуацию, когда несколько человек могут претендовать на один однотипный предмет без явных отличительных признаков, например зарядное устройство, беспроводную мышь или ручку. Для одной найденной вещи можно создать несколько обращений, но одобрить можно только одно из них.
Программа позволяет:
- просматривать список найденных вещей;
- искать вещи по названию, описанию, категории и месту находки;
- добавлять найденные вещи;
- редактировать найденные вещи двойным кликом по строке;
- добавлять новые категории вещей;
- добавлять новые места находки;
- создавать обращения людей за найденной вещью;
- редактировать обращения двойным кликом по строке;
- одобрять обращение и отмечать вещь как возвращённую;
- запрещать повторное одобрение второго обращения по той же вещи;
- работать с 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 |
обращения людей за найденными вещами |
- Каждая найденная вещь относится к одной категории.
- Каждая найденная вещь связана с одним местом находки.
- Каждая найденная вещь регистрируется сотрудником.
- По одной найденной вещи может быть несколько обращений.
- Только одно обращение по одной вещи может иметь статус
APPROVED. - После одобрения обращения вещь получает статус
RETURNED. - Статус вещи может быть только
FOUND,RETURNEDилиWRITTEN_OFF. - Статус обращения может быть только
NEW,APPROVEDилиREJECTED.
Это основной и самый простой вариант запуска проекта на другом компьютере.
Нужно установить:
- JDK 17 или новее;
- Apache Maven;
- PostgreSQL;
- DBeaver;
- NetBeans или другую Java IDE.
В DBeaver или pgAdmin создать базу данных:
CREATE DATABASE study_local;В DBeaver подключиться к базе study_local и выполнить файл:
db/postgres/01_create_and_fill_postgres.sql
Скрипт создаёт схему:
lost_found
и таблицы:
employees
locations
categories
found_items
claims
Также скрипт добавляет тестовые данные.
В папке:
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.
Открыть проект:
app/LostFoundApp
в NetBeans.
Далее выполнить:
Clean and Build
Run
Или через терминал из папки app/LostFoundApp:
mvn clean package
mvn exec:javaНужно установить:
- Microsoft SQL Server;
- SQL Server Management Studio;
- JDK 17 или новее;
- Maven;
- NetBeans.
В SQL Server Management Studio создать базу:
CREATE DATABASE LostFoundDB;В SSMS открыть и выполнить файл:
db/sqlserver/01_create_and_fill_sqlserver.sql
Скрипт создаёт схему lost_found, таблицы и тестовые данные.
В SSMS выполнить файл:
db/sqlserver/02_create_login_sqlserver.sql
Скрипт создаёт SQL Server пользователя:
lf_java
Пароль для локального учебного запуска:
12345
Открыть 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
В файле:
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В NetBeans:
Clean and Build
Run
При успешном подключении появится сообщение:
Подключение к БД выполнено: sqlserver
Для переключения СУБД не нужно менять Java-код.
Нужно изменить только параметр activeDb в файле:
app/LostFoundApp/src/main/resources/config.properties
Для PostgreSQL:
activeDb=postgresДля SQL Server:
activeDb=sqlserverНа вкладке Найденные вещи можно:
- просмотреть все найденные предметы;
- выполнить поиск;
- добавить новую вещь;
- добавить новую категорию;
- добавить новое место находки;
- выбрать категорию из выпадающего списка;
- выбрать место из выпадающего списка;
- выбрать сотрудника из выпадающего списка;
- открыть редактирование вещи двойным кликом.
На вкладке Обращения можно:
- просмотреть все обращения;
- добавить новое обращение;
- выбрать вещь из выпадающего списка;
- редактировать обращение двойным кликом;
- одобрить выбранное обращение;
- проверить запрет второго одобренного обращения по той же вещи.
В приложении можно вводить дату в разных форматах:
4 мая
04.05.2026
4.05.2026
2026-05-04
04/05/2026
Приложение автоматически преобразует дату в формат, подходящий для сохранения в базе данных.
В DBeaver выполнить файл:
db/postgres/03_test_constraints_postgres.sql
Проверяется:
- запрет повторяющейся категории;
- запрет неправильного статуса вещи;
- проверка внешних ключей;
- запрет второго обращения со статусом
APPROVEDпо одной вещи.
В SSMS выполнить файл:
db/sqlserver/03_test_constraints_sqlserver.sql
Проверяется та же логика ограничений.
В таблице claims реализовано ограничение:
по одной найденной вещи может быть только одно обращение со статусом APPROVED
При этом обращений по одной вещи может быть несколько.
Это нужно для случаев, когда несколько человек претендуют на похожий предмет без явных отличительных признаков.
Например:
1. Алексеев Никита заявил, что потерял чёрную мышь Logitech.
2. Соколов Артём тоже заявил, что потерял похожую мышь.
3. Сотрудник может одобрить только одно обращение.
4. При попытке одобрить второе обращение база данных выдаст ошибку.
После запуска приложения данные можно проверить в DBeaver или SSMS.
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;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.
- Скачать репозиторий.
- Открыть проект
app/LostFoundAppв NetBeans. - Создать локальную базу PostgreSQL
study_local. - Выполнить скрипт:
db/postgres/01_create_and_fill_postgres.sql
- Скопировать:
config.properties.example
в:
config.properties
- Указать свой пароль PostgreSQL.
- Запустить приложение через
Clean and Build → Run. - Проверить:
- список найденных вещей;
- поиск;
- добавление вещи;
- добавление обращения;
- редактирование двойным кликом;
- одобрение обращения.
- ER-диаграмму базы данных.
- Скрипты PostgreSQL.
- Скрипты SQL Server.
- Таблицы с тестовыми данными.
- Проверку ограничений.
- Java-приложение с PostgreSQL.
- Java-приложение с SQL Server.
- Переключение СУБД через
config.properties. - Добавление новой вещи.
- Добавление нового места.
- Добавление новой категории.
- Создание нескольких обращений на одну вещь.
- Ошибку при попытке одобрить второе обращение.
Скриншоты работы проекта находятся в папке:
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не добавляется в репозиторий, чтобы не публиковать локальные пароли.
Учебный проект по курсу баз данных.
Тема: информационная система учёта найденных вещей в университете.