Електронний довідник у С++

Зміст


Вступ

. Основні теоретичні відомості

1.1 Призначення та область використання програми електонний довідник

2. Структура програмного забезпечення

2.1 Розробка алгоритму програми

2.2 Обгрунтування вибору мови і системи програмування

3. Опис програмного продукту

3.1 Опис програми

3.2 Тестування програмного продукту

Висновки

Список використаної літератури

Додаток


Вступ

програма електронний довідник алгоритм

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

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

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

Електронний довідковий посібник - це віртуальна система, призначена для автоматизованого навчання, що охоплює повний або частковий обсяг навчальної дисципліни. Основні переваги електронних довідників над паперовими аналогами, полягають в економії біоресурсів, можливості користувачів самостійно створювати довідники із застосуванням спеціальних програм і використовувати їх. Тому розробка електронного довідника для ефективного вивчення дисципліни Програмування є актуальною.

Предмет досліження - розробка програмного продукту для швидкого пошуку потрібної користувачу інформації.

Мета роботи полягає в тому, щоб підвищити ефективність, якість і доступність освітніх ресурсів, електронних посібників, що забезпечують розвиток особистості учнів. Для досягнення зазначеної мети в курсовій роботі поставлені і вирішені такі завдання:

а)вивчення літературних джерел і проведення теоретичного аналізу особливостей дисципліни Програмування;

б)розгляд класифікації довідників;

в)розробка алгоритму програми;

г)обгрунтування вибору мови і системи програмування;

д)розробка програмного забезпечення, яке реалізує алгоритм електронного довідника;

е)проведення порівняльного аналізу результатів, формулювання висновків.

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


1. Основні теоретичні відомості


1.1Призначення та область використання програми електонний довідник


Переваги <#"justify">Сьогодні поряд з традиційними друкованими виданнями широко застосовуються електронні довідкові посібники (ЕСП). Це обумовлено в першу чергу тим, що в державних стандартах вищої освіти в кожному циклі передбачаються дисципліни національно-регіонального компонента і предмети за вибором студентів, що встановлюються радою вузу, а централізоване забезпечення навчальною літературою з цих курсів, як правило, утруднено. В результаті зростає роль ЕСП, видаваних провідними викладачами вузу. Мультимедіа - технології дозволяють у повному обсязі реалізувати дидактичні можливості ЕСП, надаючи опосередковане інформаційне, управлінське, емоційний вплив на учня.

При розробці сценарію мультимедійного ЕСП, конструюванні та поданні навчального матеріалу в електронному вигляді, включаючи проектування інтерфейсу, доводиться вирішувати цілий ряд методичних і технологічних завдань з урахуванням особливостей, властивим електронним виданням. Для оптимізації процесу виконання цих завдань розглянемо систему конструктивних критеріїв створення ЕСП, виділяючи групи ціннісних, дидактичних, методичних і технологічних критеріїв і їх взаємозв'язку.

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

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

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

При проектуванні ЕСП також слід звернути увагу на дотримання такого методичного критерію, як об'ємний критерій, навчального матеріалу. У вузівської середовищі склалася багаторічна практика планування обсягів підручників, але використання технології гіпертексту в електронних підручниках і довідкових посібниках дозволяє істотно розширювати кількість матеріалу за рахунок введення додаткових і пояснювальних текстів. У авторів виникає бажання включити якомога більше інформації в навчальне видання і при цьому не враховується, що час, що відводиться на підготовку фахівців, обмежено навчальними планами спеціальності.

Досвід створення електронних довідкових посібників показує, що найбільш ефективним є модульний метод побудови курсу. Тому в групі методичних критеріїв, в якості основного слід виділити критерій модульності ЕСП, який визначає структуру всього навчального видання і враховує особливості навчання із застосуванням комп'ютерів.

Критерій модульності забезпечує методичну основу для оперативного оновлення навчальної інформації та поетапного впровадження ЕСП в навчальний процес, але його реалізація повною мірою можлива тільки при дотриманні критерію модифікованості навчального матеріалу, що відноситься до групи технологічних. Проходження цим критерієм забезпечує можливість внесення змін у навчальний матеріал, дозволяє удосконалювати ЕСП без значних витрат часу і ресурсів.

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


2. Структура програмного забезпечення


.1 Розробка алгоритму програми


Алгоритмом називається метод розвязку задачі записаний по визначених правилах, які забезпечують однозначність трактування алгоритму. Існують такі способи опису алгоритму:

а)словесно-формульний (за допомогою слів і формул);

б)графічний (блок-схема);

в)псевдокоди - це інтерпритація кроків алгоритму на звичайній мові, яка описує дії команд.

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

Алгоритми найпростішого виду - лінійні - це такі алгоритми, в яких дії виконуються послідовно, одна за одною. Кожна дія лінійного алгоритму обовязково виконується, і виконується тільки один раз.

Складнішими за організацією є алгоритми, в яких треба не просто виконувати всі підряд задані дії, а приймати рішення, які саме дії виконувати. Алгоритм, в якому та чи інша серія команд реалізується в залежності від виконання заданої умови, називається алгоритмом з розгалудженням. Розрізняють повну і коротку форму розгалудження. В короткій формі при невиконанні умови ніякі дії не передбачаються. Повну форму розгалуження можна прочитати так: Якщо умова виконується, то виконати дію 1, інакше виконати дію 2. А коротко так: Якщо умова виконується, то виконати дію.

Третій вид алгоритмів - такі, котрі передбачають неодноразове виконання певної дії або кількох дій - це циклічні алгоритми. Дії, які мають повторюватись, називаються тілом циклу. Умова, яка визначає кількість повторень циклу, називається умовою циклу. Зазначена команда виконується до того моменту, поки наведений логічний вираз справджується.

Правила побудови алгоритму:

а)при побудові алгоритму, насамперед, враховуються потрібні об'єкти, з якими буде відбуватися робота;

б)для роботи алгоритму потрібна пам'ять <#"justify">Для опису алгоритму у курсовій роботі використано графічний спосіб.

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

Існують правила зображення блок-схем алгоритмів. Кожен алгоритм має початок та кінець. Кожна команда алгоритму представляється у вигляді геометричних символів, які мають певну конфігурацію, в залежності від характеру дій, що будуть виконуватись. Геометричні символи зєднуються між собою лініями або стрілками, які вказують порядок виконання дій. Основні графічні символи блок-схем описані у таблиці 2.1.


Таблиця 2.1 - Основні графічні символи блок-схем

