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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    151,6 Кб
  • Опубликовано:
    2015-02-20
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

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

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

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









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

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














Реферат

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

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

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

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

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

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

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

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

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

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

Фірма - текстовий, 10 знаків;

Професія - текстовий, 30 знаків;

Освіта - текстовий, 40 знаків;

Оплата - текстовий, 50 знаків;

Робочий день - цілочисельний.

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

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

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

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

Відсортований середню зарплату по професії;

Обчислити погодинну оплату для кожної вакансії;

Діаграма “ Вакансії по професії ”.

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

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

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

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

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

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

перегляд масиву даних;

редагування, додавання, видалення даних;

збереження масиву даних у файлі;

завантаження масиву даних з файлу;

сортування масив даних за різними критеріями;

пошук в масиві даних;

виконання відповідних звітів і побудова графіка.

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

.1 Особливості мови С

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

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

С імовірно, є найпопулярнішою у світі мовою програмування за кількістю вже написаного нею програмного забезпечення, доступного під вільними ліцензіями коду та кількості програмістів, котрі її знають. Версії компіляторів для мови С існують для багатьох операційних систем та апаратних архітектур. C здійснила великий вплив на інші мови програмування, особливо на C++, яка спочатку проектувалася, як розширення для С, а також на Java та 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. Однак знову ж, є суперечливою сама потреба вкладених функцій.)

Відсутність обробки винятків

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

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

Відсутність підтримки об'єктноорієнтованого програмування

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

Відсутність стандартних бібліотек для роботи з графікою та деяких інших бібліотек для прикладного програмування

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

.2 Лінійні списки

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

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

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

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

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

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

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

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

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

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

Одержати доступом до kму вузлу списку, щоб проаналізувати і/або змінити вміст його полів.

Включити новий вузол безпосередньо перед kым вузлом.

Виключити kй вузол.

Об'єднати два (чи більше) лінійних списку на один список.

Розбити лінійний список на два (чи більше) списку.

Зробити копію лінійного списку.

Визначити кількість вузлів у списку.

Виконати сортування вузлів списку на зростаючу котячу порядку за деяким полях в вузлах.

Знайти у списку вузол з заданим значенням у певному полі.

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

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

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

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

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

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

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

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

Бульбашкове сортування

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

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

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

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

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

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

1.3.1 Сортування вибором <#"792109.files/image001.jpg">

Мал. 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;.dat - файл з базою даних

main.c - головна функція програмиkurs.exe - сама програма

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

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

struct _trud{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

};

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

база даний список сортування

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

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

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>showmenu(int, int);gotoxy(int, int );clrscr(void);SetColorText(int, int);struct{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

}_temp;print();printinfile();printizfile();dobavl();izmen();udal();sortavt();sortnazv();sortjanr();poiskavt();poisknazv();poiskizd();diagr();showmenu(int curmenu, int cursubmenu)

{(2,0);(5,2); printf("===================================================================="); // рисуем рамку главного меню(5,4); printf("====================================================================");(4,3); printf("|");* menu[]={"Просмотр","Редактирование","Сортировка", "Поиск", "Диаграмма", "Выход"};

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

"В файл",

"Из файла",

"Добавить",

"Изменить",

"Удалить",

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

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

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

"Оплата",

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

"Рабочий день"};i,j,x=0;

gotoxy(6,3);(i=0; i<6; i++)

