Разработка ПО "Правила Дорожного Движения"

ПримечаниеСодержит: Исходники программы ПДД (bc-3.1.,необходимо подправить graphics.lib-вшить туда шрифты, и драйвер egavga.bgi -хотя если почитаете исходники, поймете где исравить ) Пояснительную записку И рабочую программу - за глюки извиняйте ;) Билеты рисовал н
Загрузить архив:
Файл: 240-2060.zip (559kb [zip], Скачиваний: 99) скачать

ВВЕДЕНИЕ

Любая деятельность человека связана с обработкой информации. При этом наибольший успех имеет тот, кто может качественно обработать достаточно большой объем информации за приемлемое время. Естественно, что проблема создания различных средств и методов оперирования с информацией всегда привлекала внимание общества.

Но качественный скачек произошел в конце сороковых годов в результате изобретения электронно-вычислительных машин-компьютеров. Сейчас в некоторых развитых странах в сфере компьютерной обработки информации занято около половины трудоспособного населения. Известным примером применения компьютерной обработки информации является система “СИРЕНА” для резервированиямест на авиарейсы. Она обеспечивает хранение большого объема данных о свободных и занятых местах на различные рейсы, быстрый поиск необходимой пользователю информации, обмен информацией между компьютером и значительным количеством удаленных устройств ввода-вывода, установленных на рабочих местах кассиров-операторов. В настоящее время компьютерная индустрия проникает во все области нашей жизни. Компьютер становится нашим повседневным помощником. Области применения ЭВМ непрерывно расширяются, все более захватывая и такие стороны человеческой деятельности, которые, как казалось, не приемлют каких либо вычислений. Сюда можно отнести медицину, биологию, игру в шахматы, сочинение стихов и музыки, моделирование одежды и т.д. Применение ЭВМ в системах обработки информации и управления, для научно-технических расчетов и моделирования стало вполне естественным.

До сих пор продолжают говорить, что «ЭВМ- думает» , «ЭВМ рассчитывает», «ЭВМ вычисляет». При этом создается мнение, что достаточно приобрести компьютер, как он станет  за кого-то думать, рассчитывать и управлять. На самом деле это не так. ЭВМ - лишь, инструмент, реализующий алгоритм, разработанный человеком. Алгоритм - точное предписание, выполнение которого приводит к решению задач.

Многое из того, что мы видим и слышимпо телевизору (рекламные ролики, заставки, фильмы, музыкальные клипы) сделано с помощью компьютера. Использование компьютера дает возможность освободиться от большого количества бумажной информации (например: всевозможные бланки, справки). С помощью компьютера, используя компьютерные сети, можно посылать друг другу письма, не выходя из дома, получать все мировые новости, общаться с коллегами из зарубежных стран. Компьютер поможет сделать покупки, не выходя из дома, разработать чертежи. На современных компьютерах создают мультфильмы (Транс-формеры, Король Лев.), художественные фильмы (Звездные войны, Терминатор 1-2, Парк Юрского периода, Маска.). ЭВМ используют для обучения и игр, которых создано великое множество. Использование компьютеров позволяет автоматизировать производство (примеры автоматизации: станки с ЧПУ, автоматизированные линии сборки, роботы-манипуляторы). Использование компьютера дома позволяет подготавливать и хранить всевозможные  рукописи, письма. Можно спроектировать обстановку в вашей квартире, не переставляя мебель в реальности. Компьютер может стать вашим секретарем. В компьютере вы можете хранить  всевозможныекартотеки, музыкальные клипы, живое видео и многое другое. На ЭВМ можно смоделировать сложные химические и физические процессы, для которых раньше требовались специальные приборы.

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

Одна из областей применения компьютеровэто обучение вождению автомобилем. В настоящее время большое количество людей стремится получить водительское удостоверение. Но многие не могут поступить на учебу из-за ограниченного количества человек в группе. А группы ограничены по размерам из-за пропускной способности экзаменатора, который не может физически и морально принять экзамен у большого количества людей. Нижеописанная программа способна увеличить пропускную способность экзаменатора, сняв с него большую нагрузку. Программа способна принять сама экзамен и дать беспристрастную оценку ответам экзаменуемого. В программе предусмотрен режим обучения, позволяющий экзаменуемому предварительно ознакомитьсяс правильными ответами. Общедоступный формат билетов позволяет  оперативно изменять вопросы с учетом существующих в настоящее время правил. Программу можно полностью перепрофилировать на прием экзаменов по другим предметам. Использование этой программы поможет начинающему ближе узнать компьютер и его возможности. Используя компьютер, человек открывает дорогув мир информации.


1 ОБЩАЯЧАСТЬ

1.1. КРАТКОЕ ОПИСАНИЕ

Описываемая программа состоит из трех основных подпрограмм(Меню, Контроль, Обучение).Эти подпрограммы могут работать не зависимо, что позволяет использовать их в других программах.Рассмотрим алгоритмыработы этих подпрограмм и всей программы в целом. При загрузке программы выводится заставка, кратко описывающая назначение программы, затем на экране отображается меню. В меню программы вы можете выбрать один из трех пунктов меню: Выход, Контроль, или Обучение.

Выход: осуществляется выход в операционную систему ( например: MS-DOS X.X, WINDOWS 3.X, WINDOWS 95, DR-DOS и.т.д. ).

Обучение: позволяет экзаменуемому выбрать любой билет с вопросами по экзамену и просмотреть правильные ответы на заданный билет.

Контроль: режим приема экзамена у экзаменуемого. В этом режиме программа случайным образом выбирает номер билета. Далее экзаменуемый отвечает на вопросы выводимые на экран, в течении времени отведенного дляответа на билет. После того, как экзаменуемый ответит на все вопросы данного билета, программа автоматически выставляет оценку и записывает данные о экзаменуемом и результаты экзамена в файл.

Рассмотрим подробнее работу программы. При первом запуске программа делает привязку к конкретному компьютеру, т.е. при попытке запустить незарегистрированную копию программы на другом компьютере, программа не будет работать. Это один из уровней защиты программы. При последующих запусках программа тестирует среду запуска( объем свободной памяти, тип процессора, объем свободного пространства на жестком диске).Если тесты показали пригодность среды запуска то программа продолжает работать, иначе происходит выход в вызываемую среду с сообщением о причине выхода. При продолжении работы выполняется сохранение параметров вызываемой среды (вектора прерываний, настройки скорости срабатывания клавиатуры и т.д. ). Далее выводится заставка отображающая назначение программы .Затем экран обновляется и появляется меню .В меню вы можете, используя клавиши курсора или мыши ,выбрать один из трех пунктов меню. Рассмотрим каждый пункт меню подробно:

1. Выход. При выборе этого пункта программа переспросит вас, действительно ли вы хотите выйти. Если вы ответите НЕТ вы вернетесь в меню программы. Если вы ответите ДА программа восстановит среду вызова (освободит занимаемую память, восстановит содержимое переменных-адреса векторов прерываний, содержимое регистров, закроет все, открытые ею файлы),сохраненную при запуске программы. После произойдет реальный выход. Уточнение насчет выхода нужно для того,чтобы пользователь при случайном выборе данного пункта не вышел из программы.

2 Обучение. Выбрав этот пункт вамбудет предложено выбрать номер билета, на который вы хотите знать ответы. Затем программа проверяет, введенный номер на предмет выхода за допустимые границы. Если произошла ошибка, вам будет предложено заново ввести номер билета.

При корректном вводе номера билета программа сделает попытку загрузить файл с данным билетом. При невозможности загрузить файл( отсутствие файла ) будет выведено сообщение об ошибке и программа выйдет в вызываемую среду. После успешной загрузки файла с билетом программа выведет первый вопрос с отмеченным правильным ответом. Далее программа проверяет счетчик вопросов т.е. был ли это последний вопрос в билете. Если это был последний вопрос то программа предложит выбрать новый билет или вернуться в основное меню. Иначе программа увеличивает счетчик вопросов и обновив экран выводит новый вопрос. Цикл повторяется пока не кончатся вопросы в билете. Затем происходит выход в основное меню.

3 Контроль. В этом пункте программа тестирует экзаменуемого на предмет знания билета. Программа случайным образом выбирает номер билета. Затем  экзаменуемому предлагается ввести свои имя и фамилию.После этого производитсяпопытка загрузить файл с данным билетом. При невозможности загрузить данный файл программа выводит сообщение об ошибке и выходит в среду запуска. При успешной загрузке программа засекает время необходимое для ответа на билет. Производится обновление экрана и вывод первого вопроса из билета. Затем программа проверяет наличие оставшегося времени. Если время вышло, на экран выводится сообщение об окончании времени и программа переходит к обработке результатов ответа. Иначе программа ожидает ответ экзаменуемого, уменьшая при этом счетчик времени.Если экзаменуемый ответил правильно увеличивается счетчик правильных ответов, иначе увеличивается счетчик неправильных ответов. После этого программа проверяет не исчерпаны ли вопросы .Если исчерпаны то происходит переход к обработке результатов. Иначепроизводится вывод нового вопросаи цикл повторяется до тех пор, пока не истечет время, илине кончатся вопросы. После окончания времени или вопросов происходит обработка результатов т.е. выставление оценки знаний экзаменуемого.

Программа записывает результат опроса и данные экзаменуемого в файл. Этот файл потом может быть объединен с другими такими же файлами для составления списка успеваемости группы. После записи данных происходитвыход в основное меню.

Подпрограммы имеют универсальный интерфейс обмена между собой, что позволяет изменять отдельные модули, не «перекраивая» всей программы   в целом, т.е. по мере улучшения отдельных подпрограмм не нужно заменять все программу в целом у конечного пользователя, а только ее некоторую часть. В нескольких местах программывстраивается защита от несанкционированного копирования (это сделано для того чтобы программа не распространялась без согласия ее автора).В программе также  предусмотрена система защиты от заражения компьютерным вирусом. Использование программой стандартного интерфейса для общения с операционной системой предотвращает от фатальных ошибок (уничтожение данных на диске, зависаниекомпьютера и.т.д. ) и конфликтов с операционной системой.

Программа написана на языке C++. На нем реализованы все основные подпрограммы. Использованию этого языка его такие особенности, как лаконичность, мощность, гибкость, мобильность. Для компиляции программы использовался компилятор фирмы «WatcomSystemsInc». Также использовался язык ассемблера для выполнения наиболее критичных ко времени участков кода. Язык ассемблера, это символьное представление машинного языка, а как известно все критичные ко времени процедуры т.е. ,которые должны выполняться в течении короткого промежутка времени, пишутся на машинном языке.Программа реализована для компьютера IBM PC , а скомпилирована для процессора Intel™ 386 и выше. Выбор компьютеране случаен .Этот компьютер наиболее распространен на  рынке настольных компьютеров и обладает достаточной вычислительной мощностью. Выбор типа процессора также не случаен так, как на более медленных процессорах (i80286, i80186, i8086) программа может “притормаживать” т.е. очень медленно работать. Особенностью процессоров Intel™ является преемственность на уровне команд: программы написанные для младших моделей процессоров, без всяких изменений могут быть выполнены на более старших моделях. Также нужен монитор и видеоадаптер поддерживающие режим «VGA». Для удобства работы в программу введена поддержка манипуляторатипа “мышь”. А сейчас рассмотрим подробнее алгоритм наиболее важной подпрограммы, которая распознает формат файла билета и интерпретирует команды содержащиеся в этом файле.

1.2 ОПИСАНИЕАЛГОРИТМАПОДПРОГРАММЫ

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

В самой подпрограмме в организуется цикл с условием -пока не встретитсясимвол окончания вопроса или билета или указатель не станет больше размера массива. В первом случае программой сохраняется текущая позиция указателя в массиве и программа переходит для обработки результата ответа пользователя, в зависимости от режима работы- контроль или обучение. Во втором случае подпрограмма рисует заставку об информирующую об окончании билета и выходит в основной модуль для окончательной обработки результата. Модуль рисованияраспознает несколько команд «примитивов», а именно: рисование линии по заданным начальным и конечным координатам с заданным цветом, рисование прямоугольников ( закрашенных и не закрашенных ) заданного цвета, рисование окружности, рисование прямых от текущей координаты к указанным  закрашивание области одним цветом, включение файла с описанными выше командами в определенную позицию на экране и включение файла с заданным коэффициентом масштабирования.

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

Если встречается символ рисования такой прямой то подпрограмма распознает начальные координаты откуда будут рисоваться прямые и их цвет. Затем   организуется цикл с условием - пока не встретится символ окончания рисования. Внутри цикла происходит распознавание координат и их калькуляция в соответствии с коэффициентом масштабирования. После этого уже вычерчивается линия на экране. Ниже приведенформат файла рисования.

В файле используются несколько команд: C,F,L,M,P,PL,T,W,V.В начале файла должен стоять значок «*», означающий,что этот файл является файлом графики. Ниже приведена таблица содержащая имя команды, ее описание, формат записи и пример.

Команда

Описание

Формат записи

Пример

С

рисование окружности с координатами x,y, радиусомrи цветом color

С                            x,y,r,color

C                           120,50,40,3

Команда

Описание

Формат записи

Пример

F

рисование финальной заставки из файла filename

F                            filename

F                           exit.bil

L

