База даних "Біржа праці"

Розробка бази даних мовою С для задачі "Біржа праці". Методи організації та зберігання лінійних списків. Операції зі списками при послідовному збереженні. Сортування підрахунком, злиттям, включенням, вибором. Опис функцій, що використовуються програмою.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 04.03.2015
Размер файла 478,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

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

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

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

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

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

2014

Реферат

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

{ ... } на відміну від ALGOL'івського begin ... end.

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

два знаки рівності використовуються для перевірки рівності (подібно до .EQ. у Fortran'і або одного знаку рівності у BASIC)

&& та || на відміну від ALGOL'івських and та or (цим вона семантично відрізняється від бітових операторів & та |).

велика кількість операторів об'єднання, на кшталт +=, ++, ……

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

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

Відсутність автоматичного керування пам'яттю (збір сміття)

Відсутня перевірка меж масиву

Відсутність напівдинамічних масивів аж до С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

Клавіші <, >, v, ^, 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 - Головне меню, пункт “Вихід”

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

Висновок

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

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

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

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

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

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

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

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

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

Керниган Б., Рітчі Д. Мова програмування Сі. \ Пер. з англ., 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=k1;

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=k1;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<n1; ++j) // для повторов (проходов)

for (i=0; i<n1; ++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;


Подобные документы

  • Засоби організації збереження і обробки даних для графічних програм. Операції зі списками при послідовному збереженні, при зв'язному збереженні. Реалізація стеков і черг у програмі. Стиснуте й індексне збереження лінійних списків. Основний модуль golf.c.

    курсовая работа [57,1 K], добавлен 24.03.2009

  • Опис предметної області. Визначення проблеми та постановка задачі. Проектування бази даних. Концептуальна модель. Логічна модель. Фізична модель. Розробка програмних модулів.

    курсовая работа [136,3 K], добавлен 14.07.2007

  • Розробка бази даних "Автовокзал". Функціональні залежності між атрибутами. Ідентифікація атрибутів, які в реляційної моделі даних використовуються в якості первинних ключів реляційних відносин. Організація вибірки інформації з бази за допомогою запиту.

    курсовая работа [35,6 K], добавлен 19.08.2012

  • Теоретичні відомості про пакет ІЗВП Borland Delphi та СУБД MS Access, оцінка їх функціональних особливостей. Опис структури бази даних. Проектування інтерфейсу програми, опис її логічної структури та функцій. Контроль коректності вхідних, вихідних даних.

    курсовая работа [4,5 M], добавлен 03.01.2014

  • Аналіз предметної галузі, постановка задачі, проектування бази даних. UML-моделювання, побудова ER-діаграми, схеми реляційної бази даних у третій нормальній формі. Призначення і логічна структура. Опис фізичної моделі бази даних, програмної реалізації.

    курсовая работа [3,5 M], добавлен 28.11.2011

  • Використання баз даних та інформаційних систем. Поняття реляційної моделі даних. Ключові особливості мови SQL. Агрегатні функції і угрупування даних. Загальний опис бази даних. Застосування технології систем управління базами даних в мережі Інтернет.

    курсовая работа [633,3 K], добавлен 11.07.2015

  • Поняття та переваги реляційної бази, автоматизація аналізу даних. Опис основних компонентів сховища даних AS/400. Процес перетворення оперативних даних в інформаційні. Багатовимірні бази даних (MDD). Опис даних і створення файлів в інтеграційних базах.

    реферат [36,8 K], добавлен 14.01.2012

  • Розробка структури бази даних. ER-моделі предметної області. Проектування нормалізованих відношень. Розробка форм, запитів, звітів бази даних "Автосалон". Тестування роботи бази даних. Демонстрація коректної роботи форми "Додавання даних про покупців".

    курсовая работа [4,0 M], добавлен 02.12.2014

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

    курсовая работа [147,2 K], добавлен 02.06.2019

  • База даних як організована структура, призначена для зберігання інформації. Проектування та реалізація в СУБД MS Access інформаційної системи "База даних Internet-ресурсів тестів з психології". Розробка логічної системи даних, інструкції користувача.

    курсовая работа [5,3 M], добавлен 22.10.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.