Вигляд блокуПризначенняПочаток алгоритму.Вивід на екран або друк.Блок вводу вхідних даних.Блок обробки інформа-ції. В даному блоці записуться формули.Блок умови. В цьому блоці записується умова, в залежності від якої вибираються напрямки дії алгоритму.Заголовок циклу FOR.Блок виведення резуль-тату.Кінець алгоритму.

Отже, Алгоритмом називається метод розвязку задачі записаний по визначених правилах, які забезпечують однозначність трактування алгоритму. Існують такі способи опису алгоритму:

а) словесно-формульний (за допомогою слів і формул);

б) графічний (блок-схема);

в) псевдокоди - це інтерпритація кроків алгоритму на звичайній мові, яка описує дії команд.

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

Алгоритми найпростішого виду - лінійні - це такі алгоритми, в яких дії виконуються послідовно, одна за одною. Кожна дія лінійного алгоритму обовязково виконується, і виконується тільки один раз.


2.2 Обгрунтування вибору мови і системи програмування


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

Можна виділити пять основних поколінь мов програмування:

а)1 покоління: початок 1950-х років - мови перших компютерів. Перша мова асемблера, створена за принципом одна інструкція - одна стрічка;

б)2 покоління: кінець 1950-х - початок 1960-х р. Розроблено символьний асемблер, в якому зявилося поняття змінної. Це перша повноцінна мова програмування;

в)3 покоління: 1960-ті р. - мови програмування високого рівня. Їх характеристики: відносна простота, незалежність від конкретного компютера, можливість використання потужних синтаксичних конструкцій. Простота мов дає змогу писати невеликі програми і людям, які не є професійними програмістами;

г)4 покоління: початок 1970-х р. Створюються мови, призначені для реалізації великих проектів. Проблемно-орієнтовані мови, що оперують конкретними поняттями вузької галузі. У такі мови вбудовують потужні оператори, що дозволяють одним рядком описувати функції, для опису яких мовами молодших поколінь потрібно було б сотні-тисячі рядків початкового коду;

д)5 покоління: з середини 1990-х р. - до теперішнього часу. Це системи автоматизованого проектування програмного забезпечення (САПР ПЗ). Створення прикладних програм, редакторів, САПР <#"justify">Існує три основні класифікації мов програмування:

а)за функціональною силою: універсальні мови (в них можна змоделювати будь-який алгоритм); спеціалізовані мови (орієнтовані на певні класи задач);

б)за предметною орієнтацією: кожна мова програмування виникла в процесі розвязання певного класу задач, наприклад, мови програмування для розвязання задач символьної обробки (Lisp, Cobol) і т. ін.;

в)за рівнем абстракції: мови низького рівня (машинно-залежні) - Assembler і т. ін.; мови високого рівня (орієнтовані на користувача (людину) до певної міри) - Pascal, C, Fortran і т. ін.

Як окремий напрямок виділяють мови програмування баз даних, призначені для маніпуляції великими централізованими масивами даних і отримання з них інформації. Багато з цих мов (Access, FoxPro, 4GL та ін.) мають розвинені процедурні елементи. Фактичним стандартом стала мова запитів до баз даних SQL.

Мова С++ багато в чому є надмножиною С. Нові можливості С++ включають оголошення у вигляді виразів, перетворення типів у вигляді функцій, оператори new і delete, тип bool, посилання, розширене поняття константності та змінності, функції, що підставляються, аргументи за замовчанням, перевизначення, простори імен, класи (включаючи і всі пов'язані з класами можливості, такі як успадкування, функції-члени (методи), віртуальні функції, абстрактні класи і конструктори), перевизначення операторів, шаблони, оператор ::, обробку винятків, динамічну ідентифікацію і т. ін. У С++ з'явилися коментарі у вигляді подвійної косої риски (//), які були в попереднику С++ - мові BCPL. Деякі особливості С++ пізніше були перенесені в С, наприклад ключові слова const і inline, оголошення в циклах for і коментарі в стилі С++. У пізніших реалізаціях С також були представлені можливості, яких немає в С++, наприклад макроси vararg і покращена робота з масивами-параметрами.

Головні особливості мови програмування С++:

а)швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали нові можливості і нові засоби;

б)на мові C++ розробляють програми для найрізноманітніших платформ і систем;

в)можливість роботи на низькому рівні з пам'яттю, адресами, портами;

г)можливість створення узагальнених алгоритмів <#"justify">Отже, Мова програмування - це знакова система для опису алгоритмів програм, орієнтованих на конкретних виконавців.

Мова програмування С++ - це універсальна мова програмування, для якої характерні сучасний потік управління і структури даних, великий набір операторів.

Історія назви

Назва «Сі++» була вигадана Ріком Масситті (Rick Mascitti) і вперше було використана в грудні 1983 року. Раніше, на етапі розробки, нова мова називалася «Сі з класами». Ім'я, що вийшло у результаті, походить від оператора Сі «++» (збільшення значення змінної на одиницю) і поширеному способу присвоєння нових імен комп'ютерним програмам, що полягає в додаванні до імені символу «+» для позначення поліпшень. Згідно зі Страуструпом, «ця назва указує на еволюційну природу змін Ci». Виразом «С+» називали ранішню, не пов'язану з Сі++, мову програмування.

Деякі програмісти на Сі можуть відмітити, що якщо виконуються вирази x=3; y=x++; то в результаті вийде x=4 і y=3, тому що x збільшується тільки після присвоєння <#"justify">Технічний огляд

В 1998 році мова Сі++ була стандартизована Міжнародною організацією стандартизації <#"justify">Стандартна бібліотека

Стандартна бібліотека Сі++ включає стандартну бібліотеку Сі з невеликими змінами, які роблять її відповіднішою для мови Сі++. Інша велика частина бібліотеки Сі++ заснована на Стандартній Бібліотеці Шаблонів <#"justify">Нові можливості в порівнянні з Сі

