Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Бібліотека
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Бібліотека» з PostgreSQL: книги, читачі, видачі, DAO і транзакції. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля книги: назва, автор, доступність; видача читачу робить книгу недоступною. Звіт: число видач кожного читача, повторну видачу заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Бібліотека» з PostgreSQL: книги, читачі, видачі, DAO і транзакції. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля книги: назва, автор, доступність; видача читачу робить книгу недоступною. Звіт: число видач кожного читача, повторну видачу заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Бібліотека» на PostgreSQL: книги, читачі, видачі, DAO і транзакції. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля книги: назва, автор, доступність; видача читачу робить книгу недоступною. Звіт: число видач кожного читача, повторну видачу заборонити.
Варіант 2. Інтернет-магазин
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Інтернет-магазин» з PostgreSQL: товари, замовлення, транзакційне оформлення з перевіркою залишків. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля товару: назва, ціна>0, залишок≥0; замовлення зменшує залишок. Звіт: сума замовлень клієнта, нестачу заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Інтернет-магазин» з PostgreSQL: товари, замовлення, транзакційне оформлення з перевіркою залишків. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля товару: назва, ціна>0, залишок≥0; замовлення зменшує залишок. Звіт: сума замовлень клієнта, нестачу заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Інтернет-магазин» на PostgreSQL: товари, замовлення, транзакційне оформлення з перевіркою залишків. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля товару: назва, ціна>0, залишок≥0; замовлення зменшує залишок. Звіт: сума замовлень клієнта, нестачу заборонити.
Варіант 3. Деканат
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Деканат» з PostgreSQL: студенти, групи, оцінки та звіти успішності. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля студента: ПІБ, група; оцінка 0..100 пов’язує студента й дисципліну. Звіт: середній бал групи, дублікат оцінки заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Деканат» з PostgreSQL: студенти, групи, оцінки та звіти успішності. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля студента: ПІБ, група; оцінка 0..100 пов’язує студента й дисципліну. Звіт: середній бал групи, дублікат оцінки заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Деканат» на PostgreSQL: студенти, групи, оцінки та звіти успішності. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля студента: ПІБ, група; оцінка 0..100 пов’язує студента й дисципліну. Звіт: середній бал групи, дублікат оцінки заборонити.
Варіант 4. Автосервіс
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Автосервіс» з PostgreSQL: клієнти, автомобілі, ремонти й вартість робіт. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля авто: номер, модель; ремонт містить послугу, ціну й дату. Звіт: витрати за авто, від’ємну ціну заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Автосервіс» з PostgreSQL: клієнти, автомобілі, ремонти й вартість робіт. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля авто: номер, модель; ремонт містить послугу, ціну й дату. Звіт: витрати за авто, від’ємну ціну заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Автосервіс» на PostgreSQL: клієнти, автомобілі, ремонти й вартість робіт. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля авто: номер, модель; ремонт містить послугу, ціну й дату. Звіт: витрати за авто, від’ємну ціну заборонити.
Варіант 5. Кінотеатр
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Кінотеатр» з PostgreSQL: сеанси, місця, бронювання з транзакціями. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля сеансу: фільм, початок, місткість; квиток займає номер місця. Звіт: продані квитки за сеансом, подвійне місце заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Кінотеатр» з PostgreSQL: сеанси, місця, бронювання з транзакціями. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля сеансу: фільм, початок, місткість; квиток займає номер місця. Звіт: продані квитки за сеансом, подвійне місце заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Кінотеатр» на PostgreSQL: сеанси, місця, бронювання з транзакціями. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля сеансу: фільм, початок, місткість; квиток займає номер місця. Звіт: продані квитки за сеансом, подвійне місце заборонити.
Варіант 6. Поліклініка
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Поліклініка» з PostgreSQL: лікарі, пацієнти, записи на прийом без накладань. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля пацієнта: ім’я, рік народження; запис пов’язує лікаря й час. Звіт: прийоми за лікарем, повторний час заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Поліклініка» з PostgreSQL: лікарі, пацієнти, записи на прийом без накладань. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля пацієнта: ім’я, рік народження; запис пов’язує лікаря й час. Звіт: прийоми за лікарем, повторний час заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Поліклініка» на PostgreSQL: лікарі, пацієнти, записи на прийом без накладань. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля пацієнта: ім’я, рік народження; запис пов’язує лікаря й час. Звіт: прийоми за лікарем, повторний час заборонити.
Варіант 7. Готель
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Готель» з PostgreSQL: номери, бронювання, перевірка перетину дат. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля номера: назва, ціна за добу; бронювання має гостя, заїзд і виїзд. Звіт: сума ночей за номером, перетини заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Готель» з PostgreSQL: номери, бронювання, перевірка перетину дат. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля номера: назва, ціна за добу; бронювання має гостя, заїзд і виїзд. Звіт: сума ночей за номером, перетини заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Готель» на PostgreSQL: номери, бронювання, перевірка перетину дат. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля номера: назва, ціна за добу; бронювання має гостя, заїзд і виїзд. Звіт: сума ночей за номером, перетини заборонити.
Варіант 8. Футбольна ліга
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Футбольна ліга» з PostgreSQL: команди, матчі, турнірна таблиця SQL-запитом. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля команди: назва, місто; матч містить дві різні команди та голи≥0. Звіт: очки 3/1/0 за перемогу/нічию/поразку. Схема: teams(id,name,city), matches(id,date), results(match_id,team_id,goals); матч має рівно два рядки results із різними командами.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Футбольна ліга» з PostgreSQL: команди, матчі, турнірна таблиця SQL-запитом. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля команди: назва, місто; матч містить дві різні команди та голи≥0. Звіт: очки 3/1/0 за перемогу/нічию/поразку. Схема: teams(id,name,city), matches(id,date), results(match_id,team_id,goals); матч має рівно два рядки results із різними командами.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Футбольна ліга» на PostgreSQL: команди, матчі, турнірна таблиця SQL-запитом. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля команди: назва, місто; матч містить дві різні команди та голи≥0. Звіт: очки 3/1/0 за перемогу/нічию/поразку. Схема: teams(id,name,city), matches(id,date), results(match_id,team_id,goals); матч має рівно два рядки results із різними командами. Транзакційно додати matches і два results; збій після першого results не залишає жодної частини нового матчу.
Варіант 9. Складський облік
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Складський облік» з PostgreSQL: надходження, списання, залишки за періодом. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля товару: код, назва, залишок≥0; рух має кількість і напрям. Звіт: залишки за складом, видачу понад залишок заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Складський облік» з PostgreSQL: надходження, списання, залишки за періодом. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля товару: код, назва, залишок≥0; рух має кількість і напрям. Звіт: залишки за складом, видачу понад залишок заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Складський облік» на PostgreSQL: надходження, списання, залишки за періодом. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля товару: код, назва, залишок≥0; рух має кількість і напрям. Звіт: залишки за складом, видачу понад залишок заборонити.
Варіант 10. Авіарейси
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Авіарейси» з PostgreSQL: рейси, пасажири, реєстрація та вільні місця. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля рейсу: номер, виліт, місткість; бронювання має пасажира й місце. Звіт: вільні місця, подвійне бронювання заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Авіарейси» з PostgreSQL: рейси, пасажири, реєстрація та вільні місця. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля рейсу: номер, виліт, місткість; бронювання має пасажира й місце. Звіт: вільні місця, подвійне бронювання заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Авіарейси» на PostgreSQL: рейси, пасажири, реєстрація та вільні місця. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля рейсу: номер, виліт, місткість; бронювання має пасажира й місце. Звіт: вільні місця, подвійне бронювання заборонити.
Варіант 11. Садове товариство
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Садове товариство» з PostgreSQL: ділянки, внески, заборгованості членів. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля ділянки: номер, площа>0; внесок пов’язує власника, рік і суму. Звіт: сплачено за власником, від’ємну суму заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Садове товариство» з PostgreSQL: ділянки, внески, заборгованості членів. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля ділянки: номер, площа>0; внесок пов’язує власника, рік і суму. Звіт: сплачено за власником, від’ємну суму заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Садове товариство» на PostgreSQL: ділянки, внески, заборгованості членів. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля ділянки: номер, площа>0; внесок пов’язує власника, рік і суму. Звіт: сплачено за власником, від’ємну суму заборонити.
Варіант 12. Кулінарна книга
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Кулінарна книга» з PostgreSQL: рецепти, інгредієнти, пошук за продуктами. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля рецепта: назва, порції>0; склад пов’язує інгредієнт і грами>0. Звіт: число інгредієнтів за рецептом, дублікати складу заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Кулінарна книга» з PostgreSQL: рецепти, інгредієнти, пошук за продуктами. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля рецепта: назва, порції>0; склад пов’язує інгредієнт і грами>0. Звіт: число інгредієнтів за рецептом, дублікати складу заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Кулінарна книга» на PostgreSQL: рецепти, інгредієнти, пошук за продуктами. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля рецепта: назва, порції>0; склад пов’язує інгредієнт і грами>0. Звіт: число інгредієнтів за рецептом, дублікати складу заборонити.
Варіант 13. Фітнес-клуб
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Фітнес-клуб» з PostgreSQL: абонементи, відвідування, продовження абонементів. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля клієнта: ім’я; абонемент має початок, кінець і ліміт занять. Звіт: відвідування клієнта, вхід поза строком заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Фітнес-клуб» з PostgreSQL: абонементи, відвідування, продовження абонементів. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля клієнта: ім’я; абонемент має початок, кінець і ліміт занять. Звіт: відвідування клієнта, вхід поза строком заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Фітнес-клуб» на PostgreSQL: абонементи, відвідування, продовження абонементів. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля клієнта: ім’я; абонемент має початок, кінець і ліміт занять. Звіт: відвідування клієнта, вхід поза строком заборонити.
Варіант 14. Музична колекція
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Музична колекція» з PostgreSQL: виконавці, альбоми, треки, тривалість. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля альбому: назва, рік; трек має виконавця та тривалість>0. Звіт: тривалість альбому, порожній альбом дає 0.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Музична колекція» з PostgreSQL: виконавці, альбоми, треки, тривалість. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля альбому: назва, рік; трек має виконавця та тривалість>0. Звіт: тривалість альбому, порожній альбом дає 0.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Музична колекція» на PostgreSQL: виконавці, альбоми, треки, тривалість. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля альбому: назва, рік; трек має виконавця та тривалість>0. Звіт: тривалість альбому, порожній альбом дає 0. Транзакційно створити альбом наявного виконавця та його перший трек: непорожні назви, тривалість>0, унікальна пара виконавець/назва альбому. Збій вставки треку відкочує новий альбом.
Варіант 15. Прокат велосипедів
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Прокат велосипедів» з PostgreSQL: велосипеди, оренди, оплата за часом. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля велосипеда: код, тариф>0; прокат має клієнта та початок/кінець. Звіт: виручка за велосипедом, другий активний прокат заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Прокат велосипедів» з PostgreSQL: велосипеди, оренди, оплата за часом. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля велосипеда: код, тариф>0; прокат має клієнта та початок/кінець. Звіт: виручка за велосипедом, другий активний прокат заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Прокат велосипедів» на PostgreSQL: велосипеди, оренди, оплата за часом. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля велосипеда: код, тариф>0; прокат має клієнта та початок/кінець. Звіт: виручка за велосипедом, другий активний прокат заборонити.
Варіант 16. Агентство нерухомості
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Агентство нерухомості» з PostgreSQL: об’єкти, агенти, угоди й комісії. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля об’єкта: адреса, площа>0, ціна>0; перегляд пов’язує клієнта й дату. Звіт: число переглядів, однаковий запис заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Агентство нерухомості» з PostgreSQL: об’єкти, агенти, угоди й комісії. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля об’єкта: адреса, площа>0, ціна>0; перегляд пов’язує клієнта й дату. Звіт: число переглядів, однаковий запис заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Агентство нерухомості» на PostgreSQL: об’єкти, агенти, угоди й комісії. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля об’єкта: адреса, площа>0, ціна>0; перегляд пов’язує клієнта й дату. Звіт: число переглядів, однаковий запис заборонити.
Варіант 17. Курси підвищення кваліфікації
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Курси підвищення кваліфікації» з PostgreSQL: записи слухачів і сертифікати. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля курсу: назва, місткість>0; реєстрація пов’язує слухача й курс. Звіт: вільні місця, реєстрацію понад місткість заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Курси підвищення кваліфікації» з PostgreSQL: записи слухачів і сертифікати. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля курсу: назва, місткість>0; реєстрація пов’язує слухача й курс. Звіт: вільні місця, реєстрацію понад місткість заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Курси підвищення кваліфікації» на PostgreSQL: записи слухачів і сертифікати. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля курсу: назва, місткість>0; реєстрація пов’язує слухача й курс. Звіт: вільні місця, реєстрацію понад місткість заборонити.
Варіант 18. Ветеринарна клініка
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Ветеринарна клініка» з PostgreSQL: тварини, власники, щеплення й нагадування. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля тварини: ім’я, вид; прийом має власника, дату й вартість≥0. Звіт: витрати власника, невідому тварину відхилити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Ветеринарна клініка» з PostgreSQL: тварини, власники, щеплення й нагадування. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля тварини: ім’я, вид; прийом має власника, дату й вартість≥0. Звіт: витрати власника, невідому тварину відхилити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Ветеринарна клініка» на PostgreSQL: тварини, власники, щеплення й нагадування. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля тварини: ім’я, вид; прийом має власника, дату й вартість≥0. Звіт: витрати власника, невідому тварину відхилити.
Варіант 19. Служба підтримки
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Служба підтримки» з PostgreSQL: заявки, статуси, час реакції. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля заявки: тема, статус new/open/done; призначення містить працівника. Звіт: незакриті заявки працівника, повторне закриття заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Служба підтримки» з PostgreSQL: заявки, статуси, час реакції. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля заявки: тема, статус new/open/done; призначення містить працівника. Звіт: незакриті заявки працівника, повторне закриття заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Служба підтримки» на PostgreSQL: заявки, статуси, час реакції. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля заявки: тема, статус new/open/done; призначення містить працівника. Звіт: незакриті заявки працівника, повторне закриття заборонити.
Варіант 20. Ігрова платформа
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Ігрова платформа» з PostgreSQL: ігри, гравці, досягнення й рейтинги. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля гри: назва, ціна≥0; придбання пов’язує гравця й гру. Звіт: витрати гравця, повторне придбання заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Ігрова платформа» з PostgreSQL: ігри, гравці, досягнення й рейтинги. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля гри: назва, ціна≥0; придбання пов’язує гравця й гру. Звіт: витрати гравця, повторне придбання заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Ігрова платформа» на PostgreSQL: ігри, гравці, досягнення й рейтинги. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля гри: назва, ціна≥0; придбання пов’язує гравця й гру. Звіт: витрати гравця, повторне придбання заборонити.
Варіант 21. Шкільна їдальня
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Шкільна їдальня» з PostgreSQL: меню, замовлення, баланс учнів. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля страви: назва, ціна>0; меню пов’язує дату й доступну кількість. Звіт: вартість замовлень за днем, нестачу порцій заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Шкільна їдальня» з PostgreSQL: меню, замовлення, баланс учнів. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля страви: назва, ціна>0; меню пов’язує дату й доступну кількість. Звіт: вартість замовлень за днем, нестачу порцій заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Шкільна їдальня» на PostgreSQL: меню, замовлення, баланс учнів. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля страви: назва, ціна>0; меню пов’язує дату й доступну кількість. Звіт: вартість замовлень за днем, нестачу порцій заборонити.
Варіант 22. Корпоративний автопарк
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Корпоративний автопарк» з PostgreSQL: автомобілі, водії, рейси, пальне. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля авто: номер, пробіг≥0; поїздка має водія й кілометри>0. Звіт: пробіг водія, запис поїздки збільшує пробіг авто.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Корпоративний автопарк» з PostgreSQL: автомобілі, водії, рейси, пальне. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля авто: номер, пробіг≥0; поїздка має водія й кілометри>0. Звіт: пробіг водія, запис поїздки збільшує пробіг авто.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Корпоративний автопарк» на PostgreSQL: автомобілі, водії, рейси, пальне. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля авто: номер, пробіг≥0; поїздка має водія й кілометри>0. Звіт: пробіг водія, запис поїздки збільшує пробіг авто.
Варіант 23. Наукова конференція
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Наукова конференція» з PostgreSQL: доповіді, секції, реєстрація учасників. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля секції: назва, місткість>0; доповідь має автора й секцію. Звіт: кількість доповідей, перевищення місткості заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Наукова конференція» з PostgreSQL: доповіді, секції, реєстрація учасників. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля секції: назва, місткість>0; доповідь має автора й секцію. Звіт: кількість доповідей, перевищення місткості заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Наукова конференція» на PostgreSQL: доповіді, секції, реєстрація учасників. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля секції: назва, місткість>0; доповідь має автора й секцію. Звіт: кількість доповідей, перевищення місткості заборонити.
Варіант 24. Облік обладнання
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Облік обладнання» з PostgreSQL: інвентар, закріплення за працівниками, списання. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля обладнання: інвентарний код, назва; видача має працівника й дату повернення. Звіт: неповернені позиції, подвійну видачу заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Облік обладнання» з PostgreSQL: інвентар, закріплення за працівниками, списання. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля обладнання: інвентарний код, назва; видача має працівника й дату повернення. Звіт: неповернені позиції, подвійну видачу заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Облік обладнання» на PostgreSQL: інвентар, закріплення за працівниками, списання. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля обладнання: інвентарний код, назва; видача має працівника й дату повернення. Звіт: неповернені позиції, подвійну видачу заборонити.
Варіант 25. Мережа метеостанцій
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Мережа метеостанцій» з PostgreSQL: станції, вимірювання, агреговані звіти. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля станції: назва, місто; вимір має час і температуру -90..60. Звіт: середня температура дня, дубль часу станції заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Мережа метеостанцій» з PostgreSQL: станції, вимірювання, агреговані звіти. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля станції: назва, місто; вимір має час і температуру -90..60. Звіт: середня температура дня, дубль часу станції заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Мережа метеостанцій» на PostgreSQL: станції, вимірювання, агреговані звіти. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля станції: назва, місто; вимір має час і температуру -90..60. Звіт: середня температура дня, дубль часу станції заборонити.
Варіант 26. Туристичне агентство
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Туристичне агентство» з PostgreSQL: тури, клієнти, оплати частинами. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля туру: назва, ціна>0, місткість; бронювання має туриста й місця>0. Звіт: виручка туру, нестачу місць заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Туристичне агентство» з PostgreSQL: тури, клієнти, оплати частинами. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля туру: назва, ціна>0, місткість; бронювання має туриста й місця>0. Звіт: виручка туру, нестачу місць заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Туристичне агентство» на PostgreSQL: тури, клієнти, оплати частинами. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля туру: назва, ціна>0, місткість; бронювання має туриста й місця>0. Звіт: виручка туру, нестачу місць заборонити.
Варіант 27. Аптека
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Аптека» з PostgreSQL: ліки, рецепти, терміни придатності. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля препарату: назва; партія має строк придатності та залишок≥0. Звіт: доступні залишки, продаж простроченої партії заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Аптека» з PostgreSQL: ліки, рецепти, терміни придатності. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля препарату: назва; партія має строк придатності та залишок≥0. Звіт: доступні залишки, продаж простроченої партії заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Аптека» на PostgreSQL: ліки, рецепти, терміни придатності. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля препарату: назва; партія має строк придатності та залишок≥0. Звіт: доступні залишки, продаж простроченої партії заборонити.
Варіант 28. Благодійний фонд
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Благодійний фонд» з PostgreSQL: донори, пожертви, проєкти та звітність. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля кампанії: назва, ціль>0; пожертва має донора й суму>0. Звіт: зібрана сума, запис пожертви оновлює підсумок кампанії.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Благодійний фонд» з PostgreSQL: донори, пожертви, проєкти та звітність. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля кампанії: назва, ціль>0; пожертва має донора й суму>0. Звіт: зібрана сума, запис пожертви оновлює підсумок кампанії.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Благодійний фонд» на PostgreSQL: донори, пожертви, проєкти та звітність. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля кампанії: назва, ціль>0; пожертва має донора й суму>0. Звіт: зібрана сума, запис пожертви оновлює підсумок кампанії.
Варіант 29. Оренда житла
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Оренда житла» з PostgreSQL: оголошення, орендарі, договори. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля житла: адреса, місячна ціна>0; договір має орендаря й інтервал дат. Звіт: сума за договорами, перетин строків житла заборонити. Договори дозволені лише від першого дня місяця до першого дня пізнішого місяця; кінець невключний, сума дорівнює місячній ціні на кількість повних календарних місяців. Інші дати відхилити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Оренда житла» з PostgreSQL: оголошення, орендарі, договори. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля житла: адреса, місячна ціна>0; договір має орендаря й інтервал дат. Звіт: сума за договорами, перетин строків житла заборонити. Договори дозволені лише від першого дня місяця до першого дня пізнішого місяця; кінець невключний, сума дорівнює місячній ціні на кількість повних календарних місяців. Інші дати відхилити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Оренда житла» на PostgreSQL: оголошення, орендарі, договори. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля житла: адреса, місячна ціна>0; договір має орендаря й інтервал дат. Звіт: сума за договорами, перетин строків житла заборонити. Договори дозволені лише від першого дня місяця до першого дня пізнішого місяця; кінець невключний, сума дорівнює місячній ціні на кількість повних календарних місяців. Інші дати відхилити.
Варіант 30. Центр адміністративних послуг
1. Початковий рівень. Створити самостійну консольну Java/JDBC-програму «Центр адміністративних послуг» з PostgreSQL: послуги, талони, статистика обслуговування. Для основної сутності визначити id, назву й одну предметну характеристику. Через меню додавати, переглядати, редагувати та видаляти записи за id; неправильне введення й відсутній id повідомляти явно. Застосувати PreparedStatement і try-with-resources, показати збереження після повторного запуску. Поля послуги: назва, тривалість>0; запис містить заявника, вікно й час. Звіт: записи за днем, одночасний запис у вікно заборонити.
2. Базовий рівень. Створити самостійну консольну Java/JDBC-програму «Центр адміністративних послуг» з PostgreSQL: послуги, талони, статистика обслуговування. Описати три пов’язані таблиці з ключами й обмеженнями, реалізувати DAO та меню введення операцій. Вивести звіт JOIN із групуванням, кількістю або точною сумою за основною сутністю; включити порожні групи, задати порядок. Перевірити дублікати, зовнішні ключі та SQL-подібний текст як звичайне значення. Поля послуги: назва, тривалість>0; запис містить заявника, вікно й час. Звіт: записи за днем, одночасний запис у вікно заборонити.
3. Високий рівень. Створити самостійну Java/JDBC-програму «Центр адміністративних послуг» на PostgreSQL: послуги, талони, статистика обслуговування. Виділити DAO й сервіс транзакційної операції, яка змінює щонайменше дві таблиці; перевірити предметний інваріант і конкурентний конфлікт. Приймати --config=path, --action=add|list|report, --record=field:value,..., --help; без аргументів надати меню. Вивести вирівняний звіт із підсумками, помилки до stderr, коди 0/2/1. Додати JUnit-тести відкату після першої зміни, невідомого ключа, порожньої бази й повторного читання новим з’єднанням; секрети не зберігати в Git. Поля послуги: назва, тривалість>0; запис містить заявника, вікно й час. Звіт: записи за днем, одночасний запис у вікно заборонити.
Порядок виконання та захисту роботи
- Побудувати схему PostgreSQL із ключами й обмеженнями.
- Налаштувати окрему роль, JDBC-драйвер і конфігурацію без секретів у Git.
- Реалізувати DAO, параметризовані запити й предметну транзакцію.
- Перевірити дані новим з’єднанням після commit та rollback.
- Перевірити пустий результат, SQL-подібний текст і порушення ключа.
- Показати звіт тестів та пояснити ізоляцію конкурентного сценарію.