{(i==curmenu && cursubmenu==1)(15,20);(14,0);("%s", menu[i]);=0;(j=0;j<=i;j++)

{SetColorText(2,0);=3+x+strlen(menu[j]);(x+4,3); printf("|");}(6+x,3);

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

SetColorText(15,0);(cursubmenu!=1 && curmenu==0)

{=3;(2,0);(4,5); printf("++"); // рисуем рамку первого подменю(4,9); printf("++");(4,6); printf("|"); gotoxy(4,7);printf("|");(27,6); printf("|"); gotoxy(27,7); printf("|");(4,8); printf("|");gotoxy(27,8); printf("|");(6,6);(cursubmenu==0)(15,20);(15,0);("%s",submenu[0]);(6,7);(cursubmenu==1)(15,20);(15,0);("%s",submenu[1]);(6,8);(cursubmenu==2)(15,20);(15,0);("%s",submenu[2]);

}(cursubmenu!=1 && curmenu==1)

{(2,0);(15,5); printf("++"); // рисуем рамку второго подменю(15,9); printf("++");(15,6); printf("|"); gotoxy(15,7);printf("|");(38,6); printf("|"); gotoxy(38,7); printf("|");(15,8); printf("|"); gotoxy(38,8); printf("|");(17,6);(cursubmenu==0)(15,20);(15,0);("%s",submenu[3]);(17,7);(cursubmenu==1)(15,20);(15,0);("%s",submenu[4]);(17,8);(cursubmenu==2)(15,20);(15,0);("%s",submenu[5]);

}(cursubmenu!=1 && curmenu==2)

{(2,0);(32,5); printf("++"); // рисуем рамку третьего подменю(32,9); printf("++");(32,6); printf("|"); gotoxy(32,7);printf("|");(55,6); printf("|"); gotoxy(55,7); printf("|");(32,8); printf("|"); gotoxy(55,8); printf("|");(34,6);(cursubmenu==0)(15,20);(15,0);("%s",submenu[6]);(34,7);(cursubmenu==1)(15,20);(15,0);("%s",submenu[7]);(34,8);(cursubmenu==2)(15,20);(15,0);("%s",submenu[8]);

}(cursubmenu!=1 && curmenu==3)

{(2,0);(45,5); printf("++"); // рисуем рамку четвертого подменю(45,9); printf("++");(45,6); printf("|"); gotoxy(45,7);printf("|");(68,6); printf("|"); gotoxy(68,7); printf("|");(45,8); printf("|"); gotoxy(68,8); printf("|");(47,6);(cursubmenu==0)(15,20);(15,0);("%s",submenu[9]);(47,7);(cursubmenu==1)(15,20);(15,0);("%s",submenu[10]);(47,8);(cursubmenu==2)(15,20);(15,0);("%s",submenu[11]);

}(15,0);

}main()

