Наименование материала
|
Количество, шт.
|
Стоимость за одну штуку, руб.
|
Суммарная стоимость, руб.
|
DVD-диски
|
1
|
15
|
15
|
Картридж для лазерного принтера
|
1
|
1500
|
1500
|
Стоимость пачки бумаги формата А4
|
1
|
105
|
105
|
Итого:
|
1620
|
Также необходимо рассчитать стоимость расходуемой технологической
электроэнергии. Для этого требуется подсчитать количество расходуемой энергии
исходя из установленной суммарной мощности оборудования по формуле:
Nсум=, (4.5)
где Ni - установленная мощность i-го вида оборудования, Вт/ч.
Общее количество расходуемой компьютером энергии составляет:
§ монитор - 35 Вт/ч;
§ системный блок - 250 Вт/ч;
Nсум =
35 + 250 = 285 Вт/ч.
Время работы на компьютере составляет 650 часов.
Общее количество потребленной энергии для выполнения работ определяется
по формуле:
Э=Nсум*t, (4.6)
t - затраты времени на выполнение работ с использованием оборудования,
машино-часы.
По формуле (4.6) получаем:
Э = 285 * 650 = 185.25 кВт/ч.
Стоимость потребленной энергии определяется по формуле:
Сэ=Э*Цэ, (4.7)
где Э - общее количество потребленной энергии, кВт/ч;
Цэ - тариф на энергию (тариф на дату выполнения проекта). В настоящее
время тариф на электроэнергию составляет 1.58 руб. за 1 кВт/час. С учетом
НДС=18%, получаем стоимость 1 кВт/час энергии:
Цэ = 1.58*0.18 + 1.58 = 1.86 руб.
Таким образом, стоимость потребленной энергии по формуле (4.7)
составляет:
Сэ = 185.25 * 1.86 = 344.57 руб.
Также необходимо рассчитать затраты по использованию прикладных программ,
которые определяются по формуле:
Спп=(Ст/Тэф)*t, (4.8)
где Ст - стоимость прикладных программ, руб.;
Тэф - время эффективного использования, час;- количество часов
использования ПО при выполнении работ, маш/час.
В разработке данной дипломной работы были использованы следующие
коммерческие программные продукты:
§ Microsoft Windows XP Professional -
10 000.00 рублей;т = 10 000.00 руб;
Тэф = 1840 часов ∙ 3 года = 5520 ч.;
t =
650 маш/час.
По формуле (4.8) получаем:
Спп = (Ст/Тэф) ∙ t =
(10 000.00/5520) ∙ 650 = 1177.54 руб.;
§ Microsoft Office 2007- 12 000.00 рублей;т = 12 000.00 руб;
Тэф = 1840 часов ∙ 3 года = 5520 ч.;
t =
300 маш/час.
По формуле (4.8) получаем:
Спп = (Ст/Тэф) ∙ t =
(12 000.00/5520) ∙ 300 = 652.20 руб.;
Из проделанных вычислений можно заключить, что суммарная стоимость
расходных материалов, составляет:
Страсх.мат.= 1620 + 812.26 + 1177.54 + 652.20 = 4262 руб.
4.1.3 Амортизация оборудования
Амортизационные отчисления, включаемые в затраты, составляют:
Ам.ф = (Ам.акт./Tэф)*tфакт, (4.9)
где Ам.акт. - годовые амортизационные отчисления по оборудованию, руб.;
Тэф - эффективное рабочее время годовое, час;факт - затраты машинного
времени на выполнение работ с использованием ПО, маш/час.
Ам.акт = Стакт*На/100, (4.10)
где Стакт - стоимость оборудования, руб.;
На - норма амортизационных отчислений, в процентах.
Норма годовых амортизационных отчислений рассчитывается исходя из срока
полезного использования, определенного в соответствии с классификатором
амортизируемого имущества.
На = 100/Тп.о, (4.11)
где Тп.о - срок полезного использования по классификатору.
Срок полезного использования оборудования равен двум-трем годам. В данном
случае норма амортизационных отчислений по формуле (4.11) составляет:
На = 100/2.5 = 40%
С учетом стоимости используемого оборудования (см. таблица 4.4),
амортизационные отчисления, рассчитанные по формуле (4.10), составляют:
Ам.акт = 34000 * 40/100 = 13600 руб./год.
Таблица 4.4 - Стоимость используемого оборудования
Наименование оборудования
|
Стоимость, руб.
|
Ноутбук
|
32000
|
Мышь
|
2000
|
Итого:
|
34000
|
Учитывая продолжительность использования оборудования, амортизационные
отчисления, входящие в затраты вычисляются по формуле (4.9) и составляют:
Ам.ф = [ 13600/(160 * 12)] * 650 = 4604.17 руб.
4.1.4 Прочее расходы
«Единый социальный налог» (далее ЕСН) учитывает следующие обязательные
отчисления по установленным законодательным нормам:
- фонд социального страхования (2.9%);
- пенсионный фонд (20.0%);
- фонд медицинского страхования (3.1 %);
Итого ЕСН равен 26.0% от оплаты труда. Размер отчислений определяется по
формуле:
ЕСН = (ЗПосн + ЗПдп)*(Фб + Мс + Сс)/100, (4.12)
где ЗПосн - основная заработная плата сотрудника, руб.;
ЗЦдп - дополнительная заработная плата сотрудника, руб.;
Фб - размер отчислений в федеральный бюджет, в процентах;
Мс - размер отчислений на медицинское страхование, в процентах;
Сс - размер отчислений на социальное страхование, в процентах.
Итого сумма отчислений на ЕСН по формуле (4.12) составит:
ЕСН = (41204.00 + 8240.80) * (20.0 + 2.9 + 3.1)/100 = 12855.65 руб.
Выплаты на социальное страхование от несчастного случая рассчитываются по
формуле:
Нн.с = (ЗПосн + ЗПдп)*Сн.с/100, (4.13)
где Нн.с - выплаты на социальное страхование от несчастного случая,
руб.;
Сн.с - ставка по выплатам на социальное страхование от несчастного
случая, в процентах.
В соответствии с Федеральным Законом РФ «О страховых тарифах на
обязательное социальное страхование от несчастных случаев на производстве и
профессиональных заболеваний на 2001 год» от 12 февраля 2001 года № 17-ФЗ
данная ставка принимается в диапазоне от 0.2 до 8.5%.
На данном предприятии она составляет 0.2%.
Таким образом, выплаты на социальное страхование от несчастного случая,
рассчитанные по формуле (4.13), составляют:
Нн.с = (41204.00 + 8240.80) * 0.2/100 = 98.89 руб.
Затраты на услуги информационной системы Интернет могут включать:
- новые программные продукты, обновления к старым, уже имеющимся
программам;
- документация по программным продуктам;
- другая информация применимая в работе.
В ходе выполнения данного проекта неоднократно были использованы услуги
всемирной сети Интернет. В общей сложности было потрачено 900 Мб
Интернет-трафика. Стоимость 1 Мб Интернет-трафика составляет 1.00 руб.
Следовательно, затраты по использованию сети Интернет составляют:
СInternet = 1.00*900=900 руб.
По статье «Расходы на управление и хозяйственное обслуживание», в равной
степени относящейся ко всем выполненным работам, учитываются:
- отчисления во внебюджетные фонды аппарата управления и хозяйственных
служб;
- затраты на содержание, ремонт зданий, сооружений,
оборудования и инвентаря;
- расходы по охране труда, научно-технической информации;
- отчисления в дорожные фонды.
Величина накладных расходов на работу определяется в процентах от
основной заработной платы работников, непосредственно участвующих в ее
выполнении. В данном научном учреждении величина норматива накладных расходов
установлена равной 100%. Отчисления на накладные расходы вычисляются по
формуле:
Нрасх = ЗПосн*Нн.р./100, (4.14)
где ЗПосн - основная заработная плата, руб.;
Нн.р - норматив накладных расходов, в процентах.
Таким образом, в соответствии с формулой (5.14) величина накладных рас
ходов равна:
Нрасх = 51825.48 * 80/100 = 39555.84 руб.
В итоге сумма прочих расходов составляет:
Рпр = 12855.65 + 98.89 + 900.00 + 39555.84 = 52510.38 руб.
На основании полученных данных была составлена смета затрат на выполнение
проведенных работ, представленная в виде таблицы 4.5.
Таблица 4.5 - Смета затрат
Наименование затрат
|
Сумма, руб.
|
Расходы на оплату труда
|
49444.80
|
Материальные затраты
|
4262
|
Амортизация оборудования
|
13600
|
Прочие расходы
|
52510.38
|
Итого:
|
119817.20
|
4.2 Выводы
В ходе экономического обоснования проекта был произведен расчет основных
затрат, связанных с его реализацией. К ним относятся расходы на оплату труда,
материальное обеспечение, амортизацию используемого оборудования и прочие расходы
(такие, как ЕСН, выплаты на социальное страхование от несчастного случая,
затраты по использованию Интернет, расходы на управление и хозяйственное
обслуживание).
Смета затрат, полученная в ходе разработки данного раздела дипломного
проекта, позволяет заключить, что большинство затрат связаны с элементом
«Прочие расходы». Это объясняется тем, что настоящий проект требует отчислений
по статье «Единый социальный налог», а также значительных накладных отчислений.
5. Безопасность и экологичность проекта
5.1 Безопасность геоинформационной системы
Согласно требованиям ГОСТ 12.3.002-75 [2] безопасность производственных
процессов на предприятиях обеспечивают:
- выбором применяемых технологических процессов, а также приемов, режимов
работы и порядка обслуживания производственного оборудования;
- выбором производственных помещений и площадок;
- выбором исходных материалов и производственного оборудования;
- размещением оборудования и организацией рабочих мест;
- распределением функций между человеком и оборудованием в
целях ограничения тяжести труда;
- выбором способа хранения и транспортирования исходных
материалов и готовой продукции;
- профессиональным отбором и обучением персонала;
- включением требований безопасности в нормативно-техническую и
технологическую документацию.
хранение данное ввод таксационный
5.2 Идентификация опасностей на рабочих местах
Оператор персонального компьютера (ПК) подвержен влиянию более 30 опасных
и вредных производственных факторов (ОПФ и ВПФ): монотонность работы,
перенапряжение анализаторов, умственное перенапряжение, эмоциональные
перегрузки, повышенный уровень пыли, повышенный уровень шума, статическое
электричество, электромагнитное излучение, ионизирующее излучение,
недостаточная освещенность рабочей зоны, электрическое напряжение,
электрический ток, падающие предметы и др. Характеристики некоторых из них и их
воздействие на человека приведены в таблице 5.1.
Для снижения воздействия ОПФ И ВПФ используют следующие
мероприятия: организационные, инженерно-технические, санитарно-гигиенические,
лечебно-профилактические, средства индивидуальной защиты. Их качественная
разработка и внедрение обеспечивает безопасность потенциального потребителя.
Таблица 5.1 Опасные и вредные производственные факторы
ОПФ и ВПФ
|
Характеристика (вид воздействия)
|
Продолжительность воздействия
|
Монотонность работы
|
Утомляемость
|
Циклическая
|
Перенапряжение анализатора
|
Утомляемость, заболевание
|
Постоянная
|
Умственное перенапряжение
|
Утомляемость
|
Циклическая
|
Повышенное содержание пыли
|
Заболевание
|
Постоянная
|
Повышенный уровень шума
|
Утомляемость, заболевание
|
Постоянная
|
Статическое электричество
|
Травматизм
|
Кратковременное
|
Электромагнитное излучение
|
Заболевания различной тяжести
|
Постоянная
|
Электрическое напряжение
|
Травматизм
|
Кратковременное
|
Ионизирующее излучение
|
Заболевания различной тяжести
|
Постоянная
|
Недостаточная освещенность
|
Утомляемость, заболевание
|
Постоянная
|
Из данных таблицы 5.1, следует, что воздействие ОПФ и ВПФ на человека
крайне неблагоприятно и приводит к различным заболеваниям.
5.2 Мероприятия по обеспечению безопасных условий труда
5.2.1 Безопасность исходных материалов
В соответствии с требованиями ГОСТ 12.2.049-80 [3], ГОСТ 12.2.032-02 [4],
ГОСТ 12.2.06-81 [5] все материалы и оборудование должны иметь сертификат
качества и коэффициент безопасности Kтб=l.
В конструкцию оборудования (ПК, принтер, сканер) и носителей информации
(CD-диски, дискеты, бумажные документы) входит около 20 наименований
материалов: пластмасса, резина, железо, поролон, стекло, дерево, серебро, медь,
кремний и т.д., которые в исходном состоянии и нормальном режиме эксплуатации
помещений не представляют опасности.
К материалам, обращающимся в технологическом процессе, относятся:
бумажные изделия (к ним относятся различные карты местностей, литература);
пластмассовые изделия (носители информации в виде компакт дисков) и др.
В таблице 5.2 приведены некоторые материалы и вещества, входящие в
конструкцию оборудования.
Таблица 5.2 - Материалы, входящие в конструкцию оборудования и вещества и
материалы, обращающихся в технологических процессах
Наименование материалов и веществ
|
Класс опасности
|
Вид воздействия
|
В конструкции оборудования
|
Пластмасса
|
4
|
Малоопасное
|
Резина
|
4
|
Малоопасное
|
Железо
|
3
|
Умеренноопасное
|
Серебро
|
2
|
Высокоопасное
|
Медь
|
4
|
Малоопасное
|
Алюминий
|
4
|
Малоопасное
|
Стекло
|
3
|
Умеренноопасное
|
Кремний
|
4
|
Малоопасное
|
Дерево
|
4
|
Малоопасное
|
Магнитный носитель
|
4
|
Малоопасное
|
Бумага
|
4
|
Малоопасное
|
Поролон
|
4
|
Малоопасное
|
Обращающиеся в технологических процессах
|
Пластмасса
|
4
|
Малоопасное
|
Бумага
|
4
|
Малоопасное
|
Изопрен
|
4
|
Малоопасное
|
Ацетон
|
4
|
Малоопасное
|
Пыль
|
4
|
Малоопасное
|
5.2.2 Обеспечение благоприятного светового климата
Нормирование цветосветового климата производится в соответствии с
положениями СН181-70 [21], СНиП 23-05-03 [23] и зависит от характера
производимых работ. Согласно этим нормам работа оператора относится к высокой и
средней точности - 3, 4 разряда. Оптимальная освещенность в этом случае,
согласно [23], должна быть от 300 до 500 лк.
Исходя из условий зрительной работы, в соответствии с [23] и с учетом
[21], оптимальным будет общее равномерное искусственное освещение и
естественное освещение. Применение одного местного освещения недопустимо.
Следует обеспечить коэффициент естественного бокового освещения (КЕО) для
используемого помещения в интервале от 1.2 до 1.5%, при комбинированной
освещенности составляющей 750 лк и боковой освещенности 300 лк и показатель
ослепленности для источников искусственного освещения не превышающий 20.
Согласно СанПиН 2.2.2./2.4.1340-03 [29] наиболее приемлемыми для данного
помещения являются люминесцентные лампы ЛБ (белого света) и ЛТБ (тепло-белого
света) мощностью 40, 60 и 80 Вт. Светильник преимущественно прямого потока, со
степенью защиты от пыли JP1 (открытые) или JP2 (защищенные). Тип светильника:
ЛПО13-2х40/Б01 или ЛСП13-2x40-06.
Для исключения засветки экранов дисплеев прямыми световыми потоками
светильники общего освещения располагают сбоку от рабочего места, параллельно
линии зрения оператора и стене с окнами. Такое размещение светильников
позволяет производить их последовательное включение в зависимости от величины
естественной освещенности и исключает раздражение глаз чередующимися полосами
света и тени, возникающие при поперечном расположении светильников. Если
приходится сидеть рядом с окном, то установить экран дисплея перпендикулярно к
стеклу.
Для обеспечения нормируемых значений освещенности следует предусмотреть
чистку оконных рам и светильников не реже двух раз в год. Для повышения
работоспособности и создания благоприятной психологической атмосферы стены
помещения окрашивают светлой матовой краской.
Излучение монитора ПК - снижение этого фактора до безопасного уровня
устанавливается в соответствии с положениями [29]. Требования к монитору:
яркость знака от 35 до 120 д/м2, внешняя освещенность экрана от 100 до 250 лк,
угловой размер знака от 16 до 60 угл.мин.
5.2.3 Обеспечение благоприятных микроклиматических условий
Работа оператора ПК предусматривает как высокое умственное напряжение,
так и зрительное напряжение, связанное с отслеживанием и анализом информации на
экране терминала. Исходя из требований СанПин 2.2.4.548-96 [30] работа
оператора ПК относится к 1-ой категории работ - легкой.
В рабочей зоне рекомендуется соблюдать нормы температуры, относительной
влажности и скорости движения воздуха, указанные в ГОСТ 12.1.005-88 [6] и [30]
с учетом [29].
Для обеспечения нормируемых параметров микроклимата работодателю
необходимо предусмотреть:
- общеобменную вентиляцию в соответствии с требованиями СНиП41-01-03 [24],
безопасность которой определяется по ГОСТ 12.4.021-75 [36];
- использование кондиционеров в соответствии с требованиями
[24];
- дежурное отопление в холодный период года, поддерживающее
температуру воздуха в интервале от 15 до 16°С, и разность температур на уровне
пола и на уровне головы сидящего оператора не должна превышать 3°С;
- обеспечение подачи воздуха в помещение на одного работающего
не менее 20м3/ч, но не более 30 м3 /ч.
Для повышения влажности воздуха в помещениях с ПК следует применять
увлажнители воздуха, заправляемые ежедневно дистиллированной или прокипяченной
питьевой водой. А также обязательна влажная ежедневная уборка помещения.
Необходимо обеспечить уровни ионизации воздуха в помещении в соответствии
с требованиями [29].
5.2.4 Защита от шума и вибрации
Источниками шума являются:
- механические, обусловленные колебаниями деталей машин и их взаимным
перемещением (работа печатающих устройств, сканеров, работа вентиляторов на
блоке питания и процессоре);
- аэродинамические, возникающие в упругих конструкциях, в газах
или жидкостях (работа кондиционеров);
- электромагнитные, возникающие при преобразовании
электроэнергии.
Допустимые уровни звукового давления и уровня звука на рабочих местах
операторов ПК устанавливаются в соответствии с ГОСТ положениями 12.1.003-89 [8]
и СНиП 2.2.4/2.1.8.562-96 [25], с учетом [29]. Уровень шумов на рабочем месте
пользователя ПК считается допустимым 50 дБА, а в помещениях с шумными
агрегатами вычислительных систем (принтеры и т.п.) не превышает 80 дБА.
Уровни звукового давления для комнаты пользователя по [30] устанавливаются
в зависимости от октавных полос со среднегеометрическими частотами и
варьируются от 71 дБА при 63 Гц и 45 дБА при 1000 Гц.
В соответствии с требованиями [8], защиту от шума, создаваемого на
рабочих местах внутренними источниками, а также, проникающего извне, следует
предусмотреть за счет:
- уменьшения шума в источнике;
- применения средств индивидуальной защиты (наушники);
- рациональной планировки помещения;
- рациональной организации режима труда и отдыха;
- акустической обработки помещения.
Печатающие устройства устанавливают на звукопоглощающую поверхность
автономно от рабочего места оператора.
Акустическая обработка помещения в соответствии с требованиями [29] может
заключаться в отделке помещения звукопоглощающими материалами с максимальным
уровнем звукопоглощения в области частот от 63 до 8000 Гц. Дополнительным
звукопоглощением служат однотонные занавеси из плотной ткани. Ширина занавеси
должна быть в два раза больше ширины окна. При работе с ПК вибрация не
превышает допустимых норм.
Нормирование вибрации осуществляется в соответствии с требованиями
СН2.2.4/2.1.8.566 [8]. Источниками вибрации являются: проходящие мимо рабочих
помещений транспортные средства; работающие вычислительные машины, принтеры,
сканеры, светильники с лампами дневного света и т.д.
Для уменьшения уровня вибрации рекомендуется применять:
- виброизоляцию, виброгашение и вибродемпфирование;
- средства индивидуальной защиты: антивибрационные рукавицы,
перчатки, специальную обувь, специальные костюмы;
- перерывы продолжительностью от 20 до 30 минут через один или
два часа после начала работы и через два часа после обеденного перерыва
(продолжительностью 40 мин.) для проведения активного отдыха, комплекса
производственной гимнастики и физиотерапевтических процедур;
- тепловые процедуры, гидропроцедуры в виде местных ванн, душей
и воздушный обогрев с микромассажем;
Для профилактических мероприятий рекомендуется проводить ежегодный
контроль за состоянием здоровья.
5.2.5 Электробезопасность
Требования, предъявляемые к электрическому оборудованию, во многом
зависят от помещения, в котором оно эксплуатируется.
Согласно ПУЭ-01 [31] помещение, в котором работает пользователь,
относится к помещениям с повышенной опасностью. Сеть электропитания относится к
1-ой группе - до 1000 В, тип проводки - закрытая кабельная. Питание ПК
осуществляется от трехфазной сети частотой 50 Гц, напряжением 380/220 В.
Для обеспечения электробезопасности в соответствии с [31] и ГОСТ
12.1.019-79 [9] следует предусмотреть следующие защитные меры:
- электрическое разделение сетей;
- контроль и профилактика повреждений изоляции;
- компенсацию емкостной составляющей тока замыкания на землю;
- обеспечение недоступности токоведущих частей;
- защитное заземление с подключением к общей земляной шине
здания в соответствии с требованиями ГОСТ 12.1.030-81 [10];
- зануление в соответствие с требованиями [10];
- двойную изоляцию;
- выравнивание потенциалов;
- защитное отключение по ГОСТ 12,4.155-85 [11];
- закрытую проводку для питающих кабелей в соответствии с
требованиями [10];
- цветную сигнализацию опасных для жизни человека мест (красные
предупредительные щиты и т.п.) по ГОСТ 12.4.026-01 [12];
- использование общей и местной увлажняющей вентиляции для
защиты от статического электричества по ГОСТ 12.1.018-86 [13].
Квалификация обслуживающего персонала не ниже 2-ой квалификационной
группы по технике безопасности. Должна проводиться периодическая проверка
знаний и обучение по безопасным методам труда.
В настоящее время используется два типа видеодисплейных терминалов: ЭЛТ-
и ЖК-мониторы.
Основным элементом ЭЛТ-монитора является электронно-лучевая трубка,
которая создает электрические и магнитные поля (ЭМП).
Электрическая и магнитная составляющая рассматриваются отдельно ввиду
того, что расстояние от ЭЛТ-монитора до оператора меньше 3 м, а на этом
расстоянии ЭМП еще не успевает сформироваться.
Уровень ЭМП в рабочей зоне нормируется ГОСТ 12.1.006-84 [14], ГОСТ
12.1.002-84 [15] и [29]. Согласно этим нормам, обеспечить ЭМП, такое, чтобы на
расстоянии 0.5 м, в течение рабочего дня уровень ЭМП не превышал ни по одной из
составляющих. Установить поверхностный электростатический потенциал не
превышающий 500 В.
Для конструкции ЭЛТ-монитора необходимо обеспечить мощность
экспозиционной дозы рентгеновского излучения в любой точке на расстоянии 0.05 м
от экрана и корпуса монитора не более 7.74x10 А/кг, что соответствует
эквивалентной дозе, равной 0.1 Мбэр/ч.
ЖК-мониторы формируют изображение посредством жидкокристаллической
панели, у которой уровень электромагнитного излучения на несколько порядков ниже,
чем у ЭЛТ-мониторов.
Для защиты пользователя от излучения в соответствии с [14] следует
предусмотреть:
- уменьшение напряженности и плотности потока энергии ЭМП посредством
использования согласованных нагрузок и поглотителей мощности;
- экранирование рабочего места;
- удаление рабочего места от источника ЭМП на 0.5 м;
- рациональное размещение оборудования, излучающего ЭМП;
- установление рациональных режимов работы оборудования и
обслуживающего персонала;
- применение средств индивидуальной защиты;
- использование защитных экранов, полностью или частично
поглощающих потоки энергии ЭМП или рассеивающих ее.
Поскольку источник высокого напряжения компьютера - строчный
трансформатор, то он помещается в задней или боковой части терминала, уровень
излучения со стороны задней панели выше, причем стенки корпуса не экранирует
излучение. Пользователи должны находиться не ближе чем на 1.2 м от задних и
боковых поверхностей терминалов. Также рекомендуется размещать ПК в шахматном
порядке или вдоль стен, чтобы операторы не попадали под перекрестное излучение.
5.2.6 Техническая эстетика и эргономика
Основные требования к организации и оборудованию рабочего места отражены
в требованиях ГОСТ Р 50948-96 [16], ГОСТ Р 50923-96 [17] и [4], а также [29].
Необходимо предусмотреть эстетическое оформление кабинетов, удобную
мебель, в соответствии с [3], насыщение воздуха благотворно действующими
отрицательными ионами, имитацию в помещении естественного природного окружения.
При выборе цветового решения интерьера необходимо учитывать степень точности
работы, так в помещениях умственной работы, окрашиваем стены в цвета
средневолновых участков спектра (голубой или зеленый).
При выборе сидения и рабочей поверхности необходимо руководствоваться
СНиП 21-01-02 [26] и [5].
Рабочий стул (кресло) должен быть подъемно-поворотным и регулируемым по
высоте и углам наклона сиденья и спинки, а также расстоянию спинки от переднего
края сиденья. Конструкция его должна обеспечивать:
- регулировку высоты поверхности сиденья в интервале от 400 до 550 мм и
углов наклона вперед до 15° и назад до 5°;
- высоту опорной поверхности спинки 300 плюс минус 20 мм,
ширину - не менее 380 мм и радиус кривизны горизонтальной плоскости - 400 мм;
- угол наклона
спинки в вертикальной плоскости в интервале 0 30°;
- регулировку
расстояния спинки от переднего края сиденья в интервале от 260 до 400 мм;
- стационарные
или съемные подлокотники длиной не менее 250 мм и шириной от 50 до 70 мм;
- регулировку
подлокотников по высоте над сиденьем в интервале 230 плюс минус 30 мм и
внутреннего расстояния между подлокотниками в интервале от 350 до 500 мм.
Поверхность сиденья, спинки и других элементов стула (кресла) должна быть
полумягкой с нескользящими, не электризующимся и воздухопроницаемым покрытием,
обеспечивающим легкую.
Высота рабочей поверхности стола для взрослых пользователей должна
регулироваться в интервале от 680 до 800 мм, при отсутствии такой возможности
высота рабочей поверхности стола должна составлять 725 мм. Рабочий стол должен
иметь пространство для ног высотой не менее 600 мм, шириной - не менее 500 мм,
глубиной на уровне колен - не менее 450 мм и на уровне вытянутых ног - не менее
650 мм.
Рабочее место, в соответствии с [3], [5] и [17], должно быть оборудовано
подставкой для ног, имеющей ширину не менее 300 мм, глубину не менее 400 мм,
регулировку по высоте в интервале до 150 мм и по углу наклона опорной
поверхности подставки до 20°. Поверхность подставки должна быть рифленой и
иметь по переднему краю бортик высотой 10 мм.
Экран видеомонитора в соответствии с требованиями [29] следует
располагать от глаз пользователя на оптимальном расстоянии от 600 до 700 мм, но
не ближе 500 мм с учетом размеров алфавитно-цифровых знаков и символов. На
каждое рабочее место оператора рекомендуется выделять площадь не менее 6 м3 и
объем не менее 20 м3 . Расстояние между ПК, расположенными один за другим,
должно быть не менее 2 м и 1.2 м от стен.
5.2.7 Режим труда и отдыха
Режимы труда и отдыха оператора должны организовываться в зависимости от
вида и категории трудовой деятельности. В соответствии с требованиями [29]
деятельность оператора будет относиться к группе «В» - творческая работа в
режиме диалога с ПК. Для этой группы категория тяжести работ устанавливается по
суммарному времени непосредственной работы с ПК за рабочую смену, но не более
шести часов.
Для обеспечения оптимальной работоспособности и сохранения здоровья
пользователей на протяжении рабочей смены устанавливаться
регламентированные перерывы, в соответствии с положениями нормативных
документов предприятия.
Для любого вида деятельности и категории тяжести работ продолжительность
непрерывной работы с монитором персонального компьютера не должна превышать
двух часов.
Во время регламентированных перерывов с целью снижения
нервно-эмоционального напряжения, утомления зрительного анализатора, устранения
влияния гиподинамии целесообразно выполнять комплексы физических упражнений.
5.2.8 Требования к профессиональному отбору операторов
К работе с ПК допускаются лица, не имеющие медицинских противопоказаний,
имеющие опыт работы с компьютером (желательно наличие высшего образования).
Рекомендуется проводить все виды инструктажей, первичное обучение и проверку
знаний безопасности приемов и методов труда на компьютере, проинструктировать
по электробезопасности в рамках первой квалификационной группы с обязательной
регистрацией инструктажа в специальном журнале, ежегодно проверять знание
техники безопасности, проводить медицинские осмотры.
5.2.9 Средства индивидуальной защиты
Основная опасность для оператора исходит от монитора ПК. Поэтому
необходимо применять средства индивидуальной защиты, такие как защитные экраны
для монитора и спектральные очки.
В настоящее время выпускаются ЖК-мониторы, соответствующие международным
стандартам. Также рекомендуется использовать ЖК-мониторы, у которых полностью
отсутствует мерцание изображения, вредное рентгеновское излучение, а уровень
электромагнитного на несколько порядков ниже, чем у ЭЛТ-мониторов.
5.3 Санитарно-бытовое обеспечение
Для обеспечения нормальных условий труда в соответствии с требованиями
СНиП 2.09.04-02 [27] и [23] необходимо иметь: умывальник, уборные, место для
курения, шкаф для верхней одежды, отдельное помещение для приема пищи. При
количестве персонала от 20 до 300 человек необходимо иметь буфет, более 300
человек - столовую.
Курение разрешается только в специально отведенных местах, где должны
быть металлические урны с водой, ящики с песком для окурков. В местах,
отведенных для курения, делают надпись «Место для курения».
В помещениях с мониторами ПК рекомендуется ежедневная уборка.
5.4 Пожарная безопасность
В соответствии с требованиями НПБ 105-03 [32], ФЗ № 123-2008 и с учетом
[26], рабочее помещение оператора по категории пожарной опасности относится к категории
«В». В качестве горючих материалов, находящихся в помещении оператора могут
быть мебель, оконные рамы, двери, полы, канцелярские принадлежности, изоляция
силовых и сигнальных кабелей, обмотка радиотехнических деталей.
Во избежание пожара систему электропитания по [26] предусматривается
прокладывание через противопожарную стену и изолирование негорючими
материалами. Для предотвращения распространения огня во время пожара с одной
части здания на другую предусматривается устройство противопожарных преград.
Для защиты от короткого замыкания применяются автоматические предохранители и
автоматы тепловой защиты в соответствии с [11]. Для предотвращения и/или
ликвидации пожара применяются автоматические установки пожаротушения,
углекислотные огнетушители, а также другие меры безопасности в соответствии с
НПБ 88-01 [36] и ГОСТ 12.1.033-83 [18].
Для вынужденной эвакуации людей из помещений предусматриваются в
соответствии с [26] эвакуационные пути.
При проектировании новых и реконструкции старых помещений лабораторий
соблюдаются мероприятия пожарной профилактики, в соответствии с СН 512-78 [22]
и [26].
В целях предотвращения возникновения пожароопасной ситуации
предусматривают следующие виды мероприятий:
- организационные (инструктаж персонала, разработка плана эвакуации и
т.д.);
- технические (устройство не горючих перегородок);
- режимные (курение в специальных местах);
- эксплутационные (профилактические осмотры).
5.5 Безопасность в чрезвычайных ситуациях
В случае возникновения:
- чрезвычайной ситуации (ЧС) нужно сохранять спокойствие и не поддаваться
панике. Во время работы на рабочем месте могут произойти внештатные ситуации:
аппаратный сбой в оборудовании, электрическое замыкание проводки, попадание
жидкости, пожар;
- аппаратного сбоя необходимо обратится к специалисту из службы
технического обслуживания, в остальных случаях для предотвращения пожара
необходимо сразу обесточить электрооборудование;
- аварийной ситуации необходимо прекратить работу, поставить в
известность непосредственного руководителя или лицо, его замещающее.
При загорании, возникновении пожара необходимо отключить персональный
компьютер от электросети, вызвать пожарную команду по телефону 01 и приступить
к тушению пожара на установках, находящихся под напряжением, можно пользоваться
только углекислотными или порошковыми огнетушителями. При сильном возгорании,
пожаре необходимо срочно вызвать электрика и обесточить помещение, после чего
для тушения пожара можно использовать пенные огнетушители и воду.
Для предотвращения возможности возникновения ЧС необходимо соблюдать
элементарные правила охраны труда:
- выключать электрооборудование после завершения работы;
- избегать попадания воды на электрические приборы и
токоведущие части;
- соблюдать правила пожарной безопасности предусмотренные ГОСТ
12.1.004-98 [19]и СНиП 31-03-01 [28];
- проводить профилактические мероприятия.
5.6 Экологическая безопасность геоинформационной системы
Экологическая безопасность на объекте определяется двумя показателями:
- экологическая безопасность материалов, входящих в оборудование;
- экологическая безопасность материалов и веществ, обращающихся
в технологических процессах.
5.6.1 Экологическая безопасность материалов, входящих в конструкцию
оборудования
В конструкцию оборудования и носителей информации входит около 20
наименований материалов: пластмасса, резина, железо, поролон, стекло, дерево,
серебро, медь, кремний и т.д., которые в исходном состоянии и нормальном режиме
эксплуатации помещений не представляют опасности.
Характеристики некоторых исходных материалов, вид воздействия и нормы
предельного содержания приведены таблице 5.3.
Таблица 5.3 - Воздействие исходных материалов на окружающую среду
Наименование материала
|
Класс опасности
|
Характер воздействия
|
Пластмасса
|
4
|
Малоопасное
|
Резина
|
4
|
Малоопасное
|
Железо
|
3
|
Умеренно опасное
|
Магнитный носитель
|
4
|
Серебро
|
2
|
Высокоопасное
|
Медь
|
4
|
Малоопасное
|
Алюминий
|
4
|
Малоопасное
|
Стекло
|
3
|
Умеренно опасное
|
Бумага
|
4
|
Малоопасное
|
Пыль
|
4
|
Малоопасное
|
Поролон
|
4
|
Малоопасное
|
Кремний
|
4
|
Малоопасное
|
Дерево
|
4
|
Малоопасное
|
Свинец
|
1
|
Чрезвычайно опасное
|
5.6.2 Экологическая безопасность материалов и веществ, обращающихся
в технологических процессах
К материалам, обращающимся в технологическом процессе, относятся:
бумажные изделия (к ним относятся различные карты местностей, литература);
пластмассовые изделия (носители информации в виде компакт дисков) и др.
При работе в помещениях человек подвергается воздействию множества
вредных веществ. Это такие вещества как: изопрен, диоксины, гербициды, летучие
органические вещества (ЛОС), нитраты, которые включают более 250 наименований,
формальдегид, тяжелый газ радон, углекислый газ, фреоны, трихлорэтан,
сероводород, гидроксильные радикалы, ацетон, табачный дым, содержащий более 20
вредных веществ. Характеристики некоторых веществ, вид воздействия и нормы
предельного содержания приведены таблице 5.4.
Таблица 5.4 - Вредные вещества производственных помещений
Наименование материалов и веществ
|
Класс опасности
|
Характер воздействия
|
ПДК в рабочей зоне, мг/м
|
Формальдегид
|
2
|
Высокоопасное
|
0.5
|
Фенол
|
2
|
Высокоопасное
|
0.3
|
Сероводород
|
2
|
Высокоопасное
|
10
|
Нитрат аммония
|
2
|
Высокоопасное
|
4
|
Этилен
|
3
|
Умеренное
|
100
|
Ацетон
|
4
|
Малоопасное
|
200
|
Углекислый газ (СО2)
|
4
|
Малоопасное
|
20
|
Неорганическая и органическая пыль
|
4
|
Малоопасное
|
6
|
Трихлорэтан
|
4
|
Малоопасное
|
20
|
Изопрен
|
4
|
Малоопасное
|
40
|
Среди приведенных химических элементов и соединений имеются опасные с
точки зрения экологической безопасности и жизни (здоровья) человека. Но их
концентрации достаточно малы и поэтому с экологической точки зрения согласно
ГОСТ 12.1.007-76 [20] элементы, присутствующие в технологическом процессе,
являются относительно безопасными.
5.7 Выводы
В дипломном проекте разработан комплекс мероприятий по обеспечению
безопасных условий труда, а также дан перечень санитарно-бытовых помещений,
необходимых для нормальной работы потенциального пользователя - оператора ПК.
Также здесь предложен ряд организационных, инженерно-технических и режимных
мероприятий для обеспечения пожарной безопасности на объекте, даны рекомендации
о действиях пользователя в случае возникновения чрезвычайных ситуаций.
При соблюдении соответствующих мер безопасности, мероприятий и требований
НТД, данный проект является относительно безопасным и экологичным в
соответствии со стандартами ССБТ и охраны окружающей среды.
ЗАКЛЮЧЕНИЕ
В результате данного дипломного проекта была разработана структура
хранения данных таксационных описаний и реализован комплекс программных
средств, позволяющих вводить эти данные. Разработанный комплекс программных
средств позволяет оператору быстро и качественно вводить данные таксационных
описаний и сохранять их в формат XML,
позволяющий в дальнейшем записать введенные данные в базу данных.
После добавления введенной информации в базу данных трудоемкость процесса
соотношения атрибутивных данных о выделах лесничеств ГПБЗ «Центральносибирский»
с пространственной информацией о них значительно уменьшится.
Благодаря проделанной работе появилась возможность наполнить
картографический раздел официального сайта ГПБЗ «Центральносибирский» данными
таксационных описаний.
СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. ГОСТ
12.3.002-75 ССБТ Процессы производственные. Общие требования безопасности. -
Введ. впервые; дата введ. 1.07 76
2. ГОСТ
12.2.049-80 ССБТ Оборудование производственное. Общие эргономические
требования. - Введ. впервые; дата введ. 01.01.1982
. ГОСТ
12.2.032-78 ССБТ Рабочее место при выполнении работ сидя.
Общие эргономические требования. - Введ. впервые; дата введ. 01.01.82
. ГОСТ
12.2.061-81 ССБТ Оборудование производственное. Общие требования безопасности к
рабочим местам. - Введ. впервые; дата введ. 01.07.1982
. ГОСТ
12.1.005-88 ССБТ Общие санитарно-гигиенические требования к воздуху рабочей
зоны. - Введ. впервые; дата введ. 01.01.1989
. ГОСТ
12.4.021-75 ССБТ Системы вентиляционные. Общие требования. - Введ. впервые;
дата введ. 01.01.77
. ГОСТ
12.1.003-89 ССБТ Шум. Общие требования безопасности. - Введ. впервые; дата
введ. 01.01.90
. ГОСТ
12.1.019-79 ССБТ Электробезопасность. Общие требования и номенклатура видов
защиты. - Введ. впервые; дата введ. 01.07.1980
. ГОСТ
12.1.030-81 ССБТ Электробезопасность. Защитное заземление, зануление. - Введ.
впервые; дата введ. 1982-07-01
. ГОСТ
12.4.155-85 ССБТ Устройства защитного отключения. Классификация. Общие
технические требования. - Введ. впервые; дата введ. 1986 -01-01
. ГОСТ
12.4.026-01 ССБТ Цвета сигнальные и знаки безопасности. - Введ. впервые; дата
введ. 1.07.91
. ГОСТ
12.1.018-86 ССБТ Пожарная безопасность. Электростатическая искробезопасность.
Общие требования. - Введ. впервые; дата введ. 1.01.95
. ГОСТ
12.1.006-84 ССБТ Электромагнитные поля радиочастот. Допустимые уровни на
рабочих местах и требования к проведению контроля. - Введ. впервые; дата введ. 01.01.1986
. ГОСТ
12.1.002-84 ССБТ Электрические поля промышленной частоты. Допустимые уровни
напряженности и требования к проведению контроля на рабочих местах. - Введ.
впервые; дата введ. 01.01.1986
. ГОСТ
Р 50948-96 Средства отображения информации индивидуального пользования. Общие
эргономические требования. - Введ. впервые; дата введ. 01.07.97
. ГОСТ
P 50923-96 Рабочее место оператора. Общие эргономические требования и
требования к производственной среде. - Введ. впервые; дата введ. 01.07.1997
. ГОСТ
12.1.033-83 ССБТ Пожарная безопасность. Термины и определения. - Введ. впервые;
дата введ. 01.07.1987
. ГОСТ
12.1.004-98 ССБТ Пожарная безопасность. Общие требования. - Введ. впервые; дата
введ. 1.07.98
. ГОСТ
12.1.007-76 ССБТ Вредные вещества. Классификация. Общие требования
безопасности. - Введ. впервые; дата введ. 1.01.77
. СН
181-70 Указания по проектированию цветовой отделки интерьеров производственных
зданий и сооружений промышленных предприятий
. СН
512-78 Инструкция по проектированию зданий и помещений для ЭВМ
. СНиП
23-05-03 Естественное и искусственное освещение
. СНиП
41-01-03 Отопление, вентиляция и кондиционирование
. СНиП
2.2.4/2.1.8.562-96 Шум на рабочих местах, в помещениях жилых и общественных
зданий и на территории жилой застройки
. СНиП
21-01-02 Пожарная безопасность зданий и сооружений
. СНиП
2.09.04-02 Административные и бытовые здания
. СНиП
31-03-01 Производственные здания
. СанПиН
2.2.2/2.4.1340-03 Гигиенические требования к персональным
электронно-вычислительным машинам и организации работ
. СанПиН
2.2.4.548-96 Гигиенические требования к микроклимату производственных помещений
. ПУЭ-01
Правила устройства электроустановок
. НПБ
105-03 Определение категорий помещений и зданий по категории взрывопожарной и
пожарной опасности
. НПБ
88-01 Установки пожаротушения и сигнализации
. Поисковая
система Google [Электронный ресурс] / Поисковая система -http://www.google.ru
34. MSDN [Электронный
ресурс] / Руководство разработчика - <http://msdn.microsoft.com>
. Школа XML
[Электронный ресурс] / Примеры работы с XML - <http://xml.nsu.ru>
. Официальный сайт
ГПБЗ «Центральносибирский» [Электронный ресурс] / http://www.centralsib.ru
ПРИЛОЖЕНИЕ А
Код программы
using
System;System.Collections.Generic;System.Linq;System.Windows.Forms;Test_prj
{class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]void Main()
{.EnableVisualStyles();.SetCompatibleTextRenderingDefault(false);.Run(new
Form1());
}
}
}System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.Xml.Serialization;System.IO;Test_prj
{partial class Form1 : Form
{
//public AreaControls a = new AreaControls();section;Form1()
{();
//Section section = new Section();
//AreaControls areaControls = AreaControls.onInitialize(this.panel1,
area);= true;
}override void OnKeyPress(KeyPressEventArgs e)
{(e.KeyChar == 13)
{(ActiveControl, true, true, true, true);.Handled = true;
}.OnKeyPress(e);
}AreaControls areaControls;lastArea;void button1_Click(object sender,
EventArgs e)
{(var dlg = new newSection())
{(dlg.ShowDialog() == DialogResult.OK)
{= new Section();.areas = new List<Area>();.number =
dlg.number;.Text = "Редактируется квартал №" +
section.number.ToString();= new Area();= AreaControls.onInitialize(this.panel1,
10, lastArea,section.areas.Count+1);.evt += new
EventHandler(areaControls_evt);.numberTextBox.Focus();
}
}
}areaControls_evt(object sender, EventArgs e)
{.Show("Создаем новый выдел");.areas.Add(lastArea);= new
Area();.panel1.Controls.Clear();= AreaControls.onInitialize(this.panel1, 10,
lastArea,section.areas.Count+1);.evt += new
EventHandler(areaControls_evt);.numberTextBox.Focus();xml = new
XmlSerializer(typeof(Section));(var file =
File.OpenWrite(section.number+"_section.xml"))
{.Serialize(file, section);
}
}
formulavalid(Circle obj)
{sum=0;(var i in obj.elments)
{= i.quantity + sum;
}(sum == 10);
}loadSection(XmlSerializer xml, string fileName)
{(File.Exists(fileName))
{(var file = File.OpenText(fileName))
{(Section)xml.Deserialize(file);
}
}null;
}void button2_Click_1(object sender, EventArgs e)
{(var dlg = new OpenFileDialog())
{(dlg.ShowDialog() == DialogResult.OK)
{xml = new XmlSerializer(typeof(Section));= loadSection(xml,
dlg.FileName);
}
}.Text = "Редактируется квартал №" + section.number.ToString();=
new Area();= AreaControls.onInitialize(this.panel1, 10, lastArea,
section.areas.Count + 1);.evt += new
EventHandler(areaControls_evt);.numberTextBox.Focus();
}
}
}
using System;System.Collections.Generic;System.Linq;System.Text;Test_prj
{Parser
{static TreeType gettreetype(string s)
{(s)
{"е":return TreeType.Spruce;"с":return
TreeType.Pine;"ос": return TreeType.Aspen;"п": return
TreeType.Fir;"л": return TreeType.Hackmatack;"б": return
TreeType.Birch;"к": return TreeType.Cedar;
}new Exception("Некорректный(е) типы деревьев");
}static BaseAreaElement parse(string toparce)
{(string.IsNullOrEmpty(toparce))new Exception("Пустая
строка");= toparce.ToLower();current = toparce[0];(toparce ==
"б" || toparce == "болото")
{new NotImplementedException();
}(toparce == "д" || toparce == "дорога")
{new Road();
}(toparce == "р" || toparce == "река")
{new River();
}(toparce == "п" || toparce == "прочие" || toparce ==
"прочие трассы")
{new OtherRoutes();
}toreturn = new Circle();currentindex = 0;(currentindex != toparce.Length
&& !toparce[currentindex].Equals('+'))
{digit = string.Empty;temp = new ForestElement();(currentindex <
toparce.Length && char.IsDigit(toparce[currentindex]))
{= digit + toparce[currentindex];++;
}.quantity = int.Parse(digit);treetype = string.Empty;(currentindex <
toparce.Length && char.IsLetter(toparce[currentindex]))
{= treetype + toparce[currentindex];++;
}.type = gettreetype(treetype);.elments.Add(temp);
}(currentindex != toparce.Length &&
toparce[currentindex].Equals('+'))
{++;temp = new ForestElement();.quantity = 0;treetype =
string.Empty;(currentindex < toparce.Length &&
char.IsLetter(toparce[currentindex]))
{= treetype + toparce[currentindex];++;
}.type = gettreetype(treetype);.elments.Add(temp);
}(!formulavalid(toreturn))new Exception("Некорректная
формула");toreturn;
}bool formulavalid(Circle obj)
{sum = 0;(var i in obj.elments)
{= i.quantity + sum;
}(sum == 10);
}bool formulavalidu(UnderGrowth obj)
{sum = 0;(var i in obj.elements)
{= i.quantity + sum;
}(sum == 10);
}static UnderGrowth parseUndergrowth(string toparce)
{(string.IsNullOrEmpty(toparce))new Exception("Пустая
строка");= toparce.ToLower();current = toparce[0];toreturn = new
UnderGrowth();currentindex = 0;(currentindex != toparce.Length &&
!toparce[currentindex].Equals('+'))
{digit = string.Empty;temp = new ForestElement();(currentindex <
toparce.Length && char.IsDigit(toparce[currentindex]))
{= digit + toparce[currentindex];++;
}.quantity = int.Parse(digit);treetype = string.Empty;(currentindex <
toparce.Length && char.IsLetter(toparce[currentindex]))
{= treetype + toparce[currentindex];++;
}.type = gettreetype(treetype);.elements.Add(temp);
}(currentindex != toparce.Length)new Exception("Некорректная
формула");(!formulavalidu(toreturn))new Exception("Некорректная
формула");toreturn;
}
}
}System.Text;System.Windows.Forms;Test_prj
{partial class newSection : Form
{newSection()
{();
}int number;void label1_Click(object sender, EventArgs e)
{
}void button2_Click(object sender, EventArgs e)
{
}void button1_Click(object sender, EventArgs e)
{= int.Parse(textBox1.Text);
}
}
}
using
System;System.Collections.Generic;System.Linq;System.Text;System.Windows.Forms;System.ComponentModel;Test_prj
{MyControls
{
}class UnderBrushControls
{Label underbrushLabel = new Label();ComboBox densityComboBox = new
ComboBox();TextBox underbrushTextBox = new TextBox();void ch(AreaControls area)
{hi = 29;(int i = 0; i < area.circleControls.Count; i++)
{(int ii = 0; ii < area.circleControls[i].forestElementControls.Count
- 1; ii++)= hi + 26;
}= hi + 26 * area.formulaControls.Count;.Location = new
System.Drawing.Point(underbrushLabel.Location.X, hi);.Location = new
System.Drawing.Point(densityComboBox.Location.X, hi);.Location = new
System.Drawing.Point(underbrushTextBox.Location.X, hi);
}static UnderBrushControls init(Panel pan,List<CircleControls> cir)
{underbrushControls = new UnderBrushControls();hi = 29;= hi +
cir.Last().forestElementControls.Count * 26;.underbrushTextBox.Size = new
System.Drawing.Size(130, 20);.underbrushTextBox.Location = new
System.Drawing.Point(65, hi);.underbrushTextBox.TabIndex =
9005;.underbrushLabel.Size = new
System.Drawing.Size(56,20);.underbrushLabel.Location = new
System.Drawing.Point(3, hi);.underbrushLabel.Text = "подлесок";.densityComboBox.Size
= new System.Drawing.Size(130, 20);.densityComboBox.Location = new
System.Drawing.Point(201, hi);.densityComboBox.Items.Add(new
DensityWrapper(Density.Rare));.densityComboBox.Items.Add(new
DensityWrapper(Density.AverageDensity));.densityComboBox.Items.Add(new
DensityWrapper(Density.Thick));.densityComboBox.SelectedItem =
underbrushControls.densityComboBox.Items[0];.densityComboBox.TabIndex =
9006;.Controls.Add(underbrushControls.underbrushTextBox);.Controls.Add(underbrushControls.densityComboBox);.Controls.Add(underbrushControls.underbrushLabel);underbrushControls;
}
}class UndergrowthControls
{area;undergrowth;UndergrowthControls(Area area)
{.Validating += new CancelEventHandler(formulaTextBox_Validating);.Validated
+= new EventHandler(formulaTextBox_Validated);.area = area;
}formulaTextBox_Validated(object sender, EventArgs e)
{.undergrowth = undergrowth;
}formulaTextBox_Validating(object sender, CancelEventArgs e)
{
{= Parser.parseUndergrowth(formulaTextBox.Text);
}(Exception ex)
{.Cancel = true;.Show(ex.Message);
}
}Label undergrowthLabel = new Label();Label ageLabel = new Label();Label
heightLabel = new Label();Label quantityLabel = new Label();TextBox
formulaTextBox = new TextBox();TextBox ageTextBox = new TextBox();TextBox
heightTextBox = new TextBox();TextBox quantityTextBox = new TextBox();void
ch(AreaControls area)
{hi = 3;(int i = 0; i < area.circleControls.Count; i++)
{(int ii = 0; ii < area.circleControls[i].forestElementControls.Count
- 1; ii++)= hi + 26;
}= hi + 26 * area.formulaControls.Count;.Location = new
System.Drawing.Point(undergrowthLabel.Location.X, hi);.Location = new
System.Drawing.Point(ageLabel.Location.X, hi);.Location = new
System.Drawing.Point(heightLabel.Location.X, hi);.Location = new
System.Drawing.Point(quantityLabel.Location.X, hi);.Location = new
System.Drawing.Point(formulaTextBox.Location.X, hi);.Location = new
System.Drawing.Point(ageTextBox.Location.X, hi);.Location = new
System.Drawing.Point(heightTextBox.Location.X, hi);.Location = new
System.Drawing.Point(quantityTextBox.Location.X, hi);
}static UndergrowthControls init(Panel pan,AreaControls area)
{undergrowthControls = new UndergrowthControls(area.currentArea);hi = 3;=
hi + area.circleControls.Last().forestElementControls.Count *
26;.undergrowthLabel.Size = new System.Drawing.Size(56,
20);.undergrowthLabel.Location = new System.Drawing.Point(3,
hi);.formulaTextBox.Size = new System.Drawing.Size(130,
20);.formulaTextBox.Location = new System.Drawing.Point(65, hi);.formulaTextBox.TabIndex
= 9000;.ageTextBox.Size = new System.Drawing.Size(20, 20);.ageTextBox.Location
= new System.Drawing.Point(201, hi);.ageTextBox.TabIndex = 9001;.ageLabel.Size
= new System.Drawing.Size(80, 20);.ageLabel.Location = new System.Drawing.Point(227,
hi);.heightLabel.Size = new System.Drawing.Size(20, 20);.heightLabel.Location =
new System.Drawing.Point(339, hi);.heightTextBox.Size = new
System.Drawing.Size(20, 20);.heightTextBox.Location = new
System.Drawing.Point(313, hi);.heightTextBox.TabIndex =
9002;.quantityTextBox.Size = new System.Drawing.Size(20,
20);.quantityTextBox.Location = new System.Drawing.Point(365,
hi);.quantityTextBox.TabIndex = 9003;.quantityLabel.Size = new
System.Drawing.Size(30, 20);.quantityLabel.Location = new System.Drawing.Point(391,
hi);.undergrowthLabel.Text = "подрост";.ageLabel.Text = "лет,
высота";.heightLabel.Text = "м.";.quantityLabel.Text =
"т.шт/га";.Controls.Add(undergrowthControls.undergrowthLabel);.Controls.Add(undergrowthControls.formulaTextBox);.Controls.Add(undergrowthControls.ageTextBox);.Controls.Add(undergrowthControls.ageLabel);.Controls.Add(undergrowthControls.heightLabel);.Controls.Add(undergrowthControls.heightTextBox);.Controls.Add(undergrowthControls.quantityTextBox);.Controls.Add(undergrowthControls.quantityLabel);undergrowthControls;
}
}class RoadControls
{road;RoadControls()
{.Validated += new EventHandler(widthTextBox_Validated);
}widthTextBox_Validated(object sender, EventArgs e)
{.width = int.Parse(widthTextBox.Text);
}TextBox widthTextBox = new TextBox();Label widthLabel = new
Label();TextBox lengthTextBox = new TextBox();Label lengthLabel = new
Label();Label km = new Label();ComboBox conditionComboBox = new
ComboBox();static RoadControls init(Panel pan, int startIndex, Road road)
{roadControls = new RoadControls();.road = road;.conditionComboBox.Size =
new System.Drawing.Size(130, 20);.conditionComboBox.Location = new
System.Drawing.Point(65,29);.widthLabel.Size = new System.Drawing.Size(60,
20);.widthLabel.Text = "Ширнина:";.lengthLabel.Text = "м,
протяженностью:";.lengthLabel.Size = new System.Drawing.Size(110,
20);.widthLabel.Location = new System.Drawing.Point(201, 29);.widthTextBox.Size
= new System.Drawing.Size(20, 20);.widthTextBox.Location = new
System.Drawing.Point(266, 29);.lengthLabel.Location = new
System.Drawing.Point(292, 29);.lengthTextBox.Size = new System.Drawing.Size(20,
20);.lengthTextBox.Location = new System.Drawing.Point(408, 29);.km.Size = new
System.Drawing.Size(30, 20);.km.Location = new System.Drawing.Point(434, 29);.km.Text
= "км.";.conditionComboBox.Items.Add(new
ElementConditionWrapper(ElementCondition.Satisfied));.conditionComboBox.Items.Add(new
ElementConditionWrapper(ElementCondition.Unsatisfied));.conditionComboBox.SelectedItem
= roadControls.conditionComboBox.Items[0];.conditionComboBox.TabIndex =
startIndex + 5;.widthTextBox.TabIndex = startIndex + 6;.lengthTextBox.TabIndex
= startIndex +
7;.Controls.Add(roadControls.conditionComboBox);.Controls.Add(roadControls.km);.Controls.Add(roadControls.widthTextBox);.Controls.Add(roadControls.lengthTextBox);.Controls.Add(roadControls.widthLabel);.Controls.Add(roadControls.lengthLabel);roadControls;
}
}class RiverControls
{river;RiverControls()
{.Validated += new EventHandler(widthTextBox_Validated);
}widthTextBox_Validated(object sender, EventArgs e)
{.width = int.Parse(widthTextBox.Text);
}TextBox widthTextBox = new TextBox();Label widthLabel = new
Label();TextBox lengthTextBox = new TextBox();Label lengthLabel = new
Label();Label km = new Label();ComboBox conditionComboBox = new
ComboBox();static RiverControls init(Panel pan, int startIndex, River river)
{riverControls = new RiverControls();.river =
river;.conditionComboBox.Size = new System.Drawing.Size(130,
20);.conditionComboBox.Location = new System.Drawing.Point(65,29);.widthLabel.Size
= new System.Drawing.Size(60, 20);.widthLabel.Text =
"Ширнина:";.lengthLabel.Text = "м,
протяженностью:";.lengthLabel.Size = new System.Drawing.Size(110,
20);.widthLabel.Location = new System.Drawing.Point(201, 29);.widthTextBox.Size
= new System.Drawing.Size(20, 20);.widthTextBox.Location = new
System.Drawing.Point(266, 29);.lengthLabel.Location = new
System.Drawing.Point(292, 29);.lengthTextBox.Size = new System.Drawing.Size(20,
20);.lengthTextBox.Location = new System.Drawing.Point(408, 29);.km.Size = new
System.Drawing.Size(30, 20);.km.Location = new System.Drawing.Point(434,
29);.km.Text = "км.";.conditionComboBox.Items.Add(new
ElementConditionWrapper(ElementCondition.Satisfied));.conditionComboBox.Items.Add(new
ElementConditionWrapper(ElementCondition.Unsatisfied));.conditionComboBox.SelectedItem
= riverControls.conditionComboBox.Items[0];.conditionComboBox.TabIndex =
startIndex + 5;.widthTextBox.TabIndex = startIndex + 6;.lengthTextBox.TabIndex
= startIndex + 7;.Controls.Add(riverControls.conditionComboBox);.Controls.Add(riverControls.km);.Controls.Add(riverControls.widthTextBox);.Controls.Add(riverControls.lengthTextBox);.Controls.Add(riverControls.widthLabel);.Controls.Add(riverControls.lengthLabel);riverControls;
}
}class OtherRoutesControls
{otherRoutes;OtherRoutesControls()
{.Validated += new EventHandler(widthTextBox_Validated);
}widthTextBox_Validated(object sender, EventArgs e)
{.width = int.Parse(widthTextBox.Text);
}TextBox widthTextBox = new TextBox();Label widthLabel = new
Label();TextBox lengthTextBox = new TextBox();Label lengthLabel = new
Label();Label km = new Label();ComboBox conditionComboBox = new
ComboBox();static OtherRoutesControls init(Panel pan, int startIndex,
OtherRoutes otherRoutes)
{otherRoutesControl = new OtherRoutesControls();.otherRoutes =
otherRoutes;.conditionComboBox.Size = new System.Drawing.Size(130,
20);.conditionComboBox.Location = new System.Drawing.Point(65,
29);.widthLabel.Size = new System.Drawing.Size(60, 20);.widthLabel.Text =
"Ширнина:";.lengthLabel.Text = "м,
протяженностью:";.lengthLabel.Size = new System.Drawing.Size(110,
20);.widthLabel.Location = new System.Drawing.Point(201, 29);.widthTextBox.Size
= new System.Drawing.Size(20, 20);.widthTextBox.Location = new System.Drawing.Point(266,
29);.lengthLabel.Location = new System.Drawing.Point(292,
29);.lengthTextBox.Size = new System.Drawing.Size(20,
20);.lengthTextBox.Location = new System.Drawing.Point(408, 29);.km.Size = new
System.Drawing.Size(30, 20);.km.Location = new System.Drawing.Point(434,
29);.km.Text = "км.";.conditionComboBox.Items.Add(new
ElementConditionWrapper(ElementCondition.Satisfied));.conditionComboBox.Items.Add(new
ElementConditionWrapper(ElementCondition.Unsatisfied));.conditionComboBox.SelectedItem
= otherRoutesControl.conditionComboBox.Items[0];.conditionComboBox.TabIndex =
startIndex + 5;.widthTextBox.TabIndex = startIndex + 6;.lengthTextBox.TabIndex
= startIndex +
7;.Controls.Add(otherRoutesControl.conditionComboBox);.Controls.Add(otherRoutesControl.km);.Controls.Add(otherRoutesControl.widthTextBox);.Controls.Add(otherRoutesControl.lengthTextBox);.Controls.Add(otherRoutesControl.widthLabel);.Controls.Add(otherRoutesControl.lengthLabel);otherRoutesControl;
}
}class AreaForestControls
{TextBox ageClassTextBox = new TextBox();TextBox ageGroupTextBox = new
TextBox();TextBox bonitetTextBox = new TextBox();TextBox treetypeTextBox = new
TextBox();TextBox tumTextBox = new TextBox();ComboBox slopeDirectionComboBox =
new ComboBox();TextBox slopeAngleTextBox = new TextBox();Label angleLabel = new
Label();Label slopeLabel = new Label();void
changeSlopeGroupLocation(AreaControls area)
{hi = 51;(int i = 0; i < area.circleControls.Count; i++)
{(int ii = 0; ii < area.circleControls[i].forestElementControls.Count
- 1; ii++)= hi + 26;
}= hi + 26 * area.formulaControls.Count;.Location = new
System.Drawing.Point(slopeLabel.Location.X, hi);.Location = new
System.Drawing.Point(angleLabel.Location.X, hi);.Location = new
System.Drawing.Point(slopeAngleTextBox.Location.X, hi);.Location = new
System.Drawing.Point(slopeDirectionComboBox.Location.X, hi);
}static AreaForestControls initialize(Panel pan, int startIndex)
{additionControls = new AreaForestControls();.ageClassTextBox.Size = new
System.Drawing.Size(20, 20);.ageClassTextBox.Location = new
System.Drawing.Point(367, 3);.ageGroupTextBox.Size = new
System.Drawing.Size(20, 20);.ageGroupTextBox.Location = new
System.Drawing.Point(393, 3);.bonitetTextBox.Size = new System.Drawing.Size(20,
20);.bonitetTextBox.Location = new System.Drawing.Point(419,
3);.treetypeTextBox.Size = new System.Drawing.Size(30,
20);.treetypeTextBox.Location = new System.Drawing.Point(445,
3);.ageClassTextBox.TabIndex = startIndex + 10;.ageGroupTextBox.TabIndex =
startIndex + 11;.bonitetTextBox.TabIndex = startIndex +
12;.treetypeTextBox.TabIndex = startIndex + 13;.tumTextBox.TabIndex =
startIndex + 14;.slopeDirectionComboBox.TabIndex =
9900;.slopeAngleTextBox.TabIndex = 9901;.tumTextBox.Size = new
System.Drawing.Size(30, 20);.tumTextBox.Location = new System.Drawing.Point(481,
3);.slopeLabel.Size = new System.Drawing.Size(56, 20);.slopeLabel.Location =
new System.Drawing.Point(3, 29);.slopeLabel.TextAlign =
System.Drawing.ContentAlignment.MiddleCenter;.slopeLabel.Text =
"Склон";.slopeDirectionComboBox.DropDownStyle =
ComboBoxStyle.DropDownList;.slopeDirectionComboBox.Size = new
System.Drawing.Size(130, 20);.slopeDirectionComboBox.Location = new
System.Drawing.Point(65, 29);.slopeDirectionComboBox.Items.Add(new
SlopeDirectionWrapper(SlopeDirection.North));.slopeDirectionComboBox.Items.Add(new
SlopeDirectionWrapper(SlopeDirection.South));.slopeDirectionComboBox.Items.Add(new
SlopeDirectionWrapper(SlopeDirection.West));.slopeDirectionComboBox.Items.Add(new
SlopeDirectionWrapper(SlopeDirection.East));.slopeDirectionComboBox.Items.Add(new
SlopeDirectionWrapper(SlopeDirection.NorthWest));.slopeDirectionComboBox.Items.Add(new
SlopeDirectionWrapper(SlopeDirection.NorthEast));.slopeDirectionComboBox.Items.Add(new
SlopeDirectionWrapper(SlopeDirection.SouthWest));.slopeDirectionComboBox.Items.Add(new
SlopeDirectionWrapper(SlopeDirection.SouthEast));.slopeDirectionComboBox.SelectedItem
= additionControls.slopeDirectionComboBox.Items[0];.slopeAngleTextBox.Size =
new System.Drawing.Size(20, 20);.slopeAngleTextBox.Location = new
System.Drawing.Point(201,29);.angleLabel.Size = new
System.Drawing.Size(60,20);.angleLabel.Location = new System.Drawing.Point(227,
29);.angleLabel.Text =
"градусов";.Controls.Add(additionControls.ageClassTextBox);.Controls.Add(additionControls.ageGroupTextBox);.Controls.Add(additionControls.bonitetTextBox);.Controls.Add(additionControls.treetypeTextBox);.Controls.Add(additionControls.angleLabel);.Controls.Add(additionControls.slopeDirectionComboBox);.Controls.Add(additionControls.slopeLabel);.Controls.Add(additionControls.tumTextBox);.Controls.Add(additionControls.angleLabel);.Controls.Add(additionControls.slopeAngleTextBox);additionControls;
}
}
}
using System;System.Linq;System.Text;System.Collections.Generic;Test_prj
{enum TreeType
{,,,,,,
}enum ElementCondition
{,
}class ElementConditionWrapper
{ElementCondition condition;string
text;ElementConditionWrapper(ElementCondition cond)
{= cond;= getDirectionString(cond);
}override string ToString()
{text;
}static String getDirectionString(ElementCondition cond)
{(cond)
{ElementCondition.Satisfied: return
"Удовлетровит.";ElementCondition.Unsatisfied: return
"Неудовлетворит.";
}new Exception("Отсутствует состояни элемента");
}
}class BaseAreaElement { }class Road : BaseAreaElement
{float width;float length;string condition;
}class River : BaseAreaElement
{float length;float width;string condition;
}class OtherRoutes : BaseAreaElement
{float length;float width;string condition;
}enum Density
{,,
}class DensityWrapper
{Density condition;string text;DensityWrapper(Density cond)
{= cond;= getDirectionString(cond);
}override string ToString()
{text;
}static String getDirectionString(Density cond)
{(cond)
{Density.Rare: return "Редкий";Density.AverageDensity: return
"Ср. густоты";Density.Thick: return "Густой";
}new Exception("Отсутствует состояни элемента");
}
}enum SlopeDirection
{,,,,,,,
}class SlopeDirectionWrapper
{SlopeDirection direction;string
text;SlopeDirectionWrapper(SlopeDirection dir)
{= dir;= getDirectionString(dir);
}override string ToString()
{text;
}static String getDirectionString(SlopeDirection sl)
{(sl)
{SlopeDirection.North: return "Север";SlopeDirection.South:
return "Юг";SlopeDirection.West: return
"Запад";SlopeDirection.East: return
"Восток";SlopeDirection.NorthWest: return "Северо-запад";SlopeDirection.NorthEast:
return "Северо-восток";SlopeDirection.SouthWest: return
"Юго-запад";SlopeDirection.SouthEast: return "Юго-восток";
}new Exception("Отсутствует направление склона");
}
}class UnderbrushElement
{String underbrushType;
}class Underbrush
{List<UnderbrushElement> underbrushTypes = new
List<UnderbrushElement>();Density density;
}class ForestElement
{TreeType type;int age;int height;int diameter;int quantity;static String
getTreeTypeLetter(TreeType type)
{(type)
{TreeType.Pine: return "С";TreeType.Spruce: return
"Е";TreeType.Aspen: return "Ос";TreeType.Birch: return
"Б";TreeType.Cedar: return "К";TreeType.Hackmatack: return
"Л";TreeType.Fir: return "П";
}new Exception("Отсутствует тип дерева");
}
}class UnderGrowth
{List<ForestElement> elements = new List<ForestElement>();int
age;int height;float quantity;
}class Circle : BaseAreaElement
{int number;List<ForestElement> elments = new
List<ForestElement>();int age;
{List<Circle> circles;Road road;OtherRoutes otherRoutes;River
river;Underbrush underbrush;UnderGrowth undergrowth;int number;int suare;
}class Section
{List<Area> areas;int number;
}
}System;System.Collections.Generic;System.Linq;System.Text;System.Windows.Forms;System.ComponentModel;Test_prj
{class FormulaControls
{area;FormulaControls(AreaControls area)
{.area = area;.Validating += new
CancelEventHandler(formulaTextBox_Validating);.Validated += new
EventHandler(formulaTextBox_Validated);
}parsedElement;formulaTextBox_Validating(object sender, CancelEventArgs e)
{
{= Parser.parse(formulaTextBox.Text);
}(Exception ex)
{.Cancel = true;.Show(ex.Message);
}
}formulaTextBox_Validated(object sender, EventArgs e)
{circle = parsedElement as Circle;(circle != null)
{.FormulaParsed(circle);
}road = parsedElement as Road;(road != null)
{.FormulaParsed(road);.Text = "дорога";
}river = parsedElement as River;(river != null)
{.FormulaParsed(river);.Text = "река";
}otherRoutes = parsedElement as OtherRoutes;(otherRoutes != null)
{.FormulaParsed(otherRoutes);.Text = "прочие трассы";
}.Enabled = false;
}TextBox formulaTextBox = new TextBox();static FormulaControls
initialize(Panel pan, AreaControls area)
{formula = new FormulaControls(area);hi = 3;(int i = 0; i <
area.circleControls.Count; i++)
{= hi + 26 * area.circleControls[i].forestElementControls.Count;
}.formulaTextBox.Size = new System.Drawing.Size(130,
20);.formulaTextBox.Location = new System.Drawing.Point(65,
hi);.Controls.Add(formula.formulaTextBox);formula;
}
}
}System;System.Collections.Generic;System.Linq;System.Text;System.Windows.Forms;Test_prj
{class ForestElementControls
{currentForest;ForestElementControls(ForestElement element)
{= element;
}elementTextBox_Validating(object sender,
System.ComponentModel.CancelEventArgs e)
{
{.type = Parser.gettreetype(elementTextBox.Text);
}(Exception ex) { MessageBox.Show(ex.Message); }
}event EventHandler NeededNewArea;void klTovTextBox_KeyUp(object sender,
KeyEventArgs e)
{(e.Control && e.KeyCode == Keys.Enter)
{(NeededNewArea != null)
{(this, EventArgs.Empty);
}.FindForm().SelectNextControl(klTovTextBox, true, true, true, true);
}
}TextBox elementTextBox;TextBox ageTextBox;TextBox heightTextBox;TextBox
diameterTextBox;TextBox zapSostTextBox;TextBox klTovTextBox;void Init(Control
pan, int hi, int startIndex, int forestIndex)
{= new TextBox();= new TextBox();= new TextBox();= new TextBox();= new
TextBox();= new TextBox();.Size = new System.Drawing.Size(20, 20);.Location =
new System.Drawing.Point(253, hi);.Text =
ForestElement.getTreeTypeLetter(currentForest.type);.Enabled = false;.Size =
new System.Drawing.Size(30, 20);.Location = new System.Drawing.Point(279,
hi);.Size = new System.Drawing.Size(20, 20);.Location = new
System.Drawing.Point(315, hi);.Size = new System.Drawing.Size(20, 20);.Location
= new System.Drawing.Point(341, hi);.Size = new System.Drawing.Size(30,
20);.Location = new System.Drawing.Point(605, hi);.Size = new
System.Drawing.Size(20, 20);.Location = new System.Drawing.Point(641, hi);start
= startIndex + forestIndex * 20;.TabIndex = start + 6;.TabIndex = start +
7;.TabIndex = start + 8;.TabIndex = start + 9;.TabIndex = start + 18;.TabIndex
= start + 19;.KeyUp += new KeyEventHandler(klTovTextBox_KeyUp);.Validating +=
new
System.ComponentModel.CancelEventHandler(elementTextBox_Validating);.Controls.Add(elementTextBox);.Controls.Add(ageTextBox);.Controls.Add(heightTextBox);.Controls.Add(diameterTextBox);.Controls.Add(zapSostTextBox);.Controls.Add(klTovTextBox);
}
}
}System;System.Collections.Generic;System.Linq;System.Text;System.Windows.Forms;Test_prj
{class CircleControls
{CircleControls()
{.Validated += new EventHandler(numberTextBox_Validated);.Validating +=
new System.ComponentModel.CancelEventHandler(numberTextBox_Validating);
}numberTextBox_Validating(object sender,
System.ComponentModel.CancelEventArgs e)
{i;.Cancel = !int.TryParse(numberTextBox.Text,out i);
}numberTextBox_Validated(object sender, EventArgs e)
{.number = int.Parse(numberTextBox.Text);
}circle;TextBox numberTextBox = new TextBox();TextBox circleHeightTextBox
= new TextBox();TextBox polnotaTextBox = new TextBox();TextBox zapNaGaTextBox =
new TextBox();TextBox zapNaAreaTextBox = new
TextBox();List<ForestElementControls> forestElementControls = new
List<ForestElementControls>();void initialize(Panel pan, Circle currentCircle,
int startIndex, int top)
{= currentCircle;hi = top;.Size = new System.Drawing.Size(20,
20);.Location = new System.Drawing.Point(201, hi);.Size = new
System.Drawing.Size(20, 20);.Location = new System.Drawing.Point(227, hi);.Size
= new System.Drawing.Size(20, 20);.Location = new System.Drawing.Point(517,
hi);.Size = new System.Drawing.Size(20, 20);.Location = new
System.Drawing.Point(543, hi);.Size = new System.Drawing.Size(30, 20);.Location
= new System.Drawing.Point(569, hi);start = startIndex;.TabIndex = start +
4;.TabIndex = start + 5;.TabIndex = start + 15;.TabIndex = start + 16;.TabIndex
= start +
17;.Controls.Add(numberTextBox);.Controls.Add(circleHeightTextBox);.Controls.Add(polnotaTextBox);.Controls.Add(zapNaGaTextBox);.Controls.Add(zapNaAreaTextBox);forestIndex
= 0;(var el in currentCircle.elments)
{forestControl = new ForestElementControls(el);.Init(pan, hi, start,
forestIndex);.Add(forestControl);.NeededNewArea += new
EventHandler(forestControl_NeededNewArea);++;= hi + 26;
}
}event EventHandler NeededNewArea;forestControl_NeededNewArea(object
sender, EventArgs e)
{(ReferenceEquals(forestElementControls.Last(), sender))
{(NeededNewArea != null)
{(this, EventArgs.Empty);
}
}
}
}
}System;System.Collections.Generic;System.Linq;System.Text;System.Windows.Forms;System.ComponentModel;System.Xml.Serialization;System.IO;Test_prj
{class AreaControls
{areaIndexStart;AreaControls(int startIndex)
{= startIndex;.Validating += new
CancelEventHandler(numberTextBox_Validating);.Validated += new
EventHandler(numberTextBox_Validated);.Validating += new
CancelEventHandler(squareTextBox_Validating);.Validated += new
EventHandler(noteTextBox_Validated);
}event EventHandler evt;noteTextBox_Validated(object sender, EventArgs e)
{(evt != null)
{(this, EventArgs.Empty);
}
}squareTextBox_Validating(object sender, CancelEventArgs e)
{f;.Cancel = !float.TryParse(squareTextBox.Text,out f);
}numberTextBox_Validated(object sender, EventArgs e)
{.currentArea.number = int.Parse(numberTextBox.Text);
}void FormulaParsed(Road road)
{.init(getPanel(), areaIndexStart, road);.road =
road;(circleControls,29);
}void FormulaParsed(River river)
{.init(getPanel(), areaIndexStart, river);.river =
river;(circleControls,29);
}void FormulaParsed(OtherRoutes otherRoutes)
{.init(getPanel(), areaIndexStart, otherRoutes);.otherRoutes =
otherRoutes;(circleControls,29);
}void FormulaParsed(Circle circle)
{.circles.Add(circle);start = areaIndexStart;(var i in circleControls)
{+= i.forestElementControls.Count * 20;
}hi = 3;(circleControls.Count != 0)(int i = 0; i <
circleControls.Count; i++)
{= hi + 26 * circleControls[i].forestElementControls.Count;
}circleControl = new CircleControls();.initialize(getPanel(), circle,
start, hi);.NeededNewArea += new EventHandler(circleControls_NeededNewArea);.Add(circleControl);(undergrowthControls
!= null).ch(this);(underbrushControls != null).ch(this);.circles.Last().number
= currentArea.circles.Count();.circleControls.Last().numberTextBox.Text =
currentArea.circles.Last().number.ToString();.circleControls.Last().numberTextBox.Enabled
= false;(additionAreaControls == null)
{= AreaForestControls.initialize(getPanel(), start);
}.changeSlopeGroupLocation(this);(circleControls,77);(undergrowthControls
== null)= UndergrowthControls.init(getPanel(),this);(underbrushControls ==
null)= UnderBrushControls.init(getPanel(), this.circleControls);
}circleControls_NeededNewArea(object sender, EventArgs e)
{(ReferenceEquals(sender, circleControls.Last()))
{start = areaIndexStart;(var i in circleControls)
{+= i.forestElementControls.Count * 20;
}newFormulaControls = FormulaControls.initialize(getPanel(),
this);.formulaTextBox.TabIndex = start +
2;.Add(newFormulaControls);.changeSlopeGroupLocation(this);(circleControls,77);.ch(this);.ch(this);
}
}numberTextBox_Validating(object sender, CancelEventArgs e)
{.Cancel = true;value;(uint.TryParse(numberTextBox.Text, out value))
{.Cancel = false;
}
}TextBox numberTextBox = new TextBox();TextBox squareTextBox = new
TextBox();Panel panel = new Panel();TextBox noteTextBox = new TextBox();Label
noteLabel = new Label();AreaForestControls
additionAreaControls;UndergrowthControls undergrowthControls;UnderBrushControls
underbrushControls;List<CircleControls> circleControls = new
List<CircleControls>();List<FormulaControls> formulaControls = new
List<FormulaControls>();Area currentArea;void
changeNoteLocation(List<CircleControls> circleControls, int hi)
{(int i = 0; i < circleControls.Count; i++)
{(int ii = 0; ii < circleControls[i].forestElementControls.Count - 1;
ii++)= hi + 26;
}= hi + 26 * formulaControls.Count;.Location = new
System.Drawing.Point(noteLabel.Location.X, hi);.Location = new
System.Drawing.Point(noteTextBox.Location.X, hi);
}Panel getPanel()
{this.panel;
}static AreaControls onInitialize(Panel pan, int startIndex, Area
currentArea, int areanumber)
{area = new AreaControls(startIndex);.currentArea = currentArea;.circles
= new List<Circle>();.panel = pan;.numberTextBox.Size = new
System.Drawing.Size(20, 20);.numberTextBox.Location = new
System.Drawing.Point(3, 3);.numberTextBox.Text =
areanumber.ToString();.squareTextBox.Size = new System.Drawing.Size(30,
20);.squareTextBox.Location = new System.Drawing.Point(29, 3);.noteLabel.Size =
new System.Drawing.Size(192, 20);.noteLabel.Location = new
System.Drawing.Point(3,29);.noteTextBox.Size = new
System.Drawing.Size(460,20);.noteTextBox.Location = new
System.Drawing.Point(201, 29);.noteTextBox.TabIndex = 12000;.noteLabel.Text =
"Хозяйственные распоряжения";formula =
FormulaControls.initialize(pan,
area);.formulaControls.Add(formula);.numberTextBox.TabIndex =
startIndex;.squareTextBox.TabIndex = startIndex + 1;.formulaTextBox.TabIndex =
startIndex +
2;.Controls.Add(area.numberTextBox);.Controls.Add(area.squareTextBox);.Controls.Add(area.noteLabel);.Controls.Add(area.noteTextBox);area;
}
}
}