Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Курсовий проект- сторінок 43 малюнків 7 таблиць 1 джерел 0 додатків 1

Работа добавлена на сайт samzan.net: 2015-07-10

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 21.5.2024

PAGE   \* MERGEFORMAT2

МІНІСТЕРСТВА ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНА МЕТАЛУРГІЙНА АКАДЕМІЯ УКРАЇНИ

«Кафедра інформаційних технологій і систем»

Курсова робота

з дисципліни: «Основи програмування
та алгоритмічні мови
»

2014

Реферат

Курсовий проект: сторінок - 43, малюнків - 7, таблиць - 1, джерел -0, додатків - 1.

Ключові слова: ДИНАМІЧНА СТРУКТУРА , ВИДІЛЕННЯ ПАМ'ЯТІ , СОРТИРОВКА , МЕНЮ , ФАЙЛ, ФУНКЦІЯ , ПРОТОТИП .

Об'єктом дослідження є технологія розробки програмного забезпечення мовою С, для управління базою даних (БД).

Метою роботи є розробка програмного продукту реалізує БД «Особиста бібліотека».

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

Супровід графічними ілюстраціями і контрольним прикладом.

В результаті роботи була розроблена програмна оболонка , що реалізує БД, описані використовувані алгоритми , формати та структури даних .

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

Зміст

[1] Реферат

[2] Курсовий проект: сторінок - 43, малюнків - 7, таблиць - 1, джерел -0, додатків - 1.

[3] Ключові слова: ДИНАМІЧНА СТРУКТУРА , ВИДІЛЕННЯ ПАМ'ЯТІ , СОРТИРОВКА , МЕНЮ , ФАЙЛ, ФУНКЦІЯ , ПРОТОТИП .

[4] Об'єктом дослідження є технологія розробки програмного забезпечення мовою С, для управління базою даних (БД).

[5] Метою роботи є розробка програмного продукту реалізує БД «Особиста бібліотека».

[6] Використання динамічних структур даних , спадаючого ієрархічного меню, бінарного доступу до файлів.

[7] Супровід графічними ілюстраціями і контрольним прикладом.

[8] В результаті роботи була розроблена програмна оболонка , що реалізує БД, описані використовувані алгоритми , формати та структури даних .

[9] Результати роботи можна використовувати для навчання програмуванню баз даних на мовах високого рівня.

[10] Зміст

[11] Постановка задачі

[12] 1.Теоретичний матеріал

[12.1] 1.1 Особливості мови С

[12.2] 1.2 Лінійні списки

[12.2.1] 1.2.1 Методи організації та зберігання лінійних списків

[12.2.2] 1.2.2 Операції зі списками при послідовному збереженні

[12.3] 1.3 Сортування списків

[12.3.1] 1.3.1 Сортування вибором 

[12.3.2] 1.3.2 Сортування бульбашкою 

[12.3.3] 1.3.3 Сортування включенням 

[12.3.4] 1.3.4 Сортування злиттям 

[12.3.5] 1.3.5 Сортування підрахунком

[12.3.6] 1.3.6 Пірамідальне сортування 

[12.3.7] 1.3.7 Швидке сортування

[12.3.8] 1.3.8 Сортування деревом

[13] 2. Структурний опис

[14] 3.Функціональний опис

[14.1] 3.1 Список файлів проекту

[14.2] 3.2 Типи даних проекту

[14.3] 3.3 Опис функцій, що використовуються програмою

[14.4] 3.4 Робота з програмою

[15] 4. Висновок

[16] 5. Список використаної літератури

[16.1] Додаток А

Постановка задачі

Необхідно розробити базу даних мовою С для задачі “Біржа праці”, де початкова інформація має таку структуру:

  •  Фірма – текстовий, 10 знаків;
  •  Професія – текстовий, 30 знаків;
  •  Освіта – текстовий, 40 знаків;
  •  Оплата – текстовий, 50 знаків;
  •  Робочий день – цілочисельний.

Вихідний документ має таку структуру:

Фірма, професія, освіта, оплата, робочий день.

Інформація, яка видається за запитом:

  •  Відсортований вакансії по заробітній платі;
  •  Відсортований середню зарплату по професії;
  •  Обчислити погодинну оплату для кожної вакансії;
  •  Діаграма “ Вакансії по професії ”.

Вимоги до програмного проекту:

Дані повинні розташовуватися в пам'яті як динамічний масив структур (записів) у вигляді односпрямованого або двонаправленого списку;

Дані повинні зберігатися на диску, тобто операції запису / читання мають виробляються відповідними блоками даних;

Програму необхідно розбити на кілька модулів з відповідними заголовками, наприклад, головний модуль, модуль інтерфейсу, модуль меню, модуль обчислень і сортування;

Управління повинне здійснюватися за допомогою розкривного ієрархічного меню.

Необхідно передбачити в програмі наступні функції:

  •  перегляд масиву даних;
  •  редагування, додавання, видалення даних;
  •  збереження масиву даних у файлі;
  •  завантаження масиву даних з файлу;
  •  сортування масив даних за різними критеріями;
  •    пошук в масиві даних;
  •    виконання відповідних звітів і побудова графіка.

1.Теоретичний матеріал

1.1 Особливості мови С

Мова «C» (вимовляється «сі») - це універсальна мова програмування, для якого характерні економічність виразів, сучасний потік управління і структури даних, багатий набір операторів. Мова «С» була розроблена у 1972 році Денісом Рітчі у Bell Telephone Laboratories з метою на-писання нею операційної системи UNIX. Вся мова «C» не є ні мовою "дуже високого рівня" і не призначається для деякої спеціальної області застосування. Але відсутність обмежень та універ-сальність роблять її зручнішою й ефективнішою для багатьох завдань, ніж  мови програмував-ня, імовірно більш потужні.

Хоча С і було розроблено для написання системного програмного забезпечення, наразі во-на досить часто використовується для написання прикладного програмного забезпечення.

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

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

асемблером.

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

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

Б’ярн Страуструп якось написав про неї: “С робить так, щоб вам було легко вистрілити собі в ногу”. Іншими словами, С дозволяє здійснення низки операцій, котрі часто є не бажани-ми, а тому чимало помилок у коді не виявляється компілятором, і не можуть бути очевидними під час виконання. Якщо під час програмування та підтримки програмного забезпечення не до-тримуватись низки суворих правил, пізніше може виникнути немало проблем зі швидкодією, стабільністю та безпекою програмного забезпечення. (Хоча, виною подібних проблем най часті-ше є програмісти, оскільки, С сама по собі забезпечує низький рівень захисту).

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

У відповідь на критику мови C, як сильно типізованої мови, Керніган та Рітчі, ослались на основу філософії дизайну C: “Тим не менш, C зберігає основний принцип, який передбачає, що програмісти добре знають, що вони роблять, і вимагає лише, щоб вони чітко давали компі-ляторові знати про свої наміри”.

Як і більшість імперативних мов, заснованих на традиції АЛГОЛ, C має можливості для структурного програмування і дозволяє здійснювати рекурсії, у той час, як система статич-ної типізації даних запобігає виникненню багатьох непередбачуваних операцій. У С увесь ви-конуваний код міститься у функціях. Параметри функції завжди передаються за значеннями. Передача параметрів за вказівником реалізовується шляхом передачі значення вказівника. Ге-терогенні сукупності типів даних (структури) дозволяють пов'язаним типам даних бути об'єдна-ними і маніпулювати ними, як єдиним цілим.

