Розробка уроку — практичної роботи

Тема: cтворення програмного проекта простої бази даних «Учні» з даними про прізвище, ім'я, вік та успішність, забезпечення виведення даних про учнів за зазначиними критеріями мовою С++.

Мета уроку:

Учні повинні знати:

Учні повинні мати уявлення про типи моделей БД.

Учні повинні уміти програмувати: створення, редагування, маніпуляції із основними об'єктами бази даних.

Тип уроку: засвоєння нових знань.

Вид уроку: практична робота.

Обладнання: комп'ютери зі встановаленими ОС і середовищем програмування CodeBlocks.

Структура уроку

  1. Організаційний момент
  2. Актуалізація опорних знань
  3. Вивчення нового матеріалу
  4. Інструктаж з ТБ
  5. Вироблення практичних навичок
  6. Закріплення вивченого матерілу
  7. Підбиття підсумків уроку
  8. Домашнє завдання

Хід уроку

1. Організаційний момент

Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.

2. Актуалізація опорних знань

  1. Назвіть види даних.
  2. Назвіть об'єкти електронних таблиць.
  3. Назвіть можливості пошуку інформації у середовищі табличного процесора.
  4. Що таке фільтрація?
  5. З чого складаються електронні таблиці?
3. Вивчення нового матеріалу

База данихце сукупність структорованих взаємоповязаних даних, що відносяться до визначеної прдметної області.

Класифікація баз даних:

Основні функції системи керування базами даних:

Модель данихце система правил, згідно з якими створюють структуру даних, здійснюють доступ до даних та змінюють їх.

Основні типи баз даних:

Опишемо побудову реляційної бази даних з однією таблицею (реляцією) та алгоритм створення програми для керування цією базою. Ця програма повинна надавати доступ до даних з бази, додавати нові дані до неї та вилучати їх, упорядковувати та фільтрувати дані.

  1. Визначити структуру бази даних. База може бути дуже простою — лише з однією таблицею, яка міститиме такі дані про учнів з відповідними назвами полів і типами даних:

    • ім'я учня — fname — рядок;
    • прізвище учня — lname — рядок;
    • дата народження — bd — рядок;
    • середній бал учня — avg_grade — ціле додатне число (без знаку) .

    Опис такої структури має код. Тут застосовано тип list для подання таблиці, бо його простіше використовувати зі змінною кількістю записів у масиві, і не знадобляться додаткові можливості, що надає тип vector.

  2. Описати головну функцію main, що буде запитувати у користвача, що він бажає зробити і передавати контроль виконання відповідним функціям, які буде описано пізніше. Спочатку код міститиме лише виведення нагадування: «TODO …» про те, що код у відповідному місці ще потрібно до писати.

  3. Передбачити завантаження даних з файлу формату csv. Цей формат підтримують табличні процесори Microsoft Excel та LibreOffice, хоча його можна редагувати у середовищі найпростішого текстового редактора. Кожному рядку таблиці відповідає один рядок файлу csv. Комірки таблиці в рядку розділяють комою чи крапкою з комою. Домовимося використовувати саме крапку з комою. Додамо функції завантаження та збереження даних у файл. При завантаженні даних з файлу використано спеціальний клас istringstream, що дозволяє змінну рядкового типу перетворити на потік, і читати з неї так, як ніби вона була файлом чи даними, введеними користувачем. Перед читанням замінено усі входження символа крапки з комою на ознаки кінця рядка. Таким чином дані комірки відповідатимуть окремому рядку. І їх можна буде зчитувати викликом функції getline.

  4. Описати функцію збереження даних у файл — проходження по всім записам списку й запис їх у файлу.

    Щоб впевнитися, що дані дійсно завантажено, потрібно мати функцію виведення списку учнів. Виводити інформацію про учня скоріше за все доведеться і в інших місцях програми. Тому зручно записати це окремою функцією.

    Якщо тепер до файлу 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

    — записи при виведенні йдуть у тому самому порядку, в якому їх записано у файлі.

  5. Надати можливість упорядкування списку за вказаним полем з використанням стандартної (вбудованої) функції 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
    
  6. Надати можливість додати учнів до бази: зчитування введених даних, заповнення полів нової структури, і потім додавання її до кінця списку, з метою отримати щось скоже на таке:

    Дія: 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
  7. Уникнути помилкового повторного введення даних щодо одного й того самого учня: перевірити наявність збігу і запропонувати користувачу відредагувати запис. Для цього нам доведеться перетворити нашу змінну (new_record) на вказівник, бо в одному випадку ми працюватимемо з новою структурою, а в іншому — з уже наявною у списку. Відповідно, нам також доведеться явно створити нову копію структури pupil, а також прибрати її, якщо вона стане непотрібною (для цього потрібно використати відповідні ключові слова new та delete). Також буде правильно дозволити користувачу залишити те значення, яке там вже й було для поля, яке він не хоче редагувати. Наприклад, таким чином.

  8. Реалізувати функцію вилучення учнів: аналогічно до виконання 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
    
  9. Додати до програми функцію фільтрування списку за вказаним користувачем критерієм. Це можна зробити різними способами. Найпростіший і найелегантніший з них вимагає використання анонімних функцій, які ми не вивчали. Цей спосіб — для тих, хто хоче отримати додаткові 12 балів за домашню роботу.

При створенні програми можна починати з будь-якого етапу запропонованого коду програми або написати повністю свою програму. Можна підглядати у демонстраційне розв'язання, але спочатку потрібно спробувати зробити це самостійно.

4. Інструктаж з ТБ
5. Вироблення практичних навичок

Завдання. В середовищі CodeBlocks створити програму з роботи з базою даних з мінімальним використанням демонстраційного розв'язання, у якому у коментарях після знаку дієз # вказано номер відповідного кроку створення програми, що відповідає коду до наступного знаку дієз #. Для використання кирилиці на початку головної програми main використати такі дві вказівки:

setlocale(LC_CTYPE,"rus");
system("chcp 1251");

На момент написання розробки уроку останню вказівка виявилася необхідною при роботі з ОС Windows, але не була такою при роботі з ОС Linux.

Демонстраційне розв'язання складено з дотриманням певних особливостей роботи компілятора. Перед компіляцією потрібно використати вказівку меню Settings / Compiler… і у вікні діалогу Global settings виставити мітку дотримання стандарту мови С++11 ISO.

6. Закріплення вивченого матерілу

  1. Що таке баз даних?
  2. Які основні функції системи керування базами дани?
  3. Які існують види маніпулювання даними?
  4. Яку структуру даних було використано?

7. Підбиття підсумків уроку
Виставлення оцінок.

8. Домашнє завдання
Опрацювати матеріал уроку. Внести до програми зміни з метою збільшення кількості полів, за якими проводити упорядкування даних і фільтрування даних.


Текст упорядкувала Юлія Валентинівна Вітюк, вчитель середньої загальноосвітньої школи № 74 міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 12.09.2016 по 16.09.2016.