Мова Сі++ багато в чому є надмножиною Сі. Нові можливості Сі++ включають оголошення у вигляді виразів, перетворення типів у вигляді функцій, оператори new і delete, тип bool, посилання, розширене поняття константності та змінності, функції, що підставляються, аргументи за замовчанням, перевизначення, простори імен, класи (включаючи і всі пов'язані з класами можливості, такі як успадкування, функції-члени (методи), віртуальні функції, абстрактні класи і конструктори), перевизначення операторів, шаблони, оператор ::, обробку винятків, динамічну ідентифікацію і багато що інше. Сі++ є також мовою строгого типування і накладає більше вимагань щодо дотримання типів, порівняно з Сі.

У Сі++ з'явилися коментарі у вигляді подвійної косої риски («//»), які були в попереднику Сі - мові BCPL.

Деякі особливості Сі++ пізніше були перенесені в Сі, наприклад ключові слова const і inline, оголошення в циклах for і коментарі в стилі Сі++ («//»). У пізніших реалізаціях Сі також були представлені можливості, яких немає в Сі++, наприклад макроси vararg і покращена робота з масивами-параметрами.

Не об'єктно-орієнтовані можливості

В цьому розділі описуються можливості, безпосередньо не пов'язані з об'єктно-орієнтованим програмуванням (ООП) <#"justify">Ключове слово inline означає, що функція є хорошим кандидатом на оптимізацію, при якій в місцях звернення до функції компілятор вставить тіло цієї функції, а не код виклику. Приклад: inline double Sqr(double x) {return x*x;}

Замість функцій malloc і free, введені нові оператори new і delete. Якщо T - довільний тип, то:

а) new T виділяє пам'ять, достатню для розміщення одного об'єкта типу Т; після завершення виклику оператора, компілятор здійснює ініціалізацію об'єкта (викликаючи його конструктор, якщо такий був визначний) і повертає вказівник типу Т*.

б) new T[n] виділяє пам'ять, достатню для розміщення n об'єктів типу Т; після завершення виклику оператора, компілятор здійснює ініціалізацію кожного з n об'єктів і повертає вказівник типу Т*.

в) delete p - звільняє пам'ять, на яку посилається вказівник p, виділену для нього раніше операцією new T. Деініціалізація об'єкта (викликаючи деструктора) забезпечується компілятором ще до виклику оператора delete.

г) delete [] p - звільняє область пам'яті, виділену для цього масиву раніше операцією new T[n]. Деініціалізація кожного елементу масиву забезпечується компілятором ще до виклику оператора.

Як видно, однією з принципових відмінностей операторів new та delete від своїх попередників, malloc і free, є обов'язковість ініціалізації об'єктів, пам'ять під які було призначено. Іншою відмінністю є те, що загальна реалізація (тобто визначена за умовчанням) оператора new не повертає нулеву вартість вказівника в випадку помилки призначення пам'яті (наприклад з причини її браку). Натомість, new кидає виняток (наприклад, std::bad_alloc в ситуації браку пам'яті). Так само як і для free, якщо вартістю аргументу оператора delete є 0, ані звільнення пам'яті, ані деініціація не відбувається (при тому, подібна ситуація не вважається помилковою).

Функції можуть приймати аргументи за посиланням. Наприклад, функція void f(int& x) {x=3;} присвоює своєму аргументу значення 3. Функції також можуть повертати результат за посиланням, і посилання можуть бути поза всяким зв'язком з функціями. Наприклад, {double&b=a[3]; b=sin(b);} еквівалентно а[3]=sin(а[3]);. Посилання певною мірою схожі з вказівниками, з такими особливостями: при описі посилання ініціалізувалися вказівкою на існуюче значення даного типу; посилання довічно указує на одну і ту ж адресу; при зверненні до посилання операція читання пам'яті за адресою посилання проводиться автоматично. На відміну від вказівників, посилання не може бути константним саме по собі, однак може посилатися на константний об'єкт. Наприклад, int const & const ref = a[3]; на відміну від int const * const ref = &a[3]; - є некоректним, з точки зору С++, виразом; в свою чергу, і int const & ref = a[3];, і int const * ref = &a[3]; - є цілком прийнятними.

Можуть бути декілька функцій з одним і тим же ім'ям, але різними типами або кількістю аргументів (перевантаження функцій; при цьому тип значення, що повертається, на перевантаження не впливає). Наприклад, цілком можна писати:

void Print(int x);Print(double x);Print(int x, int y);

Один або декілька останніх аргументів функції можуть задаватися за умовчанням. Наприклад, якщо функція описана як void f(int x, int y=5, int z=10), виклики f(1), f(1,5) і f(1,5,10) еквівалентні.

При описі функцій відсутність аргументів в дужках означає, на відміну від Сі, що аргументів немає, а не те, що вони невідомі. Якщо аргументи невідомі, треба користуватися багатокрапкою, наприклад int printf(const char* fmt …). Тип першого аргументу повинен бути заданий.

Можна описувати оператори над новими типами. Наприклад, так:

struct Date {int day, month, year;};operator ++(struct Date& date);

Оператори нічим не відрізняються від (інших) функцій. Не можна описувати оператори над зумовленими типами (скажімо, перевизначати множення чисел); не можна вигадувати нові операції, яких немає в Сі++ (скажімо **); арність (кількість параметрів) і пріоритет операцій зберігається (скажімо, у виразі a+b*c спочатку виконуватиметься множення, а потім складання, до яких би типів не належали а, b і с.) Можна перевизначити оператор [] (з одним параметром) і () (з будь-яким числом параметрів).

Додані простори імен namespace. Наприклад, якщо написати


namespace Foo {int x=5;int** T;f(y) {return y*x};g(T);

}


то поза фігурними дужками ми повинні звертатися до T, x, f, g як Foo::T, Foo::x, Foo::f, Foo::g. Якщо ми в якійсь одиниці трансляції (файл основного коду, наприклад myFile.cpp, та всі заголовкові файли що він включає) хочемо звертатися до них безпосередньо, ми можемо написати

using namespace Foo;

Або ж

using Foo::T;

Також можна створити синонім на вже існуючий простір імен (наприклад, аби уникнути постійно повторювати довгу назву простору)


namespace MyVeryOwnNameSpace {std::vector< std::string > StringTable;

}My = MyVeryOwnNameSpace;


Простори імен потрібні, щоб не виникало колізій між пакетами, що мають однакові імена глобальних змінних, функцій і типів. Спеціальним випадком є безіменний простір імен

namespace {

...

}


Всі імена, описані в ньому, доступні в поточній одиниці трансляції і більше ніде, неначебто ми до кожного опису приписали static.

Доданий новий тип bool, що має значення true і false. Операції порівняння повертають тип bool. Вирази в дужках після if, while приводяться до типу bool.

// означає, що вся частина рядка, що залишилася, є коментарем.

Додані шаблони (template). Наприклад, template<class T> T Min(T x, T у) {return x<y?x:y;} визначає функцію Min для будь-яких типів. Шаблони можуть задавати не тільки функції, але і типи. Наприклад, template<class T> struct Array{int len; T* val;}; визначає масив значень будь-якого типу, після чого ми можемо писати Array<float> x;

Введена стандартна бібліотека шаблонів (STL, англ. <#"justify">struct Time{int hh,mm,ss;};t1, t2;


Усередині структури або класу можна описувати нові типи, як через typedef, так і через опис інших структур або класів. Для доступу до таких типів поза структурою або класу, до імені типу додається ім'я структури і дві двокрапки: struct S {typedef int** T; T x;}; S::T у;

Переваги мови C++

а)Швидкодія. Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби.

б)Масштабованість. На мові C++ розробляють програми для найрізноманітніших платформ і систем.

