Тема: cтворення програмного проекта простої бази даних «Учні» з даними про прізвище, ім'я, вік та успішність, забезпечення виведення даних про учнів за зазначиними критеріями мовою С++.
Мета уроку:
Учні повинні знати:
Учні повинні мати уявлення про типи моделей БД.
Учні повинні уміти програмувати: створення, редагування, маніпуляції із основними об'єктами бази даних.
Тип уроку: засвоєння нових знань.
Вид уроку: практична робота.
Обладнання: комп'ютери зі встановаленими ОС і середовищем програмування CodeBlocks.
Структура уроку
Основні функції системи керування базами даних:
Модель даних — це система правил, згідно з якими створюють структуру даних, здійснюють доступ до даних та змінюють їх.
Основні типи баз даних:
Опишемо побудову реляційної бази даних з однією таблицею (реляцією) та алгоритм створення програми для керування цією базою. Ця програма повинна надавати доступ до даних з бази, додавати нові дані до неї та вилучати їх, упорядковувати та фільтрувати дані.
Визначити структуру бази даних. База може бути дуже простою — лише з однією таблицею, яка міститиме такі дані про учнів з відповідними назвами полів і типами даних:
Опис такої структури має код. Тут застосовано тип list для подання таблиці, бо його простіше використовувати зі змінною кількістю записів у масиві, і не знадобляться додаткові можливості, що надає тип vector.
Описати головну функцію main, що буде запитувати у користвача, що він бажає зробити і передавати контроль виконання відповідним функціям, які буде описано пізніше. Спочатку код міститиме лише виведення нагадування: «TODO …» про те, що код у відповідному місці ще потрібно до писати.
Передбачити завантаження даних з файлу формату csv. Цей формат підтримують табличні процесори Microsoft Excel та LibreOffice, хоча його можна редагувати у середовищі найпростішого текстового редактора. Кожному рядку таблиці відповідає один рядок файлу csv. Комірки таблиці в рядку розділяють комою чи крапкою з комою. Домовимося використовувати саме крапку з комою. Додамо функції завантаження та збереження даних у файл. При завантаженні даних з файлу використано спеціальний клас istringstream, що дозволяє змінну рядкового типу перетворити на потік, і читати з неї так, як ніби вона була файлом чи даними, введеними користувачем. Перед читанням замінено усі входження символа крапки з комою на ознаки кінця рядка. Таким чином дані комірки відповідатимуть окремому рядку. І їх можна буде зчитувати викликом функції getline.
Описати функцію збереження даних у файл — проходження по всім записам списку й запис їх у файлу.
Щоб впевнитися, що дані дійсно завантажено, потрібно мати функцію виведення списку учнів. Виводити інформацію про учня скоріше за все доведеться і в інших місцях програми. Тому зручно записати це окремою функцією.
Якщо тепер до файлу pupils.csv записати декілька рядків з тестовими даними, можна пересвідчитися, що програма працює:
Базу даних завантажено. Введіть дію: * quit - вихід * list — перегляд та пошук учнів * add — додавання та редагування учнів * del — вилучення учнів Дія: list - Ім'я: Олексій Олексієнко Дата народження: 2000-08-20 Середній бал: 5 - Ім'я: Василь Василенко Дата народження: 1999-01-23 Середній бал: 4 - Ім'я: Сергій Сергієнко Дата народження: 1999-04-02 Середній бал: 4 - Ім'я: Петро Петренко Дата народження: 1999-03-15 Середній бал: 3 - Ім'я: Андрій Андрієнко Дата народження: 2000-11-09 Середній бал: 5 - Ім'я: Максим Максименко Дата народження: 2000-10-30 Середній бал: 4
— записи при виведенні йдуть у тому самому порядку, в якому їх записано у файлі.
Надати можливість упорядкування списку за вказаним полем з використанням стандартної (вбудованої) функції sort. Програма не знає, як порівнювати між собою змінні типу pupil, тому потрібно надати функції порівняння цих змінних (compare_lname, compare_fname, compare_bd i compare_grade у поданому коді). Після цього у програмі можна визначити, наприклад, хто з учнів у базі молодший, а хто старший:
Дія: list Сортувати за [fname, lname, bd, grade]: bd - Ім'я: Василь Василенко Дата народження: 1999-01-23 Середній бал: 4 - Ім'я: Петро Петренко Дата народження: 1999-03-15 Середній бал: 3 - Ім'я: Сергій Сергієнко Дата народження: 1999-04-02 Середній бал: 4 - Ім'я: Олексій Олексієнко Дата народження: 2000-08-20 Середній бал: 5 - Ім'я: Максим Максименко Дата народження: 2000-10-30 Середній бал: 4 - Ім'я: Андрій Андрієнко Дата народження: 2000-11-09 Середній бал: 5
Надати можливість додати учнів до бази: зчитування введених даних, заповнення полів нової структури, і потім додавання її до кінця списку, з метою отримати щось скоже на таке:
Дія: add Введіть ім'я: Юрій Введіть прізвище: Юрченко Введіть дату народження: 1998-06-11 Введіть середній бал: 5 Введіть дію: * quit - вихід * list — перегляд та пошук учнів * add — додавання та редагування учнів * del — вилучення учнів Дія: list Сортувати за [fname, lname, bd, grade]: - Ім'я: Андрій Андрієнко Дата народження: 2000-11-09 Середній бал: 5 - Ім'я: Василь Василенко Дата народження: 1999-01-23 Середній бал: 4 - Ім'я: Максим Максименко Дата народження: 2000-10-30 Середній бал: 4 - Ім'я: Олексій Олексієнко Дата народження: 2000-08-20 Середній бал: 5 - Ім'я: Петро Петренко Дата народження: 1999-03-15 Середній бал: 3 - Ім'я: Сергій Сергієнко Дата народження: 1999-04-02 Середній бал: 4 - Ім'я: Юрій Юрченко Дата народження: 1998-06-11 Середній бал: 5
Уникнути помилкового повторного введення даних щодо одного й того самого учня: перевірити наявність збігу і запропонувати користувачу відредагувати запис. Для цього нам доведеться перетворити нашу змінну (new_record) на вказівник, бо в одному випадку ми працюватимемо з новою структурою, а в іншому — з уже наявною у списку. Відповідно, нам також доведеться явно створити нову копію структури pupil, а також прибрати її, якщо вона стане непотрібною (для цього потрібно використати відповідні ключові слова new та delete). Також буде правильно дозволити користувачу залишити те значення, яке там вже й було для поля, яке він не хоче редагувати. Наприклад, таким чином.
Реалізувати функцію вилучення учнів: аналогічно до виконання add, потрібно знайти (у циклі) відповідний запис у списку і при пітвердженні користувача вилучити запис з бази (списку) за допомогою метода erase. Власне, такий код програми, який потрібно перевірити:
Дія: add Введіть ім'я: Юрій Введіть прізвище: Юрченко Знайдено учня з таким іменем: - Ім'я: Юрій Юрченко Дата народження: 1998-06-11 Середній бал: 4 Відредагувати? (y або n): y Введіть дату народження (1998-06-11): Введіть середній бал (4): 5 Введіть дію: * quit - вихід * list — перегляд та пошук учнів * add — додавання та редагування учнів * del — вилучення учнів Дія: list Сортувати за [fname, lname, bd, grade]: - Ім'я: Андрій Андрієнко Дата народження: 2000-11-09 Середній бал: 5 - Ім'я: Василь Василенко Дата народження: 1999-01-23 Середній бал: 4 - Ім'я: Максим Максименко Дата народження: 2000-10-30 Середній бал: 4 - Ім'я: Олексій Олексієнко Дата народження: 2000-08-20 Середній бал: 5 - Ім'я: Петро Петренко Дата народження: 1999-03-15 Середній бал: 3 - Ім'я: Сергій Сергієнко Дата народження: 1999-04-02 Середній бал: 4 - Ім'я: Юрій Юрченко Дата народження: 1998-06-11 Середній бал: 5 Дія: del Введіть ім'я: Юрій Введіть прізвище: Юрченко Знайдено учня з таким іменем: - Ім'я: Юрій Юрченко Дата народження: 1998-06-11 Середній бал: 5 Вилучити? (y або n): y Введіть дію: * quit - вихід * list — перегляд та пошук учнів * add — додавання та редагування учнів * del — вилучення учнів Дія: list Сортувати за [fname, lname, bd, grade]: - Ім'я: Андрій Андрієнко Дата народження: 2000-11-09 Середній бал: 5 - Ім'я: Василь Василенко Дата народження: 1999-01-23 Середній бал: 4 - Ім'я: Максим Максименко Дата народження: 2000-10-30 Середній бал: 4 - Ім'я: Олексій Олексієнко Дата народження: 2000-08-20 Середній бал: 5 - Ім'я: Петро Петренко Дата народження: 1999-03-15 Середній бал: 3 - Ім'я: Сергій Сергієнко Дата народження: 1999-04-02 Середній бал: 4
Додати до програми функцію фільтрування списку за вказаним користувачем критерієм. Це можна зробити різними способами. Найпростіший і найелегантніший з них вимагає використання анонімних функцій, які ми не вивчали. Цей спосіб — для тих, хто хоче отримати додаткові 12 балів за домашню роботу.
При створенні програми можна починати з будь-якого етапу запропонованого коду програми або написати повністю свою програму. Можна підглядати у демонстраційне розв'язання, але спочатку потрібно спробувати зробити це самостійно.
4. Інструктаж з ТБ
5. Вироблення практичних навичок
Завдання. В середовищі CodeBlocks створити програму з роботи з базою даних з мінімальним використанням демонстраційного розв'язання, у якому у коментарях після знаку дієз # вказано номер відповідного кроку створення програми, що відповідає коду до наступного знаку дієз #. Для використання кирилиці на початку головної програми main використати такі дві вказівки:
setlocale(LC_CTYPE,"rus"); system("chcp 1251");
На момент написання розробки уроку останню вказівка виявилася необхідною при роботі з ОС Windows, але не була такою при роботі з ОС Linux.
Демонстраційне розв'язання складено з дотриманням певних особливостей роботи компілятора. Перед компіляцією потрібно використати вказівку меню Settings / Compiler… і у вікні діалогу Global settings виставити мітку дотримання стандарту мови С++11 ISO.
6. Закріплення вивченого матерілу
7. Підбиття підсумків уроку
Виставлення оцінок.
8. Домашнє завдання
Опрацювати матеріал уроку. Внести до програми зміни з метою збільшення кількості полів, за якими проводити упорядкування даних і фільтрування даних.
Текст упорядкувала Юлія Валентинівна Вітюк, вчитель середньої загальноосвітньої школи № 74 міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 12.09.2016 по 16.09.2016.