Разработка базы данных для хранения информации, необходимой для организации предоставления услуг
Разработка информационно-аналитической системы агентства недвижимости. Обоснование выбора архитектуры базы данных и СУБД. Моделирование потоков данных (DFD диаграмм). Проектирование инфологической модели данных с использованием модели "сущность-связь".
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 06.06.2013 |
Размер файла | 5,4 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Исходя из эксплуатационных расходов, находим стоимость одного машинного часа работы ЭВМ пользователя:
руб./ч.
Получаем:
руб./год.
руб./год
Коэффициент отдачи с инвестированных средств () определяется по формуле:
.
Полученное значение коэффициента , превышающее, по теоретическим оценкам, 30 %, свидетельствует о высокой экономической эффективности разработанной системы. Поэтому она может быть рекомендована для практического использования.
5. БЕЗОПАСНОСТЬ ЖИЗНЕДЕЯТЕЛЬНОСТИ
5.1 Расчет искусственного освещения на рабочем месте оператора системы с учетом требований санитарных норм
Рациональное освещение рабочего места является одним из важнейших факторов, влияющих на эффективность трудовой деятельности человека, предупреждающих травматизм и профессиональные заболевания. Правильно организованное освещение создает благоприятные условия труда, повышает работоспособность и производительность труда. Освещение на рабочем месте программиста должно быть таким, чтобы работник мог без напряжения зрения выполнять свою работу. При недостатке освещённости от естественного источника света и в тёмное время суток используют искусственное освещение, создаваемые электрическими источниками света.
Исходные данные для расчета искусственного освещения: помещение, в котором находится рабочее место оператора ПЭВМ имеет длину 5,5 м, ширину 3,5 м и высоту потолка 2,8 м; освещаемая поверхность находится на высоте 0,77 м от пола.
Для искусственного освещения помещения используются следующие источники света: лампы накаливания; газоразрядные лампы низкого давления (люминесцентные); газоразрядные лампы высокого давления (дуговые ртутные люминесцентные - ДРЛ); дуговые ксеноновые лампы; металлогалоидные (лампы высокого давления с иодидами ДРИ).
Выбор источников света определяется рядом факторов: характером работы, размерами помещения и условиями среды. Лампы накаливания следует применять в помещении, где выполняются грубые работы, для которых освещенность нормируется менее 50 лк, когда предъявляется повышенные требования к определения цветовых оттенков, а также во взрыво- и пожароопасных помещениях.
Для освещения рабочего места оператора ПЭВМ рекомендуется применять люминесцентные лампы. Лампы этого типа характеризуются более высоким КПД (в 1.5-2 раза выше, чем КПД ламп накаливания); повышенной светоотдачей (в 3-4 раза выше, чем у ламп накаливания); более длительным сроком службы (до 10000 ч), близким к естественному спектральному составу излучаемого света.
Для освещения рабочего места оператора используются светильники типа УСП-35. Для светильников будут использоваться лампы типа ЛБ-40, мощностью 40 Вт и световым потоком одной лампы 2480 лм [17]. К достоинствам ламп ЛБ-40 можно отнести их экономичность, их световая отдача на 60% и 30% выше, чем у ламп ЛДЦ и ЛД соответственно, к недостаткам можно отнести то, что по цветности, они не так близки к дневному свету как лампы ЛТБ и занимают промежуточное положение между дневным светом и лампами накаливания.
Коэффициенты отражения светового потока имеют значения: для потолка, окрашенного белой краской 70%; для стен, окрашенных светло-зеленой фасадной краской 50%; для пола, окрашенного темно-коричневой краской 10% [7].
Для расчета искусственного освещения выберем метод коэффициента использования светового потока, предназначенный для расчета общего равномерного освещения горизонтальных поверхностей при отсутствии крупных затеняющих предметов.
Расчет освещенности помещения для люминесцентных ламп производится по формуле [17]:
Е = (Fл · N · з · n) / (S · Кз · Z), (1)
где Е - минимальная нормируемая освещенность, лк;
Fл - световой поток одной лампы, лм;
S - площадь пола помещения, м2;
Кз - коэффициент запаса;
Z - поправочный коэффициент;
N - число светильников в помещении, шт;
з - коэффициент использования осветительной установки;
n - число ламп в светильнике, шт.
Световой поток одной лампы ЛБ-40 составляет 2480 лм. [17]
Площадь пола помещения S оператора ПЭВМ, вычисляемая по формуле [17]:
S= АВ,
где А - ширина помещения, м;
В - длина помещения, м.
S = 3,5 · 5,5 = 19,2 м2.
Коэффициент запаса Кз принимается для помещений с нормальной средой и светильниками с люминесцентными лампами, Кз = 1,5 [9];
Поправочный коэффициент Z вводят для получения минимальной освещенности, принимаемый для светильников с люминесцентными лампами за 1,2.
Для определения коэффициента использования з необходимо вычислить показатель помещения ц, учитывающий влияние соотношения размеров конфигурации помещения и высоты подвеса светильника над рабочей поверхностью по формуле [17]:
ц = (А · В) / (Нр · (А + В)),
где Нр - высота подвеса светильника над рабочей поверхностью, м.
Высота подвеса светильников над рабочей поверхностью определяется по формуле [17]:
Нр = H - hn ,
где H - высота помещения, м;
hn - высота освещаемой поверхности над полом, м.
Нр = 2,8 - 0,77 = 2,03 м.
ц = (3,5 · 5,5) / (2,03 · (3,5 + 5,5)) = 1,05
Зная коэффициенты отражения потолка, стен и пола, а также показатель помещения, по нормативным таблицам находим коэффициент использования светового потока светильника: з = 0,47. [17]
Число светильников типа УСП-35 общего освещения N по плану помещения (с условным размещением светильников) составляет 4 шт.
Тогда по формуле (1):
Е = (2480 · 4 · 0,47 · 4) / (19,2 · 1,5 · 1,2) = 539,63 лк.
Работа оператора ПЭВМ относится к категории работ высокой точности (наименьший размер объекта различения - от 0,3 до 0,5 мм), что соответствует III разряду зрительных работ. [13]
Значение минимальной нормируемой освещенности Е для III разряда зрительных работ составляет 300 лк. [13]
При выбранных типах светильника и лампы освещенность рабочего места оператора ПЭВМ составила 539,63 лк, что соответствует норме. Таким образом, типы ламп и светильников, а также их количество в помещении бы ли выбраны верно.
5.2 Проектирование рабочего места оператора системы с учетом тре бований санитарных норм
Рабочее место -- место, где работник должен находиться и где он выполняет работу в режиме и условиях, предусмотренных нормативно-технической документацией [3].
Рабочее место оператора - это место в системе «человек - машина - среда», оснащенное средствами отображения информации, органами управления и вспомогательным оборудованием, на котором осуществляется его трудовая деятельность. Рабочее место, хорошо приспособленное к трудовой деятельности инженера, правильно и целесообразно организованное, в отношении пространства, формы, размера обеспечивает ему удобное положение при работе и высокую производительность труда при наименьшем физическом и психическом напряжении.
Согласно ГОСТ 12.2.032-78 конструкция рабочего места и взаимное расположение всех его элементов должно соответствовать антропометрическим, физическим и психологическим требованиям. Большое значение имеет также характер работы. В частности, при организации рабочего места программиста должны быть соблюдены следующие основные условия:
ѕ оптимальное размещение оборудования, входящего в состав рабочего места;
ѕ достаточное рабочее пространство, позволяющее осуществлять все необходимые движения и перемещения;
ѕ необходимо естественное и искусственное освещение для выполнения поставленных задач;
ѕ уровень акустического шума не должен превышать допустимого значения.
Спроектируем рабочее место оператора системы агентства недвижимости. Оператор системы агентства недвижимости в основном находится в положении сидя, подвижность во время работы - ограничена, радиус рабочей зоны 38 - 50 см. Это работа, производимая сидя и не требующая физического напряжения, при которой расход энергии составляет не более 628 кДж/ч.
Конструкция рабочего стола обеспечивает оптимальное размещение на рабочей поверхности используемого оборудования с учетом его количества, конструктивных особенностей и характера выполняемой работы. Экран монитора находится от глаз пользователя на оптимальном расстоянии 600 - 700 мм. Высота рабочей поверхности стола не регулируется, и поэтому составляет 725 мм.
Конструкция рабочего стула обеспечивает поддержание рациональной рабочей позы при работе с ПЭВМ, позволять изменять позу с целью снижения статического напряжения мышц шейно-плечевой области спины, предотвратить утомление. Рабочий стул (кресло) является подъёмно-поворотным и регулируемым по высоте и углам наклона сиденья и спинки. Ширина и глубина поверхности сиденья рабочего кресла составляет 425 мм. Высота поверхности сиденья регулируется в пределах 400 - 550 мм. Высота опорной поверхности спинки составляет 300 ± 20 мм, ширина - 450 мм. Рабочее кресло имеет съемные подлокотники длиной 380 мм и шириной 65 мм. Внутреннее расстояние между подлокотниками составляет 450 мм.
Примерные размеры элементов оператора системы приведены на рисунке 5.1.
а) Вид сверху
б) Вид сбоку
Рисунок 5.1 - Рабочее место оператора системы агентства недвижимости
1 - монитор; 2 - клавиатура; 3 - мышь; 4 - системный блок; 5 - рабочее кресло.
Рабочее место с ПЭВМ по отношению к световому проему располагается так, что естественный свет падает с левого бока. Оконные проемы оборудованы регулируемыми жалюзи. Расстояние между видеомониторами, в направлении тыла одного видеомонитора и экрана другого составляет 2,5 м.
Расположение рабочих мест операторов показано на рисунке 5.2.
Создание благоприятных условий труда и правильное эстетическое оформление рабочих мест на производстве имеет большое значение, как для облегчения труда, так и для повышения его привлекательности, положительно влияющей на производительность труда. Окраска помещений и мебели должна способствовать созданию благоприятных условий для зрительного восприятия, хорошего настроения. В служебных помещениях, в которых выполняется однообразная умственная работа, требующая значительного нервного напряжения и большого сосредоточения, окраска должна быть спокойных тонов - малонасыщенные оттенки холодного зеленого или голубого цветов.
Рисунок 5.2 - Расположение рабочих мест операторов
1, 2 - окно;
3, 4 - рабочий стол;
5, 6 - ПЭВМ;
7, 8 - рабочее кресло;
9 - дверь;
10 - стеллаж.
При разработке оптимальных условий труда оператора системы необходимо учитывать освещенность, шум и микроклимат.
Для поддержания состояния микроклимата на требуемом уровне необходимо следить за показателями микроклимата, так как их отклонение от оптимальных показателей может привести к дискомфорту и падению производительности труда.
Для подачи в помещение воздуха используются системы механической вентиляции и кондиционирования, а также естественная вентиляция.
Системы отопления и системы кондиционирования установлены так, что ни теплый, ни холодный воздух не направляются на людей. Температура воздуха у поверхности пола и на уровне головы не отличается более, чем на 5 градусов. В производственных помещениях помимо естественной вентиляции предусматривают приточно-вытяжную вентиляцию. Основным параметром, определяющим характеристики вентиляционной системы, является кратность обмена, т.е. сколько раз в час сменится воздух в помещении.
Уровень шума в помещении, в котором находится рабочее место оператора системы, не превышает 55 дБ.
Рациональное освещение рабочего места является одним из важнейших факторов, влияющих на эффективность трудовой деятельности человека, предупреждающих травматизм и профессиональные заболевания. Правильно организованное освещение создает благоприятные условия труда, повышает работоспособность и производительность труда. Освещение на рабочем месте программиста должно быть таким, чтобы работник мог без напряжения зрения выполнять свою работу. Утомляемость органов зрения зависит от ряда причин: недостаточность освещенности; чрезмерная освещенность; неправильное направление света.
Недостаточность освещения приводит к напряжению зрения, ослабляет внимание, приводит к наступлению преждевременной утомленности.
Чрезмерно яркое освещение вызывает ослепление, раздражение и резь в глазах. Неправильное направление света на рабочем месте может создавать резкие тени, блики, дезориентировать работающего. Все эти причины могут привести к несчастному случаю или профзаболеваниям, поэтому столь важен правильный расчет освещенности.
Освещение помещения является смешанным. В качестве источников искусственного освещения используются люминесцентные лампы ЛБ-40, которые попарно объединены в светильники УСП-35. Эти светильники расположены над рабочими поверхностями в равномерно - прямоугольном порядке. При этом коэффициент естественного освещения должен быть не ниже 1,5%. Освещенность на поверхности стола в зоне размещения рабочего документа равна 300 - 500 лк.
По сравнению с лампами накаливания, достоинством люминесцентных ламп является: по спектральному составу света они близки к дневному, естественному освещению; обладают более высоким КПД (в 1.5-2 раза выше, чем КПД ламп накаливания); обладают повышенной светоотдачей (в 3-4 раза выше, чем у ламп накаливания); более длительный срок службы.
5.3 Использование средств индивидуальной защиты при чрезвычайных ситуациях
Чрезвычайная ситуация (ЧС) - это обстановка на определенной территории, сложившаяся в результате аварии, опасного природного явления, катастрофы, стихийного или иного бедствия, которые могут повлечь или повлекли за собой человеческие жертвы, ущерб здоровью людей или окружающей природной среде, значительные материальные потери и нарушение условий жизнедеятельности людей [18].
Гражданская оборона (ГО) - система мероприятий по подготовке к защите и по защите населения, материальных и культурных ценностей на территории Российской федерации от опасностей, возникающих при ведении военных действий или вследствие этих действий [4].
Одним из основных принципов защиты населения в ЧС является использование средств индивидуальной и медицинской защиты.
5.3.1 Средства индивидуальной защиты в системах гражданской обороны и чрезвычайных ситуаций
Средства индивидуальной защиты (СИЗ) - средства, используемые работником для предотвращения или уменьшения воздействия вредных и опасных производственных факторов, а также для защиты от загрязнения [8]. СИЗ применяются в тех случаях, когда безопасность работ не может быть обеспечена конструкцией оборудования, организацией производственных процессов, архитектурно-планировочными решениями и средствами коллективной защиты.
Средства индивидуальной защиты в зависимости от назначения подразделяют на классы: костюмы изолирующие; средства защиты органов дыхания; одежда специальная защитная; средства защиты ног; средства защиты рук; средства защиты головы; средства защиты лица; средства защиты глаз; средства защиты органа слуха; средства защиты от падения высоты и другие предохранительные средства; средства дерматологические защитные; средства защиты комплексные [18].
5.3.2 Средства индивидуальной защиты кожи и органов дыхания
По принципу действия СИЗ бывают фильтрующие и изолирующие.
Фильтрующие средства индивидуальной защиты кожи (СИЗК) - это средства из материала, пропитанного специальными составами, обеспечивающими нейтрализацию или сорбцию АХОВ. (Аварийно химически опасное вещество - опасное химическое вещество, применяемое в промышленности и сельском хозяйстве, при аварийном выбросе (разливе) которого может произойти заражение окружающей среды в поражающих живой организм концентрациях [8]). Фильтрующие СИЗ наиболее просты, надежны и не ограничивают работающему свободу движения.
К фильтрующим СИЗК относятся: общевойсковой комплексный защитный костюм - ОКЗК; общевойсковой комплексный защитный костюм модернизированный - ОКЗК-М; защитная фильтрующая одежда - ЗФО-1; костюмы противощелочно - кислотные - КПК; защитный комплект ФЛ-Ф, КЗХИ, ПЗО-2; защитная одежда - АРК-1 (ослабляет ионизирующие излучения) [15].
К фильтрующим средствам индивидуальной защиты органов дыхания (СИЗ ОД) относятся: промышленные противогазы - ПФМ-1, ППФ-95; гражданские противогазы всех модификаций - ГП-5, ГП-7, ПДФ-Ш, ПДФ-Д, ПДФ-7; дополнительный гопкалитовый патрон - ДГП-3, патрон защитный универсальный - ПЗУ к ГП-5,7; камеры защитные детские - КЗД-4, КЗД-6; противопыльная тканевая маска - ПТМ-1; ватно-марлевая повязка; респираторы патронные с резиновой полумаской - РПА-1, РПГ-67, РП-91Ш, «Астра-2»; фильтрующе-поглощающие полумаски - У-2ГП, «Алина-А», «Кама-2000ГП», А-ПАН; фильтрующие полумаски (противоаэрозольные) - «Кама-200», «Лепесток», Р-2, У-2К [18].
В фильтрующих противогазах воздух очищается от вредных веществ за счет фильтрации при прохождении через защитный элемент. Время защитного действия определяется динамической активностью наполнителя коробки. Для ГП-7 это время составляет 7 часов при концентрации веществ в воздухе 0,1 мг/л.
Для защиты от грубодисперсной пыли (размер частиц более 1мкм) применяются респираторы (независимо от обозначения названия и числа) возможно при запыленности превышает ПДК не более чем в 200 раз. Каждый из респираторов имеет определенной назначение и применяется на определенном содержании в воздухе кислорода, на защиту от определенных веществ или группы веществ при определенных концентрациях. Ограничен и срок его работы. Так, респиратор РПГ-67 применяется, когда кислорода в воздухе не менее 16%, РПГ-67 выпускается четырех марок (РПГ-67А; РПГ-67В; РПГ-67КД; РПГ067Г) в зависимости от марки фильтрующих патронов. Марка РПГ-67А рассчитана на пары органических веществ (бензин, керосин, ацетон, спирты, бензол и его гомологи, эфиры и др., пары хлор - и фосфорорганических ядохимикатов). При содержании бензола 10мг/м3 время защитного действия не менее 60мин. Основные данные и назначение респираторов и противогазов приведены в паспорте. При значительном содержании вредных веществ и недостатке кислорода в воздухе ИП-46М; ИП-4; ИП-5.
Использование фильтрующих СИЗ запрещено в следующих случаях:
· объемная доля кислорода в воздухе менее 18%;
· в воздухе содержаться вещества, защита от которых не предусмотрена инструкцией по эксплуатации;
· в воздухе содержаться неизвестные вредные вещества, а так же низкокипящие и плохо сорбирующиеся органические вещества, такие как, метан, этан, бутан, этилен, ацетилен и т.д.
Если же содержание кислорода в воздухе меньше 18% или наличие вредных веществ более 0,5% по объему, в этих случаях нужно применять изолирующие СИЗ.
Изолирующие СИЗК изготавливают из прорезиненной ткани и применяют при длительном нахождении людей на зараженной территории, при выполнении дегазационных и дезинфекционных работ в очагах поражения и зонах заражения.
К изолирующим средствам защиты кожи относятся: общевойсковой защитный комплект ОЗК, легкий защитный костюм Л-1; защитный комплекты КИХ-4, КИХ-5; комплект защитный аварийный - КЗА; изолирующий комплект с вентилируемым подкостюмным пространством - Ч20; изолирующий костюм ИЕ-1. Как правило, большинство СИЗ используются как для защиты гражданских лиц, так и личного состава войсковых подразделений.
Действие изолирующих противогазов и спасателей основано на использовании химически связанного кислорода. Они имеют замкнутую маятниковую схему дыхания: выдыхаемый человеком воздух попадает в генеративный патрон, в котором поглощаются выделенный человеком углекислый газ и пары воды, а взамен выделяет кислород. Затем дыхательная смесь из дыхательного мешка снова проходит через генеративный патрон, дополнительно очищается и поступает для дыхания.
К изолирующим СИЗ ОД относятся изолирующие противогазы - ИП-4, ИП-5, ИП-6, ИП-7. Время защиты в ИП-4 при легкой работе равно трем часам, при тяжелой - 30 минут. В ИП-5 можно вести водолазные работы продолжительностью до 2 часов, на поверхности земли время защитного действия составляет 3,3 часа.
Своевременное и умелое использование СИЗ обеспечивает надежную защиту от отравляющих веществ (ОВ), светового излучения ядерных взрывов (СИЯВ), радиоактивной пыли (РП), радиоактивных веществ (РВ), бактериальных (биологических) аэрозолей (БА), оксида углерода и позволяет выполнять отдельные задачи в среде, лишенной кислорода. СИЗ обеспечивают также кратковременную защиту от открытого пламени.
ЗАКЛЮЧЕНИЕ
В рамках данного дипломного проекта выполнен системный анализ предметной области, поиск аналогов и их изучение, разработана структура системы, концептуальная, логическая и физическая модели данных. Реализованы подсистемы размещения, поиска, редактирования объявлений об аренде недвижимости, подсистема разделения ролей в системе, а так же веб-сервис для обеспечения взаимодействия пользователя и системы с помощью браузера.
В процессе выполнения дипломного проектирования былотак же произведено организационно-экономическое обоснование необходимости разработки информационно-аналитической системы агентства недвижимости с расчетом затрат на разработку и эксплуатацию системы, которое выявило экономическую эффективность данной разработки.
В разделе безопасность жизнедеятельности были рассмотрены вопросы рабочего места оператора ПЭВМ при эксплуатации персонального компьютера, расчет искусственного освещения на рабочем месте оператора ПК, а так же средства коллективной защиты населения при ЧС.
В настоящее время разработка системы все еще не прекращена, так как она спроектирована только с теоретической стороны, и реальное ее использование обязательно потребует изменений, возможно достаточно серьезных.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Атаманюк В.Г. Ширшев Л.Г. Акимов Н.И. Гражданская оборона // Учебник для вузов. Под ред. Михайлика Д.И. - М.: Высш. шк., 1986.
2. Белов С. В. Безопасность жизнедеятельности. - М.: Высш. шк., 2008.
3. ГОСТ 12.2.032-78 ССБТ. Рабочее место при выполнении работ сидя. Общие эргономические требования. - М., 2001.
4. Гражданская защита. Понятийно-терминологический словарь [Электронный ресурс]. URL: http://civil_protection.academic.ru/
5. Зайцева И.В., Никитенко А.В. Организационно-экономическое обоснование технических решений с программным обеспечением: Методические указания к дипломному и курсовому проектированию / Юж.-Рос. гос. техн. ун-т.- Новочеркасск: ЮРГТУ, 2005.- 32 с.
6. Отдел по делам ГО и ЧС. Средства индивидуальной защиты. Нижегородский государственный технический университет [Электронный ресурс]. URL: http://www.nntu.ru/RUS/otd_sl/ gochs/people_protect/
7. РемАрт: Коэффициент отражения. Отражение света от различных поверхностей. - 2012 [Электронный ресурс]. URL: http://remartspb.ru/infopages/kojefficient_otrazhenija.php
8. Российская энциклопедия по охране труда: В 3 т. -- 2-е изд., перераб. и доп. -- М.: Изд-во НЦ ЭНАС,2007.
9. СанПиН 2.2.1/2.1.1.1278-03. Гигиенические требования к естественному, искусственному и совмещенному освещению жилых и общественных зданий. - М., 2003.
10. СанПин 2.2.2/2.4.1340-03. Гигиенические требования к персональным электронно-вычислительным машинам и организации работы. - М., 2003.
11. СанПиН 2.2.4.548-96. Гигиенические требования к микроклимату производственных помещений. - М., 1997.
12. СанПиН 2.6.1.07-03. Гигиенические требования к проектированию предприятий и установок атомной промышленности (СПП ПУАП-03). - М., 2003.
13. СП 52.13330.2011. Естественное и искусственное освещение. - М., 2010.
14. Справочная книга по светотехнике/ Под ред. Белов и др.; - М., 1999.
15. Средства индивидуальной защиты органов дыхания. СпецОдежда [Электронный ресурс]. URL: http://unionalls.ru/Средства_ индивидуальной_защиты_органов_дыхания
16. Стивен Сандерсон. ASP.NET MVC Framework с примерами на C# (для профессионалов) - изд. дом «Вильямс» - 2010. - 560 с.
17. Фролов А. В. Безопасность жизнедеятельности. Ростов-на-Дону, 2008.
18. Шупляк Н.Г. Основы защиты населения и территории в чрезвычайных ситуациях. Новочеркасск, 2010.
19. [Электронный ресурс]. URL: http://www.ltcompany.com/UserFiles/ LT_Table.pdf
20. [Электронный ресурс].URL: http://metanit.com/sharp/mvc/
21. [Электронный ресурс].URL: http://habrahabr.ru
ПРИЛОЖЕНИЕ А. ЛИСТИНГ ПРОГРАММЫ
Файл GetData.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web.Mvc;
using Mvc4Application.Models;
using MvcEmptyApp.Models;
namespace Mvc4Application.Methods {
public static class GetData {
static ContextDB _db = new ContextDB();
/// <summary>
/// Ищетобъявления
/// </summary>
/// <param name="search">Параметрыдляпоиска</param>
/// <param name="userName">Логин пользователя, который осуществляет поиск</param>
/// <returns></returns>
public static Search SearchRent(Search search, string userName) {
Guid userId = GetData.GetUserId(userName);
bool userIsAdmin = UserIsAdmin(userId);
Search result = new Search();
result.Types = GetAllAppartmentTypes().ToArray();
result.Zones = GetAllAppartmentZones().ToArray();
result.AllPrice = GetAllAppartmentPrices();
result.Cities = GetAllAppartmentCities().ToArray();
result.RentData = new List<Rent>();
//object s = sort;
if (search == null || search.FirstBoot) {
result.MinPrice = 3000;
result.MaxPrice = 10000;
result.FirstBoot = true;
var data = from item in _db.Appartments
join type in _db.AppartmentTypes
on item.Type equals type.Id
join zone in _db.AppartmentZones
on item.Zone equals zone.Id
where (
(1 == 1)
)
orderby item.Price ascending
select new {
item.Id,
type.TypeName,
zone.ZoneName,
zone.ZoneNameGenitive,
item.Daily,
item.WithoutOwners,
item.RoomCount,
item.Price,
item.Description,
item.RegisteredBy,
item.Number
};
//data.OrderBy<>
foreach (var item in data) {
result.RentData.Add(new Rent() {
Id = item.Id,
Type = item.TypeName,
ZoneGenitive = item.ZoneNameGenitive,
Zone = item.ZoneName,
Daily = item.Daily,
WithoutOwners = item.WithoutOwners,
RoomCount = item.RoomCount,
Price = item.Price,
Description = item.Description,
Editable = (userId != Guid.Empty) && (item.RegisteredBy == userId || userIsAdmin),
Number = item.Number
});
}
if (search != null)
switch (search.Sort) {
case "Type":
result.RentData.Sort(delegate(Rent r1, Rent r2)
{ return r1.Type.CompareTo(r2.Type); });
break;
case "Zone":
result.RentData.Sort(delegate(Rent r1, Rent r2)
{ return r1.Zone.CompareTo(r2.Zone); });
break;
case "Room":
result.RentData.Sort(delegate(Rent r1, Rent r2)
{ return r1.RoomCount.CompareTo(r2.RoomCount); });
break;
default:
result.RentData.Sort(delegate(Rent r1, Rent r2)
{ return r1.Price.CompareTo(r2.Price); });
break;
}
} else {
if (search.SelectedTypes == null)
search.SelectedTypes = new string[] { "" };
if (search.SelectedZones == null)
search.SelectedZones = new string[] { "" };
var data = from item in _db.Appartments
join type in _db.AppartmentTypes
on item.Type equals type.Id
join zone in _db.AppartmentZones
on item.Zone equals zone.Id
join drs in _db.Addresses
on item.Id equals drs.Id
where
search.Number != "" ? item.Number == search.Number :
(search.SelectedTypes.Contains(type.TypeName) &&
(search.SelectedZones.Contains(zone.ZoneName)) &&
(search.WithoutOwners == true ? item.WithoutOwners == search.WithoutOwners : 1 == 1) &&
(search.Daily == true ? item.Daily == search.Daily : 1 == 1) &&
(item.Price >= search.MinPrice) &&
(item.Price <= search.MaxPrice) &&
(drs.City == search.City)
)
select new {
item.Id,
type.TypeName,
zone.ZoneName,
zone.ZoneNameGenitive,
item.Daily,
item.WithoutOwners,
item.RoomCount,
item.Price,
item.Description,
item.RegisteredBy,
item.Number
};
foreach (var item in data) {
result.RentData.Add(new Rent() {
Id = item.Id,
Type = item.TypeName,
ZoneGenitive = item.ZoneNameGenitive,
Zone = item.ZoneName,
Daily = item.Daily,
WithoutOwners = item.WithoutOwners,
RoomCount = item.RoomCount,
Price = item.Price,
Description = item.Description,
Editable = (userId != Guid.Empty) && (item.RegisteredBy == userId || userIsAdmin),
Number = item.Number
});
}
switch (search.Sort) {
case "Type":
result.RentData.Sort(delegate(Rent r1, Rent r2)
{ return r1.Type.CompareTo(r2.Type); });
break;
case "Zone":
result.RentData.Sort(delegate(Rent r1, Rent r2)
{ return r1.Zone.CompareTo(r2.Zone); });
break;
case "Room":
result.RentData.Sort(delegate(Rent r1, Rent r2)
{ return r1.RoomCount.CompareTo(r2.RoomCount); });
break;
default:
result.RentData.Sort(delegate(Rent r1, Rent r2)
{ return r1.Price.CompareTo(r2.Price); });
break;
}
}
return result;
}
/// <summary>
/// Ищетобъявлениеарендыпо id
/// </summary>
/// <param name="parId">Id объявления</param>
/// <param name="userName">Логин пользователя, который осуществляет поиск</param>
/// <returns></returns>
public static Rent GetRentData(Guid parId, string userName) {
Guid userId = GetData.GetUserId(userName);
bool userIsEmployee = UserIsEmployee(userId);
bool userIsAdmin = UserIsAdmin(userId);
bool allowedUser = AllowedUser(userName, parId.ToString());
Rent rent = new Rent();
var rentData = from item in _db.Appartments
join type in _db.AppartmentTypes
on item.Type equals type.Id
join zone in _db.AppartmentZones
on item.Zone equals zone.Id
join address in _db.Addresses
on item.Id equals address.Id
join user in _db.Users
on item.RegisteredBy equals user.Id
where item.Id == parId
select new {
item.Id,
type.TypeName,
zone.ZoneName,
zone.ZoneNameGenitive,
item.Daily,
item.WithoutOwners,
item.RoomCount,
item.Price,
item.Description,
address.Region,
address.District,
address.City,
address.Street,
address.House,
address.Appartment,
item.Number,
user.Phone
};
foreach (var item in rentData) {
//rent.AllPrice = GetAllAppartmentPrices().ToArray();
rent.Id = item.Id;
rent.Type = item.TypeName;
rent.ZoneGenitive = item.ZoneNameGenitive ?? item.ZoneName;
rent.Zone = item.ZoneName;
rent.Daily = item.Daily;
rent.WithoutOwners = item.WithoutOwners;
rent.RoomCount = item.RoomCount;
rent.Price = item.Price;
rent.Description = item.Description ?? "";
rent.AddrCity = item.City;
rent.AddrStreet = item.Street;
rent.AddrHouse = item.House;
rent.AddrAppartment = item.Appartment;
rent.Number = item.Number;
rent.Phone = item.Phone;
rent.ExtInfo = userIsEmployee || userIsAdmin;
rent.Editable = allowedUser;
}
rent.Photos = GetPhotos(parId);
return rent;
}
/// <summary>
/// Получение списка типов недвижимости
/// </summary>
/// <returns></returns>
public static List<SelectListItem> GetAllAppartmentTypes() {
List<SelectListItem> list = new List<SelectListItem>();
string[] arr = GetAppTypes();
foreach (var item in arr)
list.Add(new SelectListItem() { Text = item });
list[0].Selected = true;
return list;
}
/// <summary>
/// Получение списка районов недвижимости
/// </summary>
/// <returns></returns>
public static List<SelectListItem> GetAllAppartmentZones() {
List<SelectListItem> list = new List<SelectListItem>();
string[] arr = GetAppZones();
foreach (var item in arr)
list.Add(new SelectListItem() { Text = item });
list[0].Selected = true;
return list;
}
/// <summary>
/// Получение списка цен для недвижимости
/// </summary>
/// <returns></returns>
public static List<SelectListItem> GetAllAppartmentPrices() {
List<SelectListItem> list = new List<SelectListItem>();
list.Clear();
for (int i = 0; i < 30000; i += 1000) {
list.Add(new SelectListItem() {
Text = i.ToString()
});
}
return list;
}
/// <summary>
/// Получение списка городов
/// </summary>
/// <returns></returns>
public static List<SelectListItem> GetAllAppartmentCities() {
List<SelectListItem> list = new List<SelectListItem>();
string[] arr = GetAppCities();
foreach (var item in arr)
list.Add(new SelectListItem() { Text = item });
list[0].Selected = true;
return list;
}
/// <summary>
/// Проверка пароля пользователя
/// </summary>
/// <param name="user">Логин пользователя</param>
/// <param name="pass">Пароль пользователя</param>
/// <returns></returns>
public static bool CheckPass(string user, string pass) {
var data = from item in _db.Users
where item.Login == user
select item.Password;
foreach (var item in data) {
if (item.GetHashCode() == pass.GetHashCode())
return true;
break;
}
return false;
}
/// <summary>
/// Получение массива типов недвижимости
/// </summary>
/// <returns></returns>
public static string[] GetAppTypes() {
List<string> list = new List<string>();
var data = from item in _db.AppartmentTypes
select item.TypeName;
foreach (var item in data) {
if (item != null)
list.Add(item.ToString());
}
list.Sort();
return list.ToArray();
}
/// <summary>
/// Получение массива районов
/// </summary>
/// <returns></returns>
public static string[] GetAppZones() {
List<string> list = new List<string>();
var data = from item in _db.AppartmentZones
select item.ZoneName;
foreach (var item in data) {
if (item != null)
list.Add(item.ToString());
}
list.Sort();
return list.ToArray();
}
/// <summary>
/// Получение массива городов
/// </summary>
/// <returns></returns>
public static string[] GetAppCities() {
List<string> list = new List<string>();
var data = from item in _db.Addresses
select item.City;
foreach (var item in data) {
if (!list.Contains(item.ToString()))
list.Add(item.ToString());
}
list.Sort();
return list.ToArray();
}
/// <summary>
/// Получениемассиваулиц
/// </summary>
/// <param name="city">Город</param>
/// <returns></returns>
public static string[] GetAppStreets(string city) {
List<string> list = new List<string>();
var data = from item in _db.Addresses
where item.City == city
select item.Street;
foreach (var item in data) {
if (!list.Contains(item.ToString()))
list.Add(item.ToString());
}
list.Sort();
return list.ToArray();
}
/// <summary>
/// Возвращает идентификатор типа квартиры, если такого нет, то создает его
/// </summary>
/// <param name="name">названиетипанедвижимости</param>
/// <returns></returns>
public static Guid GetAppTypeID(string name) {
Guid id = Guid.Empty;
var data = from item in _db.AppartmentTypes
where item.TypeName == name
select item.Id;
IEnumerable<Guid> type = data.ToList();
if (type.Count() > 0)
id = type.ElementAt(0);
//foreach (var item in data) {
// id = item;
// break;
//}
if (id == Guid.Empty) {
id = SetData.CreateAppType(name);
}
returnid;
}
/// <summary>
/// Возвращает идентификатор района квартиры, если такого нет, то создает его
/// </summary>
/// <param name="name">названиерайона</param>
/// <returns></returns>
public static Guid GetAppZoneID(string name) {
Guid id = Guid.Empty;
var data = from item in _db.AppartmentZones
where item.ZoneName == name
select item.Id;
IEnumerable<Guid> zone = data.ToList();
if (zone.Count() > 0)
id = zone.ElementAt(0);
//foreach (var item in data) {
// id = item;
// break;
//}
if (id == Guid.Empty) {
id = SetData.CreateAppZone(name);
}
returnid;
}
/// <summary>
/// Проверяет, является ли пользователь сотрудником
/// </summary>
/// <param name="id">идентификаторпользователя</param>
/// <returns></returns>
public static bool UserIsEmployee(Guid id) {
if (id == null || id == Guid.Empty)
return false;
var data = from item in _db.Users
where item.Id == id
select item.Role;
IEnumerable<string> user = data.ToList();
if (user.Count() > 0)
return user.ElementAt(0) == "Employee";
return false;
}
/// <summary>
/// Проверяет, является ли пользователь администратором
/// </summary>
/// <param name="id">идентификаторпользователя</param>
/// <returns></returns>
public static bool UserIsAdmin(Guid id) {
if (id == null || id == Guid.Empty)
return false;
var data = from item in _db.Users
where item.Id == id
select item.Role;
IEnumerable<string> user = data.ToList();
if (user.Count() > 0)
return user.ElementAt(0) == "Admin";
return false;
}
/// <summary>
/// Проверяет, разрешен ли пользователь для данного объявления
/// </summary>
/// <param name="userName">Логинпользователя</param>
/// <param name="idApp">Идентификатор объявления</param>
/// <returns></returns>
public static bool AllowedUser(string userName, string idApp) {
Guid userId = GetUserId(userName);
Guid appId = new Guid(idApp);
if (userId == Guid.Empty || appId == Guid.Empty)
return false;
if (UserIsAdmin(userId))
return true;
var data = from item in _db.Appartments
where item.Id == appId
select item.RegisteredBy;
IEnumerable<Guid> registeredBy = data.ToList();
if (registeredBy.Count() > 0)
if (registeredBy.ElementAt(0) == userId)
return true;
return false;
}
/// <summary>
/// Получает список с именами файлов для данного объявления
/// </summary>
/// <param name="id">Идентификаторобъявления</param>
/// <returns></returns>
public static string[] GetPhotos(Guid id) {
string[] photos = null;
string PhotoDir = GetFullNameImg(id.ToString());
if (Directory.Exists(PhotoDir)) {
photos = Directory.GetFiles(PhotoDir, "*.jpg");
for (int i = 0; i < photos.Count(); i++) {
FileInfo fi = new FileInfo(photos[i]);
photos[i] = fi.Name;
}
}
return photos;
}
/// <summary>
/// Получает путь к файлу по id объявления и имени файла
/// </summary>
/// <param name="id"></param>
/// <param name="name"></param>
/// <returns></returns>
public static string GetFullNameImg(string id, string name) {
string set = System.Configuration.ConfigurationManager.AppSettings["DirForImages"];
string fileName = AppDomain.CurrentDomain.BaseDirectory + set + id + "/" + name;
if (File.Exists(fileName))
return fileName;
else
return null;
}
/// <summary>
/// Получаем путь к папке с файлами по id объявления
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static string GetFullNameImg(string id) {
string set = System.Configuration.ConfigurationManager.AppSettings["DirForImages"];
string dirName = AppDomain.CurrentDomain.BaseDirectory + set + id + "/";
return dirName;
}
/// <summary>
/// Проверяет, есть ли номер объявления в базе
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static bool CheckAppNumber(string number) {
var data = from item in _db.Appartments
where item.Number == number
select item.Id;
IEnumerable<Guid> apps = data.ToList();
if (apps.Count() > 0)
return true;
return false;
}
/// <summary>
/// Получает ид пользователя по логину
/// </summary>
/// <param name="login"></param>
/// <returns></returns>
public static Guid GetUserId(string login) {
Guid id = Guid.Empty;
var data = from item in _db.Users
where item.Login == login
select item.Id;
IEnumerable<Guid> user = data.ToList();
if (user.Count() > 0)
id = user.ElementAt(0);
return id;
}
/// <summary>
/// Получает данные пользователя по логину
/// </summary>
/// <param name="login"></param>
/// <returns></returns>
public static ManageModel GetUser(string login) {
ManageModel model = new ManageModel();
model.Shared = new SharedPath();
//var dbuser = _db.Users.FirstOrDefault(u => u.Login == login);
var data = from item in _db.Users
where item.Login == login
select new {
item.EMail,
item.Phone,
item.Comment,
item.F,
item.I,
item.O,
item.BirthYear
};
foreach (var dbuser in data) {
//IEnumerable<var> dbuser = data.ToList();
//if (dbuser != null) {
model.Shared.Email = dbuser.EMail;
model.Shared.Phone = dbuser.Phone;
model.Shared.Comment = dbuser.Comment;
model.Shared.F = dbuser.F;
model.Shared.I = dbuser.I;
model.Shared.O = dbuser.O;
model.Shared.BirthYear = dbuser.BirthYear;
}
return model;
}
/// <summary>
/// Получает данные для домашней страницы
/// </summary>
/// <returns></returns>
public static Home GetHomeData() {
//throw new Exception("Тестовоеисключение");
Home home = new Home();
home.Data = new List<HomeData>();
var data = (from item in _db.Appartments
join type in _db.AppartmentTypes
on item.Type equals type.Id
join zone in _db.AppartmentZones
on item.Zone equals zone.Id
orderby item.AddDate descending
select new {
item.Id,
type.TypeName,
zone.ZoneName,
zone.ZoneNameGenitive,
item.Price
}).Take(4);
foreach (var item in data) {
home.Data.Add(new HomeData() {
Id = item.Id,
Type = item.TypeName,
Zone = item.ZoneNameGenitive ?? item.ZoneName,
Price = item.Price
});
}
return home;
}
}
}
Файл SetData.cs
using MvcEmptyApp.Models;
using System.Linq;
using System;
using Mvc4Application.Models;
namespace Mvc4Application.Methods {
public class SetData {
private static ContextDB _db = new ContextDB();
private static string _adminCode = System.Configuration.ConfigurationManager.AppSettings["AdminCode"];
private static string _employeeCode = System.Configuration.ConfigurationManager.AppSettings["EmployeeCode"];
/// <summary>
/// Создает учетную запись пользователя
/// </summary>
/// <param name="user">Модель данных пользователя</param>
public static void CreateAndUpdateUser(User user) {
var dbuser = _db.Users.FirstOrDefault(u => u.Login == user.Login);
if (dbuser != null) {
throw new Exception("Пользовательужесуществует");
}
if (user.EMail.IndexOf("@") == -1) {
throw new NotImplementedException("Недопустимаяпочта");
}
user.Id = Guid.NewGuid();
user.Role = user.Comment == _adminCode ? "Admin" :
user.Comment == _employeeCode ? "Employee" : "User";
user.IsActivated = true;
user.IsLockedOut = false;
user.DateOfRegistration = DateTime.Now;
user.LastLockedOutDate = DateTime.Now;
user.LastLoginDate = DateTime.Now;
_db.Users.Add(user);
_db.SaveChanges();
}
/// <summary>
/// Создает новое объявление
/// </summary>
/// <param name="appartment">Данныемодели</param>
/// <param name="registeredBy">Логин пользователя, который создает объявление</param>
/// <returns>Гуид созданного объявления</returns>
public static Guid CreateAppartment(Appartments appartment, string registeredBy = "") {
Guid userId = GetData.GetUserId(registeredBy);
if (userId == Guid.Empty)
return Guid.Empty;
else {
appartment.RegisteredBy = userId;
}
if (appartment.Id == null || appartment.Id == Guid.Empty)
appartment.Id = Guid.NewGuid();
appartment.RegisteredBy = GetData.GetUserId(registeredBy);
appartment.Number = Generate.AppNumber();
appartment.AddDate = DateTime.Now;
_db.Appartments.Add(appartment);
_db.SaveChanges();
return appartment.Id;
}
/// <summary>
/// Создаетновыйадрес
/// </summary>
/// <param name="address">Данныемодели</param>
/// <returns>Гуид созданного адреса</returns>
public static Guid CreateAddress(Addresses address) {
if (address.Id == null || address.Id == Guid.Empty)
address.Id = Guid.NewGuid();
_db.Addresses.Add(address);
_db.SaveChanges();
return address.Id;
}
/// <summary>
/// Создает новый тип недвижимости
/// </summary>
/// <param name="name">Названиетипа</param>
/// <returns></returns>
public static Guid CreateAppType(string name) {
AppartmentTypes appType = new AppartmentTypes();
appType.Id = Guid.NewGuid();
appType.TypeName = name;
_db.AppartmentTypes.Add(appType);
_db.SaveChanges();
return appType.Id;
}
/// <summary>
/// Создаетновыйрайон
/// </summary>
/// <param name="name">Названиерайона</param>
/// <returns></returns>
public static Guid CreateAppZone(string name) {
AppartmentZones appZone = new AppartmentZones();
appZone.Id = Guid.NewGuid();
appZone.ZoneName = name;
_db.AppartmentZones.Add(appZone);
_db.SaveChanges();
return appZone.Id;
}
/// <summary>
/// Обновляетобъявление
/// </summary>
/// <param name="appartment">Данныемодели</param>
/// <returns></returns>
public static bool UpdateAppartment(Appartments appartment) {
var dbapp = _db.Appartments.FirstOrDefault(u => u.Id == appartment.Id);
if (dbapp == null)
return false;
dbapp.Type = appartment.Type;
dbapp.Zone = appartment.Zone;
dbapp.RoomCount = appartment.RoomCount;
dbapp.Price = appartment.Price;
dbapp.WithoutOwners = appartment.WithoutOwners;
dbapp.Daily = appartment.Daily;
dbapp.Description = appartment.Description;
_db.SaveChanges();
return true;
}
/// <summary>
/// Обновляетадрес
/// </summary>
/// <param name="address">Данныемодели</param>
/// <returns></returns>
public static bool UpdateAddress(Addresses address) {
var dbapp = _db.Addresses.FirstOrDefault(u => u.Id == address.Id);
if (dbapp == null)
return false;
dbapp.Region = address.Region;
dbapp.District = address.District;
dbapp.City = address.City;
dbapp.Street = address.Street;
dbapp.House = address.House;
dbapp.Appartment = address.Appartment;
_db.SaveChanges();
return true;
}
/// <summary>
/// Удаляет объявление
/// </summary>
/// <paramname="id">Идентификаторобъявления</param>
/// <returns></returns>
public static bool DeleteAppartment(Guid id) {
var dbapp = _db.Appartments.FirstOrDefault(u => u.Id == id);
if (dbapp != null)
_db.Appartments.Remove(dbapp);
var dbaddr = _db.Addresses.FirstOrDefault(u => u.Id == id);
if (dbaddr != null)
_db.Addresses.Remove(dbaddr);
_db.SaveChanges();
return true;
}
/// <summary>
/// Обновляет данные пользователя
/// </summary>
/// <param name="login">Логин пользователя</param>
/// <param name="model">Данныемодели</param>
/// <returns></returns>
public static bool UpdateUser(string login, ManageModel model) {
try {
var dbuser = _db.Users.FirstOrDefault(u => u.Login == login);
dbuser.Phone = model.Shared.Phone;
dbuser.EMail = model.Shared.Email;
dbuser.Comment = model.Shared.Comment;
dbuser.Role = model.Shared.Comment == _adminCode ? "Admin" :
model.Shared.Comment == _employeeCode ? "Employee" : "User";
dbuser.F = model.Shared.F;
dbuser.I = model.Shared.I;
dbuser.O = model.Shared.O;
dbuser.BirthYear = model.Shared.BirthYear;
_db.SaveChanges();
return true;
} catch {
return false;
}
}
}
}
Файл Captcha.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace Mvc4Application.Methods {
/// <summary>
/// Генерациякапчи
/// </summary>
public class Captcha {
public const string CaptchaValueKey = "CaptchaImageText";
public string Text {
get { return text; }
}
public Bitmap Image {
get { return image; }
}
public int Width {
get { return width; }
}
public int Height {
get { return height; }
}
// Internal properties.
private string text;
private int width;
private int height;
private string familyName;
private Bitmap image;
// For generating random numbers.
private Random random = new Random();
public Captcha(string s, int width, int height) {
text = s;
SetDimensions(width, height);
GenerateImage();
}
public Captcha(string s, int width, int height, string familyName) {
text = s;
SetDimensions(width, height);
SetFamilyName(familyName);
GenerateImage();
}
// ===========================================================
// This member overrides Object.Finalize.
// ===========================================================
~Captcha() {
Dispose(false);
}
// ===========================================================
// Releases all resources used by this object.
// ===========================================================
public void Dispose() {
GC.SuppressFinalize(this);
Dispose(true);
}
// ===========================================================
// Custom Dispose method to clean up unmanaged resources.
// ===========================================================
protected virtual void Dispose(bool disposing) {
if (disposing)
// Dispose of the bitmap.
image.Dispose();
}
// ===========================================================
// Sets the image aWidth and aHeight.
// ===========================================================
private void SetDimensions(int aWidth, int aHeight) {
// Check the aWidth and aHeight.
if (aWidth <= 0)
throw new ArgumentOutOfRangeException("aWidth", aWidth, "Argument out of range, must be greater than zero.");
if (aHeight <= 0)
throw new ArgumentOutOfRangeException("aHeight", aHeight, "Argument out of range, must be greater than zero.");
width = aWidth;
height = aHeight;
}
// ===========================================================
// Sets the font used for the image text.
// ===========================================================private void SetFamilyName(string aFamilyName) {
// If the named font is not installed, default to a system font.
try {
Font font = new Font(aFamilyName, 12F);
familyName = aFamilyName;
font.Dispose();
} catch (Exception) {
familyName = FontFamily.GenericSerif.Name;
}
}
// ===========================================================
// Creates the bitmap image.
// ===========================================================
private void GenerateImage() {
// Create a new 32-bit bitmap image.
Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb);
// Create a graphics object for drawing.
Graphics g = Graphics.FromImage(bitmap);
g.SmoothingMode = SmoothingMode.AntiAlias;
Rectangle rect = new Rectangle(0, 0, width, height);
// Fill in the background.
HatchBrush hatchBrush = new HatchBrush(HatchStyle.SmallConfetti, Color.LightGray, Color.White);
g.FillRectangle(hatchBrush, rect);
// Set up the text font.
SizeF size;
float fontSize = rect.Height + 1;
Font font;
// Adjust the font size until the text fits within the image.
do {
fontSize--;
font = new Font(familyName, fontSize, FontStyle.Bold);
size = g.MeasureString(text, font);
} while (size.Width > rect.Width);
// Set up the text format.
StringFormat format = new StringFormat();
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
// Create a path using the text and warp it randomly.
GraphicsPath path = new GraphicsPath();
path.AddString(text, font.FontFamily, (int)font.Style, font.Size, rect, format);
float v = 4F;
PointF[] points =
{
new PointF(random.Next(rect.Width) / v, random.Next(rect.Height) / v),
new PointF(rect.Width - random.Next(rect.Width) / v, random.Next(rect.Height) / v),
new PointF(random.Next(rect.Width) / v, rect.Height - random.Next(rect.Height) / v),
new PointF(rect.Width - random.Next(rect.Width) / v, rect.Height - random.Next(rect.Height) / v)
};
Matrix matrix = new Matrix();
matrix.Translate(0F, 0F);
path.Warp(points, rect, matrix, WarpMode.Perspective, 0F);
// Draw the text.
hatchBrush = new HatchBrush(HatchStyle.LargeConfetti, Color.LightGray, Color.DarkGray);
g.FillPath(hatchBrush, path);
// Add some random noise.
int m = Math.Max(rect.Width, rect.Height);
for (int i = 0; i < (int)(rect.Width * rect.Height / 30F); i++) {
int x = random.Next(rect.Width);
int y = random.Next(rect.Height);
int w = random.Next(m / 50);
int h = random.Next(m / 50);
g.FillEllipse(hatchBrush, x, y, w, h);
}
// Clean up.
font.Dispose();
hatchBrush.Dispose();
g.Dispose();
// Set the image.
image = bitmap;
}
}
}
Размещено на Allbest.ru
Подобные документы
Понятие базы данных, модели данных. Классификация баз данных. Системы управления базами данных. Этапы, подходы к проектированию базы данных. Разработка базы данных, которая позволит автоматизировать ведение документации, необходимой для деятельности ДЮСШ.
курсовая работа [1,7 M], добавлен 04.06.2015Построение инфологической (концептуальной) модели предметной области. Проектирование логической и физической структуры базы данных. Реализация проекта в среде конкретной СУБД. Организация корректировки и ввода данных в БД. Разработка интерфейса.
курсовая работа [1,4 M], добавлен 14.01.2018Освоение сервисной системы управления базами данных Microsoft SQL. Разработка базы данных "Служба АТС" в среде Microsoft SQL Server Management Studio и создание запросов на языке SQL. Апробация инфологической модели "сущность - связь" базы данных.
курсовая работа [2,9 M], добавлен 29.06.2015Понятие и порядок разработки базы данных, ее основные составные части и назначение. Построение базы данных консалтингового агентства на основе инфологической модели, отражаемые сущности и связи между ними. Особенности реализации базы данных в MS ACCESS.
курсовая работа [2,5 M], добавлен 04.03.2010Особенности разработки инфологической модели и создание структуры реляционной базы данных. Основы проектирования базы данных. Разработка таблиц, форм, запросов для вывода информации о соответствующей модели. Работа с базами данных и их объектами.
курсовая работа [981,4 K], добавлен 05.11.2011Описание предметной области разрабатываемой базы данных для теннисного клуба. Обоснование выбора CASE-средства Erwin 8 и MS Access для проектирования базы данных. Построение инфологической модели и логической структуры базы данных, разработка интерфейса.
курсовая работа [3,8 M], добавлен 02.02.2014Семантическое моделирование данных. Основные понятия модели Entity-Relationship. Построение инфологической модели в виде диаграммы "Таблица-связь". Проектирование физической модели базы данных. Разработка формы заставки, главной, вторичных кнопочных форм.
курсовая работа [1,5 M], добавлен 26.06.2012Исследование значения информации и информационных услуг в современном мире. Изучение истории хранения и обработки информации. Проектирование инфологической модели базы данных. Реляционная модель баз данных. Домены и отношения. Реляционное исчисление.
курсовая работа [47,9 K], добавлен 13.07.2015Характеристика основных этапов разработок и проектирования базы данных, определение целей ее создания и функциональных особенностей, предметной области и необходимой информации. Требования к инфологической модели. Методы физической организации данных.
курсовая работа [1,7 M], добавлен 22.02.2011Принципы построения СУБД, их достоинства. Архитектура распределенной информационной системы. Разработка интернет-магазина рынка книг: построение физической модели данных на языке SQL, проектирование схемы базы данных с использованием веб-интерфейса.
курсовая работа [2,3 M], добавлен 01.11.2011