C також має такі специфічні властивості:

  •  змінні можуть бути прихованими у вкладених блоках
  •  слабка типізація; наприклад, символи можуть використовуватися, як цілі числа
  •  низькорівневий доступ до оперативної пам'яті шляхом перетворення машинних адрес вказівники
  •  вказівники на функції і дані підтримують динамічний поліморфізм
  •  масив індексів як вторинне поняття, визначається у термінах арифметики вказів-ників
  •  стандартизований препроцесор C для макроозначення, включення файлу з дже-рельним кодом, умовної трансляції, і т. д.
  •  комплексна функціональність, як то I/O, маніпуляція рядками, і делегування ма-тематичних функцій бібліотекам
  •  відносно невелика кількість зарезервованих слів (32 у С89, і 37 у C99)
  •  Лексичні структури, які нагадують B більше за ALGOL, наприклад:
  1.  { ... } на відміну від ALGOL'івського begin ... end.
  2.  знак рівності для призначення (копіювання), як це робиться у мові Fortran
  3.  два знаки рівності використовуються для перевірки рівності (подібно до .EQ. у Fortran'і або одного знаку рівності у BASIC)
  4.  && та || на відміну від ALGOL'івських and та or (цим вона семантично від-різняється від бітових операторів & та |).
  5.  велика кількість операторів об'єднання, на кшталт +=, ++, ……

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

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

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

1.2 Лінійні списки

1.2.1 Методи організації та зберігання лінійних списків

Список (list) – набір елементів, розміщених у певному порядку. Таким набо-ром можливо ряд знаків в слові, слів в пропозицій у книзі. Цей термін може також ставитися до набору еле-ментів на диску. Використання при обробці інформації списків як типів даних призвело до по-яви в мовами програмування коштів обробки списків.

Список черговості (pushup list) – список, у якому останній що надходить елемент додаєть-ся до частині списку.

Список з допомогою покажчиків (linked list) – список, коли кожен елемент містить покаж-чик наступного року елемент списку.

Лінійний список (linear list) — це безліч, що складається з вузлів , структурні властивості якого з суті обмежуються лише лінійним (одномірною) відносним становищем вузлів, т. е. тими умовами, що й , то є першою вузлом; якщо, то k-му вузлу передує і його слід ; є останньою вуз-лом.

Односпрямований и двонаправлений список - це лінійній список, де всі винятку и дода-вання відбуваються у місці списку.

Односпрямований список відрізняється від двунаправленного списку позбав зв'язком. Тоб-то однонаправленном списку можна переміщатися тільки одного на-прямі (з запрацювала кі-нець), а двунаправленном – у кожному.

У односпрямованому списку структура додавання и видалений така сама позбав зв'язок між елементами одностороння.

1.2.2 Операції зі списками при послідовному збереженні

Операції, які право виконувати з лінійними списками, включають, наприклад, такі:

  •  Одержати доступом до k-му вузлу списку, щоб проаналізувати і/або змінити вміст його полів.
  •  Включити новий вузол безпосередньо перед k-ым вузлом.
  •  Виключити k-й вузол.
  •  Об'єднати два (чи більше) лінійних списку на один список.
  •  Розбити лінійний список на два (чи більше) списку.
  •  Зробити копію лінійного списку.
  •  Визначити кількість вузлів у списку.
  •  Виконати сортування вузлів списку на зростаючу котячу порядку за деяким по-лях в вузлах.
  •  Знайти у списку вузол з заданим значенням у певному полі.

Спеціальні випадки k=1 і k=n у бойових операціях (1), (2) і (3) особливо вирізняються, що у лінійному списку простіше одержати доступ першому і останньому елементам, ніж до произвольному елементу.

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

При описі алгоритмів, використовують таких структур, прийнята спеціальна терміноло-гія; то поміщаємо елемент на гору стека чи знімаємо верхній елемент.Унизу стека перебуває найменш доступний елемент, і не видаляється до того часу, коли будуть виключені й інші еле-менти. Часто кажуть, Що елемент опускається (push down) в стік або що стік піднімається (pop up), якщо виключається верхній елемент. Ця термінологія бере початок від "стеков" закусок, які можна натрапити у кафетерії, чи з аналогії з колодами карток у деяких перфораторных пристро-ях. Стислість слів "опустити" і "підняти" має перевагу, але це терміни помилково припускають рух всього списку на пам'яті машини. Фізично, проте, щось опускається; елементи просто дода-ються згори, як із стоговании сіна або за укладанні стоси коробок. У застосування до чергам го-воримо про початку і кінці черги; об'єкти стають насамкінець черзі й їдуть у момент, коли на-решті досягають початку спілкування. Ведучи мову про деках, ми указуємо лівий і праий кінці. Поняття верхи, низу, початку й кінця застосовно часом і до декам, якщо їх використовують як стеки або черги. Немає, проте, будь-яких стандартних угод щодо того, де він повинен бути го-ру, початок і поклала край: зліва чи справа. Отже, ми бачимо, що в алгоритми застосовно бага-те розмаїтість описових слів: «згори — вниз» — для стеків, «зліва — направо» — для деків і «чекання черги» —для черг.

1.3 Сортування списків

Сортування — це впорядкування елементів за якоюсь ознакою. Якщо еле-менти — чис-ла, то їх впорядковують за зростанням або спаданням.

Контейнером для елементів, які підлягають сортування найчастіше виступають масиви або невпорядковані колекції. Наведемо приклад упорядкування чисел за зростанням: Дано: 54321 Стало: 12345

Види сортування:

  •  Сортування вибором
  •  Бульбашкове сортування
  •  Сортування включенням
  •  Сортування злиттям
  •  Сортування підрахунком
  •  Пірамідальна сортування
  •  Швидке сортування
  •  Сортування деревом

1.3.1 Сортування вибором 

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

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

Цей метод — один з найпростіших, і від працює дуже добре для невеликих файлів. Його «внутрішній цикл» складається з порівняння a[i]<a[min] (плюс код потрібний для збільшення j та перевірки на те, що він не перевищив N), що навряд чи можна ще спростити.

1.3.2 Сортування бульбашкою 

Сортування простими обмінами, сортування бульбашкою (англ. bubble sort) — простий алгоритм сортування. Для розуміння і реалізації цей алгоритм — найпростіший, але ефектив-ний він лише для невеликих масивів. Складність алгоритму: O (n²). Алгоритм вважається нав-чальним і практично не застосовується поза навчальної літератури, замість нього на практиці застосовується сортування вставками.

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

1.3.3 Сортування включенням 

Сортування включенням — простий алгоритм сортування на основі порівнянь. На вели-ких масивах є значно менш ефективним за такі алгоритми, як швидке сортування, пірамідальне сортування та сортування злиттям. Однак, має цілу низку переваг:

  •  простота у реалізації
  •  ефективний (за звичай) на маленьких масивах
  •  ефективний при сортуванні масивів, дані в яких вже непогано відсортовані: про-дуктивність рівна O(n + d), де d — кількість інверсій
  •  на практиці ефективніший за більшість інших квадратичних алгоритмів (O(n2)), як то сортування вибором та сортування бульбашкою: його швидкодія рівна n2/4, і в найкращому випадку є лінійною
  •  є стабільним алгоритмом

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

1.3.4 Сортування злиттям 

Сортування злиттям (англ. merge sort) — алгоритм сортування, який впорядковує списки (або інші структури даних, доступ до елементів яких можна отримувати тільки послідовно, нап-риклад — потоки) в певному порядку. Це сортування — хороший приклад використання прин-ципу «розділяй і володарюй». Спочатку задача розбивається на кілька підзадач меншого розмі-ру. Потім ці задачі вирішуються за допомогою рекурсивного виклику або безпосередньо, якщо їх розмір досить малий. Нарешті, їх рішення комбінуються, і виходить рішення вихідної задачі.

1.3.5 Сортування підрахунком

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

1.3.6 Пірамідальне сортування 

Пірамідальна сортування — алгоритм сортування, що працює в гіршому, в середньому і в кращому випадку (тобто гарантовано) за Θ (n log n) операцій при сортуванні n елементів. Кількість застосовуваної службової пам'яті не залежить від розміру масиву (тобто, O (1)).

1.3.7 Швидке сортування

Швидке сортування (англ. quicksort), часто звана qsort на ім'я реалізації в стандартній бі-бліотеці мови Сі — широко відомий алгоритм сортування, розроблений англійським інформа-тику Чарльзом Хоаром. Один з швидких відомих універсальних алгоритмів сортування масивів (в середньому O(n log n) обмінів при упорядкуванні n елементів), хоча і має ряд недоліків.

1.3.8 Сортування деревом

Сортування за допомогою двійкового дерева (сортування двійковим деревом, сортування деревом, деревна сортування, сортування за допомогою бінарного дерева, англ. Tree sort) — універсальний алгоритм сортування, що полягає в побудові двійкового дерева пошуку по клю-чах масиву (списку), з наступною збіркою результуючого масиву шляхом обходу вузлів побу-дованого дерева в необхідному порядку проходження ключів. Дане сортування є оптимальним при отриманні даних шляхом безпосереднього читання з потоку (наприклад з файлу, сокета або консолі).

2. Структурний опис

Курсова робота виконана у вигляді проекту на мові С, середовище реалізації Code Blocks, дана версія дозволяє створювати додатки для Windows. З наявних недоліків - проблеми з підтримкою російської мови – виникають конфлікти при введенні російськомовної інформації з станрадтного присторю вводу (не підтримується кодування). Щоб усунути ці недоліки, інфор-мація в базі даних наводиться англійською мовою.

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

Програма має загальний інтерфейс у вигляді псевдографічний «Спливаючого» ​​меню ієрарххічної структури .

Мал. 2.1 - Структурна схема програми.

Перегляд – функція перегляду інформації бази даних різними способами (на екрані, за-пис у файл, перегляд даних з обраного файлу);

Редагування – функція редагування бази даних (додати запис, редагувати обраний запис, видалити обраний запис);

Сортування – різноманітні варіанти сортування списку (вакансії по заробітній платі, середню зарплату по професії, погодинну оплату для кожної вакансії);

Пошук – функція пошуку запису за різними критеріями (оплата, професія, робочий день);

Діаграма – відображення діаграми «Вакансії по професії»;

Вихід – вихід з програми.

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

Мал. 2.2 – Загальна схема програми.

Таблиця 2.1 Можливий сценарій діалогу і деякі ілюстрації до нього.

№ п/п

Дії користувача

Реакція програми

Інформація на екрані

1

Запуск програми

Запуск програми і відображен-ня головного меню

Кадр 1

2

Клавіші ←, →, ↓, ↑, Esc, Enter, Space

Вибір користувачем пункту ме-ню чи вихід

3

Вибір пункту «Пере-гляд»

Відображення підменю «Пере-гляд»

Кадр 2

4

Вибір підпункту «На екран» з меню «Пере-гляд»

Відображення змісту бази да-них на екрані

Кадр 3

5

Вибір підпункту «В файл» з меню «Пере-гляд»

Запис змісту бази даних в файл (назва файлу вводиться корис-тувачем)

Кадр 4

6

Вибір підпункту «Із файлу» з меню «Пере-гляд»

Відображення змісту обраного файлу на екрані

Кадр 5

7

Вибір пункту «Редагу-вання»

Відображення підменю «Реда-гування»

Кадр 6

8

Вибір підпункту «До-дати» з меню «Редагу-вання»

Додання запису до бази

Кадр 7

9

Вибір підпункту «Ре-дагувати» з меню «Ре-дагування»

Редагувати обраний запис бази даних

Кадр 8

10

Вибір підпункту «Ви-далити» з меню «Ре-дагування»

Видалити обраний запис з бази даних

Кадр 9

11

Вибір пункту «Сорту-вання»

Відображення підменю «Сорту-вання»

Кадр 10

12

Вибір підпункту «За автором» з меню «Сортування»

Показати відсортований   вакансії по заробітній платі

Кадр 11

13

Вибір підпункту «За назвою» з меню «Сор-тування»

Показати відсортований середню зарплату за професією

Кадр 12

14

Вибір підпункту «Кількість книг за жанрами» з меню «Сортування»

Відображення погодинну оплату для кожної вакансії

Кадр 13

15

Вибір пункту «По-шук»

Відображення підменю «По-шук»

Кадр 14

16

Вибір підпункту «За автором» з ме-ню «Пошук»

Пошук оплата

Кадр 15

17

Вибір підпункту «За назвою» з меню «По-шук»

Пошук професія

Кадр 16

18

Вибір підпункту «За видавництвом» з ме-ню «Пошук»

Пошук робочий день

Кадр 17

19

Вибір пункту «Діагра-ма»

Відображення діаграми «Вакансії по професії»

Кадр 18

20

Вибір пункту «Вихід»

Вихід з програми



Кадр 1 – Головне меню

Кадр 2 – Підменю “Перегляд”

Кадр 3 – Перегляд бази даних на екрані

Кадр 4 – Запис бази даних в файл

Кадр 5 – Перегляд обраного файлу

Кадр 6 – Підменю “Редагування”

Кадр 7 – Додання запису до бази даних

Кадр 8 – Редагування запису бази даних

Кадр 9 – Видалення запису з бази даних

Кадр 10 – Підменю “Сортування”

Кадр 11 – Сортування вакансії по заробітній платі

Кадр 12 – Сортування середню зарплату за професією

Кадр 13 – Погодинну оплату для кожної вакансії

Кадр 14 – Підменю “Пошук”

Кадр 15 – Пошук оплата

Кадр 16 – Пошук професія

Кадр 17 – Пошук робочий день

Кадр 18 – Діаграма “ Вакансії по професії ”

3.Функціональний опис

3.1 Список файлів проекту

Програма складається з 4 файлів:

  •  new kurs.cbp – файл проекту Cоde Blocks;
  •  baza.dat – файл з базою даних
  •  main.c – головна функція програми
  •  new kurs.exe – сама програма

3.2 Типи даних проекту

Загальний тип даних – 1 структура, що зберігає інформацію про особисту праця:

struct _trud{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

             int rab_den;    

       };

Також використовуються змінні типів char, int.

3.3 Опис функцій, що використовуються програмою

  •  showmenu – функція для відображення на екрані головного меню.
  •  gotoxy – функція для отримання можливості переміщення курсору в задану точку. Потрібна для того, щоб можна було друкувати текст в потрібному місці.
  •  clrscr – функція для очистки екрану.
  •  setcolortext – функція для задання кольору тексту та фону.
  •  print – функція для виведення бази даних на екран.
  •  printinfile – функція, що створює файл с заданим ім’ям і друкує в нього зміст бази даних.
  •  printizfile – функція, що друкує на екран зміст вибраного користувачем файлу.
  •  dobavl – функція для додавання нового запису в базу даних. Інформацію зберігає в файлі з базою даних.
  •  izmen – функція для редагування обраного запису з бази даних. Користувач обирає запис, яких хоче змінити і з стандартного пристрою вводу вводить нову інформацію, що буде збережена в базі замість початкової.
  •  udal – функція, що видаляє обраний користувачем запис з бази даних.
  •  sortavt – функція для сортування вакансії по заробітній платі. Використовується бульбашковий метод сортування.
  •  sortnazv – функція для сортування середню зарплату по професії. Використовується бульбашковий метод сортування.
  •  sortjanr – функція, що виводить на екран погодинну оплату для кожної вакансії.
  •  poiskavt – функція для пошуку оплата.
  •  poisknazv – функція для пошуку професія.
  •  poiskizd – функція для пошуку робочий день.
  •  diagr – функція, що видає  на екран діаграму “ Вакансії по професії ”. надруковані різними виданнями та за отриманою інформацією малюється діаграма.

3.4 Робота з програмою

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

Команди меню

“Перегляд”

Мал. 3.1 – Головне меню, пункт “Перегляд”

На екран – перегляд бази даних на екрані.

В файл – друкування бази даних в файл.

З файлу – відкривання файлу та друкування його змісту на екрані.

“Редагування”

Мал. 3.2 – Головне меню, пункт “Редагування”

Додати – додавання нового запису до бази даних.

Змінити – редагування обраного запису.

Видалити – видалення обраного запису з бази даних.

“Сортування”

Мал. 3.3 – Головне меню, пункт “Сортування”

Виведення на екран відсортованого вакансії по заробітній платі.

Виведення на екран відсортованого середню зарплату за професією.

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

“Пошук”

Мал. 3.4 – Головне меню, пункт “Пошук”

Пошук запису бази за оплату.

Пошук запису бази за професію.

Пошук запису бази за робочий день.

“Діаграма”

Мал. 3.5 – Головне меню, пункт “Діаграма”

Виведення на екран діаграми “ Вакансії по професії ”.

“Вихід”

Мал. 3.6 – Головне меню, пункт “Вихід”

Вихід з програми.


4. Висновок

У ході виконання даної роботи був розроблений програмний продукт у відповідності з поставленим завданням і представлено повний його опис.

Розкрито застосовані алгоритми та їх особливості. Наведені описи використаних форма-тів і структур даних.

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

У ході роботи були розроблені власні визначення і прототипи функцій.

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

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

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

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

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

Керниган Б., Рітчі Д. Мова програмування Сі. \ Пер. з англ., 3-е изд., испр. - СПб.: "Невський діалект", 2001. - 252 с.: Ил.

С.Д. Кузнєцов. Методи сортування і пошуку

Вірт Н. Алгоритми та структури даних. М.: Мир. 1989. 360 с.

Кнут Д. Мистецтво програмування. Т.3. Сортування і пошук. М.: «Вільямс», 2007. 832c.

Бочков, Д.М. Суботін «Мова програмування Сі для персонального комп'ютера», - М.: Радіо і зв'язок, 1990. - 384с.

Т.А.Павловская «С / С / С + +. Програмування на високому рівні », - ГГШ: Питер, 2001.-464с.

Л.М.Клімова «С / С + +. Практичне Програмування. Рішення типових завдань », - М: КУДИЦ-ОБРАЗ, 2001. - 592с.

Н.Культін «С / С / С + + в задачах і прикладах», - СПБ.: БХВ, 2003. - 288с.

Х.Дейтл, П.Дейтл «Як програмувати на С / С + +», - М.: БИНОМ, 2000р. -1024с.

Ж.Мееса «Астрономічні формули для калькуляторів», - М.: МИР, 1988

Додаток А

Лістинг програми

#include<stdio.h>

#include<stdlib.h>

#include<ctype.h>

#include<string.h>

#include<windows.h>

#include<locale.h>

void showmenu(int, int);

void gotoxy(int, int );

void clrscr(void);

void SetColorText(int, int);

typedef struct{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

       int rab_den;

   }_temp;

void print();

void printinfile();

void printizfile();

void dobavl();

void izmen();

void udal();

void sortavt();

void sortnazv();

void sortjanr();

void poiskavt();

void poisknazv();

void poiskizd();

void diagr();

void showmenu(int curmenu, int cursubmenu)

{

   SetColorText(2,0);

   gotoxy(5,2); printf("====================================================================");  // рисуем рамку главного меню

   gotoxy(5,4); printf("====================================================================");

   gotoxy(4,3); printf("|");

   char* menu[]={"Просмотр","Редактирование","Сортировка", "Поиск", "Диаграмма", "Выход"};

   char* submenu[]={   "На экран",

                       "В файл",

                       "Из файла",

                       "Добавить",

                       "Изменить",

                       "Удалить",

                       "Вакансии по заработной плате",

                       "Cреднюю зарплату по профессии",

                       "Почасовую оплату для каждой вакансии",

                       "Оплата",

                       "Профессия",

                       "Рабочий день"};

   int i,j,x=0;

   gotoxy(6,3);

   for (i=0; i<6; i++)

   {

       if (i==curmenu && cursubmenu==-1)

           SetColorText(15,20);

       else

           SetColorText(14,0);

       printf("%s", menu[i]);

       x=0;

       for(j=0;j<=i;j++)

       {SetColorText(2,0);

       x=3+x+strlen(menu[j]);

       gotoxy(x+4,3); printf("|");}

       gotoxy(6+x,3);

   }

   SetColorText(11,0);

   gotoxy(5,15);

   printf("Указания:\nВыбор пункта меню - стрелки впра-во/влево/пробел;\nВойти в выбранный пункт - ввод/стрелка вниз;\nВыбор пункта подменю - стрелки вверх/вниз/пробел;\nВернуться в меню - стрелка влево;\nВыход - ESC");

   SetColorText(15,0);

   if (cursubmenu!=-1 && curmenu==0)

   {

        x=3;

        SetColorText(2,0);

        gotoxy(4,5);  printf("+----------------------+"); // рисуем рамку первого подменю

        gotoxy(4,9);  printf("+----------------------+");

        gotoxy(4,6);  printf("|"); gotoxy(4,7);printf("|");

        gotoxy(27,6);  printf("|"); gotoxy(27,7); printf("|");

        gotoxy(4,8);  printf("|");gotoxy(27,8); printf("|");

        gotoxy(6,6);

        if (cursubmenu==0)

           SetColorText(15,20);

        else

           SetColorText(15,0);

        printf("%s",submenu[0]);

        gotoxy(6,7);

        if (cursubmenu==1)

           SetColorText(15,20);

        else

           SetColorText(15,0);

        printf("%s",submenu[1]);

        gotoxy(6,8);

        if (cursubmenu==2)

           SetColorText(15,20);

        else

           SetColorText(15,0);

       printf("%s",submenu[2]);

   }

   else

   if (cursubmenu!=-1 && curmenu==1)

   {

        SetColorText(2,0);

        gotoxy(15,5);  printf("+----------------------+"); // рисуем рамку второго подменю

        gotoxy(15,9);  printf("+----------------------+");

        gotoxy(15,6);  printf("|"); gotoxy(15,7);printf("|");

        gotoxy(38,6);  printf("|"); gotoxy(38,7); printf("|");

        gotoxy(15,8);  printf("|"); gotoxy(38,8); printf("|");

        gotoxy(17,6);

        if (cursubmenu==0)

           SetColorText(15,20);

        else

           SetColorText(15,0);

        printf("%s",submenu[3]);

        gotoxy(17,7);

        if (cursubmenu==1)

           SetColorText(15,20);

        else

           SetColorText(15,0);

        printf("%s",submenu[4]);

        gotoxy(17,8);

        if (cursubmenu==2)

           SetColorText(15,20);

        else

           SetColorText(15,0);

       printf("%s",submenu[5]);

   }

   else

   if (cursubmenu!=-1 && curmenu==2)

   {

        SetColorText(2,0);

        gotoxy(32,5);  printf("+--------------------------------------+"); // рисуем рамку третьего подменю

        gotoxy(32,9);  printf("+--------------------------------------+");

        gotoxy(32,6);  printf("|"); gotoxy(32,7);printf("|");

        gotoxy(55,6);  printf("|"); gotoxy(55,7); printf("|");

        gotoxy(32,8);  printf("|"); gotoxy(55,8); printf("|");

        gotoxy(34,6);

        if (cursubmenu==0)

           SetColorText(15,20);

        else

           SetColorText(15,0);

        printf("%s",submenu[6]);

        gotoxy(34,7);

        if (cursubmenu==1)

           SetColorText(15,20);

        else

           SetColorText(15,0);

        printf("%s",submenu[7]);

        gotoxy(34,8);

        if (cursubmenu==2)

           SetColorText(15,20);

        else

           SetColorText(15,0);

       printf("%s",submenu[8]);

   }

   else

   if (cursubmenu!=-1 && curmenu==3)

   {

        SetColorText(2,0);

        gotoxy(45,5);  printf("+----------------------+"); // рисуем рамку четвертого подменю

        gotoxy(45,9);  printf("+----------------------+");

        gotoxy(45,6);  printf("|"); gotoxy(45,7);printf("|");

        gotoxy(68,6);  printf("|"); gotoxy(68,7); printf("|");

        gotoxy(45,8);  printf("|"); gotoxy(68,8); printf("|");

        gotoxy(47,6);

        if (cursubmenu==0)

           SetColorText(15,20);

        else

           SetColorText(15,0);

        printf("%s",submenu[9]);

        gotoxy(47,7);

        if (cursubmenu==1)

           SetColorText(15,20);

        else

           SetColorText(15,0);

        printf("%s",submenu[10]);

        gotoxy(47,8);

        if (cursubmenu==2)

           SetColorText(15,20);

        else

           SetColorText(15,0);

       printf("%s",submenu[11]);

   }

    SetColorText(15,0);

}

int main()

{

   setlocale( LC_ALL,"Russian" );

   //SetConsoleOutputCP(1251);

   char* menu[]={"Просмотр","Редактирование","Сортировка", "Поиск", "Диаграмма", "Выход"};

   char* submenu[]={  "На экран",

                       "В файл",

                       "Из файла",

                       "Добавить",

                       "Изменить",

                       "Удалить",

                       "Вакансии по заработной плате",

                       "Cреднюю зарплату по профессии",

                       "Почасовую оплату для каждой вакансии",

                       "Оплата",

                       "Профессия",

                       "Рабочий день"};

   int c=1;

   int curmenu=0;

   int cursubmenu=-1;

   int i=0,n,j,x;

   int k=0;

   //*********МЕНЮ**********

   while (c!=27)  // пока не нажата кнопка Esc

   {

          clrscr();

          showmenu(curmenu, cursubmenu); // показываем меню

          c=getch(); // ждем действий пользователя

       if (cursubmenu==-1)  // если подменю не раскрыто

       {

          switch (c)

          {

            case 72:  cursubmenu=-1;  // вверх

                      break;

            case 13:   if (curmenu==5)//enter

                      {

                          gotoxy(5,10);

                          return 1;

                      }

                   //************* Диограмма

                       if (curmenu==4)

                        {diagr();

                        break;}

            case 80:  cursubmenu=0;;  // вниз

                      if (curmenu==5)

                        cursubmenu=-1;

                      break;

            case 75:  curmenu--;  // влево

                      break;

           case 32:

           case 77:  curmenu++;  // вправо

                      break;

          }

          if (curmenu<0)

            curmenu=5;

          if (curmenu>5)

            curmenu=0;

       }

       else  // если подменю показано

       {

           switch (c)

          {

            case 72:  cursubmenu--;  // вверх

                      if (cursubmenu<0)

                        cursubmenu=2;

                      break;

            case 80:              // пробел

            case 32:  cursubmenu++;  // вниз

                      if (cursubmenu>2)

                         cursubmenu=0;

                      break;

            case 75:  cursubmenu=-1;  // влево

                      break;

            case 13:  clrscr(); gotoxy(0,1); SetColorText(15,0);

                      //********** Печать базы данных на экран

                      if (cursubmenu==0 && curmenu==0)

                       print();

                      //********** Печать базы данных в файл

                      if (cursubmenu==1 && curmenu==0)

                       printinfile();

                      //********** Печать базы данных из файла на экран

                      if (cursubmenu==2 && curmenu==0)

                       printizfile();

                      //********* Добавление записи в базу

                      if (cursubmenu==0 && curmenu==1)

                       dobavl();

                       //********** Изменение записи

                       if (cursubmenu==1 && curmenu==1)

                        izmen();

                       //********** Удаление записи

                       if (cursubmenu==2 && curmenu==1)

                        udal();

                       //********* Сортировка Вакансии по заработной плате

                       if (cursubmenu==0 && curmenu==2)

                        sortavt();

                       //************ Сортировка Cреднюю зарплату по профессии

                       if (cursubmenu==1 && curmenu==2)

                        sortnazv();

                       //*********** Почасовую оплату для каждой вакансии

                       if (cursubmenu==2 && curmenu==2)

                        sortjanr();

                       //************** Поиск Оплата

                       if (cursubmenu==0 && curmenu==3)

                        poiskavt();

                       //************** Поиск Профессия

                       if (cursubmenu==1 && curmenu==3)

                        poisknazv();

                       //************** Поиск Рабочий день

                       if (cursubmenu==2 &&  curmenu==3)

                        poiskizd();

                       break;

          }

       }

   }

   gotoxy(5,10);

   return 0;

}

void gotoxy(int xpos, int ypos){

  COORD scrn;

  HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);

  scrn.X = xpos; scrn.Y = ypos;

  SetConsoleCursorPosition(hOuput,scrn);

}