в)Можливість роботи на низькому рівні з пам'яттю, адресами, портами. (Що, при необережному використанні, може легко перетворитися на недолік.)

г)Можливість створення узагальнених алгоритмів <#"justify">Недоліки мови C++

а)Наявність безлічі можливостей, що порушують принципи типобезпеки приводить до того, що в С++ програми може легко закрастися важковловима помилка. Замість контролю з боку компілятора розробники вимушені дотримуватися вельми нетривіальних правил кодування. По суті, ці правила обмежують С++ рамками якоїсь безпечнішої підмови. Більшість проблем типобезпеки С++ успадкована від С, але важливу роль в цьому питанні грає і відмова автора мови від ідеї використовувати автоматичне управління пам'яттю (наприклад, збірку сміття). Так візитною карткою С++ стали вразливості типу «переповнювання буфера».

б)Погана підтримка модульності. Підключення інтерфейсу зовнішнього модуля через препроцесорну вставку заголовного файлу (#include) серйозно уповільнює компіляцію, при підключенні великої кількості модулів. Для усунення цього недоліку, багато компіляторів реалізують механізм прекомпіляциі заголовних файлів (англ. <#"justify">C++ успадкувала багато проблем мови C:

а)Операція присвоювання позначається як =, а операція порівняння як ==. Їх легко сплутати, і така конструкція буде синтаксично правильною, але приведе до важковломимого багу. Особливо часто це відбувається в операторах if і while, наприклад, програміст може написати if (i=0) замість if (i==0) (Разом з тим, основна маса компіляторів видає в таких випадках попередження.) Уникнути помилку такого типу можна, якщо писати всі операції порівняння у такому вигляді: if (0==i). До того ж багато мов (Бейсик, Паскаль) використовують символ «=» саме в операціях порівняння.

б)Операції присвоювання (=), інкрементації (++), декрементації (--) та інші повертають значення. У поєднанні з великою кількістю операцій це дозволяє, але не зобов'язує, програміста створювати код, що важко читається. З іншого боку, один з основних принципів мов C і C++ - дозволяти програмістові писати в будь-якому стилі, а не нав'язувати «хороший» стиль. До того ж це іноді дозволяє компілятору створювати оптимальніший код.

в)Макроси (#define) є могутнім, але небезпечним засобом. У мові C++, на відміну від C, необхідність в небезпечних макросах з'являється значно рідше завдяки шаблонам і вбудованим функціям. Але в успадкованих стандартних С-бібліотеках багато потенційно небезпечних макросів.

Дехто вважає недоліком мови C++ відсутність системи збірки сміття. З іншого боку, в C++ є достатньо засобів (класи з конструкторами і деструкторами, стандартні шаблони, передача параметрів за посиланням), що дозволяють майже виключити використання небезпечних вказівників. Проте, відсутність вбудованої збірки сміття дозволяє користувачеві самому вибрати стратегію управління ресурсами.

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

3. Опис програмного продукту


3.1 Опис програми


При написанні програмного продукту для тестування знань перш за все необхідно підєднати бібліотеки:


#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <math.h>


Ці бібліотечні файли відносяться до директив препроцесора. Препроцесор - це програма, яка опрацьовує директиви. Директиви препроцесора - це команди компілятора відповідної мови програмування, які виконуються на початку компіляції програми. Директиви мови С та С++ починаються із символу #. Директива #include означає, що до програми необхідно приєднати програмний код із зазначеного після неї файлу.

Файли, які приєднують директивою #include, називаються файлами заголовків, header - файлами, бібліотеками, модулями. У таких файлах зазвичай оголошують сталі й змінні, заголовки функцій тощо. Усі стандартні команди та функції мови С++ визначені у файлах заголовків. Щоб приєднати модуль до програми користувача, директиву препроцесора необхідно зазначити на початку програми так:

#include <назва файлу. розширення> або

#include шлях до файлу\назва файлу. розширення.

Зазвичай усі стандартні бібліотеки розміщені у папці INCLUDE середовища С++. Директива #include <iostream> підєднує бібліотечний файл iostream. Саме у цьому файлі описані функції, які дають змогу виконувати операції введення-виведення даних.

#include <conio> - за допомогою цього бібліотечного файлу очищують дисплей монітора від попередніх результатів, і отримують можливість побачити результати операції.

#include <stdafx.h> - інклуд-файл, який служить для генерації файлу заголовків. Використовують це для того, щоб пришвидшити компіляцію проекту.

#include <math.h> - заголовний файл стандартної бібліотеки мови програмування С, який надає прототипи функцій, розроблених для виконання простих математичних операцій. Більшість функцій використовує числа з плаваючою комою. C++ також реалізовує дані функції для забезпечення сумісності, усі вони містяться у заголовному файлі cmath.

Після оголошення бібліотек оголошуються прототипи функцій. Прототипи оголошуються для того, щоб мати змогу у будь-якому місці коду програми вписати код функції. В протилежному випадку потрібно вписати цю функцію перед функцією main.

Функція - це сукупність оголошень і операторів призначена для розвязку певної задачі. Функція має імя, яке використовується для її оголошення і виклику. З функцією звязано 3 поняття: визначення функції; оголошення функції; виклик функції. При виклику у функцію можуть передаватися деякі значення (параметри, які використовуються при роботі з функцією). Функція повертає тільки одне значення. Після заголовку функції йде тіло функції. Визначення функції відрізняється від оголошення, тим що в оголошенні задається тільки заголовок функції, в кінці якого ставиться символ ;. За прототипами функцій йде оголошення структури.

У курсовій роботі використано прототипи таких функцій:

а)int ZastBeg();

б)void ZastEnd();

в)int Exit();

г)int Putannja();

Для виведення на екран головного вікна програми використано функцію int ZastBeg().

У програмі реалізовано виведення на екран повідомлення про завершення роботи з програмою за допомогою функції void ZastEnd().

