Реферати

Дипломна робота: Обучающе-контроллирующая система для підготовки студентів

Роль податків у державному фінансовому регулюванні економіки. АЛМАТИНСКАЯ АКАДЕМІЯ ЕКОНОМІКИ І СТАТИСТИКИ РЕГІОНАЛЬНИЙ ЦЕНТР ДИСТАНЦІЙНОГО НАВЧАННЯ КАФЕДРА "ЕКОНОМІКА І МЕНЕДЖМЕНТ" РЕФЕРАТ по дисципліні "Податки й оподатковування"

Кім Гу. Уведення 1 Рання діяльність 2 Тимчасовий уряд у Шанхаї 3 Після звільнення Кореї 4 Смерть Список літератури Введення Кім Гу, кор. 김구, 金九 (29 серпня 1876 - 26 червня 1949) - корейський патріот, діяч корейського національно-визвольного руху, борець за незалежність від Японії, шостий і останній президент Тимчасового уряду Кореї.

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

Сучасна психологія праці Толочек В А. Рецензенти: Е. А. Климов, доктор психологічних наук, професор, дійсний член РАО; 6. А. Бодров, доктор медичних наук, професор, заслужений діяч науки і техніки РФ, головний науковий співробітник Інституту психології РАНЕЙ.

Векторна алгебра 2. РОЗДІЛ 2. ВЕКТОРНА АЛГЕБРА. §1. Основні визначення. При вивченні різних фізичних процесів і явищ нам приходиться мати справа з об'єктами різної природи. Деякі величини у фізику, механіку і техніку цілком описуються завданням їх

ЗМІСТ

УВЕДЕННЯ

1. ПОСТАНОВКА ЗАДАЧІ

2. ОГЛЯД ЛІТЕРАТУРИ

3. ПРОЕКТУВАННЯ БАЗИ ДАНИХ

3.1 Концептуальна модель бази даних

3.2 Логічна модель бази даних

3.3 Структура файлів бази даних

4. ОПИС ПРОГРАМНИХ МОДУЛІВ

4.1 Опис програми створення і модифікації тестів

4.2 Опис програми адміністрування

4.3 Опис програми контролю знань

5. Керівництво користувача

5.1 Загальні зведення

5.2 Установка файлів баз даних

5.3 Використання програми створення і модифікації тестів

5.4 Використання програми адміністрування

5.5 Використання програми контролю знань

6. ОХОРОНА ПРАЦІ

6.1 Техніка безпеки і виробнича санітарія

6.1.1 Електричний струм і статична електрика

6.1.2 Випромінювання

6.1.3 Шум

6.1.4 Вібрація.

6.1.5 Метеоусловия

6.1.6 Висвітлення

6.1.7 Розрахунок природного висвітлення

6.1.8 Організація робочого місця

6.2 Пожежна безпека

7. ЕКОНОМІЧНИЙ РОЗДІЛ

ВИСНОВОК.

ЛІТЕРАТУРА

Додаток 1

Додаток 2

Додаток 3

УВЕДЕННЯ

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

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

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

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

Роботи в даній області вже давно вийшли за рамки експериментів як у нас у країні, так і за рубежем. Зокрема в США навчальні системи на базі ЕОМ пройшли шлях розвитку від приватних реалізацій, що працюють з 2-3 користувачами по 1-2 предметам, до обчислювальних мереж навчального призначення, що обслуговують сотні вилучених терміналів і привабливих банками навчальних програм усілякого призначення. Прикладами цих мереж є система PLATO- IV фірми CDC, автоматизовані навчальні системи фірм IBM, DEC, Hewlett Packard.

1. ПОСТАНОВКА ЗАДАЧІ

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

До розроблювального програмного забезпечення пред'являються наступні вимоги:

1) Мова програмування - Object Pascal.

2) Система повинна бути відкрита для модернізації і поповнення БД по інших предметах.

3) Основні критерії формування комплексу питань (квитків):

- квиток складається з 10-50 питань;

- кількість питань у квитку визначає викладач при завантаженні БД.

4) Критерій оцінки відповідей студентів:

- 90-100% правильних відповідей - відмінно;

- 70-90% правильних відповідей - добре;

- 60-70% правильних відповідей - удовл.;

- < 60%правильних відповідей - неудовл.

5) система, Що Обучающе-контролирует, повинна надавати наступні можливості:

- можливість роботи системи в ЛВС із роздруківкою результатів (протоколу) на принтері сервера;

- можливість завдання часу відповіді.

6) Забезпечення дружнього інтерфейсу.

2. ОГЛЯД ЛІТЕРАТУРИ

У навчальному посібнику "Система програмування навчальних курсів" розглядаються питання створення і використання навчальних курсів за допомогою СПОК (системи програмування навчальних курсів) на базі ЄС ЕОМ чи М-4030.

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

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

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

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

У статті [2] приводиться опис функціональних можливостей генератора тестів "Россь-2". Закладені в ньому можливості дозволяють використовувати "Россь-2" при вивченні практично будь-якого навчального предмета.

Програма має наступні можливості:

- створення на основі наявних баз знань тестів по різних предметах;

- використання готових систем тестів по різних навчальних предметах і курсам;

- використання при вивченні навчального матеріалу і тестуванні контекстних підручників і системи підказок;

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

- використання різних навчальних режимів;

- використання при навчанні мультимедийних можливостей.

Генератор тестів "Россь-2" включає наступні частини:

1) тестирующую оболонку;

2) сервісну програму настроювання.

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

У постачання з ГТ "Россь-2" входить база знань "комп'ютерна термінологія", що призначена для:

1) вивчення основних термінів, що зустрічаються в базовому курсі інформатики;

2) вивчення російських і англійських термінів по комп'ютерній тематиці для вивчаючих інформатику і (чи) англійська мова на заглибленому рівні.

База знань охоплює три основні теми:

- апаратне забезпечення;

- основні терміни інформатики;

- словник Windows.

По першій темі база знань має бібліотеку більш ніж з 80 графічних зображень основних вузлів і елементів ПК, периферійних пристроїв і комп'ютерних аксесуарів.

По третій темі база знань має бібліотеку більш ніж з 40 графічних зображень елементів інтерфейсу Windows 3.X.

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

Книга [4] присвячена програмному пакету Delphi компанії Borland - могутньому засобу створення додатків для Windows, що продовжує лінію компіляторів мови Pascal на якісно новому рівні.

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

- Говорити про серйозні проекти в Delphi можна, лише домовивши про зміст, вкладеному в поняття об'єкта, його властивостей і зв'язаних з ним подій. Тому другий розділ присвячений мові ObjectPascal. Пропускати цю главу не коштує і знавцям Паскаля, тому що в мові з'явилися нові можливості.

- Третій розділ описує бібліотеку візуальних компонентів VCL. По суті справи, це перша революційна спроба не просто спростити, а цілком сховати від розроблювача програмний інтерфейс Windows. Пам'ятаючи про долю бібліотеки ObjectWindowsLibrary (OWL), що теж починалася у Воrlаndраsсаlи стала згодом законодавцем стандарту, можна пророчити ідеям VCL щасливу долю. Її компоненти - це спеціальний різновид об'єктів Delphi, тобто ті "цеглинки", з яких будується новий додаток. У главі розглянуті методи і властивості всіх компонентів (за винятком винесених у наступну главу). Вони згруповані по функціональному призначенню і проілюстровані прикладами.

- Нарешті, у четвертому розділі розбираються питання роботи з базами даних. Тут описані спеціальні компоненти доступу до даних, а також компоненти відображення і керування даними. Розглядаються способи використання цих компонентів у додатках, призначених як для роботи з локальними базами даних, так і для систем клієнт/сервер. Окремі розділи присвячені ядру процесора баз даних BorlandDatabaseEngine, драйверам SQLLinks, локальному серверу InterBase. У главу включений приклад зв'язування додатка-клієнта із сервером Informix.

Для засвоєння матеріалу книги потрібно розуміння основ объектно-ориентированного програмування і принципів побудови програм, керованих подіями. Якусь частину коду згенерує за вас Delphi, але для серйозної роботи буде потрібно і серйозне знання мови Паскаль. Деякі неосновні властивості компонентів, описаних у книзі, посилаються прямо на програмний інтерфейс Windows. Його знання, звичайно, не буде зайвим, але і не є обов'язковим. Та частина книги, що присвячена роботі Delphi з базами даних, вимагає наявності в читача основ знань у цій області.

3. ПРОЕКТУВАННЯ БАЗИ ДАНИХ

3.1 Концептуальна модель бази даних

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

Наш набір атрибутів - наступний:

ТЕМА№ - порядковий номер теми з питаннями;

ТЕМА - назва роздягнула (теми);

ВОПРОС№ - унікальний номер питання;

ПИТАННЯ - текст питання;

ОТВЕТ№ - унікальний номер варіанта відповіді на питання;

ВІДПОВІДЬ - текст варіанта відповіді на питання;

ІСТИННІСТЬ - істинність варіанта відповіді на питання ( чиправда неправда).

Зведемо всі атрибути і прийняті ними на деякий момент часу значення в наступну таблицю:

Таблиця 3.1

Зведена таблиця атрибутів ПРО і їхні значення

ТЕМА№

ТЕМА

ВОПРОС№

ПИТАННЯ

ОТВЕТ№

ВІДПОВІДЬ

ІСТИННІСТЬ

1

тема1

1

питання1

1

відповідь1

True

2

відповідь2

False

3

відповідь3

False

2

питання2

4

відповідь4

False

5

відповідь5

True

2

тема2

3

питання3

6

відповідь6

True

7

відповідь7

False

4

питання4

8

відповідь8

False

9

відповідь9

True

10

відповідь10

False

3

тема3

5

питання5

11

відповідь11

True

12

відповідь12

False

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

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

Таблиця 3.2

Концептуальна модель БД

ТЕМА№

ТЕМА

ВОПРОС№

ПИТАННЯ

ОТВЕТ№

ВІДПОВІДЬ

ІСТИННІСТЬ

1

тема1

1

питання1

1

відповідь1

True

1

тема1

1

питання1

2

відповідь2

False

1

тема1

1

питання1

3

відповідь3

False

1

тема1

2

питання2

4

відповідь4

False

1

тема1

2

питання2

5

відповідь5

True

2

тема2

3

питання3

6

відповідь6

True

2

тема2

3

питання3

7

відповідь7

False

2

тема2

4

питання4

8

відповідь8

False

2

тема2

4

питання4

9

відповідь9

True

2

тема2

4

питання4

10

відповідь10

False

3

тема3

5

питання5

11

відповідь11

True

3

тема3

5

питання5

12

відповідь12

False

3.2 Логічна модель бази даних

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

Уведемо наступні поняття: функціональна залежність, ключ, первинний ключ, детермінант, НФБК.

Якщо дані два атрибути A і B, то говорять, що B функціонально залежить від A (позначається A-B), якщо для кожного A існує рівно одне зв'язане з ним значення B. A і B можуть бути не тільки одиничними атрибутами, але і групами з двох і більш атрибутів.

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

Первинний ключ використовується для унікальної ідентифікації кортежу.

Детермінант. Якщо у ФЗ A-BB не залежить від будь-якої підмножини A(тобто функціональна залежність повна), то A є детермінантом B.

НФБК визначається в такий спосіб: відношення знаходиться в НФБК, якщо кожен детермінант відносини є ключем. Перевіримо чи знаходиться універсальне відношення R(ТЕМА№, ТЕМА, ВОПРОС№, ПИТАННЯ, ОТВЕТ№, ВІДПОВІДЬ, ІСТИННІСТЬ) у НФБК.

Випишемо ФЗ для універсального відношення:

ТЕМА№- ТЕМА,

ТЕМА№, ВОПРОС№- ПИТАННЯ,

ВОПРОС№, ОТВЕТ№- ВІДПОВІДЬ,

ВОПРОС№, ОТВЕТ№-ИСТИННОСТЬ.

З записаних ФЗ видно, що розглянуте відношення має тільки один ключ, а саме набір атрибутів < ТЕМА№, ВОПРОС№, ОТВЕТ№ > . Тобто це мінімальний набір значень атрибутів, що, якщо вони відомі, визначають значення інших атрибутів кортежу. Детермінантами відносини є ліві частини усіх ФЗ, а саме: < ТЕМА№ > , < ТЕМА№, ВОПРОС№ > , < ВОПРОС№, ОТВЕТ№ > .

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

Алгоритм декомпозиционного проектування виглядає так:

1) розробляється універсальне відношення для БД;

2) визначаються усі ФЗ між атрибутами відносини;

3) визначається, чи знаходиться відношення в НФБК. Якщо ТАК, то проектування довершене, якщо НІ, відношення повинне бути розкладене на два;

4) кроки 2 і 3 повторюються для кожного нового відношення, отриманого в результаті декомпозиції. Проектування завершується, коли усі відносини будуть знаходитися в НФБК.

Детермінант < ВОПРОС№, ОТВЕТ№ > не є ключем і має два залежних від нього атрибута

ВОПРОС№, ОТВЕТ№- ВІДПОВІДЬ

ВОПРОС№, ОТВЕТ№-ИСТИННОСТЬ,

що можна розглядати в якості одиничної ФЗ зі складеними правою і лівою частинами ВОПРОС№, ОТВЕТ№-ОТВЕТ, ІСТИННІСТЬ.

Таким чином, виходять два нових відношення R1 і R2:

R1(ТЕМА№, ТЕМА, ВОПРОС№, ПИТАННЯ)

ФЗ: ТЕМА№- ТЕМА,

ТЕМА№, ВОПРОС№- ПИТАННЯ.

Можливі ключі: < ТЕМА№, ВОПРОС№ > .

Детермінанти: < ТЕМА№ > , < ТЕМА№, ВОПРОС№ > .

R2(ВОПРОС№, ОТВЕТ№, ВІДПОВІДЬ, ІСТИННІСТЬ)

ФЗ: ВОПРОС№, ОТВЕТ№-ОТВЕТ, ІСТИННІСТЬ.

Можливі ключі: < ВОПРОС№, ОТВЕТ№ > .

Детермінанти: < ВОПРОС№, ОТВЕТ№ > .

Відношення R2(ВОПРОС№, ОТВЕТ№, ВІДПОВІДЬ, ІСТИННІСТЬ) знаходиться в НФБК, тому що його детермінант є ключем, а тому в подальшій декомпозиції не бідує.

У відношенні R1(ТЕМА№, ТЕМА, ВОПРОС№, ПИТАННЯ) детермінант < ТЕМА№ > не є можливим ключем, тому R1 не знаходиться в НФБК і підлягає подальшому розщепленню. Результатом розщеплення відносини R1 є відносини R3,R4:

R3(ТЕМА№, ВОПРОС№, ПИТАННЯ)

ФЗ: ТЕМА№, ВОПРОС№- ПИТАННЯ.

Можливі ключі: < ТЕМА№, ВОПРОС№ > .

Детермінанти: < ТЕМА№, ВОПРОС№ > .

R4(ТЕМА№, ТЕМА)

ФЗ: ТЕМА№- ТЕМА.

Можливі ключі: < ТЕМА№ > .

Детермінанти: < ТЕМА№ > .

Ці двоє відносин знаходяться в НФБК, отже проектування завершується і його результатом є логічна модель БД у НФБК:

R2(ВОПРОС№, ОТВЕТ№, ВІДПОВІДЬ, ІСТИННІСТЬ),

R3(ТЕМА№, ВОПРОС№, ПИТАННЯ),

R4(ТЕМА№, ТЕМА).

3.3 Структура файлів бази даних

Як формат для розроблювальної бази даних був обраний Paradox, тому що він надає наступні можливості:

- Широкий вибір типів полів, включаючи авто-инкремент, BLOBs і т.п.

- Дотримання цілісності даних, контролю даних, відновлення індексів на рівні ядра BDE.

- Первинний індекс таблиці автоматично дотримує унікальність записів, вторинні індекси забезпечують відсортований "вид" на записі таблиці.

У результаті аналізу поставленої задачі були розроблені наступні файли даних:

1) TEMA - містить інформацію про наявні розділи (темах);

2) QUESTION - призначений для збереження питань до тем з таблиці TEMA;

3) ANSWER- містить варіанти відповідей на питання з таблиці QUESTION;

4) TICKETS - призначений для збереження інформації про квитки;

5) CONTROL- містить інформацію про результати тестування;

6) RESULT - призначений для збору інформації про істинність відповідей студента.

Структури файлів даних приводяться нижче в табличній формі.

Таблиця 3.3

Структура файлу даних TEMA.DB

Назва полючи

Тип

Призначення

Tema_id

autoincrement

унікальний ідентифікатор роздягнула (теми)

Tema_name

alpha(100)

назва роздягнула (теми)

Таблиця 3.4

Структура файлу даних QUESTION.DB

Назва полючи

Тип

Призначення

Quest_id

autoincrement

унікальний ідентифікатор питання

Tema_id

long integer

номер теми, який належить питання

Quest_name

memo

текст питання

Таблиця 3.5

Структура файлу даних TICKETS.DB

Назва полючи

Тип

Призначення

Ticket_id

autoincrement

унікальний ідентифікатор запису

Ticket_num

long integer

номер квитка

Quest_id

long integer

ідентифікатор питання

Таблиця 3.6

Структура файлу даних ANSWER.DB

Назва полючи

Тип

Призначення

Otvet_id

autoincrement

унікальний ідентифікатор варіанта відповіді

Quest_id

long integer

ідентифікатор питання, якому належить варіант відповіді

Otvet_name

memo

текст варіанта відповіді на питання

Trued

logical

істинність варіанта відповіді

Таблиця 3.7

Структура файлу даних CONTROL.DB

Назва полючи

Тип

Призначення

Id

autoincrement

унікальний ідентифікатор запису

Name

alpha(40)

прізвище студента

Ticket_num

long integer

номер квитка, по якому проводилося тестування

Date

date

дата тестування

Time

time

час завершення тестування

Mark

number

відносна оцінка (0..1)

Таблиця 3.8

Структура файлу даних RESULT.DB

Назва полючи

Тип

Призначення

Answer_id

long integer

унікальний ідентифікатор відповіді

Trued

logical

істинність відповіді

4. ОПИС ПРОГРАМНИХ МОДУЛІВ

Розроблена універсальна система, що обучающе-контролирует, містить наступні частини:

1) програму для створення і модифікації тестів;

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

3) програму контролю знань

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

Опис основних принципів функціонування програм, що входять до складу системи, приведено нижче.

4.1 Опис програми створення і модифікації тестів

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

- створення, модифікація і видалення тематичних розділів;

- створення, модифікація і видалення контрольних питань;

- створення для будь-якого питання довільного числа варіантів відповіді;

- модифікація і видалення варіантів відповіді на питання.

Програма реалізована мовою ObjectPascal у середовищі візуального програмування Delphi 2.0 фірми BorlandInternational. Текст програми і використовуваних нею модулів приведений у прил.1.

Програмою використовуються наступні файли БД: Tema.db, Question.db, Answer.db. Схема зв'язків файлів БД, використовувана розглянутою програмою, приведена на мал.4.1.

Рис.4.1. Схема зв'язків файлів БД для програми створення тестів

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

1. Клас TTreeForm (модуль S2) - відображає головне вікно програми.

Перемінні класу:

- x1,x2 - допоміжні перемінні;

- CreateMainForm - індикатор створення форми (True, якщо виконується метод FormCreate).

Методи класу:

- AddDocButClick() - виконує додавання нового контрольного питання в поточну тему;

- MainTreeClick() - змінює положення покажчиків у файлах БД Tema.db,Question.db;

- DeleteButClick() - виконує видалення поточного чи питання теми;

- FullExpButClick() - робить повне розкриття тематичного дерева;

- FullColButClick() - виконує повне згортання тематичного дерева;

- ExitButClick() - робить закриття програми;

- FormClose() - виконує всі необхідні дії перед закриттям програми;

- AddTemaButClick() - виводить діалог додавання нової теми;

- FormShow() - виконує ініціалізацію даних при запуску програми;

- FormResize() - робить дії по зміні розмірів об'єктів вікна;

- FormCreate() - виконує ініціалізацію перемінних x1,x2;

- AppendQuestion() - додає в таблицю Question.db нове питання;

- ClearQuestion() - здійснює логічне видалення поточного питання з БД.

2. Клас TEditForm (модуль DB_Unit) - відображає вікно редагування контрольних питань.

Перемінні класу:

- x1,x2 - допоміжні перемінні.

Методи класу:

- FormClose() - робить вихід із програми;

- DBEditTemaChange() - зберігає в БД зміни в назві теми;

- AddAnswerButClick() - додає новий варіант відповіді на поточний питання;

- DelAnswerButClick() - видаляє поточний варіант відповіді на питання;

- FormCreate() - виконує ініціалізацію перемінних;

- AppendAnswer() - робить додавання в БД нової відповіді;

- ClearAnswer() - виконує видалення з БД поточного відповіді;

- FormResize() - змінює розмір об'єктів вікна;

- MemoScrollResize() - змінює розмір об'єктів в області модифікації відповідей.

3. Клас TAnswer (модуль DBUnit) - відповідає за відображення варіантів відповіді на питання.

Перемінні класу:

- nocreate - індикатор створення об'єкта (False, якщо виконується метод Create).

Методи класу:

- Create() - створює об'єкт типу TAnswer;

- Free() - звільняє пам'ять зайняту об'єктом;

- CheckClick() - заносить у файл БД Answer.db стан прапорця правильності відповіді;

- MemoChange() - зберігає текст відповіді у файлі БД Answer.db;

- DeleteAnswer() - робить перемальовування області висновку варіантів відповіді на питання після видалення одного з відповідей.

4. Клас TWinEditTema(модуль AddTema) - відображає діалог додавання нової теми.

Методи класу:

- butCancelClick() - додає нову тему у файл БД Tема.db.

- butOkClick() - закриває діалог додавання нової теми.

4.2 Опис програми адміністрування

Програма адміністрування, будучи складовою частиною універсальної системи, що обучающе-контролирует, призначена для використання в сполученні з програмою створення тестів і надає користувачу наступні можливості:

- формування квитків;

- завдання часу відповіді на питання квитка;

- завдання системи оцінки результатів тестування;

- перегляд і роздруківка результатів (протоколу) тестування на принтері.

Програма реалізована мовою ObjectPascal у середовищі візуального програмування Delphi 2.0 фірми BorlandInternational. Текст програми і використовуваних нею модулів приведений у прил.2.

Програмою використовуються наступні файли БД: Control.db, Tema.db, Question.db, Tickets.db. Схема зв'язків файлів БД, використовувана розглянутою програмою, приведена на мал.4.2.

Програма створює файл Test.ini і записує в розділ Options наступні параметри:

TestTime

- час тестування (мс);

MaxTicket

- число сформованих квитків;

MaxMark

- система оцінки результатів (бал).

Tema

tema_id

tema_name

Question

quest_id

tema_id(FK)

quest_name

Tickets

ticket_id

ticket_num

quest_id

Рис.4.2. Схема зв'язків файлів БД для програми адміністрування

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

1. Клас TAdminForm (модуль Main) - відображає головне вікно програми.

Перемінні класу:

- CreateForm - індикатор створення форми (True, якщо виконується метод FormCreate);

- IniFile - використовується для роботи з INI-файлом.

Методи класу:

- ShowHint() - відображає підказку в рядку стану;

- DBControlCalcFields() - робить перерахування оцінок у соответсвії з поточною системою оцінки результатів;

- FormClose() - виконує всі необхідні дії перед закриттям програми;

- TestTimeChange() - зберігає у файлі TEST.INI значення параметра TestTime;

- MaxmarkChange() - зберігає у файлі TEST.INI значення параметра MaxMark;

- CreateTicketBtnClick() - виводить діалог параметрів формування квитків;

- FormShow() - відкриває таблиці Question.db, Tema.db;

- QuitBtnClick() - завершує виконання програми;

- CreateNewDBControl() - создаетновуютаблицу Control.db;

- ClearBtnClick() - очищає таблицю результатів тестування;

- PrintBtnClick() - виводить на принтер таблицю з результатами тестування.

2. Клас TCreateTickDlg(модуль TQDialog)

Методи класу:

- QuestCountEnter() - робить ініціалізацію перемінних;

- OKBtnClick() - виконує формування квитків з контрольних питань заданої теми;

- FormClose() - закриває файли БД Question.db, Tema.db;

- FormShow() - зчитує параметри TestTime і MaxMark з файлу Test.ini.

4.3 Опис програми контролю знань

Тестирующая оболонка, будучи складовою частиною універсальної системи, що обучающе-контролирует, призначена для контролю знань по обраної адміністратором системи дисципліні і надає користувачу наступні можливості:

- перегляд питань квитка в довільному порядку;

- можливість відповіді на питання в довільному порядку;

- можливість коректування відповідей на питання.

Програма реалізована мовою ObjectPascal у середовищі візуального програмування Delphi 2.0 фірми BorlandInternational. Текст програми і використовуваних нею модулів приведений у прил.3.

Програмою використовуються наступні файли БД: Control.db, Question.db, Answer.db, Result.db, Tickets.db. Схема зв'язків файлів БД, використовувана розглянутою програмою, приведена на мал.4.3.

Рис.4.3. Схема зв'язків файлів БД для програми контролю знань

При запуску програми відбувається зчитування параметрів TestTime і MaxTicket з розділу Options файлу Test.ini. Програма робить також розрахунок і запис оцінки відповіді на питання квитка. Запис результатів виробляється в БД Control.db.

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

1. Клас TClientForm = (модуль SDIMain) - відображає головне вікно програми.

Перемінні класу:

- x1,x2 - допоміжні перемінні;

- CreateMainForm - індикатор створення форми (True, якщо виконується метод FormCreate);

- TestTime - час тестування в миллисекундах;

- MaxMark - система оцінки (бал);

- ticket - номер квитка, по якому проводиться тестування;

- StudentName - прізвище студента.

Методи класу:

- ShowHint() - відображає підказку в рядку стану;

- QuestListClick() - робить перехід до наступного питанню;

- FormClose() - записує результати тестування в Control.db;

- FormShow() - виводить діалог уведення вихідних даних;

- FormCreate() - виконує ініціалізацію перемінних;

- ExitButClick() - завершує роботу програми;

- PrevButClick() - робить поточним попередній питання;

- NextButClick() - робить поточним наступний питання;

- TimerTimer() - завершує роботу програми після закінчення контрольного часу;

- RefreshAnswers - обновляє вміст області висновку відповідей;

- DeleteAnswer() - удаленние зі списку відповідей одного варіанта відповіді;

- FormResize() - робить дії по зміні розмірів об'єктів вікна;

- MemoScrollResize() - змінює розмір об'єктів в області висновку відповідей.

2. Клас TAnswer (модуль SDIMain) - відповідає за відображення варіантів відповіді на питання.

Перемінні класу:

- nocreate - індикатор створення об'єкта (False, якщо виконується метод Create).

Методи класу:

- Create() - створює об'єкт типу TAnswer;

- Free() - звільняє пам'ять зайняту об'єктом;

- CheckClick() - заносить у файл БД Result.db стан прапорця правильності відповіді;

- MemoClick() - установлює фокус на область вибору поточного питання.

3. Клас TBeginDataDlg(модуль DLGUnit) - відображає діалог уведення вихідних даних.

Методи класу:

- ShowHint() - відображає підказку в рядку стану;

- OkButClick() - створює файл БД Result.db і инициализирует перемінні;

- FormClose() - виконує необхідні дії перед закриттям діалогу;

- FormShow() - зчитує параметри MaxTicket,TestTime і MaxMark з файлу Test.ini.

4. Клас TPathDlg (модуль PathDialog)

Методи класу:

- DriveBoxChange() - змінює поточний диск;

- FormClose() - виконує необхідні дії перед закриттям діалогу;

- DirectoryListChange() - виводить назва поточного каталогу;

- FormActivate() - виводить назва поточного каталогу з появою діалогу введення шляху до каталогу БД.

5. Керівництво користувача

5.1 Загальні зведення

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

Комплекс програм містить наступні частини:

1) програму для створення і модифікації тестів;

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

3) програму контролю знань.

Універсальна система, що обучающе-контролирует, має наступні можливості:

- створення на основі наявних баз знань тестів по різних предметах;

- модифікація створених тестів;

- формування квитків;

- завдання часу відповіді на питання квитка;

- завдання системи оцінки результатів тестування;

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

- можливість роботи системи в ЛВС;

- перегляд і роздруківка результатів (протоколу) тестування на принтері.

Для функціонування програмного забезпечення необхідне наявність на ПК операційної системи Windows-95 чи WindowsNT а також мережного ПО, якщо буде використовуватися многопользовательский режим роботи програм.