void SetColorText(int text, int background){

  HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

  SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));

}

void clrscr(void){

  system("cls");

}

void print(){

   FILE *fp;

   char str[300];

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; getch();}

   while(fgets(str,sizeof(str),fp))

       printf("%s",str);

   fclose(fp);

   getch();

}

void printinfile(){

   FILE *fnew;

   FILE *fp;

   char str[300];

   char fname[20];

   SetColorText(14,0);

   printf("Ведите имя файла: ");

   SetColorText(15,0);

   gets (fname);

   if ((fnew = fopen(fname,"w")) == NULL) { perror(fname) ; }

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

   while(fgets(str,sizeof(str),fp))

       fprintf(fnew,"%s",str);

   fclose(fp);

   fclose(fnew);

   SetColorText(14,0);

   printf("Файл создан");

   SetColorText(15,0);

   getch();

}

void printizfile(){

   FILE *fop;

   char str[300];

   char fname[20];

   SetColorText(14,0);

   printf("Ведите имя файла: ");

   SetColorText(15,0);

   gets (fname);

   clrscr();

   if ((fop = fopen(fname,"r")) == NULL) perror(fname);

   while(fgets(str,sizeof(str),fop))

       printf("%s",str);

   fclose(fop);

   getch();

}

void dobavl(){

   FILE *fp;

   int n=0,i=0;

   typedef struct _trud{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

       int rab_den;

   };

   struct _trud *trud=(struct _trud *)malloc(sizeof(struct _trud));

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; getch(); }

   while (!feof(fp))  //feof() проверяет, достигнут ли конец файла

       {

       n=i+1;

       trud = realloc(trud,sizeof(struct _trud)*(n+1));

       fscanf(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);

       i++;

       }

   fclose(fp);

   if ((fp = fopen("baza.dat","a")) == NULL) { perror("1.txt") ; return 1; }

   n++;

   trud = realloc(trud,sizeof(struct _trud)*(n+1));

   SetColorText(14,0);

   printf("\t\tНе используйте пробелы и русские шрифты!\n\n");

   printf("\nВведите фирму: ");

   SetColorText(15,0);

   scanf("%s",&trud[n].firma);

   SetColorText(14,0);

   printf("\nВведите профессию: ");

   SetColorText(15,0);

   scanf("%s",&trud[n].professija);

   SetColorText(14,0);

   printf("\nВведите образование: ");

   SetColorText(15,0);

   scanf("%s",&trud[n].obrazovanie);

   SetColorText(14,0);

   printf("\nВведите оплату: ");

   SetColorText(15,0);

   scanf("%s",&trud[n].oplate);

   SetColorText(14,0);

   printf("\nВведите рабочий день: ");

   SetColorText(15,0);

   scanf("%d",&trud[n].rab_den);

   fprintf(fp, "\n%s %s %s %s %d",trud[n].firma, trud[n].professija, trud[n].obrazovanie, trud[n].oplate, trud[n].rab_den);

   SetColorText(14,0);

   printf("\n\nЗапись добавлена в базу данных");

   SetColorText(15,0);

   getch();

   fclose(fp);

   free(trud);

}