Підтвердження виходу з програми забезпечується функцією int Exit(). Тестування знань реалізовано у функції int Putannja().


3.2 Тестування програмного продукту


Головне меню програми зображене на рис.1.1


Рисунок 1.1 - Вікно головного меню програми


При натисненні клавіші <Esc> здійснюється вихід з програми, а при використанні будь-якої іншої клавіші - перехід до функції int Main(), яка забезпечує перехід до меню і вибору розділів, або ж редагування довідника із дисципліни «Програмування». Одне з таких визначень програми електронний довідник має такий вигляд (рис. 1.2):


Рисунок 1.2 - Меню програми


При переході до пункту перегляд довідника ми побачимо наступне вікно (рис. 1.3):


Рисунок 1.3 - Перегляд довідника


При переході пункту створення довідника термінів ми побачимо наступне вікно (рис. 1.4):


Рисунок 1.4 - Створення довідника термінів

При переході на пункт додати визначення в довідник ми побачимо(рис. 1.5):


Рисунок 1.5 - Додати визначення в довідник


Програмою передбачено вибір потрібного вам пункту. Якщо натиснути на пункт «Пошук визначення по розділах» то нам слід буде ввести номер розділу від 1 до 9, у цих розділах посортовані дані визначення із дисципліни «Програмування» Вікно демонстрації розділів із дисципліни «Програмування» має такий вигляд (рис. 1.6):


Рисунок 1.6 - Вигляд вводу розділів


При натисненні потрібної вам цифри зявится вікно із визначеннями, де знаходитеметься дане визначення (рис. 1.7):


Рисунок 1.7 - Вікно із даним визначенням


При виході в меню зявиться меню, вибравши там пункт - «вихід із програми» в вас появиться наступне вікно (рис. 1.8):


Рисунок 1.8 - Вікно підтвердження завершення роботи


Для повного виходу з програмного середовища електронного довідника необхідно натиснути на будь-якій клавіші.


Висновки


Сучасний стан науки та техніки потребує інтенсивного поповнення кількості спеціалістів, зокрема в області програмування. З огляду на це постає проблема розробки ефективних засобів навчання, які не тільки гарантують якість знання, але й економію часу та докладених зусиль на засвоєння матеріалу.

З моменту появи компютерів, вони не тільки самі стали обєктами вивчення, але й представили можливості легкого отримання знань з різних галузей науки. Результатом цього стали спроби представити інформацію у зручному для користувача вигляді і розробки різних типів навчальних систем, починаючи з гіпертекстових документів і закінчуючи інтелектуальними навчальними системами.

Мова програмування С++ - це універсальна мова програмування, для якої характерні сучасний потік управління і структури даних, великий набір операторів. Мова "С++" не звязана з конкретними апаратними засобами чи системами, тому дуже зручна і ефективна для написання програм широкого профілю. Хоча її називають мовою системного програмування, так як вона зручна для написання системних програм, вона з рівним успіхом використовується для написання великих обчислювальних програм, програм для обробки текстів і баз даних.

Основне завдання курсової роботи полягало у створенні електронного довідника дисципліни «Програмування».

Дану програму можна використовувати в навчальних закладах, яка є досить зручною у використанні.

Електрoнні енциклопедії та довідники як і їх паперові аналоги, містять систематизований матеріал, присвячений конкретній темі, групі тем чи певній предметній галузі, проте мають ряд переваг, що дозволяє їх ширше використовувати:

а) можливість представлення окрім текстового матеріалу та зображень значної кількості анімацій, відеоматеріалів, аудіо записів;

б) можливість швидкого доступу до потрібної інформації, наявність пошуку за ключовими словами;

в) наявність матеріалу, який значно розширює рамки навчальної програми;

г) зручність у використанні.

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

Електронні словники призначені для швидкого пошуку слів з певними властивостями. Найпоширенішими є електронні тлумачні словники, словники фразеологізмів, синонімів, словники - перекладачі. Головною їх перевагою над паперовими аналогами є те, що для того, щоб отримати переклад чи тлумачення потрібного слова, користувачу не потрібно знати алфавіт, шукати його серед великої кількості слів, а досить лише ввести його в стрічку пошуку. Такий спосіб пошуку дозволяє як і учневі, так і вчителі економити навчальний час, не витрачаючи його на механічну роботу.

Типовим представником електронних словників, і досить поширеним вданий час, є сучасний англо-український та українсько-англійський словник видавничого дому Школа. Даний програмний продукт містить простий та зручний інтерфейс, дає можливість отримати миттєвий перегляд перекладу введеного користувачем слова, пошуку слів за алфавітом та містить коротку граматичну довідку.

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


Список використаної літератури


1.Бек Л.С. Введення в системне програмування. - / М. Світ, 2008. - 345с.

2.Бочков С.О. Язык программирования Си для персонального

компьютера. - К.: Мир, 2006.- 231с.

.Вальвачев А.Н. Программирование на языке ПАСКАЛЬ для персональних ЭВМ ЕС.- / Мн.: Выш. шк., 2007.- 223с.

4.Гринчишин Я.Т. Алгоритми і програми на С++ Учеб. посібник. - / М.: Просвещение, 2001. - 160 с.

.Грис Д. Наука программирования.- / М.: Мир, 2003.- 416с.

.Дейтел Х.М., / Дейтел П.Дж. Как программировать на C++. - / М.: БИНОМ, 2004. -24с.

.Зубенко В.В. Програмування : навчальний посібник (гриф МОН України) / В.В. Зубенко, Л.Л. Омельчук. / К. ВПЦ «Київський університет», 2011. - 623 c.

.Кнут Д. Искусство программирования для ЭВМ: В 3-х т.- /М.: Мир, t.1, 2009.- 735с., т.2, 1977.- 724c.

.Лавров С.С. Програмирование. Математические основи, средства, теория / С.С. Лавров. - СПб. : БХВ-Петербург,2001. - 251с.

.Носов О.І. Радио и связь, 2001.-160с.

.Непейвода Н.Н. Основания програмирования : учеб. Пособие Н.Н. Непейвода, И.Н. Скопин. - Ижевск, 2003.-213с.

.Нікітченко М.С. Теоретичні основи програмування : навчальний посібник / М.С. Нікітченко - Ніжин : Видавництво НДУ імені Миколи Гоголя, 2010. - 121с.

.Нога Л.В. Конспект лекцій з дисципліни Основи програмування та алгоритмічні мови Частина 1 і 2 / Нога Л.В. - Херсон: Веселка, 2006. - 134 с.

