Технология ввода данных таксационных описаний для картографического раздела официального сайта ГПБЗ "Центральносибирский"

Выделение сущностей для создания структуры хранения данных. Выбор технологии ввода данных таксационных описаний. Разработка программного обеспечения для ввода данных таксационных описаний и его реализация. Безопасность геоинформационной системы.

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

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

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

Электрическая и магнитная составляющая рассматриваются отдельно ввиду того, что расстояние от ЭЛТ-монитора до оператора меньше 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

3. ГОСТ 12.2.032-78 ССБТ Рабочее место при выполнении работ сидя.
Общие эргономические требования. - Введ. впервые; дата введ. 01.01.82

4. ГОСТ 12.2.061-81 ССБТ Оборудование производственное. Общие требования безопасности к рабочим местам. - Введ. впервые; дата введ. 01.07.1982

5. ГОСТ 12.1.005-88 ССБТ Общие санитарно-гигиенические требования к воздуху рабочей зоны. - Введ. впервые; дата введ. 01.01.1989

6. ГОСТ 12.4.021-75 ССБТ Системы вентиляционные. Общие требования. - Введ. впервые; дата введ. 01.01.77

7. ГОСТ 12.1.003-89 ССБТ Шум. Общие требования безопасности. - Введ. впервые; дата введ. 01.01.90

8. ГОСТ 12.1.019-79 ССБТ Электробезопасность. Общие требования и номенклатура видов защиты. - Введ. впервые; дата введ. 01.07.1980

9. ГОСТ 12.1.030-81 ССБТ Электробезопасность. Защитное заземление, зануление. - Введ. впервые; дата введ. 1982-07-01

10. ГОСТ 12.4.155-85 ССБТ Устройства защитного отключения. Классификация. Общие технические требования. - Введ. впервые; дата введ. 1986 -01-01

11. ГОСТ 12.4.026-01 ССБТ Цвета сигнальные и знаки безопасности. - Введ. впервые; дата введ. 1.07.91

12. ГОСТ 12.1.018-86 ССБТ Пожарная безопасность. Электростатическая искробезопасность. Общие требования. - Введ. впервые; дата введ. 1.01.95

13. ГОСТ 12.1.006-84 ССБТ Электромагнитные поля радиочастот. Допустимые уровни на рабочих местах и требования к проведению контроля. - Введ. впервые; дата введ. 01.01.1986

14. ГОСТ 12.1.002-84 ССБТ Электрические поля промышленной частоты. Допустимые уровни напряженности и требования к проведению контроля на рабочих местах. - Введ. впервые; дата введ. 01.01.1986

15. ГОСТ Р 50948-96 Средства отображения информации индивидуального пользования. Общие эргономические требования. - Введ. впервые; дата введ. 01.07.97

16. ГОСТ P 50923-96 Рабочее место оператора. Общие эргономические требования и требования к производственной среде. - Введ. впервые; дата введ. 01.07.1997

17. ГОСТ 12.1.033-83 ССБТ Пожарная безопасность. Термины и определения. - Введ. впервые; дата введ. 01.07.1987

18. ГОСТ 12.1.004-98 ССБТ Пожарная безопасность. Общие требования. - Введ. впервые; дата введ. 1.07.98

19. ГОСТ 12.1.007-76 ССБТ Вредные вещества. Классификация. Общие требования безопасности. - Введ. впервые; дата введ. 1.01.77

20. СН 181-70 Указания по проектированию цветовой отделки интерьеров производственных зданий и сооружений промышленных предприятий

21. СН 512-78 Инструкция по проектированию зданий и помещений для ЭВМ

22. СНиП 23-05-03 Естественное и искусственное освещение

23. СНиП 41-01-03 Отопление, вентиляция и кондиционирование

24. СНиП 2.2.4/2.1.8.562-96 Шум на рабочих местах, в помещениях жилых и общественных зданий и на территории жилой застройки

25. СНиП 21-01-02 Пожарная безопасность зданий и сооружений

26. СНиП 2.09.04-02 Административные и бытовые здания

27. СНиП 31-03-01 Производственные здания

28. СанПиН 2.2.2/2.4.1340-03 Гигиенические требования к персональным электронно-вычислительным машинам и организации работ

29. СанПиН 2.2.4.548-96 Гигиенические требования к микроклимату производственных помещений

30. ПУЭ-01 Правила устройства электроустановок

31. НПБ 105-03 Определение категорий помещений и зданий по категории взрывопожарной и пожарной опасности

32. НПБ 88-01 Установки пожаротушения и сигнализации

33. Поисковая система Google [Электронный ресурс] / Поисковая система -http://www.google.ru

34. MSDN [Электронный ресурс] / Руководство разработчика - http://msdn.microsoft.com

35. Школа XML [Электронный ресурс] / Примеры работы с XML - http://xml.nsu.ru

36. Официальный сайт ГПБЗ «Центральносибирский» [Электронный ресурс] / http://www.centralsib.ru

ПРИЛОЖЕНИЕ А

Код программы

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace Test_prj

{

static class Program

{

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

}

}

}

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Xml.Serialization;

using System.IO;

namespace Test_prj