void izmen(){

   FILE *fp;

   int n=0,i=0,k=0;

   typedef struct _trud{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

       int rab_den;

   };

   struct _trud *trud=(struct _trud *)malloc(sizeof(struct _trud));

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

   while (!feof(fp))  //feof() проверяет, достигнут ли конец файла

       {

       n=i+1;

       trud = realloc(trud,sizeof(struct _trud)*(n+1));

       fscanf(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);

       i++;

       }

   fclose(fp);

   if ((fp = fopen("baza.dat","w")) == NULL) { perror("1.txt") ; return 1; }

   for(i=0;i<n;i++)

       printf("%d %s %s %s %s %d\n",i+1,trud[i].firma, trud[i].professija, trud[i].obrazovanie, trud[i].oplate, trud[i].rab_den);

   SetColorText(14,0);

   printf("\nВыберете номер записи, которую хотите изменить: ");

   SetColorText(15,0);

   scanf("%d",&k);

   i=k-1;

   clrscr();

   SetColorText(14,0);

   printf("\t\tНе используйте пробелы и русские шрифты!\n\n");

   printf("\nВведите фирму: ");

   SetColorText(15,0);

   scanf("%s",&trud[n].firma);

   SetColorText(14,0);

   printf("\nВведите профессию: ");

   SetColorText(15,0);

   scanf("%s",&trud[n].professija);

   SetColorText(14,0);

   printf("\nВведите образование: ");

   SetColorText(15,0);

   scanf("%s",&trud[n].obrazovanie);

   SetColorText(14,0);

   printf("\nВведите оплату: ");

   SetColorText(15,0);

   scanf("%s",&trud[n].oplate);

   SetColorText(14,0);

   printf("\nВведите рабочий день: ");

   SetColorText(15,0);

   scanf("%d",&trud[n].rab_den);

   SetColorText(14,0);

   printf("\n\nЗапись отредактирована");

   SetColorText(15,0);

   getch();

   for(i=0;i<n;i++)

       fprintf(fp, "\n%s %s %s %s %d",trud[i].firma, trud[i].professija, trud[i].obrazovanie, trud[i].oplate, trud[i].rab_den);

   fclose(fp);

   free(trud);

}