.Перминов О.Н. Программирование на языке Паскаль.- / М.: Радио и связь, 2009. - 220с.

.Проценко B.C. Техника программирования. - К.: Вища школа. 2006.- 183с.

.Рафа Т. М. Методичні вказівки до лабораторних та практичних занять з програмування. Паскаль. Частина 1 / Т.М. Рафа, Л.Б. Чорна. - Тернопіль: ТДТУ ім. І. Пулюя, 2008. - 94 с.

.Семотюк В. Програмування в середовищі Турбо Паскаль / Семотюк В. - Львів: БаК, 2008. - 248 с.

.Страуструп Б. Язык программирования С++. - / М.: БИНОМ, 2001. - 990 с.

.Уэйт М., /Мартин Д., Пратта С. Язык Си. Руководство для начинающих.- / М.: Мир, 2004.- 512с..

.Фаронов В.В. TurboPascal 7.0. Начальный курс / Фаронов В.В. - М.: Колидж, 2008. - 238 с.

.Фаронов В.В. Турбо Паскаль 7.0. Начальный курс: Учеб.пособие. - М.: Нолидж, 2010. -612с.

.Фаронов В.В. Турбо Паскаль 7.0.Практика программирования: Учеб.пособие. - / М.: Нолидж, 2013. -429 с.

.Хэнкок Л.,/ Кригер М. Введение в программирование на языке Си.- / М.: Радио и связь, 2006.-220с.

.Шикова О.М. Основи програмування мовою С++ у прикладах і завданнях: навч. посібник / Шикова О. М. - / К.: МАУП, 2004. - 112 с.


Додаток А


Код пронрами

// k5.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <stdio.h>

#include <conio.h>

#ifdef WIN32

#include <windows.h>

#endif

//prototipyi functsiyZastBeg();ViewDB();CreateDB();AddToDB();SearchInDB();SortDB();Exit();ZastEnd();Get(int min, int max);record

{num;surn[20];name[300];ats;

};

//------------------------------------------MENU-------------------------------

#ifdef WIN32wherey (void)

{_SCREEN_BUFFER_INFO conScrBufInfo;(GetStdHandle(STD_OUTPUT_HANDLE), &conScrBufInfo);conScrBufInfo.dwCursorPosition.Y - conScrBufInfo.srWindow.Top;

}gotoxy(short x, short y) {hConsoleOutput;Cursor_Pos = {x, y};= GetStdHandle(STD_OUTPUT_HANDLE);(hConsoleOutput, Cursor_Pos);

}clrscr(void) {_SCREEN_BUFFER_INFO csbi;hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);coord = {0, 0};count;(hStdOut, &csbi);(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count);(hStdOut, coord);

}

#endifMenu()

{ setlocale (LC_ALL,"Russian");();("*Mеню*");("\n-> Перегляд довiдника");("\n Створення довiдника термiнiв");("\n Додати визначення в довiдник");("\n Пошук визначення по розділах");("\n Сортування даних у довіднику по роздiлах");("\n Вихiд iз програми");("\n\n\n Перемiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");p = 1;m = getch();(m == 13) ViewDB();{(m == 80) p++;(m == 72) p--;{(p<=0) p = p+6;

}while (p<=0);{(p>=7) p = p-6;

}while (p>=7);(p == 1){();("*Mеню*");("\n-> Перегляд довiдника");("\n Створення довiдника термiнiв");("\n Додати визначення в довiдник");("\n Пошук визначення по розділах");("\n Сортування даних у довіднику по роздiлах");("\n Вихiд iз програми");("\n\n\nПеремiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");= getch();

}(p == 2){();("*Mеню *");("\n Перегляд довiдника");("\n-> Створення довiдника термiнiв");("\n Додати визначення в довiдник");("\n Пошук визначення по розділах");("\n Сортування даних у довіднику по роздiлах");("\n Вихiд iз програми");("\n\n\nПеремiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");= getch();

}(p == 3){();("*Меню*");("\n Перегляд довiдника");("\n Створення довiдника термiнiв");("\n-> Додати визначення в довiдник");("\n Пошук визначення по розділах");("\n Сортування даних у довіднику по роздiлах");("\n Вихiд iз програми");("\n\n\nПеремiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");= getch();

}(p == 4){();("*Меню*");("\n Перегляд довiдника");("\n Створення довiдника термiнiв");("\n Додати визначення в довiдник");("\n-> Пошук визначення по розділах");("\n Сортування даних у довіднику по роздiлах");("\n Вихiд iз програми");("\n\n\nПеремiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");= getch();

}(p == 5){();("*Меню*");("\n Перегляд довiдника");("\n Створення довiдника термiнiв");("\n Додати визначення в довiдник");("\n Пошук визначення по розділах");("\n-> Сортування даних у довіднику по роздiлах");("\n Вихiд iз програми");("\n\n\nПеремiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");= getch();

}(p == 6){();("*Меню*");("\n Перегляд довiдника");("\n Створення довiдника термiнiв");("\n Додати визначення в довiдник");("\n Пошук визначення по розділах");("\n Сортування даних у довіднику по роздiлах");("\n-> Вихiд iз програми");("\n\n\nПеремiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");= getch();

}

}while(m!=13);p;

}

//---------------------------------------ZAST_BEG------------------------------ZastBeg()

{("\n\n\n\n\n \t\t\t\t Курсова робота");("\n \t\t\t з дисциплiни 'Програмування'");("\n \t\t\t\t на тему:");("\n \tСтворення електронного довідника дисципліни 'Програмування'");("\n \t\t\t виконав студент групи ОКСМ-21");("\n \t\t\t\t Ковдра Василь");("\n\n\n\n \t <Esc> - вихiд, продовжити роботу - будь-яка iнша клавiша \n\n\n\n\n\n\n\n\n");c = getch();c;

}

//--------------------------------------ZAST_END-------------------------------ZastEnd()

{();("\n\n\n\n\n \t Електронний довiдник з дисциплiни Програмування");("\n \t успiшно закритий. Дякую за його використання!");("\n\n\n\n \t Для виходу з програми натиснiть будь-яку клавiшу.");();

}

//---------------------------------------EXIT----------------------------------Exit()

{();("\n\n \t\t Дiйсно вийти з програми?");("\n\n <Enter> - вийти в ОС, <Esc> - продовжити роботу з програмою.");c;

{= getch();

}while(c!= 13 && c != 27);c;

}

//---------------------------------------MAIN----------------------------------main()