Перед запуском кожної з програм системи на комп'ютері повинний бути встановлений BDE(комплекс програм і.DLL - бібліотек для роботи з БД), що входить у комплект постачання універсальної системи, що обучающе-контролирует. Після установки BDE необхідно запустити програму BDECFG32.EXE і, вибравши закладку "Aliases", додати новий алиас з ім'ям "Common_base" і параметрами: TYPE = "STANDARD", DEFAULTDRIVER = "PARADOX", PATH = < шлях до каталогу БД, установка яких розглядається в п.5.2. > .

5.2 Установка файлів баз даних

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

Answer.db, Answer.mb, Answer.px, Answer.xg0, Answer.yg0,

Question.db, Question.mb, Question.px, Question.xg0, Question.yg0,

Tema.db, Tema.px.

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

5.3 Використання програми створення і модифікації тестів

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

- створення, модифікація і видалення тематичних розділів;

- створення, модифікація і видалення контрольних питань;

- створення для будь-якого питання довільного числа варіантів відповіді;

- модифікація і видалення варіантів відповіді на питання.

Для функціонування програми необхідна наявність 600K вільного дискового простору. Файл програми, що виконується - TestBuilder.exe може розташовуватися в будь-якому каталозі довільного диска.

Щоб почати роботу з програмою необхідно запустити файл TestBuilder.exe на виконання.

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

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

Рис.5.1. Вікно вибору поточного контрольного питання

- Додавання нового тематичного розділу

Для того щоб створити новий розділ необхідно клацнути мишею на кнопці . При цьому на екран буде виведений діалог запиту назви роздягнула (мал.5.2.). Після того як ви введете назву нової теми, необхідно натиснути кнопку "Додати", якщо ви хочете щоб створена тема була додана в список існуючих тим, і кнопку "Скасування" - у противному випадку.

Рис.5.2. Діалогове вікно введення назви нової теми

- Додавання нового питання

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

- Видалення розділів і питань

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

При цьому на екран буде виведений діалог підтвердження видалення з відповідним випадку текстом (мал.5.3.).

Рис.5.3. Запит підтвердження видалення питання

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

Рис.5.4. Вікно модифікації даних

- Редагування назви роздягнула

Модифікувати назва поточного розділу можна в області редагування, над якою мається напис "Назва теми".

- Редагування тексту питання

Модифікувати текст поточного питання можна в області редагування, над якою мається напис "Текст питання".

- Додавання нового варіанта відповіді

Для додавання нового варіанта відповіді в поточний питання необхідно натиснути кнопку

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

- Видалення варіанта відповіді на питання

Щоб видалити поточний варіант відповіді необхідно натиснути кнопку .

- Редагування варіанта відповіді

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

Призначення 3-ех допоміжних кнопок наступне:

- розвертає всі теми;

- звертає всі теми;

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

5.5 Використання програми адміністрування

Програма призначена для використання в сполученні з програмою створення тестів і надає користувачу наступні можливості:

- формування квитків;

- завдання часу відповіді на питання квитка;

- завдання системи оцінки результатів тестування;

- перегляд і роздруківка результатів (протоколу) тестування на принтері.

Для функціонування програми необхідна наявність 600K вільного дискового простору. Файл програми, що виконується - TestAdmin.exe може розташовуватися в будь-якому каталозі довільного диска.

Щоб почати роботу з програмою необхідно запустити файл TestAdmin.exe на виконання.

Після запуску програми на екрані з'являється головне вікно програми (мал.5.5.), у якому в табличній формі виводяться зведення про результати попереднього тестування.

Рис.5.5. Головне вікно програми адміністрування

У цьому вікні задаються параметри тестування: час тестування (у хвилинах) і система оцінки (у балах). Коли параметри тестування задані, можна приступати до формування квитків. Для цього необхідно натиснути кнопку "Створити", наслідком чого буде поява діалогового вікна завдання параметрів формування квитків (мал.5.6.).

Рис.5.6. Діалог завдання параметрів формування квитків

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

1) тема, з питань якої будуть формуватися квитки;

2) кількість питань у квитку;

3) число квитків, що ви бажаєте одержати.

Якщо ви натиснете кнопку створити, то по завершенню формування квитків на екран буде видане повідомлення "Формування квитків довершене!" (мал.5.7.).

Рис.5.7. Повідомлення про завершення формування квитків

При формуванні квитків питання заданої теми розподіляються по квитках випадковим образом.

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

Кнопка "Очистити" призначена для видалення всіх записів з таблиці результатів тестування.

Кнопка "Печатка" призначена для одержання твердої копії результатів тестування. Приклад роздрукованих результатів приведений на мал.5.8.

Рис.5.8. Роздруківка результатів тестування

5.3 Використання програми контролю знань

Тестирующая оболонка призначена для контролю знань по обраної адміністратором системи дисципліні. Для функціонування програми необхідна ОС Windows95 чи WіndоwsNTи наявність не менш 1M вільного дискового простору. Файл програми, що виконується - TestClient.exe може розташовуватися в будь-якому каталозі довільного диска.

Щоб почати сеанс тестування необхідно запустити файл TestClient.exe на виконання. Якщо програма запускається вперше, то на екран буде виданий запит на введення імені каталогу БД, тобто того каталогу, де зберігаються встановлені раніше файли Tickets.db, Tema.db, Question.db, Answer.db (мал.5.9).

Рис.5.9. Діалог установки каталогу файлів БД

Коли каталог файлів БД обраний, необхідно натиснути кнопку "Усі" щоб продовжити виконання програми або кнопку "Скасування" для її завершення. Якщо ви увели вірне ім'я каталогу файлів БД, то на екрані з'явиться діалог, у якому необхідно ввести прізвище і вибрати номер квитка для тестування (мал.5.10).

Рис.5.10. Діалог запиту вихідних даних для тестування

Перехід по полях уведення даних і кнопкам здійснюється за допомогою клавіші 'Tab', а в зворотному порядку за допомогою 'Shift-Tab'. Для підтвердження введених даних натисніть кнопку "Усі". Для виходу з програми натисніть кнопку "Вихід" або клавішу Esc. Після підтвердження введених даних на екрані з'явиться вікно (мал.5.11.), у якому ви зможете в довільному порядку переглядати питання квитка і відповідати на них.

Рис.5.11. Основне вікно програми контролю знань

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

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

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

Рис.5.12. Повідомлення про результати тестування

6. ОХОРОНА ПРАЦІ

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

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

6.1 Техніка безпеки і виробнича санітарія

Умови праці операторів ВТ характеризується можливістю впливу на них комплексу небезпечних і шкідливих виробничих факторів:

- електричний струм і статична електрика;

- іонізуючих і неіонізуючих випромінювань;

- шуму;

- тепловиделений і шкідливих речовин;

- специфічних умов зорової роботи, параметрів технологічного устаткування і робочого місця шуму;

- вібрації.

6.1.1 Електричний струм і статична електрика

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

Місцеві травми підрозділяються на:

- електричні опіки;

- електричні знаки;

- металізацію шкіри;

- механічні ушкодження;

- електроофтальмию.

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

Основними причинами впливу струму на людину є:

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

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

Основні міри захисту від поразки струмом:

- ізоляція;

- неприступність струмоведучих частин;

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

- застосування малої напруги; використання подвійної ізоляції;

- захисне заземлення;

- захисне відключення.

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

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

Основні способи захисту від статичної електрики:

- заземлення устаткування;

- збільшення поверхонь провідності діелектриків;

- зволоження навколишнього повітря;

- іонізація чи повітря середовища нейтралізаторами статичної електрики.

6.1.2 Випромінювання

При роботі з дисплеєм можуть виникнути наступні небезпечні фактори:

- електромагнітні полючи;

- рентгенівське випромінювання;

- ультрафіолетове й інфрачервоне випромінювання.

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

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

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

Для екранів застосовують матеріали з високої електричної провідність (сталь, мідь, алюміній, латунь) у виді аркушів товщиною не менш 0,5 мм чи сітки з осередками не більш 4x4 мм. Невеликі отвори в екрані, що передбачаються для осей штурвалів, кнопок і інших пристосувань, екранують густою металевою сіткою з осередками не більш 4x4 мм. Кожен екран обов'язково заземлюють. Захист за допомогою екранів виконується багатоступінчастої, включаючи екранування генераторного (первинного) контуру, робочих контурів (плавильних, нагрівальних і ін.) і установки в цілому.

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

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

Основними заходами, спрямованими на зниження небезпеки впливу інфрачервоного випромінювання є:

- зниження інтенсивності джерела;

- захисне екранування джерела і робочого місця;

- використання засобів індивідуального захисту;

- лікувально-профілактичні заходи.

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

6.1.3 Шум

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

Основними джерелами шуму в приміщеннях, обладнаних ВТ, є друкарські машинки, принтери, множна техніка й устаткування для кондиціонування повітря, у самих ВТ - вентилятори систем охолодження і трансформатори. Рівень шуму в таких приміщеннях іноді досягає 85 дба.

Відповідно ДО ДЕРЖСТАНДАРТУ 12.1.003-83 ССБТ рівень шуму на робочих місцях операторів не повинний перевищувати 50 дба (див. табл. 6.1).

Таблиця 6.1

Рівень шуму на робочих місцях

Приміщення

Среднегеометрические частоти активних смуг, Гц

Рівні звуку й еквівалентні

63

125

250

500

1000

4000

8000

рівні звуку дба

для персоналу, що здійснює експлуатацію ЕОМ

71

61

84

49

45

40

38

50

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

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

6.1.4 Вібрація

Вібрація - це коливальний рух механічної системи. Вона характеризується частотою f, Гц; зсувом A(t), м; швидкість V(t), м/с; прискоренням a(t), м/с2. Джерелом вібрації є механізми, машини, механізоване інструмент.

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

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

Відповідно ДО ДЕРЖСТАНДАРТУ 12.1.012-90 ССБТ рівень вібрації на робочих місцях операторів не повинний перевищувати 75 дб (по виброскорости). Нормовані рівні вібрації забезпечуються шляхом використання виброизоляторов з матеріалів з великим внутрішнім тертям (гуми, пробки, повсті, чи азбесту сталевих пружин).

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

6.1.5 Метеоусловия

З метою забезпечення комфортних умов для обслуговуючого персоналу і надійності технологічного процесу відповідно ДО ДЕРЖСТАНДАРТУ 12.1.005-88, п.1.4 установлюють наступні вимоги до мікрокліматичних умов (див. табл. 6.2.)

Таблиця 6.2

Вимоги до мікрокліматичних умов

Період року

Категорія

Параметри повітряного середовища на робочих місцях

робіт

t, °З

відносна вологість, %

швидкість руху повітря, м/с

Холодний

Легка -Іа

22-24

40-60

0,1

Теплий

Легка -Іа

23-25

40-60

0,1

Відповідно ДО ДЕРЖСТАНДАРТУ 12.1.005-88 п.1.8 інтенсивність теплового випромінювання працюючих від нагрітих поверхонь технологічного устаткування, освітлювальних приладів, інсоляції на постійних місцях не повинна перевищувати 35 Ут/м2при опроміненні 50% поверхні тіла і більш.

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

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

Кондиціонери бувають двох видів:

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

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

Контроль параметрів мікроклімату здійснюється за допомогою приладів безупинного і періодичного виміру. Виміри виробляються п'ять разів у зміну на висоті 1.5 метра від підлоги. Прилади безупинного виміру: термографи, барографи. Вони вимірюють відповідно температуру, відносну вологість, атмосферний тиск. Для забезпечення необхідних метеорологічних умов праці приймають системи опалення, вентиляції і кондиціонування. Для очищення повітря пилу в місцях забору установлюють фільтри 2-го і 3-го класу типів ФППУ, ФСВУ, ФЯЛ, ФВН.

Для експлуатації ЕОМ передбачається три типи приміщень:

- основні - до них відносяться: машинний зал, приміщення для розміщення сервісної і периферійної апаратури;

- допоміжні - приміщення для збереження носіїв інформації, приміщення для розміщення приточно-витяжних вентиляторів і пристроїв кондиціонування повітря;

- виробничі- приміщення для прийому і видачі інформації, приміщення для обслуговуючого персоналу ЕОМ.

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

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

- висота залу під технічною підлогою до підвісної стелі 3-3.5 метра,

- відстань між підвісною й основною стелею при цьому повинно бути 0.5-0.8 метра,

- габарити двер машинного залу приймаються не менш 1.8 х 1.1 метра.

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

Усі допоміжні приміщення ОЦ розташовані в нижніх і цокольних поверхах, їхня висота - 3.3 метра.

6.1.6 Висвітлення

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

Згідно Снип II-4-79 п.1.2 приміщення для роботи з дисплеями і відеотерміналами відносяться до I групи по задачах зорової роботи.

Нормований рівень освітленості для роботи з ВТ прийнятий 400 лк (див. табл. 6.3)

Таблиця 6.3

Нормування рівня освітленості

Штучне висвітлення

Природне висвітлення

Приміщення

Освещен-ность робітників поверхонь, лк

Показник дискомфорту, не більш

Коеффици-ент пульса-ції осве-щенности, % не більш

КЕО e H III , %

при верхньому чи верхньому і бічному

при бічному висвітленні

у зоні зі стійким сніжним покривом

на іншій території СРСР

Приміщення для роботи з дисплеями, видеотерми-налами

400

40

10

4

1,2

1,5

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

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

Рис 6.1. Крива сили світла світильника з подвійною хрестовою оптикою.

Завдяки такому світлорозподілу у верхній півсфері яскравість стелі в будь-якім місці, у тому числі і безпосередньо під світильником, не перевищує 200 кд/м2. Габаритна яскравість світильників у зоні кутів випромінювання більш 50 ° від вертикалі обмежується в обох площинах 200 кд/м2. (мал. 6.2.)

Рис.6.2. Обмеження яскравості (L) світильників загального висвітлення для роботи з відеотерміналом

В ОЦ застосовують однобічне природне висвітлення. У машинних залах робочі місця операторів, що працюють з дисплеями, розташовують подалі від вікон і таким чином, щоб віконні прорізи знаходилися збоку від працюючих. У випадку якщо екран ВТ звернений до віконного прорізу, повинні бути передбачені спеціальні пристрої, що екранують. Вікна рекомендується постачати светорассеивающими шторами (r=0,5-0,7), регульованими чи жалюзі солнцезащитной плівкою з металевим покриттям.

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

Для штучного висвітлення приміщень ОЦ варто використовувати головним чином, люмінесцентні лампи білого світла (ЛБ) і темно-білого кольору (ЛТБ) потужністю 20,40 чи 80 Ут.

Планування робочого місця повинні задовольняти вимогам зручності виконання робіт і економії енергії оператора, раціонального використання площ і зручності обслуговування пристроїв ЕОМ. Кнопки для включення, ручки керування засобів сигналізації повинні забезпечувати мінімальні витрати.