void udal(){

   FILE *fp;

   int n=0,i=0,k=0;

   typedef struct _trud{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

       int rab_den;

   };

   struct _trud *trud=(struct _trud *)malloc(sizeof(struct _trud));

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

   while (!feof(fp))  //feof() проверяет, достигнут ли конец файла

       {

       n=i+1;

       trud = realloc(trud,sizeof(struct _trud)*(n+1));

       fscanf(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);

       i++;

       }

   fclose(fp);

   if ((fp = fopen("baza.dat","w")) == NULL) { perror("1.txt") ; return 1; }

   for(i=0;i<n;i++)

       printf("%d %s %s %s %s %d\n",i+1,trud[i].firma, trud[i].professija, trud[i].obrazovanie, trud[i].oplate, trud[i].rab_den);

   SetColorText(14,0);

   printf("\nВыберете номер записи, которую хотите удалить: ");

   SetColorText(15,0);

   scanf("%d",&k);

   for(i=k-1;i<n;i++)

       {

       strcpy(trud[i].firma,trud[i+1].firma);

       strcpy(trud[i].professija,trud[i+1].professija);

       strcpy(trud[i].obrazovanie,trud[i+1].obrazovanie);

       strcpy(trud[i].oplate,trud[i+1].oplate);

       trud[i].rab_den=trud[i+1].rab_den;

       }

   n--;

   trud = realloc(trud,sizeof(struct _trud)*n);

   SetColorText(14,0);

   printf("\n\nЗапись удалена");

   getch();

   for(i=0;i<n;i++)

   fprintf(fp, "\n%s %s %s %s %d",trud[i].firma, trud[i].professija, trud[i].obrazovanie, trud[i].oplate, trud[i].rab_den);

   fclose(fp);

   free(trud);

}