{setlocale (LC_ALL,"Russian");(ZastBeg() != 27)

{z;

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}break;

}

}while(z == 1);

}ZastEnd();0;

}

//---------------------------------------VIEWDB--------------------------------ViewDB()

{setlocale (LC_ALL,"Russian");*f=fopen("db.txt", "r+t");*num=fopen("num.txt", "r+t");(f == NULL || num == NULL)

{();("\n \t Не вдається вiдкрити файл електронного довiдника!");("\n \t Натиснiть будь-яку клавiшу для виходу в меню.");();

}

{record recz[100];i, kol;

//poluchenie kol-va zapisej((int*)&kol, 1, sizeof(kol), num);

//zapolnenie massiva zapisjami iz faila(i=0;i<kol;i++)

{(f, sizeof(recz[i])*i, 0);((char*)&recz[i], 1, sizeof(recz[i]), f);

}

//prosmotr zapisej iz poluchennogo massivaa, k = 0;

{();("*Перегляд довiдника*");("\n\n Запис № %i", recz[k].num);("\n Визначення: %s - %s ", recz[k].surn, recz[k].name);("\n Номер роздiлу до якого належить визначення -> %i", recz[k].ats);(kol == 1) //v baze vsego 1 zapis'

{("\n\n Бiльше записiв не знайдено!");("\n Натиснiть будь-яку клавiшу для виходу в меню.");();= 101;

}

{(k == 0)

{("\n\n Стрiлка вниз - наступний запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 80 && a != 27);(a == 80) k++;k = 101;

}

{(k == kol - 1)

{("\n\n Стрiлка вверх - попереднiй запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 27);(a == 72) k--;k = 101;

}

{(k > 0 && k < kol)

{("\n\n Стрiлки вверх/вниз - перегляд записiв: попереднiй/наступний");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 80 && a != 27);(a == 80) k++;(a == 72) k--;(a == 27) k = 101;

}

}while(k != 101);

}(f);(num);

z;

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}break;

}

}while(z == 1);

();

}

//--------------------------------------CREATEDB-------------------------------CreateDB()

{setlocale (LC_ALL,"Russian");();("Ви дiйсно хочете створити новий електронний довiдник?");("\n <Enter> - так, <Esc> - нi");d;

{= getch();

}while(d != 13 && d != 27);(d == 13)

{*f=fopen("db.txt", "wb");*num=fopen("num.txt", "wb");record rec[100];i, j;(i = 0; i < 100; i++)

{();(LC_ALL,"Russian");("*Створення довiдника термiнiв*\n\n");[i].num = i+1;

//podtverzhdenniy vvod термыну("\nВведiть термiн -> ");(stdin, "%s", &rec[i].surn);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели термiн: '%s'. <Esc> - повторiть ввiд. ", rec[i].surn);("\n<Enter> - термiн введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\nВведiть заново ->");(stdin, "%s", &rec[i].surn);(stdin);

}

}while(j == 27);

//podtverzhdenniy vvod визначення("\n\n Введiть визначення -> ");(stdin, "%s", &rec[i].name);(1,wherey()+1);

{(1,wherey()-2);("Ви ввели визначення: '%s'. <Esc> - повторiть ввiд. ", rec[i].name);("\n <Enter> - визначення введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");(stdin, "%s", &rec[i].name);(stdin);

}

}while(j == 27);

//podtverzhdenniy kontrolliruemiy vvod nomera ats("\n\n Введiть номер роздiлу до якого належить дане визначення:(число вiд 1 до 9):");("\n \t 1. Основи мови С++; ");("\n \t 2. Лiнiйнi програми;");("\n \t 3. Розгалуження;");("\n \t 4. Цикли;");("\n \t 5. Масиви;");("\n \t 6. Функцiї;");("\n \t 7. Файли;");("\n \t 8. Рядки;");("\n \t 9. Структури, списки, стеки, черги, обєднання, графiка.");("\n\n Введiть число вiд 1 до 9: ");[i].ats = Get(1, 9);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели № розділу: '%d'. <Esc> - повторний ввiд. ", rec[i].ats);("\n <Enter> - Номер роздiлу введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");[i].ats = Get(1, 999);

}

}while(j == 27);((char*)&rec[i], 1, sizeof(rec[i]), f);("\n\n <Enter> - продовження, <Esc> - вихiд в меню\n");

{= getch();

}while(j != 13 && j != 27);(j == 27)

{kol = i + 1;((int*)&kol, 1, sizeof(kol), num);;

}

}();(f);(num);

}z;

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}break;

}

}while(z == 1);();

}

//--------------------------------------ADDTODB--------------------------------AddToDB()

{setlocale (LC_ALL,"Russian");();("\n Ви дiйсно хочете добавити новий запис в електронний довiдник?");("\n <Enter> - так, <Esc> - нi");d, z;

{= getch();

}while(d != 13 && d != 27);(d == 13)

{*f=fopen("db.txt", "ab");*num=fopen("num.txt", "r+b");c;(num == NULL)

{(f); //();("\n Електронний довiдник не iснує!");("\n <Esc> - Створення довiдника термiнiв, <Enter> - вихiд в меню");

{= getch();

}while(c != 13 && c != 27);(c == 27) CreateDB();

}

//esli file s bazoj naiden

{kol;((int*)&kol, 1, sizeof(kol), num);(kol == 100)

{("Електронний довiдник заповнений. Додати визначення неможливо!");("Натиснiть будь-яку клавiшу для виходу в меню!");();

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}

}

}while(z == 1);();

}record newrec;j;();("*Додавання визначення в електронний довiдник*\n\n");.num = kol + 1;

//podtverzhdenniy vvod familii("\n Термiн -> ");(stdin, "%s", &newrec.surn);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели термiн: '%s'. <Esc> - повторний ввiд. ", newrec.surn);("\n <Enter> - термiн введений вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");(stdin, "%s", &newrec.surn);(stdin);

}

}while(j == 27);

//podtverzhdenniy vvod imeni

("\n\n Введiть визначення -> ");(stdin, "%s", &newrec.name);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели визначення: '%s'. <Esc> - повторний ввiд. ", newrec.name);("\n <Enter> - визначення введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");(stdin, "%s", &newrec.name);(stdin);

}

}while(j == 27);