{

public partial class Form1 : Form

{

//public AreaControls a = new AreaControls();

Section section;

public Form1()

{

InitializeComponent();

//Section section = new Section();

//AreaControls areaControls = AreaControls.onInitialize(this.panel1, area);

KeyPreview = true;

}

protected override void OnKeyPress(KeyPressEventArgs e)

{

if (e.KeyChar == 13)

{

SelectNextControl(ActiveControl, true, true, true, true);

e.Handled = true;

}

base.OnKeyPress(e);

}

public AreaControls areaControls;

Area lastArea;

private void button1_Click(object sender, EventArgs e)

{

using (var dlg = new newSection())

{

if (dlg.ShowDialog() == DialogResult.OK)

{

section = new Section();

section.areas = new List<Area>();

section.number = dlg.number;

statusLabel.Text = "Редактируется квартал №" + section.number.ToString();

lastArea = new Area();

areaControls = AreaControls.onInitialize(this.panel1, 10, lastArea,section.areas.Count+1);

areaControls.evt += new EventHandler(areaControls_evt);

areaControls.numberTextBox.Focus();

}

}

}

void areaControls_evt(object sender, EventArgs e)

{

MessageBox.Show("Создаем новый выдел");

section.areas.Add(lastArea);

lastArea = new Area();

this.panel1.Controls.Clear();

areaControls = AreaControls.onInitialize(this.panel1, 10, lastArea,section.areas.Count+1);

areaControls.evt += new EventHandler(areaControls_evt);

areaControls.numberTextBox.Focus();

var xml = new XmlSerializer(typeof(Section));

using (var file = File.OpenWrite(section.number+"_section.xml"))

{

xml.Serialize(file, section);

}

}

bool formulavalid(Circle obj)

{

int sum=0;

foreach (var i in obj.elments)

{

sum = i.quantity + sum;

}

return (sum == 10);

}

Section loadSection(XmlSerializer xml, string fileName)

{

if (File.Exists(fileName))

{

using (var file = File.OpenText(fileName))

{

return (Section)xml.Deserialize(file);

}

}

return null;

}

private void button2_Click_1(object sender, EventArgs e)

{

using (var dlg = new OpenFileDialog())

{

if (dlg.ShowDialog() == DialogResult.OK)

{

var xml = new XmlSerializer(typeof(Section));

section = loadSection(xml, dlg.FileName);

}

}

statusLabel.Text = "Редактируется квартал №" + section.number.ToString();

lastArea = new Area();

areaControls = AreaControls.onInitialize(this.panel1, 10, lastArea, section.areas.Count + 1);

areaControls.evt += new EventHandler(areaControls_evt);

areaControls.numberTextBox.Focus();

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Test_prj

{

class Parser

{

public static TreeType gettreetype(string s)

{

switch (s)

{

case "е":return TreeType.Spruce;

case "с":return TreeType.Pine;

case "ос": return TreeType.Aspen;

case "п": return TreeType.Fir;

case "л": return TreeType.Hackmatack;

case "б": return TreeType.Birch;

case "к": return TreeType.Cedar;

}

throw new Exception("Некорректный(е) типы деревьев");

}

public static BaseAreaElement parse(string toparce)

{

if(string.IsNullOrEmpty(toparce))

throw new Exception("Пустая строка");

toparce = toparce.ToLower();

char current = toparce[0];

if (toparce == "б" || toparce == "болото")

{

throw new NotImplementedException();

}

if (toparce == "д" || toparce == "дорога")

{

return new Road();

}

if (toparce == "р" || toparce == "река")

{

return new River();

}

if (toparce == "п" || toparce == "прочие" || toparce == "прочие трассы")

{

return new OtherRoutes();

}

Circle toreturn = new Circle();

int currentindex = 0;

while (currentindex != toparce.Length && !toparce[currentindex].Equals('+'))

{

string digit = string.Empty;

ForestElement temp = new ForestElement();

while (currentindex < toparce.Length && char.IsDigit(toparce[currentindex]))

{

digit = digit + toparce[currentindex];

currentindex++;

}

temp.quantity = int.Parse(digit);

string treetype = string.Empty;

while (currentindex < toparce.Length && char.IsLetter(toparce[currentindex]))

{

treetype = treetype + toparce[currentindex];

currentindex++;

}

temp.type = gettreetype(treetype);

toreturn.elments.Add(temp);

}

while (currentindex != toparce.Length && toparce[currentindex].Equals('+'))

{

currentindex++;

ForestElement temp = new ForestElement();

temp.quantity = 0;

string treetype = string.Empty;

while (currentindex < toparce.Length && char.IsLetter(toparce[currentindex]))

{

treetype = treetype + toparce[currentindex];

currentindex++;

}

temp.type = gettreetype(treetype);

toreturn.elments.Add(temp);

}

if (!formulavalid(toreturn))

throw new Exception("Некорректная формула");

return toreturn;

}

static bool formulavalid(Circle obj)

{

int sum = 0;

foreach (var i in obj.elments)

{

sum = i.quantity + sum;

}

return (sum == 10);

}

static bool formulavalidu(UnderGrowth obj)

{

int sum = 0;

foreach (var i in obj.elements)

{

sum = i.quantity + sum;

}

return (sum == 10);

}

public static UnderGrowth parseUndergrowth(string toparce)

{

if (string.IsNullOrEmpty(toparce))

throw new Exception("Пустая строка");

toparce = toparce.ToLower();

char current = toparce[0];

UnderGrowth toreturn = new UnderGrowth();

int currentindex = 0;

while (currentindex != toparce.Length && !toparce[currentindex].Equals('+'))

{

string digit = string.Empty;

ForestElement temp = new ForestElement();

while (currentindex < toparce.Length && char.IsDigit(toparce[currentindex]))

{

digit = digit + toparce[currentindex];

currentindex++;

}

temp.quantity = int.Parse(digit);

string treetype = string.Empty;

while (currentindex < toparce.Length && char.IsLetter(toparce[currentindex]))

{

treetype = treetype + toparce[currentindex];

currentindex++;

}

temp.type = gettreetype(treetype);

toreturn.elements.Add(temp);

}

if (currentindex != toparce.Length)

throw new Exception("Некорректная формула");

if (!formulavalidu(toreturn))

throw new Exception("Некорректная формула");

return toreturn;

}

}

}

using System.Text;

using System.Windows.Forms;

namespace Test_prj

{

public partial class newSection : Form

{

public newSection()

{

InitializeComponent();

}

public int number;

private void label1_Click(object sender, EventArgs e)

{

}

private void button2_Click(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

number = int.Parse(textBox1.Text);

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.ComponentModel;

namespace Test_prj

{

class MyControls

{

}

public class UnderBrushControls

{

public Label underbrushLabel = new Label();

public ComboBox densityComboBox = new ComboBox();

public TextBox underbrushTextBox = new TextBox();

public void ch(AreaControls area)

{

int hi = 29;

for (int i = 0; i < area.circleControls.Count; i++)

{

for (int ii = 0; ii < area.circleControls[i].forestElementControls.Count - 1; ii++)

hi = hi + 26;

}

hi = hi + 26 * area.formulaControls.Count;

underbrushLabel.Location = new System.Drawing.Point(underbrushLabel.Location.X, hi);

densityComboBox.Location = new System.Drawing.Point(densityComboBox.Location.X, hi);

underbrushTextBox.Location = new System.Drawing.Point(underbrushTextBox.Location.X, hi);

}

public static UnderBrushControls init(Panel pan,List<CircleControls> cir)

{

var underbrushControls = new UnderBrushControls();

int hi = 29;

hi = hi + cir.Last().forestElementControls.Count * 26;

underbrushControls.underbrushTextBox.Size = new System.Drawing.Size(130, 20);

underbrushControls.underbrushTextBox.Location = new System.Drawing.Point(65, hi);

underbrushControls.underbrushTextBox.TabIndex = 9005;

underbrushControls.underbrushLabel.Size = new System.Drawing.Size(56,20);

underbrushControls.underbrushLabel.Location = new System.Drawing.Point(3, hi);

underbrushControls.underbrushLabel.Text = "подлесок";

underbrushControls.densityComboBox.Size = new System.Drawing.Size(130, 20);

underbrushControls.densityComboBox.Location = new System.Drawing.Point(201, hi);

underbrushControls.densityComboBox.Items.Add(new DensityWrapper(Density.Rare));

underbrushControls.densityComboBox.Items.Add(new DensityWrapper(Density.AverageDensity));

underbrushControls.densityComboBox.Items.Add(new DensityWrapper(Density.Thick));

underbrushControls.densityComboBox.SelectedItem = underbrushControls.densityComboBox.Items[0];

underbrushControls.densityComboBox.TabIndex = 9006;

pan.Controls.Add(underbrushControls.underbrushTextBox);

pan.Controls.Add(underbrushControls.densityComboBox);

pan.Controls.Add(underbrushControls.underbrushLabel);

return underbrushControls;

}

}

public class UndergrowthControls

{

Area area;

UnderGrowth undergrowth;

public UndergrowthControls(Area area)

{

formulaTextBox.Validating += new CancelEventHandler(formulaTextBox_Validating);

formulaTextBox.Validated += new EventHandler(formulaTextBox_Validated);

this.area = area;

}

void formulaTextBox_Validated(object sender, EventArgs e)

{

area.undergrowth = undergrowth;

}

void formulaTextBox_Validating(object sender, CancelEventArgs e)

{

try

{

undergrowth = Parser.parseUndergrowth(formulaTextBox.Text);

}

catch (Exception ex)

{

e.Cancel = true;

MessageBox.Show(ex.Message);

}

}

public Label undergrowthLabel = new Label();

public Label ageLabel = new Label();

public Label heightLabel = new Label();

public Label quantityLabel = new Label();

public TextBox formulaTextBox = new TextBox();

public TextBox ageTextBox = new TextBox();

public TextBox heightTextBox = new TextBox();

public TextBox quantityTextBox = new TextBox();

public void ch(AreaControls area)

{

int hi = 3;

for (int i = 0; i < area.circleControls.Count; i++)

{

for (int ii = 0; ii < area.circleControls[i].forestElementControls.Count - 1; ii++)

hi = hi + 26;

}

hi = hi + 26 * area.formulaControls.Count;

undergrowthLabel.Location = new System.Drawing.Point(undergrowthLabel.Location.X, hi);

ageLabel.Location = new System.Drawing.Point(ageLabel.Location.X, hi);

heightLabel.Location = new System.Drawing.Point(heightLabel.Location.X, hi);

quantityLabel.Location = new System.Drawing.Point(quantityLabel.Location.X, hi);

formulaTextBox.Location = new System.Drawing.Point(formulaTextBox.Location.X, hi);

ageTextBox.Location = new System.Drawing.Point(ageTextBox.Location.X, hi);

heightTextBox.Location = new System.Drawing.Point(heightTextBox.Location.X, hi);

quantityTextBox.Location = new System.Drawing.Point(quantityTextBox.Location.X, hi);

}

public static UndergrowthControls init(Panel pan,AreaControls area)

{

var undergrowthControls = new UndergrowthControls(area.currentArea);

int hi = 3;

hi = hi + area.circleControls.Last().forestElementControls.Count * 26;

undergrowthControls.undergrowthLabel.Size = new System.Drawing.Size(56, 20);

undergrowthControls.undergrowthLabel.Location = new System.Drawing.Point(3, hi);

undergrowthControls.formulaTextBox.Size = new System.Drawing.Size(130, 20);

undergrowthControls.formulaTextBox.Location = new System.Drawing.Point(65, hi);

undergrowthControls.formulaTextBox.TabIndex = 9000;

undergrowthControls.ageTextBox.Size = new System.Drawing.Size(20, 20);

undergrowthControls.ageTextBox.Location = new System.Drawing.Point(201, hi);

undergrowthControls.ageTextBox.TabIndex = 9001;

undergrowthControls.ageLabel.Size = new System.Drawing.Size(80, 20);

undergrowthControls.ageLabel.Location = new System.Drawing.Point(227, hi);

undergrowthControls.heightLabel.Size = new System.Drawing.Size(20, 20);

undergrowthControls.heightLabel.Location = new System.Drawing.Point(339, hi);

undergrowthControls.heightTextBox.Size = new System.Drawing.Size(20, 20);

undergrowthControls.heightTextBox.Location = new System.Drawing.Point(313, hi);

undergrowthControls.heightTextBox.TabIndex = 9002;

undergrowthControls.quantityTextBox.Size = new System.Drawing.Size(20, 20);

undergrowthControls.quantityTextBox.Location = new System.Drawing.Point(365, hi);

undergrowthControls.quantityTextBox.TabIndex = 9003;

undergrowthControls.quantityLabel.Size = new System.Drawing.Size(30, 20);

undergrowthControls.quantityLabel.Location = new System.Drawing.Point(391, hi);

undergrowthControls.undergrowthLabel.Text = "подрост";

undergrowthControls.ageLabel.Text = "лет, высота";

undergrowthControls.heightLabel.Text = "м.";

undergrowthControls.quantityLabel.Text = "т.шт/га";

pan.Controls.Add(undergrowthControls.undergrowthLabel);

pan.Controls.Add(undergrowthControls.formulaTextBox);

pan.Controls.Add(undergrowthControls.ageTextBox);

pan.Controls.Add(undergrowthControls.ageLabel);

pan.Controls.Add(undergrowthControls.heightLabel);

pan.Controls.Add(undergrowthControls.heightTextBox);

pan.Controls.Add(undergrowthControls.quantityTextBox);

pan.Controls.Add(undergrowthControls.quantityLabel);

return undergrowthControls;

}

}

public class RoadControls

{

Road road;

public RoadControls()

{

widthTextBox.Validated += new EventHandler(widthTextBox_Validated);

}

void widthTextBox_Validated(object sender, EventArgs e)

{

road.width = int.Parse(widthTextBox.Text);

}

public TextBox widthTextBox = new TextBox();

public Label widthLabel = new Label();

public TextBox lengthTextBox = new TextBox();

public Label lengthLabel = new Label();

public Label km = new Label();

public ComboBox conditionComboBox = new ComboBox();

public static RoadControls init(Panel pan, int startIndex, Road road)

{

var roadControls = new RoadControls();

roadControls.road = road;

roadControls.conditionComboBox.Size = new System.Drawing.Size(130, 20);

roadControls.conditionComboBox.Location = new System.Drawing.Point(65,29);

roadControls.widthLabel.Size = new System.Drawing.Size(60, 20);

roadControls.widthLabel.Text = "Ширнина:";

roadControls.lengthLabel.Text = "м, протяженностью:";

roadControls.lengthLabel.Size = new System.Drawing.Size(110, 20);

roadControls.widthLabel.Location = new System.Drawing.Point(201, 29);

roadControls.widthTextBox.Size = new System.Drawing.Size(20, 20);

roadControls.widthTextBox.Location = new System.Drawing.Point(266, 29);

roadControls.lengthLabel.Location = new System.Drawing.Point(292, 29);

roadControls.lengthTextBox.Size = new System.Drawing.Size(20, 20);

roadControls.lengthTextBox.Location = new System.Drawing.Point(408, 29);

roadControls.km.Size = new System.Drawing.Size(30, 20);

roadControls.km.Location = new System.Drawing.Point(434, 29);

roadControls.km.Text = "км.";

roadControls.conditionComboBox.Items.Add(new ElementConditionWrapper(ElementCondition.Satisfied));

roadControls.conditionComboBox.Items.Add(new ElementConditionWrapper(ElementCondition.Unsatisfied));

roadControls.conditionComboBox.SelectedItem = roadControls.conditionComboBox.Items[0];

roadControls.conditionComboBox.TabIndex = startIndex + 5;

roadControls.widthTextBox.TabIndex = startIndex + 6;

roadControls.lengthTextBox.TabIndex = startIndex + 7;

pan.Controls.Add(roadControls.conditionComboBox);

pan.Controls.Add(roadControls.km);

pan.Controls.Add(roadControls.widthTextBox);

pan.Controls.Add(roadControls.lengthTextBox);

pan.Controls.Add(roadControls.widthLabel);

pan.Controls.Add(roadControls.lengthLabel);

return roadControls;

}

}

public class RiverControls

{

River river;

public RiverControls()

{

widthTextBox.Validated += new EventHandler(widthTextBox_Validated);

}

void widthTextBox_Validated(object sender, EventArgs e)

{

river.width = int.Parse(widthTextBox.Text);

}

public TextBox widthTextBox = new TextBox();

public Label widthLabel = new Label();

public TextBox lengthTextBox = new TextBox();

public Label lengthLabel = new Label();

public Label km = new Label();

public ComboBox conditionComboBox = new ComboBox();

public static RiverControls init(Panel pan, int startIndex, River river)

{

var riverControls = new RiverControls();

riverControls.river = river;

riverControls.conditionComboBox.Size = new System.Drawing.Size(130, 20);

riverControls.conditionComboBox.Location = new System.Drawing.Point(65,29);

riverControls.widthLabel.Size = new System.Drawing.Size(60, 20);

riverControls.widthLabel.Text = "Ширнина:";

riverControls.lengthLabel.Text = "м, протяженностью:";

riverControls.lengthLabel.Size = new System.Drawing.Size(110, 20);

riverControls.widthLabel.Location = new System.Drawing.Point(201, 29);

riverControls.widthTextBox.Size = new System.Drawing.Size(20, 20);

riverControls.widthTextBox.Location = new System.Drawing.Point(266, 29);

riverControls.lengthLabel.Location = new System.Drawing.Point(292, 29);

riverControls.lengthTextBox.Size = new System.Drawing.Size(20, 20);

riverControls.lengthTextBox.Location = new System.Drawing.Point(408, 29);

riverControls.km.Size = new System.Drawing.Size(30, 20);

riverControls.km.Location = new System.Drawing.Point(434, 29);

riverControls.km.Text = "км.";

riverControls.conditionComboBox.Items.Add(new ElementConditionWrapper(ElementCondition.Satisfied));

riverControls.conditionComboBox.Items.Add(new ElementConditionWrapper(ElementCondition.Unsatisfied));

riverControls.conditionComboBox.SelectedItem = riverControls.conditionComboBox.Items[0];

riverControls.conditionComboBox.TabIndex = startIndex + 5;

riverControls.widthTextBox.TabIndex = startIndex + 6;

riverControls.lengthTextBox.TabIndex = startIndex + 7;

pan.Controls.Add(riverControls.conditionComboBox);

pan.Controls.Add(riverControls.km);

pan.Controls.Add(riverControls.widthTextBox);

pan.Controls.Add(riverControls.lengthTextBox);

pan.Controls.Add(riverControls.widthLabel);

pan.Controls.Add(riverControls.lengthLabel);

return riverControls;

}

}

public class OtherRoutesControls

{

OtherRoutes otherRoutes;

public OtherRoutesControls()

{

widthTextBox.Validated += new EventHandler(widthTextBox_Validated);

}

void widthTextBox_Validated(object sender, EventArgs e)

{

otherRoutes.width = int.Parse(widthTextBox.Text);

}

public TextBox widthTextBox = new TextBox();

public Label widthLabel = new Label();

public TextBox lengthTextBox = new TextBox();

public Label lengthLabel = new Label();

public Label km = new Label();

public ComboBox conditionComboBox = new ComboBox();

public static OtherRoutesControls init(Panel pan, int startIndex, OtherRoutes otherRoutes)

{

var otherRoutesControl = new OtherRoutesControls();

otherRoutesControl.otherRoutes = otherRoutes;

otherRoutesControl.conditionComboBox.Size = new System.Drawing.Size(130, 20);

otherRoutesControl.conditionComboBox.Location = new System.Drawing.Point(65, 29);

otherRoutesControl.widthLabel.Size = new System.Drawing.Size(60, 20);

otherRoutesControl.widthLabel.Text = "Ширнина:";

otherRoutesControl.lengthLabel.Text = "м, протяженностью:";

otherRoutesControl.lengthLabel.Size = new System.Drawing.Size(110, 20);

otherRoutesControl.widthLabel.Location = new System.Drawing.Point(201, 29);

otherRoutesControl.widthTextBox.Size = new System.Drawing.Size(20, 20);

otherRoutesControl.widthTextBox.Location = new System.Drawing.Point(266, 29);

otherRoutesControl.lengthLabel.Location = new System.Drawing.Point(292, 29);

otherRoutesControl.lengthTextBox.Size = new System.Drawing.Size(20, 20);

otherRoutesControl.lengthTextBox.Location = new System.Drawing.Point(408, 29);

otherRoutesControl.km.Size = new System.Drawing.Size(30, 20);

otherRoutesControl.km.Location = new System.Drawing.Point(434, 29);

otherRoutesControl.km.Text = "км.";

otherRoutesControl.conditionComboBox.Items.Add(new ElementConditionWrapper(ElementCondition.Satisfied));

otherRoutesControl.conditionComboBox.Items.Add(new ElementConditionWrapper(ElementCondition.Unsatisfied));

otherRoutesControl.conditionComboBox.SelectedItem = otherRoutesControl.conditionComboBox.Items[0];

otherRoutesControl.conditionComboBox.TabIndex = startIndex + 5;

otherRoutesControl.widthTextBox.TabIndex = startIndex + 6;

otherRoutesControl.lengthTextBox.TabIndex = startIndex + 7;

pan.Controls.Add(otherRoutesControl.conditionComboBox);

pan.Controls.Add(otherRoutesControl.km);

pan.Controls.Add(otherRoutesControl.widthTextBox);

pan.Controls.Add(otherRoutesControl.lengthTextBox);

pan.Controls.Add(otherRoutesControl.widthLabel);

pan.Controls.Add(otherRoutesControl.lengthLabel);

return otherRoutesControl;

}

}

public class AreaForestControls

{

public TextBox ageClassTextBox = new TextBox();

public TextBox ageGroupTextBox = new TextBox();

public TextBox bonitetTextBox = new TextBox();

public TextBox treetypeTextBox = new TextBox();

public TextBox tumTextBox = new TextBox();

public ComboBox slopeDirectionComboBox = new ComboBox();

public TextBox slopeAngleTextBox = new TextBox();

public Label angleLabel = new Label();

public Label slopeLabel = new Label();

public void changeSlopeGroupLocation(AreaControls area)

{

int hi = 51;

for (int i = 0; i < area.circleControls.Count; i++)

{

for (int ii = 0; ii < area.circleControls[i].forestElementControls.Count - 1; ii++)

hi = hi + 26;

}

hi = hi + 26 * area.formulaControls.Count;

slopeLabel.Location = new System.Drawing.Point(slopeLabel.Location.X, hi);

angleLabel.Location = new System.Drawing.Point(angleLabel.Location.X, hi);

slopeAngleTextBox.Location = new System.Drawing.Point(slopeAngleTextBox.Location.X, hi);

slopeDirectionComboBox.Location = new System.Drawing.Point(slopeDirectionComboBox.Location.X, hi);

}

public static AreaForestControls initialize(Panel pan, int startIndex)

{

var additionControls = new AreaForestControls();

additionControls.ageClassTextBox.Size = new System.Drawing.Size(20, 20);

additionControls.ageClassTextBox.Location = new System.Drawing.Point(367, 3);

additionControls.ageGroupTextBox.Size = new System.Drawing.Size(20, 20);

additionControls.ageGroupTextBox.Location = new System.Drawing.Point(393, 3);

additionControls.bonitetTextBox.Size = new System.Drawing.Size(20, 20);

additionControls.bonitetTextBox.Location = new System.Drawing.Point(419, 3);

additionControls.treetypeTextBox.Size = new System.Drawing.Size(30, 20);

additionControls.treetypeTextBox.Location = new System.Drawing.Point(445, 3);

additionControls.ageClassTextBox.TabIndex = startIndex + 10;

additionControls.ageGroupTextBox.TabIndex = startIndex + 11;

additionControls.bonitetTextBox.TabIndex = startIndex + 12;

additionControls.treetypeTextBox.TabIndex = startIndex + 13;

additionControls.tumTextBox.TabIndex = startIndex + 14;

additionControls.slopeDirectionComboBox.TabIndex = 9900;

additionControls.slopeAngleTextBox.TabIndex = 9901;

additionControls.tumTextBox.Size = new System.Drawing.Size(30, 20);

additionControls.tumTextBox.Location = new System.Drawing.Point(481, 3);

additionControls.slopeLabel.Size = new System.Drawing.Size(56, 20);

additionControls.slopeLabel.Location = new System.Drawing.Point(3, 29);

additionControls.slopeLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;

additionControls.slopeLabel.Text = "Склон";

additionControls.slopeDirectionComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

additionControls.slopeDirectionComboBox.Size = new System.Drawing.Size(130, 20);

additionControls.slopeDirectionComboBox.Location = new System.Drawing.Point(65, 29);

additionControls.slopeDirectionComboBox.Items.Add(new SlopeDirectionWrapper(SlopeDirection.North));

additionControls.slopeDirectionComboBox.Items.Add(new SlopeDirectionWrapper(SlopeDirection.South));

additionControls.slopeDirectionComboBox.Items.Add(new SlopeDirectionWrapper(SlopeDirection.West));

additionControls.slopeDirectionComboBox.Items.Add(new SlopeDirectionWrapper(SlopeDirection.East));

additionControls.slopeDirectionComboBox.Items.Add(new SlopeDirectionWrapper(SlopeDirection.NorthWest));

additionControls.slopeDirectionComboBox.Items.Add(new SlopeDirectionWrapper(SlopeDirection.NorthEast));

additionControls.slopeDirectionComboBox.Items.Add(new SlopeDirectionWrapper(SlopeDirection.SouthWest));

additionControls.slopeDirectionComboBox.Items.Add(new SlopeDirectionWrapper(SlopeDirection.SouthEast));

additionControls.slopeDirectionComboBox.SelectedItem = additionControls.slopeDirectionComboBox.Items[0];

additionControls.slopeAngleTextBox.Size = new System.Drawing.Size(20, 20);

additionControls.slopeAngleTextBox.Location = new System.Drawing.Point(201,29);

additionControls.angleLabel.Size = new System.Drawing.Size(60,20);

additionControls.angleLabel.Location = new System.Drawing.Point(227, 29);

additionControls.angleLabel.Text = "градусов";

pan.Controls.Add(additionControls.ageClassTextBox);

pan.Controls.Add(additionControls.ageGroupTextBox);

pan.Controls.Add(additionControls.bonitetTextBox);

pan.Controls.Add(additionControls.treetypeTextBox);

pan.Controls.Add(additionControls.angleLabel);

pan.Controls.Add(additionControls.slopeDirectionComboBox);

pan.Controls.Add(additionControls.slopeLabel);

pan.Controls.Add(additionControls.tumTextBox);

pan.Controls.Add(additionControls.angleLabel);

pan.Controls.Add(additionControls.slopeAngleTextBox);

return additionControls;

}

}

}

using System;

using System.Linq;

using System.Text;

using System.Collections.Generic;

namespace Test_prj

{

public enum TreeType

{

Aspen,

Spruce,

Pine,

Hackmatack,

Birch,

Cedar,

Fir

}

public enum ElementCondition

{

Satisfied,

Unsatisfied

}

public class ElementConditionWrapper

{

readonly ElementCondition condition;

readonly string text;

public ElementConditionWrapper(ElementCondition cond)

{

condition = cond;

text = getDirectionString(cond);

}

public override string ToString()

{

return text;

}

public static String getDirectionString(ElementCondition cond)

{

switch (cond)

{

case ElementCondition.Satisfied: return "Удовлетровит.";

case ElementCondition.Unsatisfied: return "Неудовлетворит.";

}

throw new Exception("Отсутствует состояни элемента");

}

}

public class BaseAreaElement { }

public class Road : BaseAreaElement

{

public float width;

public float length;

public string condition;

}

public class River : BaseAreaElement

{

public float length;

public float width;

public string condition;

}

public class OtherRoutes : BaseAreaElement

{

public float length;

public float width;

public string condition;

}

public enum Density

{

Rare,

AverageDensity,

Thick

}

public class DensityWrapper

{

readonly Density condition;

readonly string text;

public DensityWrapper(Density cond)

{

condition = cond;

text = getDirectionString(cond);

}

public override string ToString()

{

return text;

}

public static String getDirectionString(Density cond)

{

switch (cond)

{

case Density.Rare: return "Редкий";

case Density.AverageDensity: return "Ср. густоты";

case Density.Thick: return "Густой";

}

throw new Exception("Отсутствует состояни элемента");

}

}

public enum SlopeDirection

{

North,

South,

West,

East,

NorthWest,

NorthEast,

SouthWest,

SouthEast

}

public class SlopeDirectionWrapper

{

readonly SlopeDirection direction;

readonly string text;

public SlopeDirectionWrapper(SlopeDirection dir)

{

direction = dir;

text = getDirectionString(dir);

}

public override string ToString()

{

return text;

}

public static String getDirectionString(SlopeDirection sl)

{

switch (sl)

{

case SlopeDirection.North: return "Север";

case SlopeDirection.South: return "Юг";

case SlopeDirection.West: return "Запад";

case SlopeDirection.East: return "Восток";

case SlopeDirection.NorthWest: return "Северо-запад";

case SlopeDirection.NorthEast: return "Северо-восток";

case SlopeDirection.SouthWest: return "Юго-запад";

case SlopeDirection.SouthEast: return "Юго-восток";

}

throw new Exception("Отсутствует направление склона");

}

}

public class UnderbrushElement

{

public String underbrushType;

}

public class Underbrush

{

public List<UnderbrushElement> underbrushTypes = new List<UnderbrushElement>();

public Density density;

}

public class ForestElement

{

public TreeType type;

public int age;

public int height;

public int diameter;

public int quantity;

public static String getTreeTypeLetter(TreeType type)

{

switch (type)

{

case TreeType.Pine: return "С";

case TreeType.Spruce: return "Е";

case TreeType.Aspen: return "Ос";

case TreeType.Birch: return "Б";

case TreeType.Cedar: return "К";

case TreeType.Hackmatack: return "Л";

case TreeType.Fir: return "П";

}

throw new Exception("Отсутствует тип дерева");

}

}

public class UnderGrowth

{

public List<ForestElement> elements = new List<ForestElement>();

public int age;

public int height;

public float quantity;

}

public class Circle : BaseAreaElement

{

public int number;

public List<ForestElement> elments = new List<ForestElement>();

public int age;

}

public class Area

{

public List<Circle> circles;

public Road road;

public OtherRoutes otherRoutes;

public River river;

public Underbrush underbrush;

public UnderGrowth undergrowth;

public int number;

public int suare;

}

public class Section

{

public List<Area> areas;

public int number;

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.ComponentModel;

namespace Test_prj

{

public class FormulaControls

{

AreaControls area;

public FormulaControls(AreaControls area)

{

this.area = area;

formulaTextBox.Validating += new CancelEventHandler(formulaTextBox_Validating);

formulaTextBox.Validated += new EventHandler(formulaTextBox_Validated);

}

BaseAreaElement parsedElement;

void formulaTextBox_Validating(object sender, CancelEventArgs e)

{

try

{

parsedElement = Parser.parse(formulaTextBox.Text);

}

catch (Exception ex)

{

e.Cancel = true;

MessageBox.Show(ex.Message);

}

}

void formulaTextBox_Validated(object sender, EventArgs e)

{

var circle = parsedElement as Circle;

if (circle != null)

{

area.FormulaParsed(circle);

}

var road = parsedElement as Road;

if (road != null)

{

area.FormulaParsed(road);

formulaTextBox.Text = "дорога";

}

var river = parsedElement as River;

if (river != null)

{

area.FormulaParsed(river);

formulaTextBox.Text = "река";

}

var otherRoutes = parsedElement as OtherRoutes;

if (otherRoutes != null)

{

area.FormulaParsed(otherRoutes);

formulaTextBox.Text = "прочие трассы";

}

formulaTextBox.Enabled = false;

}

public TextBox formulaTextBox = new TextBox();

public static FormulaControls initialize(Panel pan, AreaControls area)

{

var formula = new FormulaControls(area);

int hi = 3;

for (int i = 0; i < area.circleControls.Count; i++)

{

hi = hi + 26 * area.circleControls[i].forestElementControls.Count;

}

formula.formulaTextBox.Size = new System.Drawing.Size(130, 20);

formula.formulaTextBox.Location = new System.Drawing.Point(65, hi);

pan.Controls.Add(formula.formulaTextBox);

return formula;

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Test_prj

{

public class ForestElementControls

{

ForestElement currentForest;

public ForestElementControls(ForestElement element)

{

currentForest = element;

}

void elementTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)

{

try

{

currentForest.type = Parser.gettreetype(elementTextBox.Text);

}

catch (Exception ex) { MessageBox.Show(ex.Message); }

}

public event EventHandler NeededNewArea;

public void klTovTextBox_KeyUp(object sender, KeyEventArgs e)

{

if (e.Control && e.KeyCode == Keys.Enter)

{

if (NeededNewArea != null)

{

NeededNewArea(this, EventArgs.Empty);

}

klTovTextBox.FindForm().SelectNextControl(klTovTextBox, true, true, true, true);

}

}

public TextBox elementTextBox;

public TextBox ageTextBox;

public TextBox heightTextBox;

public TextBox diameterTextBox;

public TextBox zapSostTextBox;

public TextBox klTovTextBox;

public void Init(Control pan, int hi, int startIndex, int forestIndex)

{

elementTextBox = new TextBox();

ageTextBox = new TextBox();

heightTextBox = new TextBox();

diameterTextBox = new TextBox();

zapSostTextBox = new TextBox();

klTovTextBox = new TextBox();

elementTextBox.Size = new System.Drawing.Size(20, 20);

elementTextBox.Location = new System.Drawing.Point(253, hi);

elementTextBox.Text = ForestElement.getTreeTypeLetter(currentForest.type);

elementTextBox.Enabled = false;

ageTextBox.Size = new System.Drawing.Size(30, 20);

ageTextBox.Location = new System.Drawing.Point(279, hi);

heightTextBox.Size = new System.Drawing.Size(20, 20);

heightTextBox.Location = new System.Drawing.Point(315, hi);


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

  • Разработка программы в Turbo C++ Explorer для вычислений геометрических данных фигуры. Атрибуты объекта и представление данных в программе. Подпрограмма создания набора данных. Реализация защиты и правильности ввода данных и дополнительных функции.

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

  • Устройства ввода знаковых данных, командного управления, ввода и вывода текстовых, графических, голосовых данных, хранения данных, обмена данными. Формирование оборотной ведомости по движению товара в магазине с помощью табличного процессора MS Excel.

    курсовая работа [383,0 K], добавлен 25.04.2013

  • Создание систем автоматизированного сбора и обработки данных. Разработка информационной системы гостиничного комплекса. Выбор требуемой СУБД и программного обеспечения. Концептуальное, логическое проектирование. Организация ввода данных в базу данных.

    дипломная работа [790,1 K], добавлен 13.02.2016

  • Этапы создания сайта с использованием СУБД – MySQL. Подключение блоков, наполнение текстовым содержанием путём ручного ввода данных в базу данных mysql. Создание администраторского раздела (админки), наполнение содержимым через администраторский раздел.

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

  • Разработка программы для ввода данных из актов о возврате бракованных ванн в БД учета брака. Проектирование информационных систем. Разработка модели БД с помощью ERWin, приложения ввода данных в Borland Delphi 7, системы создания отчётности в MS Excel.

    курсовая работа [2,6 M], добавлен 30.03.2011

  • Обзор программного обеспечения мебельной фабрики. Система управления базами данных. Разработка схемы данных для информационной системы фабрики. Справочники и шифраторы системы. Экранные формы ввода и редактирования данных. Корректировка схемы данных.

    дипломная работа [504,6 K], добавлен 05.05.2014

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

    курсовая работа [406,0 K], добавлен 24.12.2014

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

    курсовая работа [1,1 M], добавлен 11.09.2010

  • Сущности и функциональные зависимости базы данных. Атрибуты и связи. Таблицы базы данных. Построение ER-диаграммы. Организация ввода и корректировки данных. Реляционная схема базы данных. Реализация запросов, получение отчетов. Защита базы данных.

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

  • Особенности справочной системы MS Access. Основные модели типов организации баз данных. Понятие, типы и свойства полей. Установление фиксированного набора значений для ввода. Схема данных и ее редактирование. Особенности ввода данных в режиме таблицы.

    контрольная работа [880,4 K], добавлен 17.03.2012

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