//-----------------------------------------------------------------------------------

void sortavt(){

   FILE *fp;

   int n=0,i=0,j=0;

    typedef struct _trud{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

       int rab_den;

   };

   struct _trud *trud=(struct _trud *)malloc(sizeof(struct _trud));

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

   while (!feof(fp))  //feof() проверяет, достигнут ли конец файла

       {

       n=i+1;

       trud = realloc(trud,sizeof(struct _trud)*(n+1));

       fscanf(fp,"%d %s %d %d %d %s",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);

       i++;

       }

   fclose(fp);

   _temp temp[1];

   for (j=0; j<n; j++) // для повторов (проходов)

       for (i=0; i<n; i++)

           if(memcmp(trud[i+1].oplate,trud[i].oplate,20)>0)

               {

               strcpy(temp[0].firma,trud[i].firma);

               strcpy(temp[0].professija,trud[i].professija);

               strcpy(temp[0].obrazovanie,trud[i].obrazovanie);

               strcpy(temp[0].oplate,trud[i].oplate);

               temp[0].rab_den=trud[i].rab_den;

               strcpy(trud[i].firma,trud[i+1].firma);

               strcpy(trud[i].professija,trud[i+1].professija);

               strcpy(trud[i].obrazovanie,trud[i+1].obrazovanie);

               strcpy(trud[i].oplate,trud[i+1].oplate);

               trud[i].rab_den=trud[i+1].rab_den;

               strcpy(trud[i+1].firma,temp[0].firma);

               strcpy(trud[i+1].professija,temp[0].professija);

               strcpy(trud[i+1].obrazovanie,temp[0].obrazovanie);

               strcpy(trud[i+1].oplate,temp[0].oplate);

               trud[i+1].rab_den=temp[0].rab_den;

               }

   for(i=n;i>0;i--)

       printf("%%d %s %d %d %d %s\n",trud[i].firma, trud[i].professija, trud[i].obrazovanie, trud[i].oplate, trud[i].rab_den);

   getch();

   free(trud);

}