//podtverzhdenniy kontrolliruemiy vvod nomera ats("\n\n Введiть номер роздiлу до якого належить дане визначення:(число вiд 1 до 9):");("\n \t 1. Основи мови С++; ");("\n \t 2. Лiнiйнi програми;");("\n \t 3. Розгалуження;");("\n \t 4. Цикли;");("\n \t 5. Масиви;");("\n \t 6. Функцiї;");("\n \t 7. Файли;");("\n \t 8. Рядки;");("\n \t 9. Структури, списки, стеки, черги, обєднання, графiка.");("\n\n Введiть число вiд 1 до 9: ");.ats = Get(1, 9);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели № роздiлу: '%d'. <Esc> - повторний ввiд. ", newrec.ats);("\n <Enter> - номер роздiлу введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");.ats = Get(1, 9);

}

}while(j == 27);((char*)&newrec, 1, sizeof(newrec), f);++;(num, 0, 0);((int*)&kol, 1, sizeof(kol), num);(f);(num);("\n\n Запис добавлений!");("\n Натиснiть будь-яку клавiшу для виходу в меню");();

}

}

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}break;

}

}while(z == 1);

();

}

//-----------------------------------SEARCHINDB--------------------------------SearchInDB()

{setlocale (LC_ALL,"Russian");*f=fopen("db.txt", "r+t");*num=fopen("num.txt", "r+t");j, o;(f == NULL || num == NULL)

{();("\n Не вдається вiдкрити файл електронного довiдника!");("\n Натиснiть будь-яку клавiшу для виходу в меню");();

}

{record recz[100];i, kol;((int*)&kol, 1, sizeof(kol), num);

//zapolnenie massiva zapisjami iz faila(i=0;i<kol;i++)

{(f, sizeof(recz[i])*i, 0);((char*)&recz[i], 1, sizeof(recz[i]), f);

}();("*Пошук записiв по номеру роздiлу*");sats; //kluch dlja poiska("\n\n Введiть № роздiлу для пошуку (число вiд 1 до 9)-> ");= Get(1, 9);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели № роздiлу: '%i'. <Esc> - повторний ввiд. ", sats);("\n <Enter> - номер роздiлу введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");= Get(1, 9);

}

}while(j == 27);record srec[100];z, s = 0;(z=0;z<kol;z++)

{(recz[z].ats == sats)

{[s] = recz[z];++;

}

}(s == 0) //esli ne naideno ni odnoj zapisi

{();("\n Записiв з таким номером роздiлу не знайдено!");("\n Натиснiть будь-яку клавiшу для виходу в меню");();

}

{a;= 0;

{();("\n *Пошук записiв з номером роздiлу = %i*", sats);("\n Запис №%i", srec[i].num);("\n Визначення: -> %s - %s ", srec[i].surn, srec[i].name);("\n № роздiлу -> %i", srec[i].ats);(s == 1) //esli vsego odna zapis' sootvetstvuet usloviju poiska

{("\n\n Бiльше записiв не знайдено");("\n Натиснiть будь-яку клавiшу для виходу в меню");();= 101;

}(i == 0)

{("\n\n Стрiлка вниз - наступний запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 80 && a != 27);(a == 80) i++;i = 101;

}

{(i == s - 1)

{("\n\n Стрiлка вверх - попереднiй запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 27);(a == 72) i--;i = 101;

}

{(i > 0 && i < s)

{("\n\n Стрiлки вверх/вниз - перегляд записiв: попереднiй/наступний");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 80 && a != 27);(a == 80) i++;(a == 72) i--;(a == 27) i = 101;

}

}while(i != 101);(f);(num);

}

}

{= 0;o = Menu();(o)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}

}

}while(o == 1);();

}

//-------------------------------------SORTDB----------------------------------SortDB()

{setlocale (LC_ALL,"Russian");*f=fopen("db.txt", "r+t");*num=fopen("num.txt", "r+t");z;(f == NULL || num == NULL)

{();("\n Не вдається вiдкрити файл електронного довiдника");("\n Натиснiть будь-яку клавiшу для виходу в меню");();

}

{record recz[100];i, kol;((int*)&kol, 1, sizeof(kol), num);

//zapolnenie massiva zapisjami iz faila(i=0;i<kol;i++)

{(f, sizeof(recz[i])*i, 0);((char*)&recz[i], 1, sizeof(recz[i]), f);

}nums[100], atss[100];(i=0;i<kol;i++) //sozdanie massiva s nomerami ats iz bazi dannih

{[i] = recz[i].ats;

}(i=0;i<kol;i++)

{[i] = recz[i].num;

}j, n, tmp, ch = 0;

//sortirovka massiva s nomerami ats i sootv. peremeschenie nomerov zapisej(i=0;i<kol;i++)

{= i;(j=i+1;j<kol;j++)

{(atss[j] < atss[n])

{= j; //n - nomer min elementa++; //ch - chislo naidennuih zapisej

}

}= atss[i];[i] = atss[n];[n] = tmp;= nums[i];[i] = nums[n];[n] = tmp;

}a, k = 0;

{= nums[k]-1;();("\n*Вiдсортований довiдник*");("\n\n Запис №%i", recz[n].num);("\n Визначення -> %s - %s ", recz[n].surn, recz[n].name);("\n № роздiлу -> %i", recz[n].ats);(ch == 1) //esli vsego odna zapis' sootvetstvuet usloviju poiska

{("\n\n Бiльше записiв не знайдено!");("\n Натиснiть будь-яку клавiшу для виходу в меню");();= 101;

}

{(k == 0)

{ ("\n\n Стрiлка вниз - наступний запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 80 && a != 27);(a == 80) k++;k = 101;

}

{(k == kol - 1)

{ ("\n\n Стрiлка вверх - попереднiй запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 27);(a == 72) k--;k = 101;

}

{(k > 0 && k < kol)

{("\n\n Стрiлки вверх/вниз - перегляд записiв: попереднiй/наступний");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 80 && a != 27);(a == 80) k++;(a == 72) k--;(a == 27) k = 101;

}

}while(k != 101);

}(f);(num);

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}

}

}while(z == 1);();

}

//-------------------------------------GET-------------------------------------Get(int min, int max)

{setlocale (LC_ALL,"Russian");i = 0;(stdin, "%d", &i); (stdin);((i==0)||(i>max)||(i<min))

{(1,wherey());("Невiрний ввiд, повторiть спробу (%d - %d): ", min,max);(stdin, "%d", &i);(stdin);

}i;

}


Теги: Електронний довідник у С++  Курсовая работа (теория)  Информационное обеспечение, программирование
Просмотров: 31095
Найти в Wikkipedia статьи с фразой: Електронний довідник у С++
Назад