рисование линии (прямоугольника закрашенного и не закрашенного по заданным координатам x1,y1,x2,y2cцветом color

L  x1,y1,x2,y2,color,command

command может принимать значения L,Fи B

L- линия, F- закрашенный прямоугольник, B- не закрашенный прямоугольник

L   10,10,20,20,7,L 10,10,20,20,1,B 10,10,20,20,2,F

М

указывает количество вариантов ответов в вопросе N, правильный ответ (color=1), и координаты вывода рамки-курсора на экран x1,y1,x2,y2 ... xn,yn,xn,yn,

M                            N          x1,y1,x2,y2,color   .........                        xn ,yn, xn, yn, color

M

2                      81,127,185, 147, 2

81,152,185,172, 1

P

закрашивает область цветом color1, до границ цвета colorначиная с точки x, y

P                              x,y,color,color1

P                              30,26,3,2

PL

рисует прямые с указанными конечными координатами   xn, yn ,цветом color, с начальными координатами x1,y1,x2,y2, PL,0- служит признаком конца рисования

PL        x1,y1,x2,y2,color xn, yn

PL,0

PL                          120,120,130,130,3 140,132                    23,51                     PL,0

Команда

Описание

Формат записи

Пример

T

вывод строки text в заданные координаты x1,y1, цветом color, XOR- служит признаком конца текста и, означает метод наложения текста на графику

T                             x1,x2,color,text, XOR

T                           5,5,3,пример,XOR               

W

включает изфайла filenameграфику и выводит ее в позицию x1,x2 т.е. x1,x2 - это новые координаты отсчета

W                          filename         x1,x2

W                          zastavka         90,90

V

включает изфайла filenameграфику и выводит ее в позицию x1,x2 с коэффициентом масштабирования m

V                         filename               x1,y1,m

V                           avto_100             100,100,300

Примечание: коэффициент подсчитывается по формуле -aspect = maxx/(m-x1) ; где maxx- максимальное разрешение графического режима в пикселях.

Глубина  вложения файлов равна единице т.е. вы не можете использовать команды Wи Vв уже включаемом файле. Это сделано для уменьшения требований к ресурсамкомпьютера и для уменьшения путаницы во включаемых файлах. Для составлениябилетов можно использовать любой текстовый редактор.


2 РАСЧЕТНАЯ ЧАСТЬ

2.1 Листинг программы

Программа была написана с использованием языка WatcomС++, поэтому в ней используется специфический синтаксис этого языка. Ниже приведен листинг описываемой программы.

char     *massiv,*massiv1,*temp,*buff_image,command,mode='c',key;

unsigned char f_mask[ 8 ] = { 255, 255, 255, 255,255, 255, 255, 255 };

unsigned char name[20],subname[20],massiv2[45];

char     fon_buff[10];

int        color=0,color1=0,punkt=1,m_x,m_y,m_k=0,row=20,maxx=640;

float    x=0,y=0,x1=0,y_1=0,radius=0,xs=0,ys=0,ratio=1.000,asp=640,aspxs=1;

#defineENTER   0x0d

#definePGDW    0x51

#definePGUP      0x49

#defineUP           0x48

#defineDOWN   0x50

#defineESC        0x1b

#defineSPACE   0x20

#include "graph.h"

#include "pgchart.h"

#include "stdarg.h"

#include "stdio.h"

#include "iostream.h"

#include "fstream.h"

#include "conio.h"

#include "stdlib.h"

#include "math.h"

#include "string.h"

#include "dos.h"

void mouse (int on_off_xy, int *m_x,int *m_y,int *m_k) ;

void   virusprot (void);

voidgrinit (void) ;

void outmenu (void);

void outcursormenu(int punkt);

void choise_cont_educ(char file[]);

voideducation(int index,int quest_num);

void outresult(int mark,char mode) ;

void getout(void );

void any_key(void);

void calcxy(void);

void clrbuff(void);

void draw_win(int x,int y,char msg[]) ;

void goodbye(void);

void inp_data(unsigned char data[]);

void inputfio(void);

void mouse (int on_off_xy, int *m_x,int *m_y,int *m_k);

void timeout () ;

void savefio (int mark ) ;

int    picture (int count, char massiv[], int index);

int    choisebil(void);

int    choiserandombil(void) ;

int    control(int index,int quest_num,int mark,int minute,int *timeout);

int    fileop (char file[],char massiv[] ) ;

int    msv_tmp(int count,char massiv[]) ;

void main() {

if (!(massiv       =new char [20000])){cout<<"Íåõâàòàåò ïàìÿòè";exit(1);}

if (!(buff_image=new char [4000])){cout<<"Íåõâàòàåò ïàìÿòè";exit(1);}

if (!(massiv1     =new char [20000])){cout<<"Íåõâàòàåò ïàìÿòè";exit(1);}

if (!(temp          =new char [100    ])){cout<<"Íåõâàòàåò ïàìÿòè";exit(1);}

grinit();

virusprot();

while(1)    {

                      int bilnum=1;

                      char file[13];

                      outmenu();

                      label1:

                      punkt=menu();

                      if (punkt==1) {mode='c'; bilnum=choiserandombil();}

                      if (punkt==2) {mode='e';bilnum=choisebil();}

                      if (punkt==3) {getout();goto label1;}

                      sprintf( file, "%d.bil", bilnum );

                     choise_cont_educ(file);

}

}

voidgrinit (void) {

    int mode, n;

    mode = _ERESCOLOR;

    struct videoconfig vc;

    if( _setvideomode( mode ) == 0 ) {

        puts( "Cannot initialize video mode" );

        }

     n = _registerfonts( "*.fon" );

     sprintf( fon_buff, "n%d", 1 );

     _getvideoconfig (&vc);

     maxx=vc.numxpixels;

     _setfillmask(f_mask);

     mouse (0,&m_x,&m_y,&m_k);

}

void outmenu (void) {

    mouse (2,&m_x,&m_y,&m_k);

  mouse (1,&m_x,&m_y,&m_k);

    clrbuff();

    _clearscreen(_GCLEARSCREEN);

    _setcolor(9);

    _floodfill(20,20,1);

     int count=fileop("zastavka.prg",massiv);

     picture (count,massiv,0);

     _setcolor(0);

     _rectangle(_GFILLINTERIOR,130,55,530,245);

     _setcolor(7);

     _rectangle(_GFILLINTERIOR,120,50,520,240);

     _setcolor(0);

     _setcharsize(16,16);

      _setfont( fon_buff );

      _setcharsize(50,40);

      for (int i=1;i<3;i++){

                            _grtext(170+i,50," Êîíòðîëü");

                            _grtext(140+i,115," Îáó÷åíèå ");

                            _grtext(180+i,182," Âûõîä ") ;

                           }

      _setfont( fon_buff );

      _setcharsize(8,9);

      _grtext(420,340,"CopyRigth by Andy (C) 1996");

      _setcharsize(50,40);

      _setfont( fon_buff );

}

int   picture (int count, char massiv[], int index){

   int i=index;

   while (i

          switch(massiv[i]){

                case 'C':{

                               i=msv_tmp(i,massiv);

                               sscanf(temp,"%f,%f,%f,%d",&x,&y,&radius,&color);

                               _setcolor(color);

                               float r_ratio=ratio;

                               double asp_radius=sqrt(radius*radius+radius*radius);

                               calcxy();

                               if (radius==12) r_ratio=int (ratio);

                               if (radius==40) r_ratio=1.0259;

                               radius=radius/r_ratio;

                 _ellipse(_GBORDER,x-radius,y-radius/1.4,x+radius,y+radius/1.4);

                              break;

                            }

                case 'L': {

                                i=msv_tmp(i,massiv);

sscanf (temp," %f, %f, %f, %f, d,%s",&x,&y,&x1,&y_1,&color,&command);

                                calcxy();

                                _setcolor(color);

                                 switch(command){

                                                     case 'B': {

                                                                     _rectangle(_GBORDER,x,y,x1,y_1);

                                                                      break;

                                                                    }

                                                     case 'F':{

                                                          _rectangle(_GFILLINTERIOR,x,y,x1,y_1);

                                                                       break;

                                                                    }

                                                     case 'L':{

                                                                     _moveto(x1,y_1);

                                                                     _lineto(x,y);

                                                                     break;

                                                                    }

                                                                  }

                                  break;

                               }

                case 'M': return (i);

                case 'F':{

                                  int count1=fileop("exit.bil",massiv);

                                  picture(count1,massiv,0);

                                  return(0);

                                }

                case 'P':   {

                                   char cmd='p';

                                   if (massiv[i+1]=='L'){i=i+1;cmd='l';}

                                   i=msv_tmp(i,massiv);

                                   if (cmd=='p') {

                                        sscanf(temp,"%f,%f,%d,%d",&x,&y,&color,&color1);

                                         calcxy();

                                         _setcolor(color);

                                         _floodfill(x,y,color1);

                                          break;

                                                            }

                                      else {

             sscanf(temp,"%f,%f,%f,%f,%d",&x,&y,&x1,&y_1,&color);

                                                calcxy();

                                               _setcolor(color);

                                               _moveto(x1,y_1);

                                               _lineto(x,y);

                                               _moveto(x1,y_1);

                                                i=i++;

                                                while (!(int(massiv[i])=='P') &&  i

                                i=i-2;

                                i=msv_tmp(i,massiv);

sscanf (temp,"%f,%f",&x,&y);

                                                    calcxy();

                                                    _lineto(x,y);

                                                                       i=i++;

                                                                                                                       }

                                                 i=i+2;

                                                 break;

                                                }

                              }

                case 'T': {

                                i=i+2;

                                int schet=0,len=0,q=0;

                                char txtmassiv[80];

                                while (!(schet ==3) && i

                                          if (int(massiv[i]==',')) schet=schet++;

                                          temp[q]=massiv[i];i++;q++;

                                                                                      }

sscanf(temp,"%f,%f,%d",&x,&y,&color);

while (!(int (massiv[i])==',')) {

                                                                txtmassiv[len]=massiv[i];i++;len++;

                                                                                 }

txtmassiv[len]=0;

_setcharsize(16,16);

                      color1=_getpixel(x+1,y+1);

_setcolor (color|color1);

_moveto(x+xs,y+ys);

_outtext(txtmassiv);

                                  break;

                                 }

                case 'V':   {

                                    i=msv_tmp(i,massiv);

                                    int count1=fileop(temp,massiv1);

                                    i=i--;

                                    i=msv_tmp(i,massiv);

                                    sscanf(temp,"%f,%f,%f",&xs,&ys,&asp);

                                    aspxs=(asp-xs);

                                    if ((aspxs)==0) {

                                                                goodbye();

                                           cout<<" íå äîïóñòèìîå äåëåíèå íà íîëü"<

                                                                exit(1);

                                                              }

                                    ratio=(maxx+0)/(aspxs);

                                   if ((aspxs)>320 && (aspxs)<400)ratio=(639-2)/(aspxs);

if ((aspxs)>270 && (aspxs)<280)ratio=(639-3)/(aspxs);

if ((aspxs)>210 && (aspxs)<260)ratio=(639+2.5)/(aspxs);

if ((aspxs)>280 && (aspxs)<300)ratio=(639+4)/(aspxs);

if ((aspxs)>400 && (aspxs)<411)ratio=(639-3)/(aspxs);

if ((aspxs)>480)                               ratio=(639)/(aspxs);

if ((aspxs)>420 && (aspxs)<430)ratio=(639+2)/(aspxs);

if ((aspxs)>260 && (aspxs)<270)ratio=(639-2)/(asp-xs);

if ((aspxs)<150 && (aspxs)>140)ratio=4.1;

if ((aspxs)<110 && (aspxs)>100){

                                           ratio=4.1;

                                                                                          xs=xs-3;

                                           ys=ys-6;

                                          }

if ((aspxs)>100 && (aspxs)<120){

                                           ratio=4.0;

                                           xs=xs-17;

                                           ys=ys-10;

                                         }

if ((aspxs)>121 && (aspxs)<130){

                                          ratio=5.3;

                                          xs=xs+3;

                                          ys=ys+6;

                                         }

if ((aspxs)<160 && (aspxs)>150) ratio=4.11;

if ((aspxs)==160)                          {

                                         ratio=4.11;

                                        xs=xs+3;

                                                                                          ys=ys+2;

                                        }

   if ((aspxs)>170 && (aspxs)<180){

                                          ratio=(639-40)/(aspxs);

                                         xs=xs-5;

                                         ys=ys-3;

                                           }

if ((aspxs)>161 && (aspxs)<170){

                                         ratio=(639-40)/(aspxs);

                                         xs=xs-4;

                                         ys=ys+5;

                                           }

if ((aspxs)<200 && (aspxs)>190) ratio=3.2950;

if ((aspxs)<100 && (aspxs)>95){

                                           ratio=5.7;

                                           ys=ys-3;

                                         xs=xs-4;

                                           }

if ((aspxs)<95 && (aspxs)>50)    {

                                             ratio=5.9;

                                            ys=ys-3;

                                            xs=xs-6;

}

if ((aspxs)<-215 && (aspxs)>-250){

                                                ratio=2.909;

ys=ys-90;

                                                                                              xs=xs-162;

                         }

if ((aspxs)<-230 && (aspxs)>-290){

                                                                                              ratio=2.2;

                                               ys=ys-93;

                                                                           xs=xs-163;

                                    }

if ((aspxs)>300 && (aspxs)<310)ratio=2.0999;

                                       

                                     if ((aspxs)==165)                             {

                                              ratio=3.9;

                                                                                                xs=xs+4;

                                    ys=ys-4;

                                             }

                                     if ((aspxs)==166)                             {

                                   ratio=3.6;

                                             xs=xs-4;

                                             ys=ys-8;

                                            }

if ((aspxs)==306)                              ratio=2.0915;

                                   if ((aspxs)==130)                             {

                                                               ratio=4.7;

                                                                                            xs=xs-2;

                                                               ys=ys-0;

                                           }

if ((aspxs)==441)                             ratio=(639+2)/(asp-xs)                                if ((aspxs)==145)                             ratio=4.3;

if ((aspxs)==77)                              {

                                                                                         ratio=7.0;

                                           xs=xs++;

                                           ys=ys++;

                                          }

                                    picture(count1,massiv1,0);

                                    xs=0;ys=0;ratio=1.000;

                                    break;

                                  }

                case 'W':   {

                i=msv_tmp(i,massiv);

                                    int count1=fileop(temp,massiv1);

                                    i=i--;

                                    i=msv_tmp(i,massiv);

                                    sscanf(temp,"%f,%f",&xs,&ys);

                                    picture(count1,massiv1,0);

                                   xs=0;ys=0;ratio=1.000;

                                    break;

                                  }

                }

          i++;

          }

          return (0);

     }

void outcursormenu(int punkt) {

     _setfont( fon_buff );

     _setcharsize(50,40);

      switch (punkt){

case 1:_setcolor (15);

             _grtext(170,50,"Êîíòðîëü");

             _setcolor (8);

                       _grtext(140,115,"Îáó÷åíèå");

                       _grtext(180,182," Âûõîä");

                       break;

case 2:_setcolor (8);

_grtext(170,50,"Êîíòðîëü");

                       _setcolor (15);

                       _grtext(140,115,"Îáó÷åíèå");

                       _setcolor (8);

                       _grtext(180,182," Âûõîä ");

             break;

case 3:_setcolor (8);

                        _grtext(170,50,"Êîíòðîëü");

                        _grtext(140,115,"Îáó÷åíèå");

                        _setcolor (15);

                        _grtext(180,182," Âûõîä");

                      break;

                                                                   }

       }

int choisebil(void){

    draw_win (270,285,"Âûáåðè áèëåò");

    int bilnum=1;

    while(1){

if (bilnum>88) bilnum=88;

if (bilnum<1)bilnum=1;

           _settextposition(row,40);

           cout<

if (bilnum<10) {

_settextposition(row,40);

cout<

      }

             key=getch();

    if (key==UP) bilnum++;

    if (key==PGDW) bilnum=bilnum-10;

    if (key==PGUP) bilnum=bilnum+10;

    if (key==DOWN) bilnum--;

    if (key==ENTER) break;

}

return(bilnum);

}

int choiserandombil(void) {

int bilnum=1,count_key=0,flag=0;

draw_win(270,285,"Âûáåðåì áèëåò");

while (1) {

bilnum++;

if (bilnum>88) bilnum=1;

_settextposition(row,40);

cout<

mouse (3,&m_x,&m_y,&m_k);

if (m_k==0 && flag==0) {count_key++;flag=1;}

if (m_k==1 && flag==1) {count_key++;flag=0;}

if (count_key>2) break;

if (kbhit()) {

                    if (!(getch()))getch();

          break;

                  }

}

   any_key();

   return(bilnum);

}

void choise_cont_educ(char file[]) {

struct dostime_t time;

_dos_gettime(&time);

int count=fileop(file,massiv);

int i=0,quest_num=30,minute=time.minute,time_out=0,mark=0;

if (minute>45 && minute<50) {

    time.minute=44;

    _dos_settime(&time);

                                  minute=44;

                                                                                                            }

if (minute>49 && minute<59) {

    time.minute=0;

    _dos_settime(&time);

                                  minute=0;

   }

if (mode=='c') inputfio();

_clearscreen(_GCLEARSCREEN);

do {

         i=i++;

         i=picture(count,massiv,i);

         mouse (4,&m_x,&m_y,&m_k);

         mouse (1,&m_x,&m_y,&m_k);

         if (i==0) break;

         if (mode=='e') {

                        education(i,quest_num);

                       }

         if (mode=='c') {

                        mark=control(i,quest_num,mark,minute,&time_out);

                                          if (time_out==1) {

     timeout();break;

   }

                        }

         quest_num=quest_num+50;

         } while (i>0);

         outresult(mark,mode);

}

int control(int index ,int quest_num,int mark,int minute,int *timeout) {

                   int  count=index,count1,color,*tm_out=timeout,flag=1,position=1;

int count_key=0;

int flag_m=0;

struct dostime_t time1;

count=msv_tmp(count,massiv);

sscanf(temp,"%d",&count1);

clrbuff();

color=outcursor (position,count1,count);

while(flag>0) {

                _dos_gettime(&time1);

      _setcolor (32);

                _settextposition(row,69);

                 printf("%02d:%02d:%02d",time1.hour,time1.minute,time1.second);

if ((time1.minute-minute)==15){ *tm_out=1;return (1);}

                   mousecmp (&position,count1,count,&flag,&count_key,&flag_m);

                   if (kbhit()){

                                      key=getch();

                                      if (key==UP)          position--;

         if (key==DOWN)position++;

                                              

                             if (key==SPACE || key==ENTER)flag=0;

                                       clrbuff();

                              if (position>count1) position=count1;

                                        if (position<1)      position=1;

                                        mouse (2,&m_x,&m_y,&m_k);

                                        color=outcursor (position,count1,count);

                                        mouse (1,&m_x,&m_y,&m_k);

                                       }

                                     }

color=outcursor (position,count1,count);

_setcolor(4);

    if (color==1) {

         _setcolor(2);

         mark++;

       }

_floodfill(quest_num,320,0);

return(mark);

}

voideducation(int index,    int quest_num){

int count=index,count1;

count=msv_tmp(count,massiv);

sscanf(temp,"%d",&count1);

for (int i=0;i

                          count--;

                              count=msv_tmp(count,massiv);

               sscanf(temp,"%f,%f,%f,%f,%d",&x,&y,&x1,&y_1,&color);

                             if (color==1) {

                                            _setcolor(13);

                                                     _moveto(x,y_1);

                                                     _lineto(x,y);

                                                    _moveto(x1,y_1);

                                                    _lineto(x,y_1);

                                            _moveto(x1,y_1);

                                                     _lineto(x1,y);

                                                     _moveto(x1,y);

                                                    _lineto(x,y);

                                                    mouse (2,&m_x,&m_y,&m_k);

                                            any_key();

                                                     _setcolor(2);

                                                     _floodfill(quest_num,320,0);

                                                    break;

                                                   }

                              }

}

void outresult(int mark,char mode) {

          mouse (2,&m_x,&m_y,&m_k);

_setcolor(15);

_rectangle(_GFILLINTERIOR,543,303,613,320);

          if (mode=='e') mark=10;

_setcolor(2);

          if (mark<9 && mode=='c') {

                                                                                         _setcolor (2);

                                                                                      _grtext(546,301," Ýêçàìåí");

                   _grtext(552,315,"íå ñäàí");

                          }

else   if (mode=='c')   {

                   _setcolor (4);

                   _grtext(546,301," Ýêçàìåí");

                   _grtext(554,315,"ñäàí ");

                  }

if ( mode=='e') {

                   _setcolor (14);

                   _grtext(546,301,"Íàæìèòå");

                   _grtext(548,315," ïðîáåë");

                 }

_floodfill(600,250,0);

   if (mode=='c')savefio(mark);

   any_key();

}

void getout(void ){

mouse (2,&m_x,&m_y,&m_k);

_getimage (255,280,380,335,buff_image);

_setcolor(0);

_rectangle(_GFILLINTERIOR,260,285,380,335);

_setcolor(7);

      _rectangle(_GFILLINTERIOR,255,280,375,330);

      _setcolor (0);

                          _setcharsize(16,16);

      _setfont( fon_buff );

      _setcharsize(16,8);

      _grtext(270,285,"Âû óâåðåíû");

_grtext(270,310,"   (Y/N)  ");

      while(1){

   key=getch();

if (key=='y' || key=='Y') {

                          goodbye();

                                    cout<<"Good bye !!!";

                          exit(0);

}

        if (key=='n' || key=='N') break;

}

_putimage(255,280,buff_image,_GPSET);

_setcharsize(8,9);

_setfont( fon_buff );

mouse (4,&m_x,&m_y,&m_k);

mouse (1,&m_x,&m_y,&m_k);

}

void any_key(void) {

int count_key=0,flag=0;

while (1) {

          mouse (3,&m_x,&m_y,&m_k);

          if (m_k==0 && flag==0) {count_key++;flag=1;}

          if (m_k==1 && flag==1) {count_key++;flag=0;}

          if (count_key>2) break;

          if (kbhit()){

          key=getch();

                              if (!key) getch();

                    break;

                  }

                                                 }

}

void calcxy(void) {

x=   (x/ratio+xs);

y=   (y/ratio+ys);

y_1=   (y_1/ratio+ys);

x1 =   (x1/ratio+xs);

}

void clrbuff(void) {

#pragma aux clrbuff =

" push ds"      

" push ax"      

" xor ax,ax"     

" mov ds,ax"    

" mov ax,ds:[0x41a]"

" mov ds:[0x41c],ax"

" pop ax"

" pop ds";

}

void draw_win(int x,int y,char msg[]) {

        _setcolor(0);

_rectangle(_GFILLINTERIOR,240,285,415,335);

_setcolor(7);

_rectangle(_GFILLINTERIOR,235,280,410,330);

_setcolor (0);

_setcharsize(16,16);

_setfont( fon_buff );

_moveto(x,y);

_outgtext(msg);

_setcolor(15);

_rectangle(_GFILLINTERIOR,245,303,395,324);

_settextposition(row,32);

_setcolor (16);

cout<<"                  ";

}

intfileop (char file[],char massiv[] ) {

        char sym;intcount=0;ifstream f1 (&file[0]);

        if (!f1) {

goodbye();

                      cout<<"Íå ìîãó îêòðûòü ôàéë-";

                      for (int i=0;i<12;i++) cout<

             cout<

          }

        while(f1.get(sym)){massiv[count]=sym;count=count+1;}

        return (count);

        }

void goodbye(void) {

union REGPACK regs;

_setvideomode( _DEFAULTMODE );

regs.w.ax=0x0305;

regs.w.bx=0x0201;

intr ( 0x16,®s);

}

void inp_data(unsigned char data[]) {

for (int i=0;i<20;i++) data[i]=' ';

_settextposition(row,32);

int count=0,key;

                               while (1) {

m01:                 key=getch();

                      if (!key) {getch();goto m01;}

                      if (key==ENTER) break;

                      if (key==8) {

                                  count--;data[count]=' ';

                                  count--;goto m02;

                                          }

                      if (key<32) goto m01;

                      data[count]=key;

m02:                                                _settextposition(row,32);

                    for (int i=0;i<18;i++){cout<

                    count++;

                    if (count>17|| count<0) {

                                        count=0;

                                                          for (i=0;i<20;i++){data[i]=' ';}

}

                         }

for (i=count;i<18;i++) data[i]='_';

}

void inputfio(void)  {

draw_win(256,285,"Ââåäèòå Âàøå èìÿ");

inp_data(name);

draw_win(246,285,"Ââåäèòå Âàøó ôàìèëèþ");

inp_data(subname);

     }

void mouse (int on_off_xy, int *m_x,int *m_y,int *m_k) {

union REGPACK regs;

int mx,my,mk;

int mouse_on_off=on_off_xy;

if (mouse_on_off==0 )

                      {

                        regs.w.ax=0;

                        intr (0x33,®s);

                      }

if (mouse_on_off==1 )

                      {

                        regs.w.ax=1;

                        intr (0x33,®s);

                      }

if (mouse_on_off==2 )

                      {

                        regs.w.ax=2;

                        intr (0x33,®s);

                      }

   if (mouse_on_off==4 )

                     {

                        regs.w.dx=1;

                        regs.w.cx=1;

                        regs.w.ax=4;

              intr (0x33,®s);

                     }

   if (mouse_on_off==3 )

                     {

                        regs.w.ax=3;

              intr (0x33,®s);

              mx=regs.w.cx;

                        my=regs.w.dx;

                        mk=regs.w.bx;

                      *m_x=mx;

                      *m_y=my;

                      *m_k=mk;

                      }

}

int   menu() {

    int key,punkt=1;m_k=0;

    outcursormenu (punkt);

    mouse (4,&m_x,&m_y,&m_k);

    mouse (1,&m_x,&m_y,&m_k);

  while (1) {

mouse (3,&m_x,&m_y,&m_k);

if (m_k==1) {

                        if (m_x>190 && m_y>60 && m_x<450 && m_y<100)

                                                             {punkt=1;break;}

                                  if (m_x>180 && m_y>120 && m_x<450 && m_y<170)

                                                             {punkt=2;break;}

                        if (m_x>210 && m_y>190 && m_x<390 && m_y<230)

                                                             {punkt=3;break;}

                       }

if (kbhit()) {

              if (punkt==0) punkt=1;

                        if (punkt==4) punkt=3;

              key=getch();

              if (key==UP)     punkt--;

                        if (key==DOWN)   punkt++;

              if (key==ENTER || key==SPACE)reak;

                        if (key==ESC)    getout();

              outcursormenu (punkt);

                      }

}

                       mouse (2,&m_x,&m_y,&m_k);

    outcursormenu (punkt);

     return(punkt);

}

void mousecmp(int *position,int c1,int c,int*flag,int *count_key,int *flag_m) {

                                                    int count=c;

    mouse (3,&m_x,&m_y,&m_k);

         if (m_k==0 && *flag_m==0) {*count_key=*count_key+1;*flag_m=1;}

         if (m_k==1 && *flag_m==1) { *count_key=*count_key+1;*flag_m=0;}

         if (*count_key>1) {

    for (int i=1;i

count--;

                               count=msv_tmp(count,massiv);

              sscanf(temp,"%f,%f,%f,%f,%d",&x,&y,&x1,&y_1,&color);

                               if (m_x>x && m_y>y && m_x

                                    *position=i;

                                                                            *flag=0;

                                                 mouse (2,&m_x,&m_y,&m_k);

                                                                                                                  }

                                 else*count_key=0;

                                                                                   }

                                          }

}

int msv_tmp(int count,char massiv[]) {

int q=0,i=count+2;

for(int z=0;z<100;z++) temp[z]=0;

while (!(massiv[i]==10)) {

                                                temp[q]=massiv[i];

                      i++;

q++;

                        }

temp[q]=0;

return(i);

}

void timeout () {

mouse (2,&m_x,&m_y,&m_k);

ratio=1.0,xs=0,ys=0,y_1=0,y=0,x=0,x1=0,aspxs=1;

int count=fileop("exit.bil",massiv);

picture(count,massiv,0);

       }

void savefio (int mark ) {

     int i=0,u=0;

     char massmark[2];

     _settextposition(1,1);

        while (name[i] !=13 && i<19) {

massiv2[i]=name[i];

i++;

}

                                      massiv2[i]=13;

         i++;

        while (subname[u] !=13 && u<19) {

massiv2[i]=subname[u];

u++;

i++;

        }

         massiv2[i]=13;

         i++;

        sprintf( massmark,"%d",mark);

        massiv2[i]=massmark[0];

        i++;

        massiv2[i]=13;

        ofstream f1 ("data.rec");

        if (!f1) {

                     goodbye();

cout<<"Íå ìîãó îòêðûòü ôàéë-";

                     cout<<"data.rec"<

           exit (1);

}

         i=0;

         while(massiv2[i]){

f1.put(massiv2[i]);

i++;

}

}

}


3 ОРГАНИЗАЦИОННАЯ ЧАСТЬ

3.1 Необходимое оборудование

Для работы программы требуется компьютер совместимый с IBMPCи процессором Intel 386. Также требуется видеоадаптер VGAили любой другой поддерживающий разрешение 640X480 c 256 цветами. Памятьодин мегабайт. Необходимо не менее полутора мегабайт свободного места на диске. MS-DOSверсии не ниже 5.0 или любая другая ОС поддерживающая интерфейсданной версии.

Желателен 486 компьютер с математическим сопроцессором. 2 мегабайта оперативной памяти. Остальные требования без изменений.

3.2 Руководство по инсталляции

Чтобы установить программу на жесткий диск установите инсталляционную дискету в дисковод и запустите файл «install.exe». Программой инсталляции вам будет предложено выбрать директорию в которую вы хотите установить программу. В случае затруднения можно нажать клавишу F1 и получить справку.

Для того, чтобы запустить программу в командной строке напишите «pdd.exe» и нажмите клавишу «Enter».

Данные о последнем экзаменуемом содержаться в файле «data.rec».В нем содержится фамилия и имя экзаменуемого, а также количество правильных ответов.

Примечание:

В случае если какой-либо текст в программе будет отображаться неправильно, то следует запустить программу «keyrus.com» .


4 ЭКОНОМИЧЕСКАЯ ЧАСТЬ

4.1 Расчет экономической выгоды

Существует несколько источников повышения эффективности. Кратко рассмотрим несколько основных источников.

Прямые источники - лежат "на поверхности", непосредственно влияют на затраты трудовых и денежных ресурсов в процессе обучения ППД (например- инструктор обучал 20 человек за день обучая по 5 пунктам ПДД, а после внедрения программы ППД - 40 человек за день по 10 пунктам ). Обычно именно они учитываются в Технико-экономическом Обосновании( далее ТЭО).

Косвенные источники - влияют на затраты опосредованно и обычно с трудом формализуются и поддаются учету. По части параметров тесно связаны с прямыми источниками (например - производительность труда инструктора связана с сокращением сроков обучения). Часто их доля в конечной эффективности системы бывает сравнима с прямыми источниками или даже превышает ее, однако из- за сложноти учета в расчете ТЭО косвенные источники фигурируют редко.

Скрытые источники - суть скрытых источников заключается в экстраполировании ситуации в сторону "ЕСЛИ НЕ": что будет если попытаться достичь тех же целей и показателей без применения компьютерной программы ( например - объема выпуска новых водителейза счет найма дополнительных инструкторов ). Степень влияния скрытых источников на реальную эффективность системы бывает самой большой (именно поэтому у нас в стране повсеместно внедряются компьютеры несмотря на дешевый труд инструктор и дорогую вычислительную технику), однако в расчете ТЭО они почти никогда не фигурируют.

Рассмотрим методику расчета «Скрытыхисточников».

Полный расчет ТЭО внедряемой программы обучения может быть проведен только экономическим отделом школы обучения вождению так как он требует знания большого числа параметров, в том числе и составляющих коммерческую тайну. Однако и этот расчет в конечном итоге вряд ли окажется действительно полным по причинам. указанным в предыдущем разделе. Предлагаемая методика расчета исходит из следующих постулатов:

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

- цель расчета - показать возможность окупаемости системы;

- основные источники эффективности - скрытые.

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

Покажем расчет экономии средств за счет условного не найма дополнительных инструкторов.

Для расчета был выбран источник скрытой эффективности за счет условного не найма дополнительных инструкторов , так как имеется достаточно количество данных по нему.

Исходные данные:

- планируется минимальное повышение производительности труда инструктора в полтора раза;

- общее количество инструкторов в городепримерно 50 человек. Будем считать исходя из этого что число условно не нанятых специалистов составит:

50х1.5-50=25 чел.

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

- выделить фонд заработной платы;

- выделить классы для обучения;

- оборудовать рабочие места;

- обеспечить средства связи и коммуникации;

- выделить жилой фонд;

- выделить расходные материалы.

По данным премьер-министра правительства России Черномырдина средняя заработная плата составляет в пересчете 110 долларов США. Сумма налогов на фонд заработной платы колеблется в зависимости от местных тарифов: но в среднем составляет 68 копеек на 1 рубль. Таким образом фонд заработной платы 25 инструкторов с учетом налогообложения эа год будет следующим :

100х25х1.68х12=50400 дол-США в год

Для размещения дополнительных инструкторов требуется производственное помещение. Норма площади для одного инструктора по требованиям охраны труда и техники безопасности составляет 3 квадратных метра. Кроме этого на каждого человека требуется порядка 2 квадратных метров

вспомогательных площадей (проходы, коридоры, площадки и т.д.).Преподавание идет два раза в день. Из этого следует что число преподавателей, обучающих в один день в два раза меньше. Еще нужно учитывать, что они не могут преподавать в одном классе одновременно, асредняя площадь класса равна примерно 60 квадратных метров . Общая площадьна 25 человек:

12*(3+2)+12*60=780 кв.м

По данным Госкомстата в октябре 1996 года средняя стоимость оффисных и отапливаемых производственных помещений была более 150 долларов США за квадратный метр. Соответсвенно размещение 25 человек обойдется:

150*780=117000 дол. США

Кроме этого, предприятия будут постоянно нести расходы по коммунальному обслуживанию этих помещений. Эти расходы по сведениям Госкомстата в1996 года были не примерно 0.2 доллара США за квадратный метрСледовательно за год коммунальные расходы составят:

0.2х780х12=1872 дол-США в год

Каждое рабочее место инструктора необходимо оборудовать. Ориентировочно состав необходимого оборудования следующий:

1 стул на одного человека стоимостью 10 долларов США

1 стол на одного человека стоимостью 100 долларов США

1 телефон на десять человек стоимостью 20 долларов США

1 шкаф на 15 человек 100 долларов США

Расходы на оборудование :

(10+100)*12+(100+20)*12=2760 дол. США

Кроме оборудования для работы инструктору необходимы расходные материалы - бумага, карандаши, ручки, ластики и т.д.)- Затраты на них составляют в среднем за месяц в расчете на одного работника 1 доллар США. В год стоимость расходных материалов получится:

1*25*12=300 дол. США в год

Вновь нанимаемых сотрудников необходимо обеспечить жильем. Средний состав семьи для молодых специалистов в возрасте 22 - 35 лет по данным статистики составляет 2 человека. Для семьи из двух человек по существующим нормам полагается однокомнатная квартира. Средняя полная площадь таких квартир - 30 кв-метров. Минимальная стоимость жильясоставляет 200 долларов США за один квадратный метр общей площади. То есть жилье для 25 новых конструкторов будет стоить:

200*30*25= 150000 дол. США

Таким образом наем 25 инструкторов для увеличения объема выпуска курсантов в полтора раза приведет к единовременным затратам в сумме:

150000+2760+117000@ 269760 дол. США

Кроме этого ежегодные расходы на содержание данного штата в сумме будут равны:

50400+1872+300@ 52572 дол. США в год

Сумма расходов на составляет примерно 156000
дол. США (расходы на покупку компьютеров для 10 школ по 30 компьютеров в каждую школу ценой500 долларов =150000 долларов США , покупка программы для каждого компьютера ценой 20 долларов =6000 дол. США ). Компьютеры можно использовать и для обучения по другим программам, что дает дополнительную прибыль. Таким образом повышение производительности труда путем внедрения программыПДД сэкономит за первый год эксплуатации системы:

(269760+52572)-156000@ 166332 дол США

то есть программа полностью окупает себя уже на первом году эксплуатации.


Приведенные выше цифры убедительно показывают эффективность решения задачи повышения производительности и качества обучения за счет внедрения программы ПДД.


5ОХРАНА ТРУДА И ОКРУЖАЮЩЕЙ СРЕДЫ

5.1.Техника безопасности при работе за компьютером

5.1.1. В лаборатории вычислительной техники (ЛВТ) установлена дорогостоящая сложная и требующая осторожного и аккуратного обращения аппаратура - компьютеры (ПЭВМ), а так же другие технические средства. Поэтому :

5.1.1.1. Бережно обращайтесь с этой техникой;

5.1.1.2. Не входите в лабораторию в верхней одежде;

5.1.1.3. Войдя в лабораторию спокойно занимайте свои места.

5.1.2. На вашем рабочем месте размещены составные части ПЭВМ - системный блок, клавиатура и монитор (дисплей).Во время работы лучевая трубка монитора (дисплея) работает под высоким напряжением.

Неправильное обращение с клавиатурой, кабелями и мониторами может привести к тяжелым поражениям электрическим током, вызвать загорание или иной выход из строя аппаратуры. Поэтому строго запрещается:

5.1.2.1.Трогать разъемы соединительных кабелей;