//---------------------------------------------------------------------------------------------------------------

void sortnazv(){

   FILE *fp;

   int n=0,i=0,j=0;

   typedef struct _trud{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

       int rab_den;

   };

   struct _trud *trud=(struct _trud *)malloc(sizeof(struct _trud));

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ;  }

   while (!feof(fp))  //feof() проверяет, достигнут ли конец файла

       {

       n=i+1;

       trud = realloc(trud,sizeof(struct _trud)*(n+1));

       fscanf(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);

       i++;

       }

   fclose(fp);

   _temp temp[1];

   for (j=0; j<n-1; ++j) // для повторов (проходов)

       for (i=0; i<n-1; ++i)

           if(memcmp(trud[i].professija,trud[i+1].professija,30)>0)

               {

               strcpy(temp[0].firma,trud[i].firma);

               strcpy(temp[0].professija,trud[i].professija);

               strcpy(temp[0].obrazovanie,trud[i].obrazovanie);

               strcpy(temp[0].oplate,trud[i].oplate);

               temp[0].rab_den=trud[i].rab_den;

               strcpy(trud[i].firma,trud[i+1].firma);

               strcpy(trud[i].professija,trud[i+1].professija);

               strcpy(trud[i].obrazovanie,trud[i+1].obrazovanie);

               strcpy(trud[i].oplate,trud[i+1].oplate);

               trud[i].rab_den=trud[i+1].rab_den;

               strcpy(trud[i+1].firma,temp[0].firma);

               strcpy(trud[i+1].professija,temp[0].professija);

               strcpy(trud[i+1].obrazovanie,temp[0].obrazovanie);

               strcpy(trud[i+1].oplate,temp[0].oplate);

               trud[i+1].rab_den=temp[0].rab_den;

               }

   for(i=0;i<n;i++)

       printf("%s %s %s %s %d\n",trud[i].firma, trud[i].professija, trud[i].obrazovanie, trud[i].oplate, trud[i].rab_den);

   getch();

   free(trud);

}

//-----------------------------------------------------------------------------

void sortjanr(){

   FILE *fp;

   int n=0,i=0,j=0,k=0;

   typedef struct _trud{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

       int rab_den;

   };

   struct _trud *trud=(struct _trud *)malloc(sizeof(struct _trud));

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

   while (!feof(fp))  //feof() проверяет, достигнут ли конец файла

       {

       n=i+1;

       trud = realloc(trud,sizeof(struct _trud)*(n+1));

       fscanf(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);

       i++;

       }

   fclose(fp);

   _temp temp[1];

   for (j=0; j<n; j++) // для повторов (проходов)

       for (i=0; i<n; i++)

           if(memcmp(trud[i+1].rab_den,trud[i].rab_den,10)>0)

               {

               strcpy(temp[0].firma,trud[i].firma);

               strcpy(temp[0].professija,trud[i].professija);

               strcpy(temp[0].obrazovanie,trud[i].obrazovanie);

               strcpy(temp[0].oplate,trud[i].oplate);

               temp[0].rab_den=trud[i].rab_den;

               strcpy(trud[i].firma,trud[i+1].firma);

               strcpy(trud[i].professija,trud[i+1].professija);

               strcpy(trud[i].obrazovanie,trud[i+1].obrazovanie);

               strcpy(trud[i].oplate,trud[i+1].oplate);

               trud[i].rab_den=trud[i+1].rab_den;

               strcpy(trud[i+1].firma,temp[0].firma);

               strcpy(trud[i+1].professija,temp[0].professija);

               strcpy(trud[i+1].obrazovanie,temp[0].obrazovanie);

               strcpy(trud[i+1].oplate,temp[0].oplate);

               trud[i+1].rab_den=temp[0].rab_den;

               }

   k=1;

   for(i=0; i<n; i++)

       if(memcmp(trud[i].rab_den,trud[i+1].rab_den,5)==0)

           k++;

       else {

           printf("%s - %d\n",trud[i].rab_den,k);

           k=1;

           }

   getch();

   free(trud);

}

//------------------------------------------------------------------------------------------

void poiskavt(){

   FILE *fp;

   int n=0,i=0,x=0;

   char str[300];

   typedef struct _trud{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

       int rab_den;

   };

   struct _trud *trud=(struct _trud *)malloc(sizeof(struct _trud));

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

   while (!feof(fp))  //feof() проверяет, достигнут ли конец файла

       {

       n=i+1;

       trud = realloc(trud,sizeof(struct _trud)*(n+1));

       fscanf(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);

       i++;

       }

   fclose(fp);

   SetColorText(14,0);

   printf("Введите желаемого вакансии по заработной плате: ");

   SetColorText(15,0);

   gets(str);

   SetColorText(14,0);

   printf("\nРезультаты поиска: \n");

   SetColorText(15,0);

   x=0;

   for(i=0;i<n;i++)

       if(memicmp(str,trud[i].oplate,strlen(str))==0)

           {   SetColorText(15,3);

           printf("%s",trud[i].oplate);

           SetColorText(15,0);

           printf(" %s %s %s %4d\n",trud[i].firma, trud[i].professija, trud[i].obrazovanie, trud[i].rab_den);

           x=1;}

   if(x==0)

       {SetColorText(14,0);

       printf("Вакансии по заработной плате не найдены");

       SetColorText(15,0);}

   getch();

   free(trud);

}