6.1.7 Розрахунок природного висвітлення

Приміщення з постійним перебуванням людей повинні мати, як правило, природне висвітлення.

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

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

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

Вихідні дані для розрахунку:

- розмір приміщення - 15 * 17 * 4, м;

- два вікна з подвійним остеклением і металевими плетіннями виходять на схід;

- площа остекления - 4 м2;

- розміри остекления - 240*200, див.

Нормоване значення КЕО енопределяется по формулі

,

(6.1.)

де = 1,5% для бічного висвітлення,

m - коефіцієнт світлового клімату, прийнятий 0,9,

C - коефіцієнт сонячності клімату, прийнятий 0,8.

Одержуємо = 1.5×0.9×0.8 = 0.1.

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

,

(6.2.)

де S0- площа світлових прорізів у світлі,

Sn- площа підлоги приміщення,

e- нормоване значення КЕО,

Кз- коефіцієнт запасу, прийнятий 1,2,

h0- світлова характеристика вікно, прийнятий 15,

Кзд- коефіцієнт, що враховує затінення вікон конфронтуючими будинками, прийнятий 1,2,

t0- коефіцієнт светопропускания матеріалу, визначається по формулі

,

(6.3.)

гдеt1- коефіцієнт светопропускания матеріалу, прийнятий 0,8,

t2- коефіцієнт, що враховує утрати світла в плетіннях светопроемов, прийнятий 0,6,

t3- коефіцієнт, що враховує утрати світла в несущих конструкціях при бічному висвітленні, прийнятий 1,

t4- коефіцієнт, що враховує утрати світла в солнцезащитних пристроях, прийнятий 1,

t5- коефіцієнт, що враховує утрати світла в захисній сітці, установлюваної під ліхтарями, приймається рівним 0,9.

Звідси = 0,4.

r1- коефіцієнт, що враховує підвищення КЕО при бічному висвітленні, прийнятий 1,25.

При виборі коефіцієнтів використовувалися значення для лабораторії центра ИТ.

Розрахунок коефіцієнта природної освітленості (КЕО) виробляється по формулі

,

(6.4.)

де - геометричний КЕО в розрахунковій крапці при бічному висвітленні, що враховує світло неба,

q - коефіцієнт, що враховує нерівномірну яскравість хмарного неба, прийнятий 0,91 при кутовій висоті светопроема над робочою поверхнею 34 град,

- геометричний КЕО в розрахунковій крапці при бічному висвітленні, що враховує світло, відбитий від конфронтуючих будинків,

R - коефіцієнт, що враховує відносну яскравість конфронтуючих будинків, прийнятий 0,15 при Z1 = 0,5, Z2 = 1.

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

(6.5.)

де n1- кількість променів минаючих від неба через світлові прорізи в розрахункову крапку на поперечному розрізі приміщення, прийнято 7,

n2- кількість променів минаючих від неба через світлові прорізи в розрахункову крапку на плані приміщення, прийнято 8.

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

,

(6.6.)

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

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

Розрахунок:

= 0,56,

= 0,42,

= 0,239.

Розрахункове значення КЕО більше нормованого, тому при заданих розмірах віконних прорізів забезпечується достатня освітленість робочого місця.

6.1.8 Організація робочого місця

При розміщенні ВТ на робочому місці відповідно ДО ДЕРЖСТАНДАРТУ 12.2.032-78 враховуються границі полів зору оператора, що визначаються рухами очей і голови. Розрізняють зони зорового спостереження у вертикальній площині, обмежені визначеними кутами, у яких розташовуються екран ВТ (40-60 °), пюпітр (35-45 °) і клавіатура. (мал. 6.3.)

Рис.6.3. Зони зорового спостереження у вертикальній площині

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

Висота сидіння від підлоги повинна регулюватися в межах 42-55 див. Залежність висоти робочої поверхні від росту людини показана на мал.6.5. За бажанням оператора встановлюється підставка для ніг розміром 40х30х15 див і кутом нахилу 0-20° з нековзним покриттям і непереміщувана по підлозі.

Рис. 6.4. Зони для виконання ручних операцій і розміщення органів керування

1-зона для розміщення часто використовуваних органів керування; 2-зона для розміщення часто використовуваних органів керування; 3-зона для розміщення рідко використовуваних органів керування

Ріст людини, мм Ріст людини, мм

Рис. 6.5. Номограма залежності висоти робочої поверхні для різних видів робіт (1-4), простору для ніг (5) і висоти робочого сидіння (6) від росту людини

При постійній роботі (мал.6.6) екран повинний бути розташований у центрі полючи огляду, документи ліворуч на чи столі на спеціальній підставці. Робочий стіл повинний мати стабільну конструкцію. Площина столу вибирають у залежності від розміру документів. При великих розмірах документів вона повинна бути 160х90 див. Площина столу, а також сидіння оператора повинні регулюватися по висоті. Висоту площини столу необхідно регулювати в діапазоні 65-85 див чи 68-84 див. При цьому висота від горизонтальної лінії зору до робочої поверхні столу при випрямленной робочій позі повинна бути 45-50 див.

Рис. 6.6. Розташування елементів устаткування ВТ при постійній роботі з екраном

6.2 Пожежна безпека

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

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

По вибуховій і пожежній небезпеці приміщення і будинки підрозділяються на категорії А, Б, У, Г, Д в залежності від виконуваних у них технологічних процесів, властивостей застосовуваних речовин і матеріалів, а так само умовами їхньої обробки.

Тому що в процесі виробництва використовуються пальні речовини і матеріали (папір, магнітні стрічки, порошкові картриджі для множної й оргтехніки), що при взаємодії з киснем повітря можуть горіти, те призначаємо категорію пожежної безпеки В (ОНТП 24-86, табл.1).

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

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

Для ліквідації пожеж у початковій стадії застосовуються первинні засоби пожежегасіння:

- внутрішні пожежні водопроводи,

- вогнегасники типу ОХП-10, ОХП-11,

- сухий пісок,

- азбестові ковдри й ін.

У будинку ОЦ крани встановлюють у коридорах, на площадках сходових кліток, у входу, тобто в доступних і захисних місцях. На кожні 100 квадратних метра підлоги виробничих приміщень звичайно потрібно 1-2 вогнегасника (табл. 6.4.). Час дії пінних вогнегасників 50-70з, довжина струменя 6-8м, кратність піни 5, стійкість 40 хв.

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

Таблиця 6.4

Зразкові норми первинних засобів пожежегасіння на діючих промислових підприємствах і складах

Приміщення, спорудження, установка

Одиниця виміру, м 2

Вуглекислі вогнегасники ручні ОУ-2, ОУ-5, ОУ-8

Пінні, хімічні, повітряно-пінні вогнегасники

Повсть, чи повстина азбест (1x1, 2x1.5, 2x2 м)

вичислитель-ние центри

100

1

1

1

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

7. ЕКОНОМІЧНИЙ РОЗДІЛ

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

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

Річні експлуатаційні витрати при ручній обробці інформації визначаються по формулі

З р = Т р *до*t чр *(1+q)*(1+a)*(1+b),

(7.1.)

гдетр- трудомісткість разового рішення задачі вручну, чел-ч. (Тр= 3.5),

до - періодичність рішення задачі протягом року (до = 200),

tчр- среднечасовая ставка працівника, що здійснює ручний розрахунок задачі, руб.,

q - коефіцієнт, що враховує відсоток премій (q = 0.4),

а - коефіцієнт, що враховує додаткову заробітну плату (а = 0.15),

b - коефіцієнт, що враховує нарахування на заробітну плату, включаючи відрахування у фонд соціального захисту населення - 35%, дитячих установ - 5% і надзвичайний чорнобильський податок - 12% (b = 0.52).

Трудомісткість разового рішення задачі вручну визначається по нормах часу на розробку конструкторської чи технологічної документації [19].

Среднечасовая ставка працівника визначається виходячи з Єдиної тарифної системи оплати праці в Республіці Бєларус по наступній формулі

t чр = ПРО 1 *k т /167,

(7.2.)

гдео1- середньомісячна заробітна плата працівника 1 розряду (за станом на 01.04.97 - 170000 руб.),

кт- тарифний коефіцієнт працівника відповідного розряду (кт= 4.06),

167 - нормативна кількість робочих годин у місяці.

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

Таблиця 7.1

Тарифні коефіцієнти фахівців з вищим утворенням

Категорія працівників

Розряд

Тарифні коефіцієнти

Фахівці з вищим утворенням:

без категорії

8

3.69

2 категорії

9

4.06

1 категорії

10

4.47

вищої категорії

11

4.78

t чр = 170000*4.06/167 = 4132.93 (руб),

З р = 3.5*200*4132.93*(1+0.4)*(1+0.15)*(1+0.52) = 7079874.41(руб)

Річні поточні витрати, зв'язані з експлуатацією задачі, визначаються по формулі

З т = З п +З а,

(7.3.)

гдезп- витрати на заробітну плату користувача програми,

За- витрати на оплату оренди ЕОМ при рішенні задачі.

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

З п = Т з *до*t чп *(1+q)*(1+a)*(1+b),

(7.4.)

гдетз- час рішення задачі на ЕОМ, година.,

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

Час рішення задачі на ЕОМ визначається по формулі

Т з = (Т вв +Т р +Т вивши )*(1+d пз )/60,

(7.5.)

гдетвв- час введення в ЕОМ вихідних даних, необхідних для рішення задачі, хв.,

Тр- час обчислень, хв. (Тр= 0.1),

Твив- час висновку результатів рішення задачі (включаючи час роздруківки на принтері і графобудівнику), хв. (Твив= 4),

dпз- коефіцієнт, що враховує підготовчо-заключний час (dпз= 0.20).

Час введення в ЕОМ вихідних даних може бути визначене по формулі

Т вв = К z *H z /100,

(7.6.)

гдекz- середня кількість знаків, що набираються з клавіатури при уведенні вихідних даних (Кz= 250),

Hz- норматив набору 100 знаків, хв. (Hz= 2).

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

t чп = 170000*3.69/167 = 3756.29 (руб),

Т вв = 250*2/100 = 5 (хв),

Т з = (5+0.1+4)*(1+0.20)/60 = 0.182 (година),

З п = 0.182*200*3756.29*(1+0.4)*(1+0.15)*(1+0.52) = 334603.10 (руб).

Витрати на оплату оренди ЕОМ для рішення задачі визначаються по наступній формулі

За = Т з *до*S мч,

(7.7.)

гдеSмч- вартість одного машино-часа роботи ЕОМ, руб.

Вартість машино-часа роботи ЕОМ визначається по формулі

S мч = С е +(А евм +Р евм +А пл +Р пл +Н н )/Ф евм,

(7.8.)

гдесе- витрати на електроенергію за годину роботи ЕОМ, руб.,

Аевм- річна величина амортизаційних відрахувань на реновацію ЕОМ, руб.,

Ревм- річні витрати на ремонт і технічне обслуговування ЕОМ, руб.,

Апл- річна величина амортизаційних відрахувань на реновацію виробничих площ, займаних ЕОМ, руб.,

Рпл- річні витрати на ремонт і зміст виробничих площ, руб.,

Нн- річна величина податку на нерухомість, руб.,

Февм- річний фонд часу роботи ЕОМ, година.

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

З е = N е *k ис *Ц е чи С е = Ч ел *Ц е,

(7.9.)

гдеNе- установлена потужність електродвигуна ЕОМ, квт (Nе= 0.2),

киснув- коефіцієнт використання енергоустановок по потужності (киснув= 0.9),

Це- вартість 1 квт-години електроенергії, руб. (Це= 690),

Чел- среднечасовое споживання електроенергії ЕОМ, квт.

З е = 0.2*0.9*690 = 124.2 (руб).

Річна величина амортизаційних відрахувань на реновацію ЕОМ визначається по формулі

А евм = Ц евм *k у *k м *Н аевм /100 = Ц бевм *Н аевм /100,

(7.10.)

гдецевм- ціна ЕОМ на момент її випуску, руб. (Цевм= 17500000),

ку- коефіцієнт подорожчання ЕОМ (залежить від року випуску). У тому випадку, коли як ціну використовується ціна 1997р., коефіцієнт подорожчання ку= 1,

км- коефіцієнт, що враховує витрати на монтаж і транспортування ЕОМ (км= 1.1),

Наевм- норма амортизаційних відрахувань на ЕОМ, % (Наевм= 10),

Цбевм- балансова вартість ЕОМ, руб.

Ц бевм = 17500000*1*1.1 = 19250000 (руб),

А евм = 17500000*1*1.1*10/100 = 1925000 (руб).

Річні витрати на ремонт і технічне обслуговування ЕОМ укрупненно можуть бути визначені по формулі

Р евм = Ц бевм *k ро,

(7.11.)

гдекро- коефіцієнт, що враховує витрати на ремонт і технічне обслуговування ЕОМ, у тому числі витрати на запчастини, зарплату ремонтного персоналу й ін. (кро= 0.1).

Р евм = 19250000*0.1 = 1925000 (руб).

Річна величина амортизаційних відрахувань на реновацію виробничих площ, зайнятих ЕОМ визначається по формулі

А пл = Ц бпл *Н апл /100 = S евм *k д *Ц пл *Н апл /100,

(7.12.)

гдецбпл- балансова вартість площ, руб.,

Напл- норма амортизаційних відрахувань на виробничі площі, % (Напл = 1.2),

Sевм- площа, займана ЕОМ, кв. м. (Sевм= 1 кв. м.),

кд- коефіцієнт, що враховує додаткову площу (кд= 3),

Цпл- ціна 1 квадратного метра площі, руб. (Цпл= 4363837.5).

Ц бпл = 1*3*4363837.5 = 13091512.5 (руб),

А пл = 13091512.5*1.2/100 = 157098.15 (руб).

Річні витрати на ремонт і зміст виробничих площ укрупненно можуть бути визначені по формулі

Р пл = Ц бпл *k ре,

(7.13.)

гдекре- коефіцієнт, що враховує витрати на ремонт і експлуатацію виробничих площ (кре= 0.05).

Р пл = 13091512.5*0.05 = 654575.63 (руб).

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

Н н = (Ц бевм +Ц бпл )*Із нн,

(7.14.)

гдеснн- ставка податку на нерухомість (Снн= 0.01).

Н н = (19250000+13091512.5)*0.01 = 323415.13 (руб).

Річний фонд часу роботи ЕОМ визначається виходячи з режиму її роботи і може бути розрахований по формулі