5.1.2.2.Прикасаться к экрану и к тыльной стороне монитора, клавиатуры;

5.1.2.3.Прикасаться к питающим проводам и устройствам заземления;

5.1.2.4.Включать и выключать аппаратуру без указания преподавателя;

5.1.2.5.Класть дискеты, книги тетради на монитор и клавиатуру;

5.1.2.6.Работать во влажной одежде и влажными руками;

5.1.2.7.Использовать в работе дискеты не зарегистрированные в ЛВТ.

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

Перед началом работы :

5.1.3.1.Убедитесь в отсутствии видимых повреждений аппаратуры и соединительных кабелей на вашем рабочем месте;

5.1.3.2.Сядьте так, чтобы линия взора приходилась в центр экрана, что дает возможность не наклоняясь пользоваться клавиатурой и воспринимать, передаваемую на экран монитора, информацию;

5.1.3.3.Хорошо разберитесь в особенностяхприменяемых в работе устройств;

5.1.3.4.В случае необходимости обращайтесь к преподавателю или лаборанту;

5.1.3.5.Запишите в журнал регистрации время начала и окончания работы на ПЭВМ;

5.1.3.6.Начинайте работу только по указанию преподавателя.

5.1.4.Во время работы ПЭВМ лучевая трубка монитора является источником электромагнитногоизлучения, неблагоприятно воздействующего на зрение при работе вблизи экрана. Поэтому следует соблюдать расстояние между вашими глазами и экраном монитора равное 60-70 см., допустимое расстояние не менее 30 см.

5.1.5.Следите за осанкой, не допускайте искривления позвоночника.

5.1.6. Во время работы:

5.1.6.1.Строго выполняйте все указанные выше правила, а также текущие указания преподавателей;

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

5.1.6.3. Плавно нажимайте на клавиши, не допускайте резких ударов;

5.1.6.4. Работайте на клавиатуре чистыми руками;

5.1.6.5. Никогда не пытайтесь самостоятельно устранить неисправность в работе аппаратуры.

5.1.7. По окончании работы:

5.1.7.1.Подготовьте компьютер к выключению (завершите все работающие программы.), чтобы не потерять не сохраненные данные;

5.1.7.2.Отключите тумблер «СЕТЬ»;

5.1.7.3. Запишите в журнале регистрации время окончания работы.