//---------------------------------------------------------------------------------------------------------------

void poisknazv(){

   FILE *fp;

   int n=0,i=0,k=0;

   char str[300];

   typedef struct _trud{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

       int rab_den;

   };

   struct _trud *trud=(struct _trud *)malloc(sizeof(struct _trud));

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

   while (!feof(fp))  //feof() проверяет, достигнут ли конец файла

       {

       n=i+1;

       trud = realloc(trud,sizeof(struct _trud)*(n+1));

       fscanf(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);

       i++;

       }

   fclose(fp);

   SetColorText(14,0);

   printf("Введите среднюю зарплату по профессии: ");

   SetColorText(15,0);

   gets(str);

   SetColorText(14,0);

   printf("\nРезультаты поиска: \n");

   SetColorText(15,0);

   k=0;

   for(i=0;i<n;i++)

       if(memicmp(str,trud[i].professija,strlen(str))==0)

           {

           printf("%s ",trud[i].professija);

           SetColorText(15,3);

           printf("%s",trud[i].professija);

           SetColorText(15,0);

           printf("%s %s %4d\n",trud[i].firma, trud[i].obrazovanie, trud[i].oplate, trud[i].rab_den);

           k=1;}

   if(k!=1)

       {SetColorText(14,0);

       printf("Среднюю зарплату по профессии не найдено");

       SetColorText(15,0);}

   getch();

   free(trud);

}

//---------------------------------------------------------------------------------------------------------------

void poiskizd(){

   FILE *fp;

   int n=0,i=0,k=0;

   char str[300];

   typedef struct _trud{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

       int rab_den;

   };

   struct _trud *trud=(struct _trud *)malloc(sizeof(struct _trud));

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

   while (!feof(fp))  //feof() проверяет, достигнут ли конец файла

       {

       n=i+1;

       trud = realloc(trud,sizeof(struct _trud)*(n+1));

       fscanf(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);

       i++;

       }

   fclose(fp);

   SetColorText(14,0);

   printf("Введите почасовую оплату для каждой вакансии: ");

   SetColorText(15,0);

   gets(str);

   SetColorText(14,0);

   printf("\nРезультаты поиска: \n");

   SetColorText(15,0);

   k=0;

   for(i=0;i<n;i++)

       if(memicmp(str,trud[i].rab_den,strlen(str))==0)

           {printf("%s %s ",trud[i].oplate, trud[i].professija);

           SetColorText(15,3);

           printf("%s",trud[i].rab_den);

           SetColorText(15,0);

           printf("%s %4d\n",trud[i].firma, trud[i].obrazovanie);

           k=1;}

   if(k!=1)

       {SetColorText(14,0);

       printf("Почасовую оплату для каждой вакансии не найдена");

       SetColorText(15,0);}

   getch();

   free(trud);

}

//-----------------------------------------------------------------------------------

void diagr(){

   FILE *fp;

   int n=0,i=0,k=0,x=0,j=0;

   char str[300];

   typedef struct _trud{

       char firma[10];

       char professija[30];

       char obrazovanie[40];

       char oplate[50];

       int rab_den;

   };

   struct _trud *trud=(struct _trud *)malloc(sizeof(struct _trud));

   if ((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

   while (!feof(fp))  //feof() проверяет, достигнут ли конец файла

       {

       n=i+1;

       trud = realloc(trud,sizeof(struct _trud)*(n+1));

       fscanf(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);

       i++;

       }

   fclose(fp);

   clrscr(); gotoxy(0,1); SetColorText(14,0);

   printf("\n\n                          Вакансии по профессии:\n\n");

   _temp temp[1];

   for (j=0; j<n; j++) // для повторов (проходов)

       for (i=0; i<n; i++)

           if(memcmp(trud[i+1].professija,trud[i].professija,10)>0)

               {

               strcpy(temp[0].firma,trud[i].firma);

               strcpy(temp[0].professija,trud[i].professija);

               strcpy(temp[0].obrazovanie,trud[i].obrazovanie);

               strcpy(temp[0].oplate,trud[i].oplate);

               temp[0].rab_den=trud[i].rab_den;

               strcpy(trud[i].firma,trud[i+1].firma);

               strcpy(trud[i].professija,trud[i+1].professija);

               strcpy(trud[i].obrazovanie,trud[i+1].obrazovanie);

               strcpy(trud[i].oplate,trud[i+1].oplate);

               trud[i].rab_den=trud[i+1].rab_den;

               strcpy(trud[i+1].firma,temp[0].firma);

               strcpy(trud[i+1].professija,temp[0].professija);

               strcpy(trud[i+1].obrazovanie,temp[0].obrazovanie);

               strcpy(trud[i+1].oplate,temp[0].oplate);

               trud[i+1].rab_den=temp[0].rab_den;

               }

   k=1;

   x=8;gotoxy(5,x);

   for(i=0; i<n; i++)

       if(memcmp(trud[i].professija,trud[i+1].professija,5)==0)

           k++;

       else {

           SetColorText(11,0);

           printf("%s - %d\n\n",trud[i].professija,k);

           int col,r,c,q;

           gotoxy(42,x);

           SetColorText(x-6,x-6);

           for(r=1;r<=10*k;r++){

           for(q=0;q<=30000000;q++);//to display the character slowly

           printf("%c",167);}

           gotoxy(5,1+x);

           x++;

           k=1;

           }

   SetColorText(15,0);

   getch();

   free(trud);

}




1. Введение в культуру Англии Вопросы- Основные факторы динамического развития английской культуры Э
2. ТЕМА КОНСТРУКТОРСКОЙ ДОКУМЕНТАЦИИ ШРИФТЫ ЧЕРТЕЖНЫЕ ГОСТ 2
3. тематическое естествознание появилось не везде
4. Мировоззрение- сущность и структура
5. Статья 1. Основные понятия В настоящем Законе используются следующие понятия- 1 молодежь социальнодемо
6. Вычислительная система обработки данных в реальном времен
7. Какую биографию делают юноше
8. Любое предприятие является юридическим лицом имеет законченную систему учета и отчетности самостоятель
9. Тема 11 Организация бухгалтерского учета Хозяйственный учет его сущность и значение
10. з курсу ldquo;Органічна хіміяrdquo; ЕЛЕМЕНТИ БІООРГАНІЧНОЇ ХІМІЇ Методична розробка доц.html
11. а 1917 в Смільному в Петрограді зіграв всесвітньоісторичну роль і відкрив еру соціалістичної революції
12. Основні і оборотні засоби в сільському господарстві Засоби виробництва і принципи їх поділу на основн
13. Основные исторические периоды древней Греции
14. 3474 89184411145 Весна в Абхазии особенная
15. Тема- Покров Пресвятой Богородицы План- Введение
16. Тюменский государственный нефтегазовый университет очная форма 2012 году в Федеральном государст
17. Государственные природные заповедники
18. Фамилия имя отчество 2
19. тема римского частного права
20. Высокомолекулярные соединения и поверхностно активные вещества