Ф евм = t сс *Т сг,

(7.15.)

гдеtсс- середньодобове фактичне завантаження ЕОМ, година. (tсс= 8),

Тсг- середня кількість днів роботи ЕОМ у рік (Тсг= 250).

Ф евм = 8*250 = 2000 (година),

S мч = 124.2+(1925000+1925000+157098.15+654575.63+323415.13)/2000 = 2504.96 (руб).

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

П у = (З р - З т )*(1-з нп ),

(7.16.)

гдеснп- ставка податку на прибуток (Снп= 0.3).

З а = 0.182*200*2504.96 = 91180.54 (руб),

З т = 334603.10 + 91180.54 = 425783.64 (руб),

П у = (7079874,41-425783,64)*(1-0,3) = 4657863.54 (руб).

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

ДО про = К з +Ц ін,

(7.17.)

гдекз- капітальні і прирівняні до них витрати, руб.,

Цпр- відпускна ціна програми, руб.,

Капітальні і прирівняні до них витрати визначаються по формулі

ДО з = Ц бевм *(1-X*Н аевм /100)*Т з *до/Ф евм, ,

(7.18.)

гдех - кількість років вироблення ЕОМ, років.

ДО з = 19250000*(1-5*10/100)*0.182*200/ 2000 = 175175 (руб).

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

Ц ін = Ц о +(З рз +П р )*Н доб,

(7.19.)

гдецо- оптова ціна програми, руб.,

Зрз- витрати на заробітну плату розроблювачів програми, руб.,

Пр- розмір планового прибутку на програму, руб.,

Ндоб- ставка податку на додаткову вартість (Ндоб= 0.20).

Витрати на заробітну плату розроблювачів програми визначаються по формулі

З рз = Т рз *t чрз *(1+q)*(1+a)*(1+b),

(7.20.)

гдетрз- трудомісткість розробки програми, година.,

tчрз- среднечасовая ставка працівника, що здійснює розробку програми, руб.

Трудомісткість розробки програми включає час на постановку задачі і час на програмування задачі і визначається по формулі

nе nе

Т рз = (å Тпос і +å Тпрг і )*8,

(7.21.)

і=1 і=1

гдеnе- кількість етапів розробки програми,

Тпосі- трудомісткість постановки задачі на i-м етапі розробки програми, днів,

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

Розробка пакета програм, представленого в дійсному проекті, містила в собі 4 етапи:

1. Проектування структур баз даних (Тпос = 1, Тпрг = 3);

2. Розробка програми створення і модифікації тестів (Тпос = 0.4, Тпрг = 18);

3. Розробка програми контролю знань (Тпос = 0.3, Тпрг = 15);

4. Розробка програми адміністрування (Тпос = 0.3, Тпрг = 11);

Т рз = 392 (година),

t чрз = 170000*4.78/167 = 4865.87 (руб),

З рз = 392*4865.87*(1+0.4)*(1+0.15)*(1+0.52) = 4667840.77 (руб).

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

- кількість різновидів форм вхідної інформації;

- кількість різновидів форм вихідної інформації;

- ступінь новизни задачі;

- складність алгоритму;

- вид використовуваної інформації;

- складність контролю вхідної і вихідної інформації;

- мова програмування;

- обсяг вхідної інформації;

- використання типових рішень, типових проектів і програм,

- стандартних модулів.

Передбачено чотири ступені новизни розроблювальних задач:

- А - розробка задач, що передбачає застосування принципово нових методів розробки, проведення науково-дослідних робіт;

- Б - розробка типових проектних рішень, оригінальних задач і систем, що не мають аналогів;

- В - розробка проекту з використанням типових проектних рішень за умови їхньої зміни, розробка проектів, що мають аналогічні рішення;

- Г - прив'язка типових проектних рішень.

Складність алгоритму представлена трьома групами:

- 1 - алгоритми оптимізації і моделювання систем і об'єктів;

- 2 - алгоритми обліку, звітності, статистики і пошуку;

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

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

Плановий прибуток на програму визначається по формулі

П р = З ін *Н п ,,

(7.22.)

гдеспр- собівартість програми, руб.,

Нп- норма прибутку проектної організації (Нп= 0.25).

Собівартість програми визначається по формулі

З ін = З рз *F+З від ,

(7.23.)

где - коефіцієнт накладних витрат проектної організації без обліку експлуатації ЕОМ (F = 1.15),

Зот- витрати на налагодження програми.

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

З від = Т отл *S мч,

(7.24.)

гдетотл- трудомісткість налагодження програми, година. (Тотл= 32).

З від = 32* 2504.96 = 80159 (руб),

З ін = 4667840.77*1.15+80159= 5448175.89 (руб).

Оптова ціна програми визначається по формулі

Ц про = З ін +П р.

(7.25.)

П р = 5448175.89 *0.25 = 1362043.97 (руб),

Ц про = 5448175.89 + 1362043.97 = 5440712.13 (руб),

Ц ін = 5440712.13+(4667840.77+1362043.97)*0.2 = 6646689.08 (руб).

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

ЕФ = П у - Е*К о = П у - Е*(К з +Ц ін ),

(7.26.)

гдее - коефіцієнт ефективності, дорівнює ставці за кредити на ринку довгострокових кредитів (Е = 0.25).

ДО про = 175175+6646689.08 = 6821864.08 (руб),

ЕФ = 4657863.54 -0.25*6821864.08= 2952397.52 (руб).

Термін повернення інвестицій визначається по формулі

Т у = К о /П у ,

(7.27.)

Т у = 6821864.08/ 4657863.54 = 1.46 (років).

Результати розрахунку зведені в табл. 7.2.

Таблиця 7.2

Техніко-економічні показники проекту

Найменування показника

Базовий варіант

Проектний варіант

Трудомісткість рішення задачі, година.

4

0.182

Періодичність рішення задачі, раз/рік

200

200

Річні поточні витрати, зв'язані з рішенням задачі, млн. руб.

7.080

0.335

Відпускна ціна програми, млн. руб.

-

6.647

Ступінь новизни програми

-

У

Група складності алгоритму

-

3

Приріст умовного прибутку, млн. руб.

-

4.658

Очікуваний річний економічний ефект, млн. руб.

-

2.952

Термін повернення інвестицій, років

-

1.46

Розроблена " система, ЩоОбучающе-контролирует," забезпечує одержання річного економічного ефекту в сумі 2.952 млн. карбованців. Приріст умовного прибутку складає 4.658 млн. карбованців. При відпускній ціні програми в 6.647 млн. карбованців проект забезпечує повернення інвестицій за 1.46 року.

ВИСНОВОК

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

1) програма для створення і модифікації тестів;

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

3) програма контролю знань.

Розроблена універсальна система, що обучающе-контролирует, має наступні можливості:

- створення на основі наявних баз знань тестів по різних предметах;

- модифікація створених тестів;

- формування квитків;

- завдання часу відповіді на питання квитка;

- завдання системи оцінки результатів тестування;

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

- можливість роботи системи в ЛВС;

- перегляд і роздруківка результатів (протоколу) тестування на принтері

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

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

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

Додаток 1

ТЕКСТПРОГРАММИ TESTBUILDER

program TestBuilder;

uses

Forms,

S2 in 'S2.PAS' {TreeForm},

db_unit in 'db_unit.pas' {EditForm},

addtema in 'addtema.pas' {WinEditTema},

progrInd in 'progrInd.pas' {ProcessForm};

{$R *.RES}

begin

Application.Title:= 'TestBuilder';

Application.CreateForm(TTreeForm, TreeForm);

Application.CreateForm(TEditForm, EditForm);

Application.CreateForm(TWinEditTema, WinEditTema);

Application.CreateForm(TProcessForm, ProcessForm);

Application.Run;

end.

Текстмодуля DB_Unit

unit S2;

interface

uses

SysUtils, WinTypes,{ Windows,} Messages, Classes, Graphics, Controls,

Forms, Dialogs, Buttons, StdCtrls, Grids, Outline, ComCtrls, DBCtrls,

DBTables, DB;

type

TTreeForm = class(TForm)

MainTree: TOutline;

AddDocBut: TSpeedButton;

DeleteBut: TSpeedButton;

FullExpBut: TSpeedButton;

FullColBut: TSpeedButton;

ExitBut: TSpeedButton;

AddTemaBut: TSpeedButton;

TemaSource: TDataSource;

QuestSource: TDataSource;

DBTema: TTable;

DBTemaTema_id: TAutoIncField;

DBTemaTema_name: TStringField;

DBQuest: TTable;

DBQuestTema_id: TIntegerField;

DBQuestQuest_id: TAutoIncField;

DBQuestQuest_name: TMemoField;

procedure AddDocButClick(Sender: TObject);

procedure MainTreeClick(Sender: TObject);

procedure DeleteButClick(Sender: TObject);

procedure FullExpButClick(Sender: TObject);

procedure FullColButClick(Sender: TObject);