{( LC_ALL,"Russian" );

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

"В файл",

"Из файла",

"Добавить",

"Изменить",

"Удалить",

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

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

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

"Оплата",

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

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

int curmenu=0;cursubmenu=1;i=0,n,j,x;

int k=0;

//*********МЕНЮ**********(c!=27) // пока не нажата кнопка Esc

{();(curmenu, cursubmenu); // показываем меню=getch(); // ждем действий пользователя(cursubmenu==1) // если подменю не раскрыто

{(c)

{72: cursubmenu=1; // вверх;13: if (curmenu==5)//enter

{(5,10);1;

}

//************* Диограмма(curmenu==4)

{diagr();;}80: cursubmenu=0;; // вниз(curmenu==5)=1;;75: curmenu; // влево;32:77: curmenu++; // вправо;

}(curmenu<0)=5;(curmenu>5)

curmenu=0;

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

{

switch (c)

{72: cursubmenu; // вверх(cursubmenu<0)=2;;80: // пробел32: cursubmenu++; // вниз(cursubmenu>2)=0;;75: cursubmenu=1; // влево;13: clrscr(); gotoxy(0,1); SetColorText(15,0);

//********** Печать базы данных на экран(cursubmenu==0 && curmenu==0)();

//********** Печать базы данных в файл(cursubmenu==1 && curmenu==0)();

//********** Печать базы данных из файла на экран(cursubmenu==2 && curmenu==0)();

//********* Добавление записи в базу(cursubmenu==0 && curmenu==1)();

//********** Изменение записи(cursubmenu==1 && curmenu==1)();

//********** Удаление записи(cursubmenu==2 && curmenu==1)();

//********* Сортировка Вакансии по заработной плате(cursubmenu==0 && curmenu==2)();

//************ Сортировка Cреднюю зарплату по профессии(cursubmenu==1 && curmenu==2)();

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

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

//************** Поиск Оплата(cursubmenu==0 && curmenu==3)();

//************** Поиск Профессия(cursubmenu==1 && curmenu==3)();

//************** Поиск Рабочий день(cursubmenu==2 && curmenu==3)();;

}

}

}(5,10);0;

}gotoxy(int xpos, int ypos){scrn;hOuput = GetStdHandle(STD_OUTPUT_HANDLE);.X = xpos; scrn.Y = ypos;(hOuput,scrn);

}SetColorText(int text, int background){hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);(hStdOut, (WORD)((background << 4) | text));

}clrscr(void){("cls");

}print(){*fp;str[300];((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; getch();}(fgets(str,sizeof(str),fp))("%s",str);(fp);();

}printinfile(){*fnew;*fp;str[300];fname[20];(14,0);("Ведите имя файла: ");(15,0);(fname);((fnew = fopen(fname,"w")) == NULL) { perror(fname) ; }((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }(fgets(str,sizeof(str),fp))(fnew,"%s",str);(fp);(fnew);(14,0);("Файл создан");(15,0);();

}printizfile(){*fop;str[300];fname[20];(14,0);("Ведите имя файла: ");(15,0);(fname);();((fop = fopen(fname,"r")) == NULL) perror(fname);(fgets(str,sizeof(str),fop))("%s",str);(fop);();

}dobavl(){*fp;n=0,i=0;struct _trud{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

};_trud *trud=(struct _trud *)malloc(sizeof(struct _trud));((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; getch(); }

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

{=i+1;= realloc(trud,sizeof(struct _trud)*(n+1));(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);++;

}(fp);((fp = fopen("baza.dat","a")) == NULL) { perror("1.txt") ; return 1; }++;= realloc(trud,sizeof(struct _trud)*(n+1));

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

printf("\nВведите фирму: ");(15,0);("%s",&trud[n].firma);(14,0);("\nВведите профессию: ");(15,0);("%s",&trud[n].professija);(14,0);("\nВведите образование: ");(15,0);("%s",&trud[n].obrazovanie);(14,0);("\nВведите оплату: ");(15,0);("%s",&trud[n].oplate);(14,0);("\nВведите рабочий день: ");(15,0);("%d",&trud[n].rab_den);(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);("\n\nЗапись добавлена в базу данных");

SetColorText(15,0);();(fp);(trud);

}izmen(){*fp;n=0,i=0,k=0;struct _trud{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

};_trud *trud=(struct _trud *)malloc(sizeof(struct _trud));((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

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

{=i+1;= realloc(trud,sizeof(struct _trud)*(n+1));(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);++;

}(fp);((fp = fopen("baza.dat","w")) == NULL) { perror("1.txt") ; return 1; }(i=0;i<n;i++)("%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);("\nВыберете номер записи, которую хотите изменить: ");

SetColorText(15,0);("%d",&k);=k1;();(14,0);("\t\tНе используйте пробелы и русские шрифты!\n\n");("\nВведите фирму: ");(15,0);("%s",&trud[n].firma);(14,0);("\nВведите профессию: ");(15,0);("%s",&trud[n].professija);(14,0);("\nВведите образование: ");(15,0);("%s",&trud[n].obrazovanie);(14,0);("\nВведите оплату: ");(15,0);("%s",&trud[n].oplate);(14,0);("\nВведите рабочий день: ");(15,0);("%d",&trud[n].rab_den);(14,0);("\n\nЗапись отредактирована");(15,0);();(i=0;i<n;i++)(fp, "\n%s %s %s %s %d",trud[i].firma, trud[i].professija, trud[i].obrazovanie, trud[i].oplate, trud[i].rab_den);(fp);(trud);

}udal(){*fp;n=0,i=0,k=0;struct _trud{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

};_trud *trud=(struct _trud *)malloc(sizeof(struct _trud));((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

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

{=i+1;= realloc(trud,sizeof(struct _trud)*(n+1));(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);++;

}(fp);((fp = fopen("baza.dat","w")) == NULL) { perror("1.txt") ; return 1; }(i=0;i<n;i++)("%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);("\nВыберете номер записи, которую хотите удалить: ");

SetColorText(15,0);("%d",&k);(i=k1;i<n;i++)

{(trud[i].firma,trud[i+1].firma);(trud[i].professija,trud[i+1].professija);(trud[i].obrazovanie,trud[i+1].obrazovanie);(trud[i].oplate,trud[i+1].oplate);[i].rab_den=trud[i+1].rab_den;

};= realloc(trud,sizeof(struct _trud)*n);(14,0);("\n\nЗапись удалена");();(i=0;i<n;i++)(fp, "\n%s %s %s %s %d",trud[i].firma, trud[i].professija, trud[i].obrazovanie, trud[i].oplate, trud[i].rab_den);(fp);(trud);

}

//sortavt(){*fp;n=0,i=0,j=0;struct _trud{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

};_trud *trud=(struct _trud *)malloc(sizeof(struct _trud));((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

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

{=i+1;= realloc(trud,sizeof(struct _trud)*(n+1));(fp,"%d %s %d %d %d %s",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);++;

}(fp);

_temp temp[1];

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

for (i=0; i<n; i++)(memcmp(trud[i+1].oplate,trud[i].oplate,20)>0)

{(temp[0].firma,trud[i].firma);(temp[0].professija,trud[i].professija);(temp[0].obrazovanie,trud[i].obrazovanie);(temp[0].oplate,trud[i].oplate);[0].rab_den=trud[i].rab_den;(trud[i].firma,trud[i+1].firma);(trud[i].professija,trud[i+1].professija);(trud[i].obrazovanie,trud[i+1].obrazovanie);(trud[i].oplate,trud[i+1].oplate);[i].rab_den=trud[i+1].rab_den;(trud[i+1].firma,temp[0].firma);(trud[i+1].professija,temp[0].professija);(trud[i+1].obrazovanie,temp[0].obrazovanie);(trud[i+1].oplate,temp[0].oplate);[i+1].rab_den=temp[0].rab_den;

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

}

//sortnazv(){*fp;n=0,i=0,j=0;struct _trud{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

};_trud *trud=(struct _trud *)malloc(sizeof(struct _trud));((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

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

{=i+1;= realloc(trud,sizeof(struct _trud)*(n+1));(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);++;

}(fp);

_temp temp[1];

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

for (i=0; i<n1; ++i)(memcmp(trud[i].professija,trud[i+1].professija,30)>0)

{(temp[0].firma,trud[i].firma);(temp[0].professija,trud[i].professija);(temp[0].obrazovanie,trud[i].obrazovanie);(temp[0].oplate,trud[i].oplate);[0].rab_den=trud[i].rab_den;(trud[i].firma,trud[i+1].firma);(trud[i].professija,trud[i+1].professija);(trud[i].obrazovanie,trud[i+1].obrazovanie);(trud[i].oplate,trud[i+1].oplate);[i].rab_den=trud[i+1].rab_den;(trud[i+1].firma,temp[0].firma);(trud[i+1].professija,temp[0].professija);(trud[i+1].obrazovanie,temp[0].obrazovanie);(trud[i+1].oplate,temp[0].oplate);[i+1].rab_den=temp[0].rab_den;

}(i=0;i<n;i++)("%s %s %s %s %d\n",trud[i].firma, trud[i].professija, trud[i].obrazovanie, trud[i].oplate, trud[i].rab_den);();(trud);

}

//sortjanr(){*fp;n=0,i=0,j=0,k=0;struct _trud{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

};_trud *trud=(struct _trud *)malloc(sizeof(struct _trud));((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

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

{=i+1;= realloc(trud,sizeof(struct _trud)*(n+1));(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);++;

}(fp);

_temp temp[1];

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

for (i=0; i<n; i++)(memcmp(trud[i+1].rab_den,trud[i].rab_den,10)>0)

{(temp[0].firma,trud[i].firma);(temp[0].professija,trud[i].professija);(temp[0].obrazovanie,trud[i].obrazovanie);(temp[0].oplate,trud[i].oplate);[0].rab_den=trud[i].rab_den;(trud[i].firma,trud[i+1].firma);(trud[i].professija,trud[i+1].professija);(trud[i].obrazovanie,trud[i+1].obrazovanie);(trud[i].oplate,trud[i+1].oplate);[i].rab_den=trud[i+1].rab_den;(trud[i+1].firma,temp[0].firma);(trud[i+1].professija,temp[0].professija);(trud[i+1].obrazovanie,temp[0].obrazovanie);(trud[i+1].oplate,temp[0].oplate);[i+1].rab_den=temp[0].rab_den;

}=1;(i=0; i<n; i++)(memcmp(trud[i].rab_den,trud[i+1].rab_den,5)==0)++;{("%s  %d\n",trud[i].rab_den,k);=1;

}();(trud);

}

//poiskavt(){*fp;n=0,i=0,x=0;str[300];struct _trud{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

};_trud *trud=(struct _trud *)malloc(sizeof(struct _trud));((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

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

{=i+1;= realloc(trud,sizeof(struct _trud)*(n+1));(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);

i++;

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

SetColorText(15,0);(str);(14,0);("\nРезультаты поиска: \n");(15,0);=0;(i=0;i<n;i++)(memicmp(str,trud[i].oplate,strlen(str))==0)

{ SetColorText(15,3);("%s",trud[i].oplate);(15,0);(" %s %s %s %4d\n",trud[i].firma, trud[i].professija, trud[i].obrazovanie, trud[i].rab_den);

x=1;}(x==0)

{SetColorText(14,0);("Вакансии по заработной плате не найдены");

SetColorText(15,0);}();(trud);

}

//poisknazv(){*fp;n=0,i=0,k=0;str[300];struct _trud{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

};_trud *trud=(struct _trud *)malloc(sizeof(struct _trud));((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

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

{=i+1;= realloc(trud,sizeof(struct _trud)*(n+1));(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);++;

}(fp);(14,0);("Введите среднюю зарплату по профессии: ");(15,0);(str);(14,0);("\nРезультаты поиска: \n");

SetColorText(15,0);=0;(i=0;i<n;i++)(memicmp(str,trud[i].professija,strlen(str))==0)

{("%s ",trud[i].professija);(15,3);("%s",trud[i].professija);(15,0);("%s %s %4d\n",trud[i].firma, trud[i].obrazovanie, trud[i].oplate, trud[i].rab_den);=1;}(k!=1)

{SetColorText(14,0);("Среднюю зарплату по профессии не найдено");

SetColorText(15,0);}();(trud);

}

//poiskizd(){*fp;n=0,i=0,k=0;str[300];struct _trud{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

};_trud *trud=(struct _trud *)malloc(sizeof(struct _trud));((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

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

{=i+1;= realloc(trud,sizeof(struct _trud)*(n+1));(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);++;

}(fp);(14,0);("Введите почасовую оплату для каждой вакансии: ");(15,0);(str);(14,0);("\nРезультаты поиска: \n");(15,0);=0;(i=0;i<n;i++)(memicmp(str,trud[i].rab_den,strlen(str))==0)

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

k=1;}(k!=1)

{SetColorText(14,0);("Почасовую оплату для каждой вакансии не найдена");

SetColorText(15,0);}();(trud);

}

//diagr(){*fp;n=0,i=0,k=0,x=0,j=0;str[300];struct _trud{firma[10];professija[30];obrazovanie[40];oplate[50];rab_den;

};_trud *trud=(struct _trud *)malloc(sizeof(struct _trud));((fp = fopen("baza.dat","r")) == NULL) { perror("baza.dat") ; }

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

{=i+1;= realloc(trud,sizeof(struct _trud)*(n+1));(fp,"%s %s %s %s %d",&trud[i].firma, &trud[i].professija, &trud[i].obrazovanie, &trud[i].oplate, &trud[i].rab_den);++;

}(fp);(); gotoxy(0,1); SetColorText(14,0);

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

_temp temp[1];(j=0; j<n; j++) // для повторов (проходов)

for (i=0; i<n; i++)(memcmp(trud[i+1].professija,trud[i].professija,10)>0)

{(temp[0].firma,trud[i].firma);(temp[0].professija,trud[i].professija);(temp[0].obrazovanie,trud[i].obrazovanie);(temp[0].oplate,trud[i].oplate);[0].rab_den=trud[i].rab_den;(trud[i].firma,trud[i+1].firma);(trud[i].professija,trud[i+1].professija);(trud[i].obrazovanie,trud[i+1].obrazovanie);(trud[i].oplate,trud[i+1].oplate);[i].rab_den=trud[i+1].rab_den;(trud[i+1].firma,temp[0].firma);(trud[i+1].professija,temp[0].professija);(trud[i+1].obrazovanie,temp[0].obrazovanie);(trud[i+1].oplate,temp[0].oplate);[i+1].rab_den=temp[0].rab_den;

}=1;=8;gotoxy(5,x);(i=0; i<n; i++)(memcmp(trud[i].professija,trud[i+1].professija,5)==0)++;{(11,0);("%s  %d\n\n",trud[i].professija,k);col,r,c,q;(42,x);(x6,x6);(r=1;r<=10*k;r++){(q=0;q<=30000000;q++);//to display the character slowly("%c",167);}(5,1+x);++;=1;

}(15,0);();(trud);

}

Похожие работы на - База даних 'Біржа праці'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!