procedure ExitButClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure AddTemaButClick(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure FormResize(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure AppendQuestion(temaId: longint);

procedure ClearQuestion;

private

{ Private declarations }

x1,x2: integer; {вспомогательниепеременние}

CreateMainForm: boolean;

public

{ Public declarations }

end;

var

TreeForm: TTreeForm;

implementation

uses db_unit, addtema, progrInd;

{$R *.DFM}

procedure TTreeForm.AddDocButClick(Sender: TObject);

var

Nodename: string;

number,ind,docindex: longint;

begin

If MainTree.Items[MainTree.SelectedItem].Level = 1 then Exit;

If MainTree.Items[MainTree.SelectedItem].Level = 2 then {у NUMBER заноситсяномертеми }

begin

number:= longint(MainTree.Items[MainTree.SelectedItem].Data);{у NUMBER заноситсяномертеми}

ind:= MainTree.SelectedItem;

end

else

begin

number:= longint(MainTree[MainTree.SelectedItem].Parent.Data);

ind:= MainTree[MainTree.SelectedItem].Parent.Index;

end;

AppendQuestion(number); {додавання нового питання в БД питань}

With MainTree.Items[ind] do

If HasItems then number:= GetLastChild - GetFirstChild + 2 {определениечислапотомков + 2}

else number:= 1;

Str(number,Nodename); {номервопросавтеме}

If MainTree.Items[MainTree.SelectedItem].Level = 2 then

begin

docIndex:= MainTree.AddChildObject(MainTree.SelectedItem,NodeName,

pointer(DBQuest.Fields[1].AsInteger));

MainTree.Items[MainTree.SelectedItem].Expand;

end

else {if... = 3}

docIndex:= MainTree.AddObject(MainTree.SelectedItem,NodeName,

pointer(DBQuest.Fields[1].AsInteger));

MainTree.Selecteditem:= docIndex; {установлениефокусана new питання}

end;

procedure TTreeForm.MainTreeClick(Sender: TObject);

Var

cur_id: longint;

NewAnswer: TAnswer;

del_count,i: integer;

begin

if MainTree.Items[MainTree.SelectedItem].Level = 1 then

begin

EditForm.QuestLabel.Hide;

EditForm.DBEditTema.Hide;

EditForm.MemoQuest.Hide;

EditForm.MemoScroll.Enabled:= False;

EditForm.AddAnswerBut.Enabled:= False;

EditForm.DelAnswerBut.Enabled:= False;

Exit;

end;

cur_id:= Longint(MainTree.Items[MainTree.SelectedItem].Data);

EditForm.QuestLabel.Show;

if MainTree.Items[MainTree.SelectedItem].Level = 3 then

begin

With TreeForm.DBQuest do begin {установкафильтранабдвопросов }

SetKey;

Fields[1].AsInteger:= cur_id;

GotoKey;

end;

EditForm.DBEditTema.Hide;

EditForm.QuestLabel.Caption:= 'Текствопроса';

EditForm.MemoQuest.Show;

EditForm.MemoScroll.Enabled:= True;

EditForm.AddAnswerBut.Enabled:= True;

EditForm.DelAnswerBut.Enabled:= True;

і:= 0; {індекс ДЛЯ ОБ'ЄКТА TMemo у списку}

EditForm.DBAnswer.First; {щоб не було глюков при повторному щиглику на питанні}

while NOT EditForm.DBAnswer.Eof do

begin

If (i+1) > EditForm.MemoScroll.ComponentCount then

NewAnswer:= TAnswer.Create(EditForm.MemoScroll,100); {додавання new вариантаответавсписок}

TMemo(EditForm.MemoScroll.Components[i]).Text:=

EditForm.DBAnswer.Fields[2].AsString; {Otvet_name}

TCheckBox(EditForm.MemoScroll.Components[i+1]).Checked:=

EditForm.DBAnswer.Fields[3].AsBoolean; {Otvet_name}

inc(і,2); // < - збільшення індексу ДЛЯ ОБ'ЄКТА TMemo у списку

EditForm.DBAnswer.Next;

end;

While і < EditForm.MemoScroll.ComponentCount do {видалення зі списку зайвих варіантів відповіді}

TAnswer.DeleteAnswer(EditForm.MemoScroll,EditForm.MemoScroll.ComponentCount - 2);

If EditForm.MemoScroll.ComponentCount > 0 then TMemo(EditForm.MemoScroll.Components[0]).SetFocus; {Set focus on first answer.}

end

else {if level = 2, тобто вибранатема}

begin

With TreeForm.DBTema do begin {установкафильтранабдтем }

SetKey;

Fields[0].AsInteger:= cur_id;

GotoKey;

end;

EditForm.AddAnswerBut.Enabled:= False;

EditForm.DelAnswerBut.Enabled:= False;

EditForm.MemoScroll.Enabled:= False;

EditForm.MemoQuest.Hide;

EditForm.QuestLabel.Caption:= 'Названиетеми';

EditForm.DBEditTema.Show;

end;

end;

procedure TTreeForm.DeleteButClick(Sender: TObject);

begin

If Maintree.SelectedItem = 1 then Exit;

If MainTree.Items[MainTree.SelectedItem].Level = 3 then

begin

If Application.MessageBox('Видалити питання ?','Видалення питання',

mb_YesNo+mb_IconQuestion+MB_DEFBUTTON2) = IdYes then

begin

ClearQuestion; // логічне видалення питання з БД

MainTree.Delete(MainTree.SelectedItem); {видалення поточного вузла дерева}

end;

end

else

If Application.MessageBox('Удалитьраздел ?','Удалениераздела',

mb_YesNo+mb_IconQuestion+MB_DEFBUTTON2) = IdYes then

begin

DBQuest.IndexName:= 'tema_ind';

DBQuest.SetKey;

DBQuest.Fields[0].AsInteger:= DBTema.Fields[0].AsInteger; // Fields[0] - Tema_Id

While DBQuest.GotoKey do ClearQuestion; // логічне видалення всіх питань, що належать темі

DBQuest.IndexName:= '';

DBTema.Delete; { Видалення обраної теми }

{ DBTema.Edit; DBTema.Fields[1].Clear; DBTema.Post; // logical delete }

MainTree.Delete(MainTree.SelectedItem); {удалениетекущегоузладерева}

end;

end;

procedure TTreeForm.FullExpButClick(Sender: TObject);

begin

MainTree.FullExpand;

end;

procedure TTreeForm.FullColButClick(Sender: TObject);

begin

MainTree.FullCollapse;

end;

procedure TTreeForm.ExitButClick(Sender: TObject);

begin

TreeForm.Close;

end;

procedure TTreeForm.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Action:= caFree;

EditForm.DBAnswer.Active:= False;

DBQuest.Active:= False;

DBTema.Active:= False;

end;

procedure TTreeForm.AddTemaButClick(Sender: TObject);

var

index: Longint;

FoundEmpty: boolean;

begin

WinEditTema.ShowModal;

If WinEditTema.ModalResult = mrOk then begin

FoundEmpty:= False;

DBTema.First;

While (not DBTema.EOF) and (not FoundEmpty) do {поискзаписив DBTEMA спустимполем Tema_name}

begin

If DBTema.Fields[1].IsNull Then FoundEmpty:= True

else DBTema.Next;

end;

If FoundEmpty then DBTema.Edit

else DBTema.Append; {додавання нової теми в БД, якщо не знайдено порожній}

DBTema['Tema_name']:= WinEditTema.TemaEdit.Text;

DBTema.Post;

AppendQuestion(DBTema.Fields[0].AsInteger); {добавлениеновоговопросавбд }

index:= MainTree.AddChildObject(1,

DBTema.Fields[1].AsString,

pointer(DBTema.Fields[0].AsInteger)); {додавання new теми}

MainTree.AddChildObject(index,'1',

pointer(DBQuest.Fields[1].AsInteger)); {добавлениепустоговопросавтему}

If not MainTree.Items[1].Expanded then

MainTree.Items[1].Expand; {раскритиекорневогоузла}

MainTree.Items[index].Expand; {раскритиеузлатеми}

MainTree.Selecteditem:= index; {установлениефокусана new тему}

end;

end;

procedure TTreeForm.FormShow(Sender: TObject);

Var

cur_node,i: Longint;

node_name: string;

begin

if CreateMainForm then

begin

ProcessForm.Show;

DBTema.Active:= True; {Откритиебдтемивопросов}

DBQuest.Active:= True;

ProcessForm.ProgressBar.Max:= DBTema.RecordCount + DBQuest.RecordCount;

While not DBTema.EOF do begin {загрузкадереваизбд}

ProcessForm.ProgressBar.StepIt;

If not DBTema.Fields[1].IsNull then

begin

cur_node:= MainTree.AddChildObject(1,

DBTema.Fields[1].AsString,

pointer(DBTema.FieldByName('Tema_id').AsInteger)); {добавлениетемивдерево}

i:= 1;

While not DBQuest.EOF do begin

ProcessForm.ProgressBar.StepIt;

Str(і,node_name);

MainTree.AddChildObject(cur_node,node_name,

pointer(DBQuest.Fields[1].AsInteger));{добавлениевопросавтек. тему}

DBQuest.Next; inc(i);

end;

end;

DBTema.Next;

end; {while}

DBQuest.IndexName:= ''; {отключениесвязимежду DBTema і DBQuest}

DBQuest.MasterFields:= '';

ProcessForm.Close;

CreateMainForm:= False;

end;

EditForm.Show;

end;

procedure TTreeForm.FormResize(Sender: TObject);

begin

if TreeForm.Height > = 300 then

MainTree.Height:= TreeForm.ClientHeight - Maintree.Top - x1

else

TreeForm.Height:= 300;

IF TreeForm.Width > = 263 then

MainTree.Width:= TreeForm.ClientWidth - MainTree.Left - x2

else

TreeForm.Width:= 263;

end;

procedure TTreeForm.FormCreate(Sender: TObject);

begin

CreateMainForm:= True;

x1:= ClientHeight - MainTree.Top - MainTree.Height;

x2:= ClientWidth - MainTree.Left - Maintree.Width;

TreeForm.Height:= GetSystemMetrics(SM_CYMAXIMIZED) - 10;

end;

procedure TTreeForm.AppendQuestion(temaId: longint);

{ Додає в таблицю DBQuest нове питання.

temaId - містить значення теми, який належить питання

}

begin

DBQuest.IndexName:= 'tema_ind'; {підключення вторинного індексу}

DBQuest.SetKey; {пошук запису з 0-им значенням DBQuest.Tema_id}

DBQuest.Fields[0].AsInteger:= 0;

If DBQuest.GotoKey then {якщо знайдений запис, те редагуємо її полючи}

begin

DBQuest.IndexName:= ''; {відключення вторинного індексу}

DBQuest.Edit;

end

else {якщо не знайдена такий запис, те додаємо нову}

begin

DBQuest.IndexName:= ''; {відключення вторинного індексу}

DBQuest.Append;

end;

DBQuest['Tema_id']:= TemaId;

DBQuest.Post;

end;

procedure TTreeForm.ClearQuestion;

{здійснює логічне видалення поточного питання з БД}

begin

{обнуління параметра Quest_id у всіх зв'язаних записах БД answer.db}

EditForm.DBAnswer.First;

While not EditForm.DBAnswer.Eof do EditForm.ClearAnswer;

{обнуління tema_id поточного питання}

DBQuest.Edit;

DBQuest.Fields[0].AsInteger:= 0; // DBQUEST.Tema_id

DBQuest.Fields[2].AsString:= ''; // DBQUEST.QUest_name

DBQuest.Post;

end;

end.

Текстмодуля DB_Unit

unit db_unit;

interface

uses

SysUtils, Windows, Messages, Classes, Graphics, Controls,

StdCtrls, Forms, Mask, Buttons,

DBTables, DB, DBCtrls;

type

TEditForm = class(TForm)

MemoQuest: TDBMemo;

QuestName: TLabel;

QuestLabel: TLabel;

DBEditTema: TDBEdit;

MemoScroll: TScrollBox;

AddAnswerBut: TSpeedButton;

DelAnswerBut: TSpeedButton;

DBAnswer: TTable;

AnswerSource: TDataSource;

DBAnswerOtvet_id: TAutoIncField;

DBAnswerQuest_id: TIntegerField;

DBAnswerOtvet_name: TMemoField;

DBAnswerTrued: TBooleanField;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure DBEditTemaChange(Sender: TObject);

procedure AddAnswerButClick(Sender: TObject);

procedure DelAnswerButClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure AppendAnswer(QuestId: longint);

procedure ClearAnswer;

procedure FormResize(Sender: TObject);

procedure MemoScrollResize(Sender: TObject);

private

x1,x2: integer; {допоміжні перемінні}

public

end;

TAnswer = Class(TObject)

memo: TMemo;

check: TCheckBox;

constructor Create(AOwner:TComponent;Height_: Integer);

procedure Free;

procedure CheckClick(Sender: TObject);

procedure MemoChange(Sender: TObject);

class procedure DeleteAnswer(AOwner: TComponent;Number: integer);

private

nocreate: boolean; {TRUE - if don't run the CREATE-constructor}

end;

var

EditForm: TEditForm;

implementation

uses S2;

{$R *.DFM}

procedure TEditForm.AppendAnswer(QuestId: longint);

{ Додає в таблицю DBQuest нове питання.

temaId - містить значення теми, який належить питання

}

Var

i: integer;

Isinsert: boolean;

NewAnswer: TAnswer;

begin

IsInsert:= false; {True if NOT APPEND new record into database}

DBAnswer.MasterFields:= '';

DBAnswer.SetKey; {поискзаписис 0-имзначением DBAnswer.Tema_id}

DBAnswer.Fields[1].AsInteger:= 0;

If DBAnswer.GotoKey then

begin

DBAnswer.Edit;

IsInsert:= True;

end

else DBAnswer.Append;{якщо не знайдений запис, те додаємо нову}

DBAnswer.Fields[1].AsInteger:= QuestId;

DBAnswer.Post;

DBAnswer.MasterFields:= 'Quest_id';

NewAnswer:= TAnswer.Create(MemoScroll,100); {додавання new вариантаответавсписок}

If IsInsert then

begin

DBAnswer.First; i:=0;

While i < MemoScroll.ComponentCount do

begin

DBAnswer.Edit;

DBAnswerOtvet_name.Assign(Tmemo(MemoScroll.Components[i]).Lines);

DBAnswer.Fields[3].AsBoolean:= TCheckBox(MemoScroll.Components[i+1]).Checked;

DBAnswer.Post;

DBAnswer.Next; inc(i,2);

end;

end; {endif}

end;

procedure TEditForm.ClearAnswer;

{логічне видалення з БД поточного варіанта відповіді для текущнго питання}

begin

DBAnswer.Edit;

DBAnswer['Quest_id']:= 0;

DBAnswer.Fields[2].Clear; { Otvet_name }

DBAnswer['Trued']:= False;

DBAnswer.Post;

end;

constructor TAnswer.Create(AOwner:TComponent;Height_: Integer);

begin

NoCreate:= False;

memo:= TMemo.Create(Aowner);

memo.Parent:= TWinControl(AOwner);

With memo do begin

If ComponentIndex = 0 then

begin

Left:= 0; Top:= 0;

end

else

begin

Left:= 0;

Top:= TMemo(AOwner.Components[ComponentIndex-2]).Top +

TMemo(AOwner.Components[ComponentIndex-2]).Height;

end;

Width:= TScrollBox(AOwner).Width - 60;

Height:= Height_;

If (ComponentIndex div 2 + 1)*Height > TScrollBox(AOwner).VertScrollBar.Range

then TScrollBox(AOwner).VertScrollBar.Range:= (ComponentIndex div 2 + 1)*Height;

OnChange:= MemoChange;

SetFocus;

end; {end Init Memo}

check:= TCheckBox.Create(AOwner);

check.Parent:= TWinControl(AOwner);

With check do begin

Left:= Memo.Left + Memo.Width + 15;

Top:= Memo.Top + Memo.Height div 2;

Height:= 17;

Width:= 17;

OnClick:= CheckClick;

end;

NoCreate:= True;

end;

procedure TAnswer.Free;

begin

check.Free;

memo.Free;

end;

procedure TAnswer.CheckClick(Sender: TObject);

begin

If nocreate then begin

EditForm.DBAnswer.First;

EditForm.DBAnswer.MoveBy((Check.Componentindex-1) div 2);

EditForm.DBAnswer.Edit;

EditForm.DBAnswer['Trued']:= check.checked;

EditForm.DBAnswer.Post;

end;

end;

procedure TAnswer.MemoChange(Sender: TObject);

begin

If memo.Modified then

begin

EditForm.DBAnswer.First;

EditForm.DBAnswer.MoveBy(Memo.Componentindex div 2);

EditForm.DBAnswer.Edit;

EditForm.DBAnswerOtvet_name.Assign(Memo.Lines);

EditForm.DBAnswer.Post;

end;

end;

class procedure TAnswer.DeleteAnswer(AOwner: TComponent;Number: integer);

Var

і: integer;

{удаленние зі списку об'єкта NUMBER і NUMBER+1}

begin

TCheckBox(AOwner.Components[number+1]).Free;

TMemo(AOwner.Components[number]).Free;

For і:= Number to AOwner.ComponentCount-1 do {перерисовкакомпонентовв ScrollBox}

If AOwner.Components[i] is TMemo then

TMemo(AOwner.Components[i]).Top:= TMemo(AOwner.Components[i]).Top -

TMemo(AOwner.Components[i]).Height

else

TCheckBox(AOwner.Components[i]).Top:= TCheckBox(AOwner.Components[i]).Top -

TMemo(AOwner.Components[i-1]).Height;

If AOwner.ComponentCount > 0 then

TScrollBox(AOwner).VertScrollBar.Range:= (AOwner.ComponentCount div 2)*

TMemo(AOwner.Components[0]).Height;

end;

procedure TEditForm.FormClose(Sender: TObject; var Action: TCloseAction);

begin

TreeForm.Close; {закритьокно, содержащеедерево}

end;

procedure TEditForm.DBEditTemaChange(Sender: TObject);

begin

If DBEditTema.Modified Then

begin

TreeForm.DBTema.Post;

TreeForm.MainTree.Items[TreeForm.MainTree.SelectedItem].Text:= TreeForm.DBTema.Fields[1].AsString;

{модифікація назви вузла дерева, що містить тему}

end;

end;

procedure TEditForm.AddAnswerButClick(Sender: TObject);

begin

AppendAnswer(TreeForm.DBQuest.Fields[1].AsInteger);

end;

procedure TEditForm.DelAnswerButClick(Sender: TObject);

var

CurAnswer,i: integer;

begin {удаленниеизспискасURRеNT ANSWER, еслинанемстоиткурсор}

i:= 0;

CurAnswer:= -1;

While i < MemoScroll.ComponentCount do

begin

If TMemo(MemoScroll.Components[i]).Focused then

CurAnswer:= TMemo(MemoScroll.Components[i]).ComponentIndex;

inc(i,2);

end;

if CurAnswer > -1 then

begin

EditForm.DBAnswer.First;

EditForm.DBAnswer.MoveBy(CurAnswer div 2);

ClearAnswer;

TAnswer.DeleteAnswer(MemoScroll,CurAnswer);

end;

end;

procedure TEditForm.FormCreate(Sender: TObject);

begin

EditForm.DBAnswer.Active:= True; {Откритиебдответов}

x1:= ClientHeight - MemoScroll.Top - MemoScroll.Height;

x2:= ClientWidth - MemoScroll.Left - MemoScroll.Width;

EditForm.Height:= GetSystemMetrics(SM_CYMAXIMIZED) - 10;

end;

procedure TEditForm.FormResize(Sender: TObject);

begin

if EditForm.Height > = 300 then

MemoScroll.Height:= EditForm.ClientHeight - MemoScroll.Top - x1

else EditForm.Height:= 300;

IF EditForm.Width > = 300 then

begin

MemoScroll.Width:= EditForm.ClientWidth - MemoScroll.Left - x2;

MemoQuest.Width:= EditForm.ClientWidth - MemoQuest.Left - x2;

DBEditTema.Width:= EditForm.ClientWidth - DBEditTema.Left - x2;

end

else EditForm.Width:= 300;

end;

procedure TEditForm.MemoScrollResize(Sender: TObject);

var

i: integer;

begin

i:= 0;

While i < (MemoScroll.ComponentCount-1) do

begin

TMemo(MemoScroll.Components[i]).Width:= MemoScroll.Width - 60;

TCheckBox(MemoScroll.Components[i+1]).Left:=

TMemo(MemoScroll.Components[i]).Left + TMemo(MemoScroll.Components[i]).Width + 15;

inc(i,2);

end;

end;

end.

Текстмодуля AddTema

unit addtema;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls;

type

TWinEditTema = class(TForm)

TemaEdit: TEdit;

TemaNameLabel: TLabel;

OkBtn: TBitBtn;

CancelBtn: TBitBtn;

procedure butCancelClick(Sender: TObject);

procedure butOkClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

WinEditTema: TWinEditTema;

implementation

{$R *.DFM}

procedure TWinEditTema.butCancelClick(Sender: TObject);

begin

Modalresult:= mrCancel;

end;

procedure TWinEditTema.butOkClick(Sender: TObject);

begin

Modalresult:= mrOk;

end;

end.

Текстмодуля ProgrInd

unit progrInd;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls, ComCtrls;

type

TProcessForm = class(TForm)

Bevel1: TBevel;

ProgressBar: TProgressBar;

private

{ Private declarations }

public

{ Public declarations }

end;

var

ProcessForm: TProcessForm;

implementation

{$R *.DFM}

end.

Додаток 2

ТЕКСТПРОГРАММИ TESTADMIN

program TestAdmin;

uses

Forms,

main in 'main.pas' {AdminForm},

TQDialog in 'TQDialog.pas' {CreateTickDlg},

ResultReport in 'ResultReport.pas' {ReportForm};

{$R *.RES}

begin

Application.Title:= 'TestAdmin';

Application.CreateForm(TAdminForm, AdminForm);

Application.CreateForm(TCreateTickDlg, CreateTickDlg);

Application.CreateForm(TReportForm, ReportForm);

Application.Run;

end.

Текстмодуля Main

unit main;

interface

uses

Dialogs,IniFiles,SysUtils,Forms, DB, DBTables, Classes, Controls, Grids, DBGrids,

StdCtrls, Spin, ExtCtrls,Windows, Buttons, ComCtrls;

type

TAdminForm = class(TForm)

ControlSource: TDataSource;

DBControl: TTable;

DBControlId: TAutoIncField;

DBControlName: TStringField;

DBControlMark: TFloatField;

DBControlDate: TDateField;

DBControlTime: TTimeField;

Journal: TDBGrid;

DBControlTicket_num: TIntegerField;

DBControlOcenka: TFloatField;

Maxmark: TSpinEdit;

TestTime: TSpinEdit;

TimeLabel: TLabel;

MarkLabel: TLabel;

CreateTicketBtn: TBitBtn;

Bevel1: TBevel;

QuitBtn: TBitBtn;

ClearBtn: TBitBtn;

PrintBtn: TBitBtn;

Bevel2: TBevel;

Label1: TLabel;

StatusBar: TStatusBar;

procedure ShowHint(Sender: TObject);

procedure DBControlCalcFields(DataSet: TDataSet);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure TestTimeChange(Sender: TObject);

procedure MaxmarkChange(Sender: TObject);

procedure CreateTicketBtnClick(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure QuitBtnClick(Sender: TObject);

procedure CreateNewDBControl;

procedure ClearBtnClick(Sender: TObject);

procedure PrintBtnClick(Sender: TObject);

private

CreateForm: boolean;

public

IniFile: TIniFile;

end;

var

AdminForm: TAdminForm;

implementation

uses TQDialog, PathDialog, ResultReport;

{$R *.DFM}

procedure TAdminForm.ShowHint(Sender: TObject);

begin

StatusBar.SimpleText:= Application.Hint;

end;

procedure TAdminForm.DBControlCalcFields(DataSet: TDataSet);

begin

DBControl.Fields[3].AsFloat:= DBControl.Fields[2].AsFloat * MaxMark.Value; // fields[2] - 'Mark'

end;

procedure TAdminForm.FormClose(Sender: TObject; var Action: TCloseAction);

begin

IniFile.Free;

Action:= caFree;

end;

procedure TAdminForm.TestTimeChange(Sender: TObject);

begin

IniFile.WriteInteger('Options', 'TestTime', TestTime.Value * 60000);

end;

procedure TAdminForm.MaxmarkChange(Sender: TObject);

begin

IniFile.WriteInteger('Options', 'MaxMark',MaxMark.Value);

end;

procedure TAdminForm.CreateTicketBtnClick(Sender: TObject);

begin

CreateTickDlg.ShowModal;

end;

procedure TAdminForm.CreateNewDBControl;

{создаетновуютаблицу DBControl. изменяетсостояние DBControl.Active:= False}

begin

//- Create new local table CONTROL.DB -

with DBControl do

begin

Active:= False;

DatabaseName:= 'Common_base';

TableName:= 'Control';

TableType:= ttParadox;

with FieldDefs do

begin

Clear;

Add('Id',ftAutoInc, 0, False);

Add('Ticket_num', ftInteger, 0, False);

Add('Name',ftString, 40, False);

Add('Mark',ftFloat, 0, False);

Add('Date',ftDate, 0, False);

Add('Time',ftTime, 0, False);

end;

with IndexDefs do

begin

Clear;

Add('Id', 'Id', [ixPrimary, ixUnique]);

end;

CreateTable;

end;

//- end of create -

end;

procedure TAdminForm.FormShow(Sender: TObject);

Var

List: TStrings;

AliasPath: string;

begin

If CreateForm then

begin

Session.ConfigMode:= cmAll; {Global and local aliases !!!}

try

List:= TStringList.Create;

Session.GetAliasParams('Common_base',List); // may be occurs an error

AliasPath:= List.Values['PATH'];

List.Free;

except

end;

IniFile:= TIniFile.Create(AliasPath+'\Test.INI');

TestTime.Value:= IniFile.ReadInteger('Options', 'TestTime', 600000{10 min})div 60000;

MaxMark.Value:= IniFile.ReadInteger('Options', 'MaxMark', 5);

// CreateTickDlg.MaxTicket.Value:= IniFile.ReadInteger('Options', 'MaxTicket', 1);

try

DBControl.Active:= True;

except

CreateNewDBControl;

DBControl.Active:= True;

end;

CreateForm:= False;

end;

end;

procedure TAdminForm.FormCreate(Sender: TObject);

begin

CreateForm:= True;

Application.OnHint:= ShowHint;

end;

procedure TAdminForm.QuitBtnClick(Sender: TObject);

begin

Close;

end;

procedure TAdminForm.ClearBtnClick(Sender: TObject);

begin

CreateNewDBControl;

DBControl.Active:= True;

end;

procedure TAdminForm.PrintBtnClick(Sender: TObject);

begin

ReportForm.QuickReport.Preview;

end;

end.

Текстмодуля TQDialog

unit TQDialog;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls, Spin, DB, DBTables, Grids, DBGrids;

type

TCreateTickDlg = class(TForm)

OKBtn: TBitBtn;

CancelBtn: TBitBtn;

Bevel1: TBevel;

QuestCount: TSpinEdit;

MaxTicket: TSpinEdit;

TickLabel: TLabel;

QuestLabel: TLabel;

DBGrid1: TDBGrid;

DBTicket: TTable;

TicketSource: TDataSource;

TemaSource: TDataSource;

DBTema: TTable;

DBQuest: TTable;

QuestSource: TDataSource;

procedure QuestCountEnter(Sender: TObject);

procedure OKBtnClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormShow(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

CreateTickDlg: TCreateTickDlg;

implementation

uses main;

{$R *.DFM}

procedure TCreateTickDlg.QuestCountEnter(Sender: TObject);

begin

QuestCount.MaxValue:= DBQuest.RecordCount;

If QuestCount.MaxValue > 1 then QuestCount.Increment:=1

else

begin

QuestCount.Value:= QuestCount.MaxValue;

QuestCount.Increment:= 0;

end;

end;

procedure TCreateTickDlg.OKBtnClick(Sender: TObject);

Var

List,List2: TList;

i,j,n: longint;

begin

//- Create new empty table TICKETS.DB -

with DBTicket do

begin

Active:= False;

DatabaseName:= 'Common_base';

TableName:= 'Tickets';

TableType:= ttParadox;

IndexName:= 'many_ind';

with FieldDefs do

begin

Clear;

Add('Ticket_id', ftAutoInc, 0, False);

Add('Ticket_num', ftInteger, 0, False);

Add('Quest_id', ftInteger, 0, False);

end;

with IndexDefs do

begin

Clear;

Add('', 'Ticket_id', [ixPrimary, ixUnique]);

Add('many_ind','Ticket_num;Quest_id',[ixCaseInsensitive]);

end;

CreateTable;

end;

//- end of create -

DBTicket.Active:= True;

DBQuest.First;

List:= TList.Create;

List2:= TList.Create;

for i:=1 to CreateTickDlg.QuestCount.Value do

begin

for j:=1 to CreateTickDlg.MaxTicket.Value do List.Add(pointer(j)); // fill list

randomize;

repeat

n:= random(List.Count-1);

DBTicket.SetKey;

DBTicket['Ticket_num']:= longint(List.Items[n]);

DBTicket['Quest_id']:= DBQuest['Quest_id'];

If DBTicket.GotoKey then

begin

List2.Add(List.Items[n]);

List.Delete(n);

Continue;

end

else

begin

DBTicket.Append;

DBTicket['Ticket_num']:= longint(List.Items[n]);

DBTicket['Quest_id']:= DBQuest['Quest_id'];

DBTicket.Post;

DBQuest.Next; If DBQuest.EOF then DBQuest.First;

List.Delete(n); //List.Pack;

While (List2.count > 0) do

begin

List.Add(List2.Items[0]);

List2.Delete(0);

end;

end;

until List.Count = 0;

end;

DBTicket.IndexName:= '';

DBTicket.DeleteIndex('many_ind');

DBTicket.AddIndex('tick_ind','Ticket_num',[ixCaseInsensitive]);

DBTicket.Active:= False;

List.Free;

List2.Free;

AdminForm.IniFile.WriteInteger('Options', 'MaxTicket',MaxTicket.Value);

Application.MessageBox('Формированиебилетовзавершено!','',MB_ICONINFORMATION);

end;

procedure TCreateTickDlg.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

DBQuest.Active:= False;

DBTema.Active:= False;

end;

procedure TCreateTickDlg.FormShow(Sender: TObject);

begin

DBTema.Active:= True;

DBQuest.Active:= True;

end;

end.

Текстмодуля ResultReport

unit ResultReport;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Quickrep, StdCtrls, ExtCtrls;

type

TReportForm = class(TForm)

QuickReport: TQuickReport;

PageHeader: TQRBand;

Detail: TQRBand;

QRLabel1: TQRLabel;

TicketField: TQRDBText;

NameField: TQRDBText;

OcenkaField: TQRDBText;

DateField: TQRDBText;

ColumnHeader: TQRBand;

QRLabel2: TQRLabel;

QRLabel3: TQRLabel;

CurrentNum: TQRSysData;

QRLabel4: TQRLabel;

QRLabel5: TQRLabel;

QRLabel6: TQRLabel;

QRBand1: TQRBand;

QRLabel7: TQRLabel;

PageNum: TQRSysData;

private

{ Private declarations }

public

{ Public declarations }

end;

var

ReportForm: TReportForm;

implementation

uses main;

{$R *.DFM}

end.

Додаток 3

ТЕКСТ ПРОГРАМИ TESTCLIENT

program TestClient;

uses

Forms,

Sdimain in 'SDIMAIN.PAS' {ClientForm},

DlgUnit in 'DlgUnit.pas' {BeginDataDlg},

PathDialog in '\$$$\ADMIN\PathDialog.pas' {PathDlg};

{$R *.RES}

begin

Application.Title:= 'TestClient';

Application.CreateForm(TClientForm, ClientForm);

Application.CreateForm(TBeginDataDlg, BeginDataDlg);

Application.Run;

end.

Текстмодуля SdiMain

unit Sdimain;

interface

uses Windows,DBTables, DB, ExtCtrls, StdCtrls, Forms, Classes, Controls,

ComCtrls,SysUtils, Gauges, DBCtrls,Graphics;

type

TClientForm = class(TForm)

QuestList: TListBox;

Timer: TTimer;

TicketSource: TDataSource;

DBTicket: TTable;

DBTicketTicket_id: TAutoIncField;

DBTicketTicket_num: TIntegerField;

DBTicketQuest_id: TIntegerField;

AnswerSource: TDataSource;

DBAnswer: TTable;

DBAnswerOtvet_id: TAutoIncField;

DBAnswerQuest_id: TIntegerField;

DBAnswerOtvet_name: TMemoField;

DBAnswerTrued: TBooleanField;

ResultSource: TDataSource;

DBResult: TTable;

DBResultAnswer_id: TIntegerField;

DBResultTrued: TBooleanField;

MemoScroll: TScrollBox;

PrevBut: TButton;

NextBut: TButton;

ExitBut: TButton;

TestGauge: TGauge;

ControlSource: TDataSource;

DBControl: TTable;

QuestName: TDBMemo;

QuestSource: TDataSource;

DBQuest: TTable;

StatusBar: TStatusBar;

procedure ShowHint(Sender: TObject);

procedure QuestListClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormShow(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure ExitButClick(Sender: TObject);

procedure PrevButClick(Sender: TObject);

procedure NextButClick(Sender: TObject);

procedure TimerTimer(Sender: TObject);

procedure RefreshAnswers;

procedure DeleteAnswer(AOwner: TComponent;Number: integer);

procedure FormResize(Sender: TObject);

procedure MemoScrollResize(Sender: TObject);

private

x1,x2: integer;

public

CreateMainForm: boolean;

TestTime: LongInt; {час тестування в миллисекундах }

MaxMark: LongInt; {система оцінки (бал)}

ticket: longint; {Users ticket}

StudentName: string[40];

end;

TAnswer = Class(TObject)

memo: TMemo;

check: TCheckBox;

constructor Create(AOwner:TComponent;Height_: Integer);

procedure Free;

procedure CheckClick(Sender: TObject);

procedure MemoClick(Sender: TObject);

private

nocreate: boolean; {TRUE - if don't run the CREATE-constructor}

end;

var

ClientForm: TClientForm;

implementation

uses DlgUnit, PathDialog;

{$R *.DFM}

{-}

procedure TClientForm.RefreshAnswers;

{Змінює розміри області висновку відповідей, уміст відповідей, число відповідей

у залежності від обраного питання.}

Var

NewAnswer: TAnswer;

i: integer;

begin

DBTicket.First;

DBTicket.MoveBy(QuestList.ItemIndex); {Go to the selected Question}

і:= 0; {індекс ДЛЯ ОБ'ЄКТА TMemo у списку}

DBAnswer.First; {щоб не було глюков при повторному щиглику на питанні}

while NOT DBAnswer.Eof do

begin

If (i+1) > MemoScroll.ComponentCount then

NewAnswer:= TAnswer.Create(MemoScroll,100); {додавання new вариантаответавсписок}

TMemo(MemoScroll.Components[і]).Text:= DBAnswer['Otvet_name']; {Otvet_name}

TCheckBox(MemoScroll.Components[і+1]).Checked:= DBResult['Trued'];

inc(і,2); // < - збільшення індексу ДЛЯ ОБ'ЄКТА TMemo у списку

DBAnswer.Next;

end;

While і < MemoScroll.ComponentCount do {видалення зі списку зайвих варіантів відповіді}

DeleteAnswer(MemoScroll,MemoScroll.ComponentCount - 2);

If MemoScroll.ComponentCount > 0 then

begin

TMemo(MemoScroll.Components[0]).SetFocus; {Set focus on first answer.}

QuestList.SetFocus; {and tnen set focus on questions-list}

end;

ClientForm.MemoScrollResize(MemoScroll); {изменениеразмеровобластейвиводаответов}

end;

{-}

constructor TAnswer.Create(AOwner:TComponent;Height_: Integer);

begin

NoCreate:= False;

memo:= TMemo.Create(Aowner);

with memo do begin

Parent:= TWinControl(AOwner);

ReadOnly:= True;

TabStop:= False;

Left:= 0;

OnClick:= MemoClick;

end;

check:= TCheckBox.Create(AOwner);

With check do begin

Parent:= TWinControl(AOwner);

Height:= 17;

Width:= 17;

TabStop:= False;

OnClick:= CheckClick;

end;

NoCreate:= True;

end;

procedure TAnswer.Free;

begin

check.Free;

memo.Free;

end;

procedure TAnswer.MemoClick(Sender: TObject);

begin

ClientForm.QuestList.SetFocus;

end;

procedure TAnswer.CheckClick(Sender: TObject);

begin

If nocreate then begin

ClientForm.DBAnswer.First; {передвигаемуказательв DBAnswer ивместеснимв DBResult}

ClientForm.DBAnswer.MoveBy((Check.Componentindex-1) div 2);

ClientForm.DBResult.Edit;

ClientForm.DBResult['Trued']:= Check.Checked;

ClientForm.DBResult.Post;

ClientForm.QuestList.SetFocus;

end;

end;

procedure TClientForm.DeleteAnswer(AOwner: TComponent;Number: integer);

Var

і: integer;

{удаленние зі списку об'єкта NUMBER і NUMBER+1}

begin

TCheckBox(AOwner.Components[number+1]).Free;

TMemo(AOwner.Components[number]).Free;

For і:= Number to AOwner.ComponentCount-1 do {перерисовкакомпонентовв ScrollBox}

If AOwner.Components[i] is TMemo then

TMemo(AOwner.Components[i]).Top:= TMemo(AOwner.Components[i]).Top -

TMemo(AOwner.Components[i]).Height

else

TCheckBox(AOwner.Components[i]).Top:= TCheckBox(AOwner.Components[i]).Top -

TMemo(AOwner.Components[i-1]).Height;

If AOwner.ComponentCount > 0 then

TScrollBox(AOwner).VertScrollBar.Range:= (AOwner.ComponentCount div 2)*

TMemo(AOwner.Components[0]).Height;

end;

procedure TClientForm.ShowHint(Sender: TObject);

begin

StatusBar.SimpleText:= Application.Hint;

end;

procedure TClientForm.FormShow(Sender: TObject);

begin

If CreateMainForm then BeginDataDlg.ShowModal;

end;

procedure TClientForm.QuestListClick(Sender: TObject);

begin

RefreshAnswers;

end;

procedure TClientForm.FormClose(Sender: TObject; var Action: TCloseAction);

Var

Quest_cnt, {усього питань}

MyAnswerTrued, {1 - якщо відповідь правильний}

TruedCnt: word; {кількість правильних відповідей}

SumTrued: real; {относительнаяоценка}

S: string;

begin

{дії по одержанню оцінки і висновку її на екран і в БД}

If BeginDataDlg.ModalResult < > mrOk then Exit;

quest_cnt:= 0; SumTrued:= 0; MyAnswerTrued:= 0; TruedCnt:= 0;

DBTicket.First;

while not DBTicket.EOF do

begin

inc(quest_cnt);

DBAnswer.First;

while not DBAnswer.EOF do

begin

If DBResult['Trued'] = DBAnswer['Trued'] then MyAnswerTrued:= 1

else

begin

MyAnswerTrued:= 0; {Відповідь на питання невірний.}

Break; {вихід з циклу}

end;

DBAnswer.Next;

end;

DBTicket.Next;

TruedCnt:= TruedCnt + MyAnswerTrued;

end;

SumTrued:= TruedCnt / quest_cnt; {среднийбал 0..1}

Str((SumTrued*ClientForm.MaxMark):5:2,S);

Application.MessageBox(PChar('Правильнихответов: '+

IntToStr(TruedCnt)+' з '+IntToStr(Quest_cnt)+

#13+'Оцінка: ' + s),

'Результат тестування',MB_ICONINFORMATION);

DBResult.Active:= False; {Close databases}

DBAnswer.Active:= False;

DBQuest.Active:= False;

DBTicket.Active:= False;

DBControl.Active:= True; {Save info of current user in CONTROL.DB}

DBControl.Append;

DBControl['Date']:= Date;

DBControl['Time']:= Time;

DBControl['Ticket_num']:= ticket;

DBControl['Mark']:= SumTrued;

DBControl['Name']:= StudentName;

DBControl.Post;

DBControl.Active:= False;

end;

procedure TClientForm.FormCreate(Sender: TObject);

begin

CreateMainForm:= True;

x1:= ClientHeight - MemoScroll.Top - MemoScroll.Height;

x2:= ClientWidth - MemoScroll.Left - MemoScroll.Width;

ClientForm.Height:= GetSystemMetrics(SM_CYMAXIMIZED) - 10;

end;

procedure TClientForm.ExitButClick(Sender: TObject);

begin

Close;

end;

procedure TClientForm.PrevButClick(Sender: TObject);

begin

QuestList.ItemIndex:= QuestList.ItemIndex - 1;

RefreshAnswers;

end;

procedure TClientForm.NextButClick(Sender: TObject);

begin

QuestList.ItemIndex:= QuestList.ItemIndex + 1;

RefreshAnswers;

end;

procedure TClientForm.TimerTimer(Sender: TObject);

begin

TestGauge.AddProgress(Timer.Interval);

TestTime:= TestTime - Timer.Interval;

If TestGauge.PercentDone > 75 then TestGauge.BackColor:= clYellow;

If TestTime = 0 then Close; {у OnClose д/б передбачений розрахунок оцінки і запис її в БД}

end;

procedure TClientForm.FormResize(Sender: TObject);

begin

if ClientForm.Height > = 400 then

begin

MemoScroll.Height:= ClientForm.ClientHeight - MemoScroll.Top - x1;

QuestList.Height:= ClientForm.ClientHeight - QuestList.Top - x1;

StatusBar.Top:= ClientForm.ClientHeight - StatusBar.Height;

PrevBut.Top:= StatusBar.Top - PrevBut.Height - 6; {modify buttons place}

NextBut.Top:= PrevBut.Top; ExitBut.Top:= NextBut.Top;

end

else ClientForm.Height:= 400;

IF ClientForm.Width > = 440 then

begin

MemoScroll.Width:= ClientForm.ClientWidth - MemoScroll.Left - x2;

QuestName.Width:= ClientForm.ClientWidth - QuestName.Left - x2;

TestGauge.Width:= ClientForm.ClientWidth - TestGauge.Left - x2;

StatusBar.Width:= ClientForm.ClientWidth;

end

else ClientForm.Width:= 440;

end;

procedure TClientForm.MemoScrollResize(Sender: TObject);

{цей оброблювач викликається також у RefreshAnswers}

var

i,CommonHeight: integer;

begin

i:= 0; CommonHeight:= 0;

While i < (MemoScroll.ComponentCount-1) do

begin

If i > 0 then TMemo(MemoScroll.Components[i]).Top:=

TMemo(MemoScroll.Components[i-2]).Top +

TMemo(MemoScroll.Components[i-2]).Height;

TMemo(MemoScroll.Components[i]).Width:= MemoScroll.Width - 60;

TMemo(MemoScroll.Components[i]).Height:=

Trunc((2-1/3)*Abs(TMemo(MemoScroll.Components[i]).Font.Height)*

TMemo(MemoScroll.Components[i]).Lines.Count);

TCheckBox(MemoScroll.Components[i+1]).Left:=

TMemo(MemoScroll.Components[i]).Left + TMemo(MemoScroll.Components[i]).Width + 15;

TCheckBox(MemoScroll.Components[i+1]).Top:=

TMemo(MemoScroll.Components[i]).Top + (TMemo(MemoScroll.Components[i]).Height-

TCheckBox(MemoScroll.Components[i+1]).Height) div 2;

CommonHeight:= CommonHeight + TMemo(MemoScroll.Components[i]).Height;

inc(i,2);

end;

MemoScroll.VertScrollBar.Range:= CommonHeight;

end;

end.

Текстмодуля DlgUnit

unit DlgUnit;

interface

uses Db,Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

IniFiles,Buttons, ExtCtrls, Spin, ComCtrls;

type

TBeginDataDlg = class(TForm)

EditName: TEdit;

Label1: TLabel;

TicketEdit: TSpinEdit;

Label2: TLabel;

Bevel1: TBevel;

OkBut: TBitBtn;

QuitBut: TBitBtn;

StatusBar: TStatusBar;

procedure ShowHint(Sender: TObject);

procedure OkButClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormShow(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

BeginDataDlg: TBeginDataDlg;

implementation

uses Sdimain, PathDialog;

{$R *.DFM}

procedure TBeginDataDlg.ShowHint(Sender: TObject);

begin

StatusBar.SimpleText:= Application.Hint;

end;

procedure TBeginDataDlg.OkButClick(Sender: TObject);

Var

i: integer;

begin

with ClientForm do

begin

StudentName:= EditName.Text;

Ticket:= TicketEdit.Value;

DBTicket.Active:= True;

{Вибір номера квитка. Обраний номер квитка заносимо в Ticket}

DBTicket.SetRangeStart; {установкафильтра}

DBTicket['Ticket_num']:= ticket;

DBTicket.SetRangeEnd;

DBTicket['Ticket_num']:= ticket;

DBTicket.ApplyRange;

DBQuest.Active:= True;

with DBResult do //- Create new local table RESULT.DB -

begin

Active:= False;

DatabaseName:= '';

TableName:= 'Result';

TableType:= ttParadox;

with FieldDefs do

begin

Clear;

Add('Answer_id', ftInteger, 0, False);

Add('Trued', ftBoolean, 0, False);

end;

with IndexDefs do

begin

Clear;

Add('Answer_ind', 'Answer_id', [ixPrimary, ixUnique]);

end;

CreateTable;

end; //- end of create -

DBAnswer.Active:= True;

DBresult.Active:= True;

і:=0; {заповнення QuestList номерами питань}

While not DBTicket.EOF do

begin

inc(i);

QuestList.Items.Add(IntToStr(i));

While not DBAnswer.EOF do {Fill RESULT-table}

begin

DBResult.Append;

DBResult['Answer_id']:= DBAnswer['Otvet_id'];

DBResult['Trued']:= False;

DBResult.Post;

DBAnswer.Next;

end;

DBTicket.Next;

end;

RefreshAnswers;

WindowState:= wsNormal;

Application.OnHint:= ShowHint;

TestGauge.MaxValue:= TestTime; {Set max value of indicator }

Timer.Enabled:= True; { Activate the timer.}

CreateMainForm:= False;

end; { of with ClientForm}

end;

procedure TBeginDataDlg.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

If Modalresult < > mrOk then ClientForm.Close;

Action:= caFree;

end;

procedure TBeginDataDlg.FormShow(Sender: TObject);

Var

IniFile: TIniFile;

List: TStringList;

AliasPath: string;

begin

Application.OnHint:= ShowHint;

Session.ConfigMode:= cmAll; {Global and local aliases !!!}

try

List:= TStringList.Create;

Session.GetAliasParams('Common_base',List); // may be occurs an error

AliasPath:= List.Values['PATH'];

List.Free;

except

Application.CreateForm(TPathDlg, PathDlg);

PathDlg.ShowModal;

If PathDlg.Modalresult = mrOk then

begin

AliasPath:= PathDlg.DirectoryList.Directory;

Session.AddStandardAlias('Common_base',AliasPath,'PARADOX'); {add NEW alias if none}

Session.SaveConfigFile;

end

else Modalresult:= mrCancel;

end;

IniFile:= TIniFile.Create(AliasPath+'\Test.INI');

ClientForm.TestTime:= IniFile.ReadInteger('Options', 'TestTime', 600000{10 min});

TicketEdit.MaxValue:= IniFile.ReadInteger('Options', 'MaxTicket', 1);

If TicketEdit.MaxValue = 1 then TicketEdit.Increment:= 0;

IniFile.Free;

end;

end.

Текстмодуля PathDialog

unit PathDialog;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls, FileCtrl;

type

TPathDlg = class(TForm)

OKBtn: TButton;

CancelBtn: TButton;

DirectoryList: TDirectoryListBox;

DriveBox: TDriveComboBox;

PathLabel: TEdit;

Label1: TLabel;

procedure DriveBoxChange(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure DirectoryListChange(Sender: TObject);

procedure FormActivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

PathDlg: TPathDlg;

implementation

{$R *.DFM}

procedure TPathDlg.DriveBoxChange(Sender: TObject);

begin

DirectoryList.Drive:= DriveBox.Drive;

end;

procedure TPathDlg.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Action:= caFree;

end;

procedure TPathDlg.DirectoryListChange(Sender: TObject);

begin

PathLabel.Text:= DirectoryList.Directory;

end;

procedure TPathDlg.FormActivate(Sender: TObject);

begin

PathLabel.Text:= DirectoryList.Directory;

end;

end.