Аис библиотека курсовая работа

Автоматизированные информационные системы в работе библиотеки

ГФ
ГБОУ СПО

Пензенский
профессионально-педагогический

Курсовая
работа

Тема:
Автоматизированные информационные системы

Выполнила:
Турецкова Елена

студентка очного
отделения

группы ПИНФ-31

руководитель:
Ликсина Е.В.

ПЕНЗА
2012

Содержание

Введение

Автоматизированные
информационные системы и их классификация

Этапы
проектирования автоматизированных информационных систем

Средства
создания АИС

Анализ
предметной области «Библиотека» на примере Центральной районной библиотеки
Муниципального бюджетного Учреждения Городищенского района Пензенской области

Заключение

Введение

Автоматизированная информационная система — это
совокупность программных и аппаратных средств, предназначенных для хранения и (или)
управления данными и информацией, а также для производства вычислений.

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

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

Необходимо создание АИС «Библиотека» с учетом
специфики работы Центральной районной библиотеки Муниципального бюджетного
учреждения Городищенского района Пензенской области. Поэтому нами была выбрана
тема курсовой работы: «Автоматизированные информационные системы в работе
библиотеки».

Объектом исследования является особенности
создания АИС.

Предмет исследования: возможности применения АИС
в работе Центральной районной библиотеки Муниципального бюджетного учреждения
Городищенского района Пензенской области.

Цель курсовой работы: изучить особенности
применении АИС в работе библиотеки.

Задачи курсовой работы:

провести анализ литературы по проблеме
исследования;

изучить особенности применения
автоматизированных информационных систем в работе библиотеки;

рассмотреть средства создания АИС;

провести анализ предметной области «Библиотека»
на примере Центральной районной библиотеки Муниципального бюджетного учреждения
Городищенского района Пензенской области.

Автоматизированные информационные системы и их
классификация

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

Опыт создания АИС, внедрение в практику
экономической работы оптимизационных методов, формализация ситуаций
производственно — хозяйственных процессов, оснащение государственных и
коммерческих структур современными вычислительными средствами коренным образом
видоизменили технологию информационных процессов в управлении. Повсеместно
создаются АИС управленческой деятельности. Автоматизированные информационные
системы разнообразны и могут быть классифицированы по ряду признаков. Так как
классификация объекта управления очевидна, рассмотрим следующие признаки. По
видам процессов управления АИС подразделяются на:

АИС управления технологическими процессами — это
человеко-машинные системы, обеспечивающие управление технологическими
устройствами, станками, автоматическими линиями.

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

Для АИС организационного управления объектом
служат производственно-хозяйственные, социально-экономические функциональные
процессы, реализуемые на всех уровнях управления экономикой, в частности:

банковские АИС;

АИС фондового рынка;

страховые АИС;

налоговые АИС;

АИС таможенные службы;

статистические АИС;

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

Следующая классификация систем и подсистем КИС.
В зависимости от уровня обслуживания производственных процессов на предприятии
сама КИС или его составная часть (подсистемы) могут быть отнесены к различным
классам[19]:

Класс А: системы (подсистемы) управления
технологическими объектами и/или процессами.

Класс В: системы (подсистемы) подготовки и учета
производственной деятельности предприятия.

Класс С: системы (подсистемы) планирования и
анализа производственной деятельности предприятия. Системы (подсистемы) класса
А — системы (подсистемы) контроля и управления технологическими объектами и/или
процессами. Эти системы, как правило, характеризуются следующими свойствами:

достаточно высоким уровнем автоматизации
выполняемых функций;

наличием явно выраженной функции контроля за
текущим состоянием объекта управления;

наличием контура обратной связи.

Объектами контроля и управления такой системы
выступают:

технологическое оборудование;

датчики;

исполнительные устройства и механизмы.

Малым временным интервалом обработки данных
(т.е. интервалом времени между получением данных о текущем состоянии объекта
управления и выдачей управляющего воздействия на него). Слабой (несущественной)
временной зависимостью (корреляцией) между динамически изменяющимися
состояниями объектов управления и системы (подсистемы) управления. В качестве
классических примеров систем класса А можно считать:- Supervisory Control And
Data Acquisition (диспетчерский контроль и накопление данных);- Distributed
Control Systems (распределенные системы управления);Control — системы
последовательного управления;

АСУ ТП — Автоматизированные Системы Управления
Технологическими Процессами.

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

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

сбор, предварительную подготовку данных,
поступающих в КИС из системы А, и их передачу в системы класса С;

подготовку данных и заданий для автоматического исполнения
задач системы класса А.

Классическими примерами систем класса В можно
считать:- Manufacturing Execution Systems (системы управления производством);-
Material Requirements Planning (системы планирования потребностей в
материалах);II — Manufacturing Resource Planning (системы планирования ресурсов
производства);

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

анализ деятельности предприятия на основе данных
и информации, поступающей из системы класса В;

планирование деятельности предприятия;

регулирование глобальных параметров работы
предприятия;

планирование и распределение ресурсов
предприятия;

подготовку производственных заданий и контроль
их исполнения;

система оказывает влияние на деятельность
предприятия в целом.

АСУП;.

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

активное участие человека — специалиста в
системе автоматизации обработки информации и принятия управленческих решений;

создание и внедрение научных и прикладных
разработок в области информатизации в соответствии с требованиями
пользователей;

формирование условий
организационно-функционального взаимодействия и его математическое, модельное,
системное и программное обеспечение[19];

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

Этапы проектирования автоматизированных
информационных систем

Этапы проектирования автоматизированных
информационных систем. К проектированию АИС непосредственное отношение имеют
два направления деятельности: 1) собственно проектирование АИС конкретных
предприятий (отраслей) на базе готовых программных и аппаратных компонентов с
помощью специальных инструментальных средств разработки; 2) проектирование
упомянутых компонентов АИС и инструментальных средств, ориентированных на
многократное применение при разработке многих конкретных информационных систем.

Сущность первого направления может быть выражена
словами “системная интеграция”. Разработчик АИС должен быть специалистом в
области системотехники, хорошо знать международные стандарты, состояние и
тенденции развития информационных технологий и программных продуктов, владеть
инструментальными средствами разработки приложений (CASE-средствами) и быть
готовым к восприятию и анализу автоматизируемых прикладных процессов в
сотрудничестве со специалистами соответствующей предметной области. Существует
ряд фирм, специализирующихся на разработке проектов АИС(например, Price
Waterhouse, Jet Info, Consistent Software и др.).

Второе направление в большей мере относится к
области разработкиматематического и программного обеспечения для реализации
функций АИС — моделей, методов, алгоритмов, программ на базе знания
системотехники, методов анализа и синтеза проектных решений, технологий
программирования, операционных систем и т. п. В каждом классе АИС (АСУ, САПР,
ГИС и т. д.) имеются фирмы, специализирующиеся на разработке программных (а
иногда и программно-аппаратных) систем. Каждая из них рекламирует свою
технологию создания АИС и придерживается стратегии либо тотального поставщика,
либо открытости и расширения системы приложениями и дополнениями третьих
фирм[15].

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

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

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

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

Результаты анализа — техническое предложение и
бизнес-план создания АИС -представляются заказчику для окончательного
согласования.

Как на этапе обследования, так и на последующих
этапах целесообразно придерживаться определенной дисциплины фиксации и
представления получаемых результатов, основанной на той или иной методике
формализации спецификаций. Формализация нужна для однозначного понимания
исполнителями и заказчиками требований, ограничений и принимаемых решений.[2. —
С.187].

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

Различают функциональные, информационные,
поведенческие и структурные модели. Функциональная модель системы описывает
совокупность выполняемых системой функций. Информационная модель отражает
структуры данных — их состав и взаимосвязи. Поведенческая модель описывает
информационные процессы (динамику функционирования), в ней фигурируют такие категории,
как состояние системы, событие, переход из одного состояния в другое, условия
перехода, последовательность событий. Структурная модель характеризует
морфологию системы (ее построение) — состав подсистем, их взаимосвязи.

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

Особое место в ряду проектных задач занимает
разработка проекта корпоративной вычислительной сети, поскольку техническое
обеспечение АИС имеет сетевую структуру[11].

Если АИС располагается в удаленных друг от друга
пунктах, в частности, расположенных в разных городах, то решается вопрос об
аренде каналов связи для корпоративной сети, поскольку альтернативный вариант
использования выделенного канала в большинстве случаев оказывается неприемлемым
из-за высокой цены. Естественно, что при этом, прежде всего, рассматривается
возможность использования услуг Internet. Именно через Internet могут
взаимодействовать предприятия, работающие по технологии CALS (Computer Acquisition
Life-Cycle System). Возникающие при этом проблемы связаны с обеспечением
информационной безопасности и надежности доставки сообщений.

Одной из главных тенденций современной индустрии
информатики является создание открытых систем. Свойство открытости означает,
во-первых, переносимость (мобильность) программного обеспечения на различные
аппаратные платформы, во-вторых, приспособленность системы к ее модификациям
(модифицируемость или собственно открытость) и комплексированию с другими
системами в целях расширения ее функциональных возможностей и/или придания
системе новых качеств (интегрируемость).

Этапы:этап — предпроектный (обследование,
составление отчета, технико-экономического обоснования и технического
задания);этап — проектный (составление технического и рабочего проектов);этап —
внедрение (подготовка к внедрению, проведение опытных испытаний и сдача в
программную эксплуатацию);этап — анализ функционирования (выявление проблем,
внесение изменений в проектные решения и существующие АИС и АИТ).

Рис.1. Этапы проектирования АИС

На предпроектной стадии проводится изучение и
анализ объекта проектирования. В частности анализируется информационная база,
все входные документы, их объем, периодичность, алгоритмы, выходные документы и
все информационные связи задач. Эти данные обрабатываются, и строится
информационная модель объектов в виде таблиц и графиков.

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

устный и письменный опрос;

письменное анкетирование;

наблюдение, измерение, оценка;

групповое обсуждение;

анализ задач;

анализ производственных, управленческих и
информационных процессов.

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

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

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

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

В процессе постановки задачи раскрываются:

организационно-экономическая сущность ее (наименование,
цель решения, периодичность и сроки решения, источники и способы поступления
данных, потребители результатной информации и способы ее отправки,
информационные связи с другими задачами);

описание исходной переменной и
условно-постоянной информации (перечень, формы представления, объемные
показатели, описание структурных единиц информации, способов контроля исходных
данных);

описание результатной информации (перечень,
формы представления, пользователи, структурные единицы информации, способы
контроля);

описание алгоритма решения задачи
(последовательности выполнения арифметических и логических операций).

В настоящее время почти все АИС
децентрализованные, поэтому важно участие пользователя на пред проектной
стадии, при постановке и внедрении задач, анализе функционирования АИТ[15].

Средства создания АИС

автоматизированный информационный предметный библиотека

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

Они включают в себя, как правило, стратегическое
планирование, анализ, проектирование, реализацию, внедрение и эксплуатацию.

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

Современные сложные ИС и проекты, обеспечивающие
их создание, характеризуются, как правило, следующими особенностями:

Сложностью предметной области(достаточно больше
количество функций, объектов, атрибутов и сложные взаимосвязи между ними),
требующей тщательного моделирования и анализа данных и процессов;

Наличием совокупности тесно взаимодействующих
компонентов — подсистем, имеющих свои локальные задачи и цели функционирования;

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

Современная технология создания АИС представляет
собой совокупность эффективных средств и методов проектирования, позволяющих
упростить данный процесс, уменьшить стоимостные затраты, сократить календарные
сроки проектирования системы и, в конечном итоге, за счет возможности более
широкого выбора проверенных прогрессивных проектных решений, повысить качество
разработки[22].

К основным средствам проектирования относятся:

стандартные средства операционных систем,
обеспечивающих автоматическое прохождение на ЭВМ определенного класса задач;

процедуры, реализующие типовые процессы
обработки данных, например контроль выходной информации и ее сортировку;

инструментальные средства, к которым относится
совокупность взаимосвязанных специальных программных средств, предназначенных
для инструментальной поддержки отдельных элементов процесса проектирования АИС.
Это создание и актуализация словаря данных, документирование проекта,
автоматизация контроля проектирования и др.;

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

системы автоматизированного проектирования
(САПР), предполагающие использование ЭВМ на всех этапах создания АИС и
занимающие высшую ступень в эволюции средств проектирования системы.

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

Кроме создания оригинальных и уникальных АИС,
достаточно часто применяются универсальные проектные решения, которые полностью
или частично могут быть адаптированы в различных предметных областях.

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

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

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

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

Технология создания крупных ИС представляет
особые требования к методикам реализации и программным инструментальным
средствам, что связано со следующими причинами:

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

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

Жизненный цикл(ЖЦ) создания сложной ИС
сопоставим с ожидаемым временем ее эксплуатации. Другими словами, в современных
условиях предприятия перестраивают свои бизнес — процессы примерно раз в два года,
столько же требуется(если работать в традиционной технологии) для создания ИС.
Может оказаться, что к моменту сдачи ИС она уже устареет, поскольку
предприятие, перешло на новую технологию работы. Следовательно, необходимы
средства автоматизации, значительно уменьшающие время разработки ИС.

Чем больше длительность ЖЦ тем больше
вероятность изменения внешних условий, которые весьма трудоемкий и
дорогостоящий процесс. Поэтому необходимые гибкие инструментальные средства,
позволяющие адаптировать проект к изменяющимся требованиям.

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

В библиотеке ведется картотека читателей.

• Фамилия, Имя, Отчество

• Домашний адрес

• Телефон

• Дата рождения

Каждому читателю присваивается уникальный номер
читательского билета. Читатель не должен одновременно держать более одного
экземпляра книги одного названия.[4,C.19-20]

Вопросы

Вопрос 1. Кому нужна данная БД?

Ответ 1. Библиотекарю, читателю.

Вопрос 2. Какая информация нужна библиотекарю?

Ответ 2. Информация о книгах, читателях.

Вопрос 3. Какая информация нужна о книгах?

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

Вопрос 4. Какая информация нужна о читателях?

Ответ 4. ФИО, адрес, телефон, дата рождения,
номер читательского билета.

Вопрос 5. Какие данные нужны читателю?

Ответ 5. Информация об авторах книг, видах книг,
тематике, сроках обратного возврата книг.

Вопрос 6. Какие могут быть виды книг?

Ответ 6. Книги, диски, брошюры, подписные
издания.

Вопрос 7. Номер читательского билета каждого
читателя уникален?

Ответ 7. Да.

Перечень предположений

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

Создание таблицы со следующими названиями и
полями:

Список читателей:

Код читателя;

ФИО;

Адрес;

Год рождения.

Таблица 1. Список читателей

Список
читателей

Код
читателя

ФИО

Адрес

Год
рождения

1

Кузнецов
О.В.

Советская
д.4

14.06.97

2

Бубликов
А.А.

Красноармейская
д.6

23.07.91

3

Кудряшов
М.О.

Московская
д.34

19.10.90

4

Антипов
Е.С.

Чкалова
д.8

04.01.98

5

Куликова
Р.Г.

Калинина
д.5

15.04.95

6

Синицына
С.П.

Трудовая
д.11

01.06.93

Книги

Код книги;

Автор;

Название;

Жанр;

Год издания.

Таблица 2. Книги

Книги

Код
книги

Автор

Жанр

Год
издания

1

Гоголь
Н.В.

Мертвые
души

Роман

1998

2

Булгаков
М.А.

Мастер
и Маргарита

Роман

1994

3

Толстой
Л.Н.

Война
и Мир

Роман

1991

4

Шолохов
М.А.

Тихий
Дон

Роман

1989

5

Чехов
А.П.

Вишневый
сад

пьеса

1990

6

Пушкин
А.С.

Евгений
Онегин

Роман
в стихах

1995

Экземпляр

Код экземпляра;

Код книги;

Каталог.

Таблица 3. Экземпляр

Экземпляр

Код
экземпляра

Код
книги

Каталог

3

8

10

6

3

5

Выдача

Код читателя;

Код экземпляра;

Дата взятия;

Дата возврата.

Таблица 4. Выдача

Выдача

Код
читателя

Код
экземпляра

Дата
взятия

Дата
возврата

1

6

13.04.2012

22.04.2012

2

1

16.03.2012

15.04.2012

7

2

20.02.2012

10.04.2012

3

10.01.1012

20.02.2012

Создание схемы данных

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

Чтобы связать таблицы друг с другом необходимо:

Осуществить щелчком по кнопке Схема данных на
панели инструментов.

Появляется диалоговое окно Добавление таблицы,
выдается имя таблицы и щелкают по кнопке Добавить. Повторяют действия для
каждой выбранной таблицы. После выбранных таблиц щелкают по кнопке Закрыть.

После Закрытия попадают в окно Схема данных где
находятся все выбранные таблицы.

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

Создание формы

Чтобы быстро создать простую форму, содержащую
все поля из заданных таблицы или запроса,, выбирают команду Автоформа. Мастер
автоформ может построить простую форму, поля ввода в которой расположены в
столбец, в строчку или в виде таблицы. При таком способе нужно задавать тип
формы и ответить на ряд вопросов о ней. Форму можно создавать самостоятельно в
режиме Конструктор.

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

Форма список читателя

Таблица 5. Форма список читателей

Список
читателей

Код
читателя

ФИО

Адрес

Год
рождения

1

Кузнецов
О.В.

Советская
д.4

14.06.97

Форма книги

Таблица 6. Форма книги

Книги

Автор

Код
книги

Название

Жанр

Год
книги

Гоголь
Н.В.

1

Мертвые
души

Роман

1998

Форма выдачи

Таблица 7. Форма выдачи

Выдача

Код
читателя

Код
экземпляра

Дата
взятия

Дата
возврата

1

6

13.04.2012

22.04.2012

Создание запросов

Запрос на выборку осуществляет загрузку и
отображение записей в режиме таблицы;

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

Запрос на обновление изменяет соответствующие
записи таблицы.

Запрос на добавление добавляет в конец таблицы
новые записи, соответствующие заданным условиям отбора.

Запрос на создание таблицы создает новые
таблицы, состоящие из заданных записей.

Запрос с параметром позволяет ввести информацию,
используемую в качестве критериев отбора.

Запрос по коду читателя

Таблица 8. Запрос список читателей

Список
читателей Запрос

Код
читателя

ФИО

1

Гоголь
Н.В.

2

Булгаков
М.А.

3

Толстой
Л.Н.

4

Шолохов
М.А.

6

Пушкин
А.С.

Гибс
Г.Б.

Заключение

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

Исходя из вышесказанного, использование
современных информационных систем позволяет нам:

работать с огромными объемами данных;

хранить какие-либо данные в течение довольно
длительного временного периода;

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

Довольно-таки быстро найти всю необходимую нам
информацию и т.д.

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

Список литературы

Бекаревич
Ю.Б. Создание реляционной базы данных и запросов. MS ACCESS 2007/Бекаревич
Ю.Б., Пушкина Н.В.//Создание таблиц базы данных: СП.: СПбГУЭФ, 2010. — С.9-42.

Гагарина
Л.Г. Разработка и эксплуатация автоматизированных информационных систем/Киселев
Д.В., Федотова Е.Л., Гагарина Л.Г.//Автоматизированные информационные системы:
М.: ФОРУМ: ИНФРА-М, 2009. — С.67-80.

Гвоздева
В.А. Основы построения автоматизированных информационных систем/Гвоздева В.А.,
Лаврентьева И.Ю.//АИС: основные понятия и определения: М.: ИД «ФОРУМ» —
ИНФРА-М, 2007. — С.14 .

Гвоздева
В.А. Основы построения автоматизированных информационных систем/Гвоздева В.А.,
Лаврентьева И.Ю.//Состав и структура АИС: М.: ИД «ФОРУМ» — ИНФРА-М, 2007. —
С.36.

Голицына
О.Л., Максимов Н.В.[и др.]. Базы данных//Понятия баз данных: М.: ФОРУМ:
ИНФРА-М, 2006. — С — 9-13.

Гринченко
Н.Н., Гусев Е.В.[и др.]. Проектирование баз данных СУБД MICROSOFT
ACCESS//Создание БД: М.: Горячая линия — Телеком, 2004. — С.58.

Емельянова
Н.З. Основы построения автоматизированных информационных систем/Партыка Т.Л.,
Попов И.И., Емельянова Н.З.//Информация и информационные системы. Основные
понятия и классификация: М.: Инфра — М, 2007. — С.9-14.

Емельянова
Н.З. Основы построения автоматизированных информационных систем/Партыка Т.Л.,
Попов И.И., Емельянова Н.З.//Классификация методов проектирования систем: М.:
Инфра — М, 2007. — С.187-190.

Емельянова
Н.З. Основы построения автоматизированных информационных систем/Партыка Т.Л.,
Попов И.И., Емельянова Н.З.//Структура баз данных: М.: Инфра — М, 2007. —
С.78-82.

Чистов
Д.В. Информационные системы//Информационные системы: М.: Инфра — М, 2010. —
С.103-110.

АВТОНОМНАЯ
НЕКОММЕРЧЕСКАЯ ОРГАНИЗАЦИЯ

ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

БЕЛГОРОДСКИЙ
УНИВЕРСИТЕТ КООПЕРАЦИИ,
ЭКОНОМИКИ И
ПРАВА

Кафедра
информационных систем и технологий

Курсовая работа

по
дисциплине: «Методы и средства
проектирования
информационных систем»

на
тему:

«
Методология
проектирования АИС библиотеки ВУЗа
»

Выполнил(а)
студент(ка):

Чернов
Дмитрий Алексеевич             

Ф.И.О.

Группы
          ИС-31               
 

Факультета
СПО №2

Научный
руководитель:

доц.
к.э.н. Заболотная Наталья Владимировна

(должность
и Ф.И.О. руководителя)

Белгород
2015

Кафедра
Информационных
систем и технологий

УТВЕРЖДАЮ:

Научный
руководитель

доц.
Заболотная Наталья Владимировна

(должность, фамилия,
имя, отчество)

«___»
______________________ 20___

ПЛАН
КУРСОВОЙ РАБОТЫ

студента

Чернова
Дмитрия Алексеевича­­­­­­­­­­­­­­­­­­­­­­
 

(фамилия, имя,
отчество)

фак.
среднего профессионального образования,
группа ИС-31

(факультет, группа)

1.
Тема курсовой работы: «Методологии
проектирования
АИС Библиотека вуза».

2.
План курсовой работы

ВВЕДЕНИЕ

1.ТЕОРЕТИЧЕСКИЕ
ОСНОВЫ ПРОЕКТИРОВАНИЯ ИНФОРМАЦИОННЫХ
СИСТЕМ

1.1.
Общие понятия ПИС

1.2.
Технологии проектирования

1.3.
Методология проектирования

1.4.
Сравнительная характеристика инструментов
проектирования

2.
ПРАКТИЧЕСКАЯ ЧАСТЬ

2.1.
Характеристика предметной области
библиотеки высшего учебного заведения

2.2
Функциональная
диаграмма IDEF0

2.3.
Обзор ИС используемых в библиотеках
учебных заведений

2.4.
Фаза построения, проектирования и
внедрения

ЗАКЛЮЧЕНИЕ

СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЯ

Студент __________________

(подпись)

СОДЕРЖАНИЕ

ВВЕДЕНИЕ………………………………………………………………………….

4

I.ТЕОРЕТИЧЕСКАЯ
ЧАСТЬ…………………………………………………….

5

1.1.
Общие подходы к ПИС……………………………………………………….

5

1.2.
Технология
проектирования………………………………………………………….

6

1.3.
Методология
проектирования……………………………………………………….

8

1.4
Сравнительная характеристика
инструментов проектирования…………….

11

II.ПРАКТИЧЕСКАЯ
ЧАСТЬ……………………………………………………….

16

2.1.
Характеристика предметной области
библиотеки вуз………………………

16

2.2.
Функциональная диаграмма
IDEF0…………………………………………….

17

2.3.
Обзор ИС, используемых в библиотеках
учебных заведений………………

20

2.4.
Фаза проектирования, построения и
внедрения……………………………

25

ЗАКЛЮЧЕНИЕ…………………………………………………………………………………..

28

СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ……………………………….

29

ПРИЛОЖЕНИЕ
1……………………………………………………………………

31

ПРИЛОЖЕНИЕ
2……………………………………………………………………

32

ПРИЛОЖЕНИЕ
3……………………………………………………………………

33

ВВЕДЕНИЕ

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

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

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

В
достижении цели курсовой работы следует
решить следующие поставленные задачи:

  1. Описать
    общие подходы к ПИС.

  2. Описать
    технологию проектирования ИС.

  3. Описать
    методологию проектирования ИС.

  4. Привести
    характеристику средств проектирования
    ИС.

  5. Дать
    сравнительную характеристику и
    обоснования выбора программных средств
    для проектирования ИС.

  6. Сделать
    обзор ИС, используемых в библиотеке
    вуза.

  7. Разработать
    функциональные диаграммы IDEF0

Курсовая
работа выполнена на 33 страницах основного
текста, содержит 3 приложения и 2 таблицы.
При написании курсовой работы было
изучено и использовано 21 литературных
и 4 интернет-источника.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

ГБОУ СПО «БМСТ»

КУРСОВОЙ ПРОЕКТ

по дисциплине : Разработка и эксплуатация информационных
систем

Тема: АИС «Студенческая библиотека»

                     
Руководитель___________  Г.Н.Федорова

                     
Студент         
___________  Н.В. Решетняк

    Специальность 080802 Прикладная информатика
в машиностроении

                     
Курс 4 группа 44пим-9

                     
Работа принята с оценкой___________________

                                                                 
«____»_________2014

2014

СОДЕРЖАНИЕ

ВВЕДЕНИЕ………………………………………………………………………………………3

1 РАЗРАБОТКА СИСТЕМНОГО 
ПРОЕКТА

1. Назначение разработки…………………………………….…………………………….……5

1.2 Требования к функциональным 
характеристикам…………………………………….…..7

1.3 Требования к надежности
и безопасности…………………………………………..….….8

1.4 Требования к составу 
и параметрам технических средств……………………………..…8

1.5 Требования к информационной 
и программной совместимости…………………………9

2 РАЗРАБОТКА ТЕХНИЧЕСКОГО 
ПРОЕКТА И РЕАЛИЗАЦИЯ СИСТЕМЫ

2.1 Структура системы и объекты
информационной базы………………………………….…9

2.2 Интерфейс пользователя………………………………………………………….….…….22

2.3 Программные модули 
системы……………………………………………………..……..34

3 ТЕСТИРОВАНИЕ…………………………………………………………………….………38

ЗАКЛЮЧЕНИЕ………………………………………………………………….…..……..…..40

ПРИЛОЖЕНИЯ

ПРИЛОЖЕНИЕ А………….……………………………………..………..……………..……41

ПРИЛОЖЕНИЕ Б………….………………………………………..……..……………………43

СПИСОК ЛИТЕРАТУРЫ…………………………..……………..……………………………45

ВВЕДЕНИЕ

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

Деятельность библиотеки складывается
из трех основных составляющих: хранение,
поиск, и выдача на определенное время,
имеющихся в наличие книг.

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

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

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

Актуальностью курсовой
работы является информационная система
«Студенческая библиотека» как часть
системы управления учебным заведением
в целом. Чтобы достичь более точного управления,
необходимо автоматизировать каждый отдел
отдельно.

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

    • изучение
      структуры и механизма работы учебного
      заведения, в том числе библиотеки;
    • проектирование
      информационной системы «Студенческая
      библиотека»;

Объектом исследования является библиотека.

Предметом исследования являются процессы,
происходящие в библиотеке:

    • процесс
      записи в библиотеку новых читателей;
    • процесс
      записи новых книг;
    • процесс
      выдачи книг;
    • процесс
      приема книг;
    • процесс
      получения рейтинга книг;
    • процесс
      статистики посещений читателей;

Автоматизированная
информационная система «Студенческая
библиотека» представляет собой часть
автоматизированной системы управления
средним профессиональным учебным заведением.

1 РАЗРАБОТКА СИСТЕМНОГО ПРОЕКТА

    1. Назначение разработки

Автоматизированная
информационная система «Студенческая
библиотека» предназначена для отдела
среднего профессионального учебного
заведения библиотека. Пользователями
системы выступают:

    • Библиотекарь, который вносит
      или изменяет данные;
    • Администратор. Данному пользователю
      открыты все права;
    • Бухгалтерский отдел, т.е. отдел
      учета;

Организация книжного фонда (библиотеки),
включает вопросы учета, расстановки,
хранения литературы и доставки ее читателю.
Правильная организация библиотеки облегчает
читателю пользование литературой, библиотекарю
— быстрое выполнение читательских требований,
а также обеспечивает сохранность фондов
как общественной собственности.

Обслуживание читателей библиотеки осуществляется
различными путями:

— выдача литературы, как в читальный
зал, так и за пределы библиотеки;

— помощь отдельным читателям и учреждениям
в подборе необходимой им литературы;

— раскрытие книжных фондов библиотеки
через систему библиотечных каталогов;

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

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

В библиотеку поступает много книг из
различных издательств. Каждой книге в
библиотеке присваивают номер, а затем
передают в различные отделы.

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

    • название
      книги;
    • автор;
    • издание;
    • год
      издания;
    • жанр;
    • количество
      страниц;

Каждая книга может присутствовать в
нескольких экземплярах.

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

    • ФИО;
    • Адрес
      места жительства;
    • Специальность;
    • Курс;
    • Группа;

Каждому читателю присваивается номер
читательского формуляра. Формуляр читателя
содержит необходимые данные. Формуляр
читателя является источником входных
данных, который приведен в приложении
А.

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

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

В библиотеке есть ряд ограничений: нельзя
выдавать книги больше установленного
периода и больше определенного количества.

Использование системы
позволяет:

    • Ввести базу данных студентов
      как читателей;
    • Производить учет поступления
      изданий;
    • Формировать необходимую отчетность;

Источниками выходных
данных являются отчет выданных читателям
книг на руки, отчет по задолжникам. Отчет
по выдаче книг читателям и отчет по задолжникам
приведены в приложении Б. В отчете по
выданным читателям книг осуществляется
вывод названия книги из справочника Книги,
выданной читателю, а так же вывод самого
читателя из справочника Читатели. Отчет
Задолжники выводит фамилию читателя,
название выданной ему книги, а также дату
выдачи и дату возврата.

    1. Требования к функциональным
      характеристикам

Разрабатываемая
автоматизированная информационная система
«Студенческая библиотека» должна обеспечить:

  • Формирование отчетов по выдаче
    книг читателю;
  • Формирование отчета по книгам;
  • Отчет по задолжникам.

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

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

Рис. 1 Диаграмма вариантов использования

В диаграмме указано 4 актера
— это Читатель, Администратор, Библиотекарь,
Поставщик. Читатель запрашивает книгу.
Библиотекарь и Администратор производят
с помощью поставщика поставку отсутствующих
книг. В отчетных периодах администратор,
библиотекарь формируют отчеты. При запросе
книги читателем – студентом библиотекарь
проверяет наличие требуемой книги, далее
уже производит выдачу и оформление книги
читателю (приложение В).

1.3 Требования 
к надежности и безопасности

Система должна
функционировать в многопользовательском
режиме, поэтому каждый пользователь должен
иметь свой пароль доступа в систему. В
автоматизированной информационной системе
существует 3 основных пользователя, у
которых разные права доступа. Администратору
открыты все права доступа:

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

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

Кроме того, в системе
должна быть возможность резервного копирования
и восстановления данных.

1.4 Требования 
к составу и параметрам технических 
средств

Системные
требования:

  • тактовая частота процессора
    1000 Гц;
  • объем оперативной памяти
    не менее 256 Мб;
  • объем свободного дискового
    пространства не менее 1 Гб;
  • разрешение монитора 1024х768пкс.

1.5 Требования 
к информационной и программной 
совместимости

На компьютерах
должна быть установлена операционная
система Windows 7 Максимальная. Все формируемые
отчеты должны иметь возможность экспортирования
в редактор электронных таблиц MS Office Excel
2003/2007.  На компьютере не должно быть
установлено пакетов, программно и аппаратно
конфликтующих с системой защиты 1С: Предприятие.

2 РАЗРАБОТКА ТЕХНИЧЕСКОГО ПРОЕКТА

2.1 Структура
системы и объекты информационной базы

Разработка автоматизированной
информационной системы начинается с
анализа требований к будущей информационной
системе. В процессе анализа выявляются
внешние пользователи и перечень возможностей
его поведения (вариантов использования)
в процессе взаимодействия с конкретными
пользователями. Диаграмма вариантов
использования разрабатываемой системы
приведена на рисунке 1.

В главном разделе сценария
указывается имя рассматриваемого
варианта использования, имя взаимосвязанных
с ним актеров, цель выполнения варианта, 
условный тип и ссылка на другие варианты
использования (таблица 1).

Таблица 1. Главный раздел сценария.

Вариант использования

Выдача книг

Актеры

Читатель. Администратор. Библиотекарь.
Поставщик

Краткое описание

Читатель запрашивает книгу. Библиотекарь
и Администратор списывают книги, формируют отчет, выдают книгу читателю и оформляют
поставку книг от поставщика

Цель

Получение необходимой книги

Тип

Базовый

Ссылки на другие варианты использования

Включает в себя варианты использования:
определить наличие книги;

Оформить книгу

В следующем разделе
изложена последовательность действий,
приводящая к успешному выполнению рассматриваемого
варианта использования. При этом  инициатором
действий должен выступать актер — Читатель.
Для удобства последующих ссылок каждому
действию присваивается порядковый номер
(таблица 2).

Таблица 2. Последовательность действий,
приводящая к успешному выполнению

Действия актеров

Отклик системы

1.Читатель запрашивает книгу

2. Библиотекарь проверяет наличие необходимой запрашиваемой книги в фонде

3. Библиотекарь предоставляет нужную книгу читателю.

Исключение №1. В книжном фонде нет необходимой
запрашиваемой книги

4. Читатель берет аналогичную книгу

5. Библиотекарь выдает разрешение 
на получение требуемой книги.

6. Библиотекарь выдает 
необходимую книгу и формуляр на подпись читателю.

В последнем разделе
сценария описывается последовательность
действий, выполняемых при возникновении
исключительных ситуаций или исключений
(таблица 3).

Таблица 3. Последовательность действий, выполняемых
при возникновении исключительных ситуаций

Действия актеров

Отклик системы

Исключение №1. В фонде нет необходимого
количества запрашиваемых книг

 

Администратор инициирует поставку нужного
количества книг

Исключение№2.Читатель отказался от
предложенной «Похожей»  книги

 

Библиотекарь отправляет книгу в фонд

Если диаграмма
вариантов использования дает «вид сверху»
на функциональность системы, то диаграмма
деятельности позволяет подробно разобрать
отдельный вариант использования. Диаграмма
деятельности представлена на рисунке
2.

Рис. 2 Диаграмма деятельности

Диаграмма последовательности
показана на рисунке 3.

Рис. 3 Диаграмма последовательности

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

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

Рис.4 Диаграмма потоков данных

Разрабатываемая
автоматизированная информационная система
«Студенческая библиотека» будет содержать
справочники, в которых содержатся данные,
а так же документы. В системе, возможно,
осуществить формирование отчетов. Так
же присутствует разграничение прав доступа
– это Администратор, Бухгалтер (отдел
учета) и Библиотекарь.

В АИС существует
8 справочников – это Авторы, Жанр, Издательство,
Книги, Методические указания, Поставщики,
Специальность, Читатели. На основании
справочника Читателя частичным образом
формируется документ Формуляр читателя.
Для заполнения документа Книгообеспеченность
(по каждой специальности) необходим справочник
Специальность, Книги. Для полной работы
библиотеки осуществляется ведение таких
документов как: Выдача книг, Инвентаризация,
Книгообеспеченность, годовой план работы,
приходная накладная.

Справочник «Читатели»
предназначен для хранения информации
обо всех читателях библиотеки. Данный
справочник представлен в таблице 4.

Таблица 4. Реквизиты справочника «Читатели»

Наименование реквизита

Тип

Значение

Код

Число

Код элемента

Наименование

Строка

ФИО читателя

АдресМестаЖительства

Строка

Адрес места жительства читателя

Специальность

СправочникСсылка.Специальность

Наименование специальности читателя

Курс

СправочникСсылка.Курс

Наименование курса читателя

Группа

Строка

Наименование группы читателя

Справочник «Авторы» содержит
фамилию автора и его работы. Реквизиты
справочника представлены в таблице 5.

Таблица 5. Реквизиты справочника «Авторы»

Наименование реквизита

Тип

Значение

Код

Число

Код элемента

Наименование

Строка

ФИО автора книги

Табличная часть Книги: Наименование

СправочникСсылка.Книги

Название книги автора

Справочник «Книги» и справочник
«МетодическиеУказания» предназначены
для хранения данных по книге (методическому
указанию) (ФИО автора, жанр, издательство,
год издания, количество страниц). Справочник
представлен в таблице 6.

Таблица 6. Реквизиты справочника «Книги» («Методические
указания»)

Наименование реквизита

Тип

Значение

Код

Число

Код элемента

Наименование

Строка

Наименование книги(методического указания)

ФИОАвтора

СправочникСсылка.Авторы

ФИО автора книги

НазваниеЖанра

СправочникСсылка.Жанр

Жанр книги

НазваниеИздательства

СправочникСсылка.Издательство

Название издательства выпущенной книги

КоличествоСтраниц

Строка

Количество страниц книги

ГодИздания

Строка

Год издания книги

Справочник «Издательство»
предоставляет  минимальные данные
по издательству для ведения базы данных
«Студенческая библиотека» (таблица 7).

Таблица 7. Реквизиты справочника «Издательство»

Наименование реквизита

Тип

Значение

Код

Число

Код элемента

Наименование

Строка

Наименование издательства

В таблице 8 представлен
справочник «Поставщики», который хранит
информацию о поставщиках книг в библиотеку.

Таблица 8. Реквизиты справочника «Поставщики»

Наименование реквизита

Тип

Значение

Код

Число

Код элемента

Наименование

Строка

Наименование поставщика

Табличная часть:

Наименование

СправочникСсылка.Поставщики

Наименование поставщика

АдресМестаНахождения

Строка

Юридическое местонахождения поставщика

Телефон

Строка

Телефон поставщика

ИНН

Строка

Идентификационный номер налогоплательщика

КПП

Строка

Код причины постановки на учет

ОГРН

Строка

Основной государственный регистрационный
номер

Справочник «Специальность»
представлен в таблице 9, он предоставляет
данные по специальности.

Таблица 9. Реквизиты справочника «Специальность»

Наименование реквизита

Тип

Значение

Код

Число

Код элемента

Наименование

Строка

Наименование специальности

Справочник «Жанр»
предназначен для хранения информации
о жанре книги (таблица 10).

Таблица 10. Реквизиты справочника «Жанр»

Наименование реквизита

Тип

Значение

Код

Число

Код элемента

Наименование

Строка

Наименование жанра

Объект информационной
базы документ предназначен для описания
информации о совершаемых операциях. Документ
«Выдача книг» регистрирует выдачу книг
читателю. Данный документ имеет следующие
реквизиты, которые приведены в таблице
11.

Таблица 11. Реквизиты документа «Выдача книг»

Наименование реквизита

Тип

Значение

Номер

Число

Номер документа

Дата

Дата

Дата документа

ФИОЧитателя

СправочникСсылка.Читатели

Фамилия Имя Отчество читателя взявшего
книгу

НазваниеКниги

СправочникСсылка.Книги

Название выданной книги читателю

ДатаВыдачи

Дата

Дата выдачи книги читателю на руки

ДатаВозврата

Дата

Дата возврата выданной книги читателю
в библиотеку

Табличная часть:

ИнвентаризационныйНомерКниги

Строка

Инвентарный номер выданной книги читателю

На основании документа
«Выдача книг» формируется документ «Возврат
книг». Документ «Возврат книг» содержит
данные о возвращении читателем книги.
Рассматриваемы документ содержит следующие
реквизиты (таблица 12)

Таблица 12. Реквизиты документа «Возврат книг»

Наименование реквизита

Тип

Значение

Номер

Число

Номер документа

Дата

Дата

Дата документа

ФИОЧитателя

СправочникСсылка.Читатели

Фамилия Имя Отчество читателя взявшего книгу

НазваниеКниги

СправочникСсылка.Книги

Название выданной книги читателю

ДатаВыдачи

Дата

Дата выдачи книги читателю на руки

ДатаФактическогоВозвратаКниги

Дата

Фактическая дата возврата выданной книги читателю в библиотеку

Содержание:

Введение

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

Одним из автоматизированных направлений является информационно-библиотечная система. Без особого труда и за короткий срок мы можем получить распечатку сведений о читателях, о книгах, хранящихся в библиотеке, о читателях, взявших книгу в определенный период времени. Легко извлекаем информацию из базы данных, причем сочетание таких сведений может быть разнообразным, определяться по желанию пользователя. Работа библиотеки связана с накоплением информации о читателях, книгах, их категориях и издательствах, об учете книг. Информация хранится в бумажном виде, что вносит такие проблемные ситуации, как время доступа к требуемой информации, читабельность информации, доступ к информации [14,15].

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

Объектом исследования данного проекта является библиотека.

Предметом исследования является автоматизация процесса учета книг в библиотеке.

Цель курсовой работы – разработать проект АРМ библиотекаря для учета библиотечного фонда.

Для достижения цели поставлены следующие задачи:

– проанализировать объект автоматизации и разработать модель предметной области;

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

– постановка требований к АРМ библиотекаря;

– выполнить проектирование и реализацию АРМ библиотекаря;

– разработать руководство пользователя.

Практическая значимость работы состоит в разработке автоматизированного рабочего места (АРМ) для библиотекаря, позволяющего вести учет книг и выдача книг читателю.

1 Анализ предметной области

1.1 Словесная постановка задачи автоматизации

Целью курсовой работы является разработка системы учета выданных книг в библиотеке.

Система предназначена для автоматизации процесса ведения информационной базы выданных библиотекой книг.

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

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

Исходя из вышесказанного, в АРМ должны быть реализованы следующие функции:

— добавление, модификация и удаление информации из созданных таблиц;

— просмотр сведений о литературе;

— осуществление поиска, фильтрации и сортировки информации для более удобного представления их пользователю.

Система должна позволять:

— ведение данных о писателях;

— ведение справочников, характеризующие литературные произведения: жанр, издательство;

— ведение данных об литературных источниках и выданном количестве книг;

— получать ежедневные печатные формы.

1.2 Формальная постановка задачи исследования

Проектирование АРМ начинается с построения контекстной диаграммы и дальнейшей её декомпозиции. Для построения функциональной модели данной предметной области была использована методология SADT, которая отражает функциональную структуру объекта, т.е. производимые им действия и связи между этими действиями. Графика блоков и дуг диаграммы отражает функцию в виде блока, а интерфейсы входа/выхода представляются дугами. Взаимодействие блоков друг с другом выражается по средствам интерфейсных дуг, описывающих, когда и над чем какая функция выполняется и как управляется.

На рисунке 1 изображен блок А0 представляющий собой АРМ в целом, именем блока служит название всего АРМ. Эта диаграмма определяет взаимосвязи процессов в АРМ библиотекаря с исходными сведениями, исполнителями, управляющими командами и результатами выполнения.

Рисунок 1 – Контекстная диаграмма предметной области

Исходной информацией в диаграмме является посетитель библиотеки и его персональные сведения, а также картотека библиотечного фонда.

Управляющей информацией является положение по ведению библиотечной деятельности.

Результатом программы АРМ являются аналитические отчеты.

Далее функции делятся на подфункции и так до достижения требуемого уровня детализации АРМ. Диаграммы, которые описывают каждый такой фрагмент АРМ, называются диаграммами декомпозиции.

На основании контекстной диаграммы построим диаграмму декомпозиции, представленную на рисунке 2.

Рисунок 2 – Диаграмма декомпозиции

1.3 Анализ существующих разработок

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

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

Проведем обзор и сравнительный анализ наиболее популярных систем:

— АБИС «OPAC-Global»,

— АБИС «МАРК – SQL»,

— АБИС «ИРБИС»,

— АС «БИБЛИОТЕКА-3».

АБИС OPAC-Global распространяется в различных комплектациях в зависимости от функциональных возможностей и числа участников корпорации. В процессе эксплуатации возможен переход от одной комплектации к другой без потерь данных и накопленного опыта.

АБИС OPAC-Global полностью построена с помощью средств Web – технологии и используется для автоматизации централизованной сети библиотек. Пользователи работают с системой через любой Web-браузер без установки специального программного обеспечения, при этом все основные функции выполняет сервер. Данная специфика работы системы позволяет легко настраивать и непрерывно вносить изменения в систему сразу для всей библиотечной сети только через модернизацию сервера.

АБИС OPAC-Global лежит в основе функционирования Сводного каталога библиотек России Центра ЛИБНЕТ (www.nilc.ru).

Продажа системы заключается в распространение лицензии на выбранное программного обеспечения без возможности распространения третьим лицам. Лицензии на системные программные продукты (СУБД ADABAS) поставляются в рамках общей лицензии на АБИС. Стоимость системы зависит от количества пользователей, производительности системы и объема данных.

Техническое сопровождение системы происходит в удаленном режиме – через Интернет. В сопровождение системы входит устранение ошибок, вызывающие сбой в системе, обновление функциональных возможностей при расширении системы, поставка новых версий АБИС, а также консультирование пользователей при работе с системой.

В стандартную поставку системы входит установка системы на сервере заказчика, обучение администраторов и первый год технического сопровождения входят.

Архитектура и протоколы обмена данными АБИС OPAC-Global:

Программное обеспечение построено в архитектуре клиент-сервер

— Сетевым протоколом обмена данными между клиентами и серверами является HTTP

— Система управления базами данных (СУБД) — ADABAS

— Клиентская часть работает в стандартных web-браузерах

— Серверная часть

      • Microsoft Windows Server 2003 (R2)
      • Microsoft Windows Server 2008 (32 и 64-разряда)
      • SUSE Linux Enterprise Server 11 SP2 x86-64
      • RedHat Enterprise Linux 6.3 x86-64

АБИС OPAC-Global поддерживает национальные и международные стандарты (формат RUSMARC, стандарт ГОСТ 7.1-2003).

Система третьего поколения АИБС «МАРК-SQL» разрабатывалась на основе принципов открытых систем и обеспечивает комплексную автоматизацию всех библиотечных процессов: комплектование литературы, создание и ведение электронного каталога, систематизацию, обработку поступающих изданий, справочно-информационное обслуживание, обслуживание читателей, учет библиотечных фондов. С помощью этой программы собственные информационные ресурсы библиотек могут быть интегрированы в мировую информационную среду.

АИБС «МАРК-SQL» предоставляет следующие возможности:

— Формировать электронный каталог книг, учебников и других информационных источников, находящихся в школьной библиотеке.

— Получить доступ к удаленным базам данных.

— Ввести информацию о структуре школы и количестве учащихся в каждом классе для автоматического определения обеспеченности учебниками.

— Автоматизировать процесс учета выдачи книг.

— Вести автоматизированный учет должников школьной библиотеки по классам.

— Формировать заказ учебников с использованием базы данных рекомендованных учебников и учебных пособий.

— Анализировать круг чтения учеников.

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

— Получить доступ к полнотекстовым и мультимедийным ресурсам, имеющимся к библиотеке или находящимся в удаленных базах данных через Интернет.

Основные автоматизированные рабочие места (АРМ) АИБС «МАРК-SQL»:

— АРМ «Администратор» – модуль, который осуществляет администрирование системы и баз данных, выполняет функции по адаптации системы к требованиям пользователей.

— АРМ «Каталогизация» — модуль, с помощью которого осуществляется создание и ведение электронного каталога, научная и техническая обработка поступивших изданий, ведение инвентарного и безынвентарного учета, формирование книги суммарного учета, формирование стандартных выходных форм и другие.

— АРМ «Поиск» — модуль, с помощью которого пользователь производит поиск, просмотр и заказ нужной литературы.

— АРМ «Комплектование» — модуль, в котором реализуются функции по заказу и учету поступающей литературы, формированию отчетных бухгалтерских документов. Модуль «Комплектование» включает в себя подсистему «Книгообеспеченность», позволяющую проводить анализ состояния книгообеспеченности учебного процесса.

— АРМ «Абонемент» – модуль, где осуществляется запись и регистрация читателей, выполняется книговыдача литературы, определяются задолженности по литературе, обеспечивается формирование и печать статистических отчетов.

Предполагается, что специалист, который будет осваивать АИБС «МАРК-SQL», имеет навыки работы на компьютере и владеет терминологией, принятой в этой области.

Следующая в аналитическом обзоре является система автоматизации библиотек «ИРБИС», отвечающая всем международным требованиям, предъявляемым к современным библиотечным системам, и в тоже время поддерживающая все многообразие традиций российского библиотечного дела.

Основные характеристики САБ ИРБИС64:

— Работа в локальных и глобальных вычислительных сетях без ограничения количества пользователей;

— Полная интегрируемость в корпоративные библиотечные системы и технологии на основе:

— Средств поддержки Web-технологий и протокола Z39.50;

— Полной совместимости с международными форматами UNIMARC, MARC21 и Российским коммуникативным форматом RUSMARC;

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

— Поддержка произвольного количества баз данных, составляющих Электронный каталог или представляющих собой проблемно-ориентированные библиографические базы данных;

— Технология автоматического формирования словарей, на основе которых реализуется быстрый поиск по любым элементам описания и их сочетаниям;

— Средства для ведения и использования Авторитетных файлов, баз данных УДК, ББК, ГРНТИ и Тезауруса;

— Поддержка традиционных «бумажных» технологий: от печати форм заказа/подписки и листов книги суммарного учета до печати всех видов каталожных карточек;

— Технологии, ориентированные на использование штрих — кодов и радиометок на экземплярах изданий и читательских билетах;

— Поддержка многоязычности на основе UNICODE, т.е. возможность ввода на любых языках мира;

— Поддержка ссылок от библиографических описаний на полные тексты, графические данные и другие внешние объекты;

— Средства для создания и ведения полнотекстовых баз данных.

— Специальные средства для создания имидж-каталогов по ретрофонду библиотеки на основе графических образов каталожных карточек и автоматического распознавания их текстов;

— Средства для перевода пользовательских интерфейсов на другие языки;

— Широкий набор сервисных средств, обеспечивающих удобство и наглядность пользовательских интерфейсов, упрощающих процесс ввода, исключающих ошибки и дублирование информации;

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

— Открытость – позволяющая пользователю самостоятельно вносить изменения в широких пределах: от изменения входных и выходных форм до разработки оригинальных приложений.

Система «Библиотека-3» также представляет собой современную библиотечную программу, предназначенную для решения широкого спектра задач, стоящих перед работниками библиотек различного уровня. Поддерживает стандартные международные протоколы Z 39.50-95, ILL.

Система «Библиотека-3» обладает самым современным инструментарием для автоматизации всех основных направлений деятельности библиотек, в том числе:

— комплектования библиотечного фонда, в том числе подписки на периодические и сериальные издания;

— инвентаризации библиотечного фонда (индивидуальный и суммарный учет);

— обработки поступающих изданий и формирования электронных каталогов;

— обеспечения формирования документов по традиционной «бумажной» технологии: печать листов заказа, инвентарных и суммарных книг, всех видов каталожных карточек, всех типов актов, списков новых поступлений, указателей, произвольных списков по запросу пользователя.

— организации работы с библиотечным фондом:

— учета и обеспечения сохранности библиотечного фонда,

— контроля за движением библиотечного фонда,

— проведения исключения из библиотечного фонда (списание);

— организации функционирования обменного фонда;

— создания и обеспечения функционирования электронной библиотеки;

— обслуживания пользователей:

— регистрация читателей,

— организации доступа к электронным информационным ресурсам, в том числе и удаленно с использованием специализированного ресурса для публикации в сети Интернет,

— организации заказа, выдачи и возврата изданий из фонда библиотеки в электронном режиме, в том числе и удаленно,

— контроля за использованием фонда;

— сбора библиотечной статистики:

— по структуре и составу библиотечного фонда,

— по составу электронного каталога библиотеки,

— по количественному и качественному составу пользователей,

— по использованию электронных ресурсов,

— по библиотечному обслуживанию.

«АС-Библиотека-3» полностью отвечает требованиям:

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

— масштабируемости: произвольное наращивание количества автоматизированных рабочих мест, пользователей, объемов электронных ресурсов, а также возможность увеличения производительности АБИС за счет добавления новых программных или аппаратных средств;

— открытости: обеспечение удаленного доступа к электронным ресурсам без необходимости установки специализированного программного обеспечения;

— управляемости: настраиваемость в зависимости от практики работы конкретной библиотеки;

— автоматизации контроля: многоэтапная проверка информации электронного каталога и тезаурусов на целостность, корректность, дублетность;

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

— безопасности: защита информации от несанкционированного доступа на основе разграничения прав доступа на следующих уровнях:

— системы управления базами данных,

— групп пользователей,

— технологических операций,

— состава полей библиографической записи, а также

— IP-авторизация,

— мониторинг работы пользователей в реальном режиме времени

а также:

— полной сочетаемости с используемыми Windows-приложениями и иными программными продуктами, предназначенными для работы с текстовой, графической, видео и звуковой информацией;

— поддержки цифровых объектов (файлов различного формата, содержащих полнотекстовые копии изданий в целом, а также их частей),

— поддержки многоязычности представления библиографической информации (Unicode);

— возможности использования автоматической проверки орфографии;

— поддержки штрих — кодирования, магнито- и оптико- пластиковых карт в качестве источника идентификационных данных.

Система состоит из следующих блоков: администратор, комплектование, каталогизатор—систематизатор, книгохранение, книговыдача, абонемент, читатель, поиск, Шлюз HTTP–Z 39.50

Основные характеристики и преимущества:

— Поддержка коммуникативных форматов RUSMARC, USMARC, UNIMARC;

— Масштабируемость — от школьных библиотек до национальных;

— Низкие требования к клиентским компьютерам;

— Работа как в сетевом, так и в локальном варианте;

— Простота настройки и администрирования;

— Трехзвенная архитектура построения системы;

— Стандартные международные протоколы Z 39.50-95,ILL;

— Поддержка многоязычности на основе UNICODE;

— Полная поддержка классификации по УДК и ББК;

— Поддержка авторитетных файлов;

— Формирование каталожных карточек в соответствии с ГОСТ 7.1-2003;

— Возможность формирования и печати читательского билета и учётной карточки с присвоением штрих — кодов;

— Наличие шаблонов формирования Марк-записи;

— Настраиваемая проверка на дублетность;

— Автоматическая проверка орфографии;

— Гибкая система создания, заимствования и редактирования записей как из вне, так и внутри самой базы данных;

— Возможность введения и редактирования дополнительных полей описания;

— Возможность формирования различных списков и перечней, в том числе и тематических списков литературы;

— Использование при работе ресурсов Internet и других средств удалённого доступа;

— Поддержка штрихкодирования, магнито- и оптико- пластиковых карт;

— Быстродействие системы не зависит от количества записей;

— Отсутствие ограничений на количество пользователей;

— Возможность полномасштабной адаптации к другим массивам: музеи, архивы и прочие.

Чтобы преступить к сравнительному анализу существующих аналогов систем на рынке информационных технологий сформулируем основные критерии выбора системы:

Общие критерии, применяемые при сравнении ПО, включают проверку:

— совокупной стоимости системы;

— функциональной её полноты;

— масштабируемости.

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

— технологичности.

Технологичность включает такие показатели как:

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

— интегрируемость — возможность автоматического, полуавтоматического и ручного обмена данными с существующими приложениями,

— открытость системы — возможность модификации функциональности системы с помощью встроенных или внешних средств разработки, путём изменения исходных кодов функций и процедур, ядра системы, интерфейсных форм, структуры и модели данных и прочее;

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

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

— эффективность означает сопоставление полученных полезных результатов и соответствующих затрат всех видов ресурсов с целью выявления оптимальных решений.

Каждый из критериев будем оценивать по пяти бальной шкале (таблица 1). Чем выше оценка, тем выше уровень критерия оценки системы в совокупном анализе.

Таблица 1 — Сравнительный анализ систем

№ п/п

Критерий системы

«OPAC-Global»

«МАРК – SQL»

«ИРБИС»

«БИБЛИОТЕКА-3»

1

Совокупная стоимость системы

от 550тыс.р до 3 500 тыс.р.

от 20тыс.р до 90 тыс.р.

около 25тыс.р.

от 550тыс.р до 3 500 тыс.р.

2

Функциональная полнота

5

4

3

3

3

Масштабируемость

5

3

3

4

4

Технологичность

5

4

3

3

5

Интегрированность

5

4

3

4

6

Интегрируемость

4

4

4

4

7

Открытость системы

2

3

5

3

8

Инвариантность по отношению к бизнесу

1

1

1

1

9

Перспективы развития

4

3

2

10

Эффективность

5

3

3

3

Таким образом, рассмотрев существующие аналоги системы автоматизации библиотеки в сравнении с проектируемой системой, следует отметить:

— все программы требуют специальной настройки, которая занимает, как правило, очень много времени;

— описанные аналоги содержат лишние функции и возможности, разрабатываемые специально для крупных библиотек, которые не будут использоваться в мелких библиотеках;

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

— существует возможность самостоятельно создавать различные отчеты, потребность в которых может возникнуть в процессе работы дополнительно.

1.4 Постановка задачи

1.4.1 Введение

Объектом автоматизации в рамках АИС является учет книг в библиотеке. Основной вид деятельности библиотеки — обслуживание читателей по оказанию библиотечной услуги.

Отметим несколько недостатков действующей системы:

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

Техническое задание формулирует основные требования к АИС, перечень и описание функций, которые должны быть реализованы в АИС. Разработка Технического задания выполнена в соответствии с требованиями ГОСТ 34.602-89 “Информационная технология. Комплекс стандартов на автоматизированные системы. Техническое задание на создание автоматизированной системы».

1.4.2 Основания для разработки

Разработка программы велась по индивидуальному заданию к курсовой работе. Разработка АИС ведётся на безвозмездной основе, т.е. финансирование работ не осуществляется.

1.4.3 Назначение разработки

Программный продукт АИС «Библиотека» должен автоматизировать работу библиотекаря.

Цель системы: сокращение затрат времени на обслуживание читателей и повышение качества обслуживания.

Критериями достижения цели создания АИС являются:

  • создание инструмента для решения поставленных задач;
  • повышение эффективности работы библиотекаря;
  • снижение влияния человеческого фактора и минимизация ошибок при выполнении процесса учета выдачи и возврата книг;
  • оперативная выдача информации по наличию книг;
  • сокращение затрачиваемого времени на составление аналитических отчетов работы по учету книг библиотеки.

1.4.4 Требования к программе или программному изделию

1.4.4.1 Требования к функциональным характеристикам

Основные функции программы для автоматизации деятельности библиотеки:

— ведение персональных данных читателей;

— ведение электронной копии абонемента читателя;

— оформление выдачи и возврата литературных изданий читателям;

— поиск литературных изданий по критериям;

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

— формирование отчетности..

В системе должны быть реализованы следующие подсистемы:

— подсистема формирования справочников системы позволяет ввести данных в основные справочники системы для работы системы;

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

— подсистема просмотра данных по запросу пользователя;

— подсистема формирования отчетов необходима для построения отчетных форм и просмотра аналитики по интересующим позициям;

— подсистема справочной информации.

Взаимосвязь перечисленных выше подсистем изображена на рисунке 3.

Подсистема доступа к данным

Подсистема справочной информации

Подсистема справочников

Подсистема просмотра данных по запросу

Подсистема построения отчетов

Рисунок 3 – Взаимосвязь подсистем АИС «Библиотека»

1.4.4.2 Требования к надежности

Надежность функционирования АИС должна обеспечиваться следующими способами:

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

Безопасность хранения данных АИС при аппаратных сбоях должна обеспечиваться соответствующими средствами операционной системы (MS Windows XP / Vista / 7/ 8).

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

1.4.4.3 Требования к эксплуатации

В целях обеспечения функционирования системы в нормальном режиме необходимо:

    1. организовать рабочее место библиотекаря: выделение персонального компьютера, соответствующего требованиям, заявленным в техническом обеспечении; обеспечение доступа к сети и принтеру.
    2. обеспечить подготовку входной информации, находящейся на бумажных или электронных носителях.
    3. установить операционную систему и разработанную АИС.
    4. провести обучение специалиста.

Помещения, в которых устанавливаются комплексы технических средств для эксплуатации АИС, должны соответствовать санитарным правилам и нормам, утвержденным Постановлением Госкомсанэпиднадзора России от 14 июля 1996 г. №14 «Гигиенические требования к видеодисплейным терминалам, персональным электронно-вычислительным машинам и организации работы» (СанПиН 2.2.2. 542-96).

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

1.4.4.4 Требования к составу и параметрам технических средств

Одно рабочее место должно удовлетворять требованиям к комплектации:

  • частота процессора не ниже 2 ГГц.
  • оперативная память не менее 2 Гбайт ;
  • монитор 17’’ с рабочим разрешением 1024×768 точек;
  • HDD не менее 20 Гбайт;
  • мышь и клавиатура.

1.4.4.5 Требования к информационной и программной совместимости

Минимальные требования:

  • Операционная система Windows 2000/XP/2003/Vista/7,
  • СУБД MS Access 2003,
  • Драйверы и утилиты для поддержки устройств.
  • Для работы с отчётами необходимо наличие MS Excell 2003/2007.

В состав информационного обеспечения входят: нормативно-справочная информация, входные данные, выходные данные, система управления базами данных (СУБД), интерфейсы межсистемных обменов.

1.4.4.6 Требования к программной документации

  • Инструкция обслуживающему персоналу.
  • Инструкция пользователя.

1.4.5 Технико-экономические показатели

Программный продукт характеризуется:

  • Низкой стоимостью
  • Быстротой развёртывания.
  • Простой переносимостью.
  • Низкими системными требованиями.
  • Простотой использования.

Разрабатываемые в АИС методы и программные модули должны содержать возможность дальнейшего развития системы.

Система будет разрабатываться в рамках системы открытого типа, что решает следующие задачи:

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

1.4.6 Стадии и этапы разработки

Разработка должна быть проведена в три стадии:

  1. разработка технического задания;
  2. рабочее проектирование;
  3. внедрение.

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

На стадии рабочего проектирования должны быть выполнены перечисленные ниже этапы работ:

1. разработка АИС для библиотеки;

2. разработка программной документации;

3. испытания программы.

На стадии внедрения должен быть выполнен этап разработки — подготовка и передача программы.

1.5 Выбор программной среды для реализации проекта базы данных и проектирования физической модели

В качестве средства разработки клиентского приложения выбрана среда программирования Microsoft Visual Studio 2010 Professional и СУБД Microsoft Access 2003.

Microsoft Visual Studio 2010 Professional — необходимое средство для независимых разработчиков, позволяющее решать основные задачи разработки. Система упрощает создание, отладку и развертывание приложений на различных платформах, включая SharePoint и облачную среду. Visual Studio 2010 Professional включает встроенную поддержку модели «разработка через тестирование», а также инструментов отладки, которые обеспечивают создание высококачественных решений.

Visual Studio 2010 Professional это средство для независимых разработчиков:

  • Интегрированная среда разработки;
  • Поддержка платформы разработки;
  • Средства тестирования.

Возможности Microsoft Visual Studio 2010 Professional:

    1. Настройка рабочего места. Написание программного кода часто требует одновременной работы с несколькими конструкторами и редакторами. Visual Studio 2010 Professional помогает разработчику организовать цифровое окружение благодаря поддержке нескольких мониторов, что упрощает работу над программами.
    2. Создание решений совместной работы на базе SharePoint. Новый компонент поддержки разработки приложений SharePoint позволяет создавать специализированные средства совместной работы, включая веб-модули, списки, рабочие процессы, события и многое другое.
    3. Создание приложений для Windows 7. Visual Studio 2010 Professional включает встроенные инструменты разработки для Windows 7, в том числе такие компоненты пользовательского интерфейса, как мультисенсорный ввод и лента, которые составляют основу передовой технологии Windows 7.
    4. Простое создание приложений на базе RIA и WPF. Новая функция привязки данных перетаскиванием (в Windows Presentation Foundation) и конструкторы Silverlight упрощают и ускоряют построение приложений Windows и многофункциональных интернет-приложений (Rich Internet Applications, RIA) для специалистов по проектированию и разработке.
    5. Упрощение развертывания веб-приложений. Перемещение веб-приложений в производственную среду одним щелчком мыши. Visual Studio 2010 Professional выполняет перенос кода, параметров IIS и схемы базы данных на целевой сервер [5, 6].

2 Проектирование базы данных

2.1 Выделение объектов предметной области, их характеристик и построения ER-модели

Цель этапа концептуального проектирования – создание концептуальной модели исходя из представлений пользователей о ПО. Для ее достижения выполняется проектирование с использованием метода «сущность-связь» [3].

Этап инфологического проектирования начинается с моделирования предметной области. Проектировщик разбивает ее на ряд локальных областей, каждая из которых (в идеале) включает в себя информацию, достаточную для обеспечения запросов отдельной группы будущих пользователей или решения отдельной задачи (подзадачи). Каждое локальное представление моделируется отдельно, а затем выполняется их объединение [10].

Перед созданием БД необходимо определиться с сущностями и их атрибутами. Ниже представлена сводная таблица «Сущности», в которой перечислены все сущности проектируемой БД и их описание (таблица 2).

Таблица 2 — Сущности предметной области

Название

Описание сущности

Особенности использования

Литература (книга)

Должна хранить в себе сведения обо всех книгах, которые имеются в библиотеке.

Некоторые читатели могут иметь одинаковые ФИО, номер телефона, адрес. Каждому читателю выдается читательский билет с уникальным номером.

Читатели

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

Некоторые читатели могут иметь одинаковые ФИО, номер телефона, адрес. Каждому читателю выдается читательский билет с уникальным номером.

Автор

Содержит необходимые данные об авторе книги.

Книга может быть написана несколькими авторами. Автор книги может быть неизвестен.

Издательство

Хранит информацию об издательстве, выпустившем книгу.

Одинаковые по содержанию книги могут быть выпущены разными издательствами.

Библиотека (выдача)

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

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

2.2 Выбор модели базы данных и построение логической модели

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

Построение модели данных выполняется в несколько этапов:

  1. Извлечение информации из интервью с заказчиком, изучение предоставленной информации и выделение сущности (объекты предметной области, информация о которых подлежит хранению). Каждая сущность имеет уникальный идентификатор и обладает свойствами:
  • обладать одним или несколькими атрибутами, которые либо принадлежат этой сущности, либо наследуются через связи;
  • сущность обладает одним или несколькими ключами, однозначно идентифицирующими каждый экземпляр;
  • может обладать любым количеством связей с другими сущностями.
  1. Моделирование связей. Связь – это поименованная ассоциация между двумя сущностями, значимая в рассматриваемой предметной области. Обычно каждый экземпляр одной сущности (родительской) ассоциируется с произвольным числом экземпляров-потомков. Имя каждой связи между двумя сущностями должно быть уникально, однако может повторяться в пределах модели. Для каждой связи определяется степень и обязательность. Связь всегда направляется от родительской сущности. Связи бывают следующих типов:
  • 1:1 (один к одному) – используется на верхнем уровне иерархической модели данных;
  • 1:М (один ко многим) – один экземпляр одной сущности связывается с несколькими экземплярами второй сущности;
  • М:N (многие ко многим) – используется на начальной стадии разработки диаграммы.
  1. Определение атрибутов сущности. Атрибут – характеристика сущности, значимая в рассматриваемой предметной области и предназначена для классификации, идентификации или выражения состояния сущности. Атрибут может быть описан или идентифицирован, при определении связи между сущностями идентифицирующие атрибуты наследуются от родительской сущности к потомку. Атрибут или их совокупность может использоваться для уникальной идентификации каждого экземпляра сущности (первичный ключ). Атрибут, являющийся первичным ключом, должен располагаться в верхней части списка. Ни одна из частей ключа не должна принимать значение 0, быть незаполненной или отсутствовать. Если сущности связаны, то связь передает ключевой атрибут дочерней сущности, и он называется внешним ключом (FK). [11]

Связи между объектами следующие:

– сущности «Автор», «Издательство» связаны с сущностью «Литература»;

– сущности «Абонемент» связана с сущностью «Библиотека»;

– сущность «Библиотека» связана с сущностью «Литература».

Связь между сущностями представлена в таблице 3.

Таблица 3 — Связь между сущностями

Сущность

Тип связи

Сущность

Кардинальность

АВТОР

пишет

КНИГА

M:N

ИЗДАТЕЛЬСТВО

выпускает

КНИГА

1:M

ВЫДАЧА

предлагает

КНИГА

1:M

ЧИТАТЕЛЬ

пользуется

ВЫДАЧА

1:M

ЧИТАТЕЛЬ

читает

КНИГА

1:M

На рисунке 4 представлена информационная модель проектируемой БД, в которой отражены все сущности и связи между ними.

Рисунок 4 – Информационная модель базы данных

2.3 Описание создания таблиц базы данных

Логическая модель данных предметной области с сущностей, атрибутов и связей в соответствии со стандартом IDEF1X показана на рисунке 4.

Опишем структуру созданных таблиц базы данных проектируемой системы. Таблица «Литература» представляет собой информацию о библиотечном фонде. Структура данных приведена в таблице 4.

Рисунок 4 – Логическая модель данных ИС «Библиотека»

Таблица 4 — Структура таблицы «Литература»

№ п/п

Название поля

Тип поля

Null

Краткая характеристика

1

Номер записи

Числовой

Нет

Идентификатор книжного издания

2

Название книги

Текстовый

(100 знаков)

Нет

Название книжного издания

3

Автор

Числовой

Нет

Идентификатор записи автора

4

Издательство

Числовой

Нет

Идентификатор записи издательства

5

Год издания

Текстовый

(4 знака)

Да

Год издания книжного издания

6

Срок эксплуатации

Числовой

Нет

Срок эксплуатации книжного издания

7

Страна

Текстовый

(50 знаков)

Да

Страна происхождения книжного издания

8

Стоимость книги

Денежный

Нет

Стоимость книги книжного издания

9

Шифр

Текстовый

(20 знаков)

Шифр книжного издания

10

Количество

Числовой

Нет

Количество книжного издания в фонде библиотеки

Таблица «Абонемент» является электронным документом читательского билета посетителя библиотеки. Структура данных приведена в таблице 5.

Таблица 5 — Структура таблицы «Абонемент»

№ п/п

Название поля

Тип поля

Null

Краткая характеристика

1

Номер записи

Числовой

Нет

Идентификатор абонемента

2

Номер читательского билета

Текстовый

(50 знаков)

Нет

Номер читательского билета

3

ФИО читателя

Текстовый

(100 знаков)

Нет

Фамилия, имя и отчество читателя

4

Место работы

Текстовый

(70 знаков)

Да

Место работы читателя

5

Должность

Текстовый

(50 знаков)

Да

Должность читателя

6

Студент (Да/Нет)

Логический

Нет

Признак льготного посещения библиотеки

7

Адрес регистрации

Текстовый

(70 знаков)

Нет

Адрес регистрации читателя

8

Контактный телефон

Текстовый

(50 знаков)

Нет

Контактный телефон читателя

Читательский формуляр и карточка книги представлен на рисунке 5 и рисунке 6.

Справочной информацией являлась вспомогательная информация, которая содержит перечень издательств и авторов. Характеристика справочников представлена в таблицах 6 и 7.

Таблица «Издательство» предназначена для хранения информации об издательских центрах, выпускающих книги и журналы. Структура данных приведена в таблице 6.

Рисунок 5 – Читательский формуляр

Рисунок 6 – Карточка книги

Таблица 6 — Структура таблицы «Издательство»

№ п/п

Название поля

Тип поля

Null

Краткая характеристика

1

Номер записи

Числовой

Нет

Идентификатор издательства

2

Название издательства

Текстовый (50 знаков)

Да

Название издательства

3

Адрес издательства

Текстовый

(70 знаков)

Нет

Юридический адрес издательства

Таблица «Автор» содержит личные данные об авторах книг и других литературных произведений. Структура данных приведена в таблице 7.

Таблица 7 — Структура таблицы «Автор»

№ п/п

Название поля

Тип поля

Null

Краткая характеристика

1

Номер записи

Числовой

Нет

Идентификатор автора

2

ФИО автора

Текстовый

(100 знаков)

Нет

Фамилия, имя и отчество литературного писателя

3

Год рождения

Текстовый

(4 знака)

Да

Год рождения литературного писателя

4

Страна

Текстовый

(4 знака)

Да

Страна рождения литературного писателя

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

Таблица 8 — Структура таблицы «Библиотека»

№ п/п

Название поля

Тип поля

Null

Краткая характеристика

1

Номер записи

Числовой

Нет

Идентификатор записи в истории

2

Книга

Числовой

Нет

Идентификатор книги

3

Дата выдачи книги

Дата/время

Нет

Дата выдачи книги читателю

4

Дата возврата книги

Дата/время

Да

Дата возврата книги читателю

5

Читатель

Числовой

Нет

Идентификатор читателя

6

Возврат (Да/Нет)

Логический

Да

Признак возврата книги в библиотеку

7

Штраф

Денежный

Да

Размер штрафа за просрочку возврата книги в библиотеку

3 Разработка АИС

3.1 Разработка структуры АИС «Библиотека»

Формализованную модель проектируемой системы можно условно разделить на следующие разделы:

— раздел справочников системы;

— раздел электронных документов;

— раздел отчетных форм;

— информационный раздел.

Общая описанная структура позволит составить логическую схему работы ИС, представленную на рисунке 7.

Главное меню

Файл

Справочники

Отчеты

Справка

Автор

Жанр

Издательство

Выход

О программе

Перечень выданных книг

Личные данные авторов

Сводный отчет

Рисунок 7 – Логическая схема работы ИС

На основании логической схемы работы ИС будут созданы следующие формы и модули:

1. Форма и модуль для осуществления поиска и регистрации продажи книг, она же главная форма ИС;

2. Форма и модуль для заполнения и редактирования справочников системы;

3. Форма и модуль для формирования отчетов.

Структура спроектированной системы представлена на рисунке 8.

Конечный программный продукт АИС «Библиотека» представляет собой базу данных (Biblio.mdb) и исполняемый exe-файл (Biblio.exe), исходный текст которого состоит из следующих модулей:

Рисунок 8 – Обзор состава проекта АИС «Библиотека»

FormReg.cs – форма и модуль авторизации в системе, которая появляется при запуске АИС «Библиотека».

FormM.cs – главная форма и модуль программы, которая открывается после успешной авторизации в системе. Данная форма позволяет осуществлять доступ к остальным формам проекта.

Biblio.mdb – база данных СУБД.

FormS.cs – форма и модуль программы для просмотра, ввода и редактирования входных данных: справочник «Автор», справочник «Жанр», справочник «Издательство».

FormSet.cs – форма и модуль для настройки прав доступа к системе.,

FormRep.cs –форма и модуль программы для визуализации отчетов АИС «Выдача книг».

Report1.rdlc, Report2.rdlc, Report3.rdlc – файлы печатных форм системы: перечень выданных книг, личные данные авторов и сводный отчет.

Листинги данных модулей приведены в приложении.

3.2 Руководство пользователя АИС «Библиотека»

Запустим Biblio.exe в корневом каталоге C:Biblio. При запуске программы появляется форма авторизации, представленная на рисунке 9.

Рисунок 9 — Форма авторизации

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

После удачной авторизации открывается главное окно программы, где располагается пользовательское меню системы (рисунок 10).

Рисунок 10 — Главное окно программы «Biblio»

Опишем основные возможности главного меню программы.

Пункт меню

Функциональная возможность

Файл

Настройка прав

Настройка прав пользователей

Роль: 1-администратор, 2- библиотекарь, 3- пользователь

Выход

Выход из программы «Biblio»

Справочники

Ввод, просмотр и редактирование данных справочников:

Автор

Личные данные авторов книг

Жанр

Жанр литературных произведений

Издательство

Издательство литературных произведений

Абонемент

Оформляет новый абонемент читателю

БиблиоФонд

Предоставляет информацию о литературных изданиях с помощью фильтра по автору и названию книги

Выдача/ возврат книг

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

Отчёты

Формирует отчет

Перечень книг библиотеки

Перечень всех выданных книг БД

Личные данные авторов

Информация о личных данных авторов книг

Сводный отчет

Отчет с группировкой по жанру, издательству и авторам

Справка

Справка о разработке программы

О программе

Выбор любого выпадающего пункта меню «Справочники» открывает форму для редактирования данных выбранного справочника. С помощью кнопки «Сохранить» диалогового окна «Справочники» и кнопок клавиатуры «Отмена» пользователь может просматривать, добавлять или удалять текущую запись справочника (рисунок 11).

Рисунок 11 — Диалоговое окно «Справочники»

Ввод данных о литературных изданиях осуществляется аналогично вводу данных справочников через главное меню формы.

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

Рисунок 12 — Фильтр по автору и дате выдачи

В главной форме в разделе «Абонемент» предусмотрена возможность создания абонемента читателю (рисунок 13).

Рисунок 13 — Выдача абонемента

Раздел «Выдача/возврат книг» предусмотрен для оформления выдачи книги читателю и возврат её в библиотечный (рисунок 14).

Рисунок 14 — Фильтр по автору и дате выдачи

Печатная форму отчета «Перечень книг библиотеки» появляется в верхней части главного окна после выбора пункта меню Отчеты  Перечень книг библиотеки. Результат отчета изображен на рисунке 14.

Рисунок 15 — Отчет «Перечень книг»

Аналогичным образом открывается отчет о личных данных авторов (рисунок 16).

Рисунок 16 — Отчет «Личные данные авторов»

Сводный ответ выводится по всем данным информационной базы литературных источников с группировкой по жанру, издательству и авторам после нажатия пункта меню главного окна Отчеты Сводный отчет (рисунок 17).

Рисунок 17 — Отчет «Сводный отчет»

Чтобы просмотреть информацию о разработчике программы достаточно выбрать пункт меню Справка О программе (рисунок 18).

Рисунок 18 — Краткая информация о разработчике

Заключение

В рамках курсового проекта на базе среды разработки Visual Studio 2010 была разработана автоматизированная информационная система учета выданных литературных произведений. АРМ библиотекаря позволяет автоматизировать процесс учета выдачи и возврата книг в библиотеке. В рамках курсовой работы реализована АРМ библиотекаря, которая структурирует, упорядочивает и упрощает работу библиотекаря. Разработанное АРМ может применяться в учреждении для накопления и хранения различной информации о читателях библиотеки, книгах, а также датах возврата и выдачи книг.

В процессе разработки АРМ была использована реляционная модель. Она позволила спроектировать базу данных, в которой нет ненужных избыточных сведений и противоречий, из-за которых в дальнейшем могла произойти порча информации. Также была обеспечена целостность информации, которая способствовала непротиворечивости и адекватности отражаемых сведений.

В ходе написания курсовой работы были поставлены и решены следующие задачи:

1. ознакомление с общими сведениями о деятельности библиотекаря;

2. исследование организации учета и выдачи книг в библиотеке;

3. рассмотрены возможности применения среды разработки Visual Studio для создания АРМ;

4. спроектировано АРМ библиотека;

5. реализован проект и разработано руководство пользователя АРМ библиотека.

Список использованных источников

  1. Microsoft Visual Studio 2010 Professional http://www.1csoft.ru/catalog/7628/4039295/4030701/
  2. Visual Studio 2010 http://msdn.microsoft.com/ru-ru/library/dd831853(v=vs.100).aspx
  3. Гвоздева, Т.В. Проектирование информационных систем. – Ростов н/Д.: Феникс, 2009. – 508 с
  4. Андрей Зиборов. «Visual C# 2010 на примерах». СПб.: БХВ-Петербург, 2011.
  5. Либерти Д. Программирование на C#, 156-423с.
  6. Прайс Дж., Гандерлой М. Visual C#.Net Полное руководство. 2004.
  7. Шумаков П.В. ADO.NET и создание приложений баз данных в среде Microsoft Visual Studio. NET. – М.: ДИАЛОГ-МИФИ, 2003.
  8. Зиборов В.В. Visual C# на примерах. – СПб.: БХВ-Петербург, 2011.
  9. Справочное руководство по MySQL [Электронный ресурс]. — Режим доступа: http://www.mysql.ru/docs/man/Reference.html — Загл. с экрана (Дата обращения: 07.11.2017).
  10. Дейт, К.Дж. Введение в системы баз данных. – СПб.: Издательский дом «Вильямс», 2008. — 848 с.
  11. АС Библиотека-3 — автоматизация и координация всех процессов работы библиотек [Электронный ресурс]. — Режим доступа: http://www.galaxyit.ru/service/article_full.php?id=380&id_next=378&id_prev=379. — Загл. с экрана.
  12. Автоматизированная информационно-библиотечная система МАРК-SQL. Обзор текущего состояния. Новые направления развития [Электронный ресурс]. — Режим доступа: http://www.gpntb.ru/win/inter-events/crimea2001/tom/sec2a/Doc5.HTML. — Загл. с экрана.
  13. Автоматизация библиотечных процессов [Электронный ресурс]. — Режим доступа: http://schoollibrary-ikt.narod.ru/index/0-2. — Загл. с экрана.
  14. Автоматизация библиотечной деятельности [Электронный ресурс]. — Режим доступа: http://laleshin.narod.ru/pto/T-4-1.pdf. — Загл. с экрана.
  15. Автоматизация библиотечных процессов [Электронный ресурс]. — Режим доступа: http://schoollibrary-ikt.narod.ru/index/0-2. — Загл. с экрана.
  16. Основные функции библиотеки процессов [Электронный ресурс]. — Режим доступа: http://libr-sch-2.moy.su/index/0-2. — Загл. с экрана.
  17. Официальный сайт ООО «ДИТ-М» Документальные информационные технологии [Электронный ресурс]. — Режим доступа: http://www.ditm.ru/. — Загл. с экрана.
  18. Что такое библиотека [Электронный ресурс]. — Режим доступа: http://www.kakprosto.ru/kak-79154-chto-takoe-biblioteka#ixzz3WxHvIv8a . — Загл. с экрана.
  19. Основные функции библиотеки [Электронный ресурс]. — Режим доступа: http://libr-sch-2.moy.su/index/0-2. — Загл. с экрана.
  20. Мой ориентир — библиотекарь [Электронный ресурс]. — Режим доступа: http://мой-ориентир.рф/энциклопедия-профессий/804/. — Загл. с экрана.
  21. Степанов, В. К. Тенденции развития библиографических сервисов библиотек в эпоху цифровых коммуникаций [Электронный ресурс]. — Режим доступа: http://ellib.gpntb.ru/subscribe/index.php?art=2&journal=ntb&num=3&year=2006 . — Загл. с экрана.
  22. Microsoft Visual Studio [Электронный ресурc]. – Режим доступа: https://ru.wikipedia.org/wiki/Microsoft_Visual_Studio. — Загл. с экрана.
  23. Сравнительные характеристики средств разработки приложений [Электронный ресурс]. – Режим доступа: http://altcode.ru/c-plus/. — Загл. с экрана.

Приложение 1.
Листинг FormM.cs

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 Excel = Microsoft.Office.Interop.Excel;

using Word = Microsoft.Office.Interop.Word;

namespace Biblio

{

public partial class FormMain : Form

{

private Excel.Application excelapp;

private Excel.Window excelWindow;

public FormMain()

{

InitializeComponent();

}

public int MenuItemsAndGridNoVisible()

{

настройкаПравToolStripMenuItem.Visible = false;

справочникиToolStripMenuItem.Visible = false;

абонементToolStripMenuItem.Visible = false;

библиоФондToolStripMenuItem.Visible = false;

отчетыToolStripMenuItem.Visible = false;

выдачавозвратКнигToolStripMenuItem.Visible = false;

dataGridViewL.Visible = false;

dataGridViewA.Visible = false;

dataGridViewB.Visible = false;

panelL.Visible = false;

panelA.Visible = false;

button1.Visible = false;

button2.Visible = false;

button4.Visible = false;

panelB.Visible = false;

return 0;

}

public int RoleVisible(int role)

{

MenuItemsAndGridNoVisible();

switch (role)

{

case 1:

настройкаПравToolStripMenuItem.Visible = true;

справочникиToolStripMenuItem.Visible = true;

абонементToolStripMenuItem.Visible = true;

библиоФондToolStripMenuItem.Visible = true;

отчетыToolStripMenuItem.Visible = true;

выдачавозвратКнигToolStripMenuItem.Visible = true;

break;

case 2:

справочникиToolStripMenuItem.Visible = true;

абонементToolStripMenuItem.Visible = true;

библиоФондToolStripMenuItem.Visible = true;

отчетыToolStripMenuItem.Visible = true;

выдачавозвратКнигToolStripMenuItem.Visible = true;

break;

case 3:

библиоФондToolStripMenuItem.Visible = true;

break;

default:

break;

}

return 0;

}

private void FormMain_Load(object sender, EventArgs e)

{

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Издательство». При необходимости она может быть перемещена или удалена.

this.издательствоTableAdapter.Fill(this.biblioDataSet.Издательство);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Жанр». При необходимости она может быть перемещена или удалена.

this.жанрTableAdapter.Fill(this.biblioDataSet.Жанр);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Автор». При необходимости она может быть перемещена или удалена.

this.авторTableAdapter.Fill(this.biblioDataSet.Автор);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Литература». При необходимости она может быть перемещена или удалена.

this.литератураTableAdapter.Fill(this.biblioDataSet.Литература);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Абонемент». При необходимости она может быть перемещена или удалена.

this.абонементTableAdapter.Fill(this.biblioDataSet.Абонемент);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Библиотека». При необходимости она может быть перемещена или удалена.

this.библиотекаTableAdapter.Fill(this.biblioDataSet.Библиотека);

}

private void авторToolStripMenuItem_Click(object sender, EventArgs e)

{

FormS FS = new FormS();

FS.DataMade(1);

FS.ShowDialog();

}

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

{

Application.Exit();

}

private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)

{

string caption = «Информация о программе»;

string message = «АИС ‘Библиотека’ разработана в качестве курсового проекта.»;

DialogResult result = MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Information);

}

private void жанрToolStripMenuItem_Click(object sender, EventArgs e)

{

FormS FS = new FormS();

FS.DataMade(2);

FS.ShowDialog();

}

private void издательствоToolStripMenuItem_Click(object sender, EventArgs e)

{

FormS FS = new FormS();

FS.DataMade(3);

FS.ShowDialog();

}

private void button2_Click(object sender, EventArgs e)

{

this.литератураBindingSource.CancelEdit();

this.абонементBindingSource.CancelEdit();

this.библиотекаBindingSource.CancelEdit();

MessageBox.Show(«Изменения сохранить не удалось.»);

}

private void button1_Click(object sender, EventArgs e)

{

this.Validate();

this.литератураBindingSource.EndEdit();

this.литератураTableAdapter.Update(biblioDataSet);

this.абонементBindingSource.EndEdit();

this.абонементTableAdapter.Update(biblioDataSet);

this.библиотекаBindingSource.EndEdit();

this.библиотекаTableAdapter.Update(biblioDataSet);

MessageBox.Show(«Изменения сохранены.»);

}

private void button4_Click(object sender, EventArgs e)

{

this.литератураBindingSource.Filter = «»;

this.абонементBindingSource.Filter = «»;

this.библиотекаBindingSource.Filter = «»;

}

private void переченьКнигToolStripMenuItem_Click(object sender, EventArgs e)

{

string fileName = System.Windows.Forms.Application.StartupPath + «\» + «Report1» + «.xlt»;

//Приложение самого Excel

excelapp = new Excel.Application();

excelapp.Visible = false;

try

{

//Книга.

Excel.Workbooks excelappworkbooks = excelapp.Workbooks;

excelapp.Workbooks.Open(fileName,

Type.Missing, Type.Missing, Type.Missing, Type.Missing,

Type.Missing, Type.Missing, Type.Missing, Type.Missing,

Type.Missing, Type.Missing, Type.Missing, Type.Missing,

Type.Missing, Type.Missing);

Excel.Workbook excelappworkbook = excelappworkbooks[1];

//Получаем массив ссылок на листы выбранной книги

Excel.Sheets excelsheets = excelappworkbook.Worksheets;

//Выбираем лист 1

Excel.Worksheet excelworksheet = (Excel.Worksheet)excelsheets.get_Item(1);

//Выбираем ячейку для вывода A1

Excel.Range excelcells = excelworksheet.get_Range(«A1», Type.Missing);

excelworksheet.Activate();

int rowExcel = 4;

for (int i = 0; i < dataGridViewL.RowCount — 1; i++)

{

excelworksheet.Cells[rowExcel, «A»] = dataGridViewL.Rows[i].Cells[1].Value;

excelworksheet.Cells[rowExcel, «B»] = dataGridViewL.Rows[i].Cells[2].Value;

excelworksheet.Cells[rowExcel, «C»] = dataGridViewL.Rows[i].Cells[3].FormattedValue;

excelworksheet.Cells[rowExcel, «D»] = dataGridViewL.Rows[i].Cells[4].FormattedValue;

excelworksheet.Cells[rowExcel, «E»] = dataGridViewL.Rows[i].Cells[11].FormattedValue;

++rowExcel;

}

}

catch (Exception error)

{

throw error;

}

excelapp.Visible = true;

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Издательство». При необходимости она может быть перемещена или удалена.

this.издательствоTableAdapter.Fill(this.biblioDataSet.Издательство);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Жанр». При необходимости она может быть перемещена или удалена.

this.жанрTableAdapter.Fill(this.biblioDataSet.Жанр);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Автор». При необходимости она может быть перемещена или удалена.

this.авторTableAdapter.Fill(this.biblioDataSet.Автор);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Литература». При необходимости она может быть перемещена или удалена.

this.литератураTableAdapter.Fill(this.biblioDataSet.Литература);

}

private void личныеДанныеАвторовToolStripMenuItem_Click(object sender, EventArgs e)

{

FormS FS = new FormS();

FS.DataMade(1);

FS.авторTableAdapter.Fill(this.biblioDataSet.Автор);

string fileName = System.Windows.Forms.Application.StartupPath + «\» + «Report2» + «.xlt»;

//Приложение самого Excel

excelapp = new Excel.Application();

excelapp.Visible = false;

try

{

//Книга.

Excel.Workbooks excelappworkbooks = excelapp.Workbooks;

excelapp.Workbooks.Open(fileName,

Type.Missing, Type.Missing, Type.Missing, Type.Missing,

Type.Missing, Type.Missing, Type.Missing, Type.Missing,

Type.Missing, Type.Missing, Type.Missing, Type.Missing,

Type.Missing, Type.Missing);

Excel.Workbook excelappworkbook = excelappworkbooks[1];

//Получаем массив ссылок на листы выбранной книги

Excel.Sheets excelsheets = excelappworkbook.Worksheets;

//Выбираем лист 1

Excel.Worksheet excelworksheet = (Excel.Worksheet)excelsheets.get_Item(1);

//Выбираем ячейку для вывода A1

Excel.Range excelcells = excelworksheet.get_Range(«A1», Type.Missing);

excelworksheet.Activate();

int rowExcel = 4;

for (int i = 0; i < FS.dataGridView1.RowCount — 1; i++)

{

excelworksheet.Cells[rowExcel, «A»] = FS.dataGridView1.Rows[i].Cells[1].Value;

excelworksheet.Cells[rowExcel, «B»] = FS.dataGridView1.Rows[i].Cells[2].Value;

excelworksheet.Cells[rowExcel, «C»] = FS.dataGridView1.Rows[i].Cells[3].Value;

++rowExcel;

}

}

catch (Exception error)

{

throw error;

}

excelapp.Visible = true;

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Издательство». При необходимости она может быть перемещена или удалена.

this.издательствоTableAdapter.Fill(this.biblioDataSet.Издательство);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Жанр». При необходимости она может быть перемещена или удалена.

this.жанрTableAdapter.Fill(this.biblioDataSet.Жанр);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Автор». При необходимости она может быть перемещена или удалена.

this.авторTableAdapter.Fill(this.biblioDataSet.Автор);

}

private void сводныйОтчетToolStripMenuItem_Click(object sender, EventArgs e)

{

литератураBindingSource.Sort = «Страна, Жанр»;

string fileName = System.Windows.Forms.Application.StartupPath + «\» + «Report3» + «.xlt»;

//Приложение самого Excel

excelapp = new Excel.Application();

excelapp.Visible = false;

try

{

//Книга.

Excel.Workbooks excelappworkbooks = excelapp.Workbooks;

excelapp.Workbooks.Open(fileName,

Type.Missing, Type.Missing, Type.Missing, Type.Missing,

Type.Missing, Type.Missing, Type.Missing, Type.Missing,

Type.Missing, Type.Missing, Type.Missing, Type.Missing,

Type.Missing, Type.Missing);

Excel.Workbook excelappworkbook = excelappworkbooks[1];

//Получаем массив ссылок на листы выбранной книги

Excel.Sheets excelsheets = excelappworkbook.Worksheets;

//Выбираем лист 1

Excel.Worksheet excelworksheet = (Excel.Worksheet)excelsheets.get_Item(1);

//Выбираем ячейку для вывода A1

Excel.Range excelcells = excelworksheet.get_Range(«A1», Type.Missing);

excelworksheet.Activate();

int rowExcel = 4;

string страна = «»;

string жанр = «»;

for (int i = 0; i < dataGridViewL.RowCount — 1; i++)

{

if (страна != dataGridViewL.Rows[i].Cells[8].Value)//страна

{

страна = (string)dataGridViewL.Rows[i].Cells[8].Value;

excelworksheet.Cells[rowExcel, «A»] = «Страна»;

excelworksheet.Cells[rowExcel, «B»] = dataGridViewL.Rows[i].Cells[8].Value;

excelworksheet.Cells[rowExcel, «A»].Font.Italic = true;

excelworksheet.Cells[rowExcel, «B»].Font.Italic = true;

++rowExcel;

};

if (жанр != dataGridViewL.Rows[i].Cells[4].FormattedValue)//жанр

{

жанр = (string)dataGridViewL.Rows[i].Cells[4].FormattedValue;

excelworksheet.Cells[rowExcel, «B»] = «Жанр»;

excelworksheet.Cells[rowExcel, «C»] = dataGridViewL.Rows[i].Cells[4].FormattedValue;

excelworksheet.Cells[rowExcel, «C»].Font.Italic = true;

excelworksheet.Cells[rowExcel, «B»].Font.Italic = true;

++rowExcel;

}

excelworksheet.Cells[rowExcel, «A»] = dataGridViewL.Rows[i].Cells[2].Value;

excelworksheet.Cells[rowExcel, «B»] = dataGridViewL.Rows[i].Cells[3].FormattedValue;

excelworksheet.Cells[rowExcel, «C»] = dataGridViewL.Rows[i].Cells[5].FormattedValue;

++rowExcel;

}

}

catch (Exception error)

{

throw error;

}

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Издательство». При необходимости она может быть перемещена или удалена.

this.издательствоTableAdapter.Fill(this.biblioDataSet.Издательство);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Жанр». При необходимости она может быть перемещена или удалена.

this.жанрTableAdapter.Fill(this.biblioDataSet.Жанр);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Автор». При необходимости она может быть перемещена или удалена.

this.авторTableAdapter.Fill(this.biblioDataSet.Автор);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Литература». При необходимости она может быть перемещена или удалена.

this.литератураTableAdapter.Fill(this.biblioDataSet.Литература);

excelapp.Visible = true;

}

private void настройкаПравToolStripMenuItem_Click(object sender, EventArgs e)

{

FormSet FS = new FormSet();

FS.ShowDialog();

}

private void абонементToolStripMenuItem_Click(object sender, EventArgs e)

{

button1.Visible = true;

button2.Visible = true;

button4.Visible = true;

panelL.Visible = false;

panelA.Visible = true;

panelB.Visible = false;

dataGridViewL.Visible = false;

dataGridViewA.Visible = true;

dataGridViewB.Visible = false;

dataGridViewA.Columns[0].Visible = false;

}

private void библиоФондToolStripMenuItem_Click(object sender, EventArgs e)

{

button1.Visible = true;

button2.Visible = true;

button4.Visible = true;

panelL.Visible = true;

panelA.Visible = false;

panelB.Visible = false;

dataGridViewL.Visible = true;

dataGridViewA.Visible = false;

dataGridViewB.Visible = false;

dataGridViewL.Columns[0].Visible = false;

}

private void выдачавозвратКнигToolStripMenuItem_Click(object sender, EventArgs e)

{

button1.Visible = true;

button2.Visible = true;

button4.Visible = true;

panelL.Visible = false;

panelA.Visible = false;

panelB.Visible = true;

dataGridViewL.Visible = false;

dataGridViewA.Visible = false;

dataGridViewB.Visible = true;

dataGridViewB.Columns[0].Visible = false;

}

private void FormMain_FormClosed(object sender, FormClosedEventArgs e)

{

Application.Exit();

}

private void buttonA_Click(object sender, EventArgs e)

{

string caption = «Ошибка выбора»;

string message = «Выберите значение из списка»;

string sfilter = «»;

if (textBox2.Text != «»)

sfilter += «[Номер читательского билета] Like ‘%» + textBox2.Text + «%'»;

if (textBox2.Text != «» && textBox4.Text != «»)

sfilter += » and «;

if (textBox4.Text != «»)

sfilter += «[ФИО читателя] Like ‘%» + textBox4.Text + «%'»;

if (sfilter != «»)

{

this.абонементBindingSource.Filter = sfilter;

}

else

{

DialogResult result = MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Information);

}

}

private void buttonB_Click(object sender, EventArgs e)

{

}

private void buttonL_Click(object sender, EventArgs e)

{

string caption = «Ошибка выбора»;

string message = «Выберите значение из списка»;

string sfilter = «»;

sfilter = «[Дата] >=#» + String.Format(«{0:MM/dd/yyyy}», dateTimePicker1.Value) + «# And «

+ » [Дата] <=#» + String.Format(«{0:MM/dd/yyyy}», dateTimePicker2.Value) + «# «;

if ((int)comboBox1.SelectedValue > 0)

sfilter += «and [Автор]=» + comboBox1.SelectedValue;

if (textBox1.Text != «»)

sfilter += «and [Название книги] Like ‘%» + textBox1.Text + «%'»;

if (sfilter != «»)

{

this.литератураBindingSource.Filter = sfilter;

}

else

{

DialogResult result = MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Information);

}

}

private void buttonB_Click_1(object sender, EventArgs e)

{

string caption = «Ошибка выбора»;

string message = «Выберите значение из списка»;

string sfilter = «»;

if ((int)comboBox3.SelectedValue > 0)

sfilter += «[Книга]=» + comboBox3.SelectedValue;

if ((int)comboBox2.SelectedValue > 0 && (int)comboBox3.SelectedValue > 0)

sfilter += » and «;

if ((int)comboBox3.SelectedValue > 0)

sfilter += «[Читатель]=» + comboBox3.SelectedValue;

if (sfilter != «»)

{

this.библиотекаBindingSource.Filter = sfilter;

}

else

{

DialogResult result = MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Information);

}

}

}

}

Приложение 2.
Листинг FormS.cs

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;

namespace Biblio

{

public partial class FormS : Form

{

public FormS()

{

InitializeComponent();

}

public int DataMade(int caseSwitch)

{

switch (caseSwitch)

{

case 1:

label1.Text = «Автор»;

dataGridView1.DataSource = this.авторBindingSource;

this.авторTableAdapter.Fill(this.biblioDataSet.Автор);

break;

case 2:

label1.Text = «Жанр»;

dataGridView1.DataSource = this.жанрBindingSource;

this.жанрTableAdapter.Fill(this.biblioDataSet.Жанр);

break;

case 3:

label1.Text = «Издательство»;

dataGridView1.DataSource = this.издательствоBindingSource;

this.издательствоTableAdapter.Fill(this.biblioDataSet.Издательство);

break;

default:

label1.Text = «»;

break;

}

dataGridView1.Columns[0].Visible = false;

return 0;

}

private void FormS_Load(object sender, EventArgs e)

{

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Издательство». При необходимости она может быть перемещена или удалена.

this.издательствоTableAdapter.Fill(this.biblioDataSet.Издательство);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Автор». При необходимости она может быть перемещена или удалена.

this.авторTableAdapter.Fill(this.biblioDataSet.Автор);

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Жанр». При необходимости она может быть перемещена или удалена.

this.жанрTableAdapter.Fill(this.biblioDataSet.Жанр);

}

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

this.Validate();

this.жанрBindingSource.EndEdit();

this.жанрTableAdapter.Update(biblioDataSet);

this.авторBindingSource.EndEdit();

this.авторTableAdapter.Update(biblioDataSet);

this.издательствоBindingSource.EndEdit();

this.издательствоTableAdapter.Update(biblioDataSet);

MessageBox.Show(«Изменения сохранены.»);

}

private void button2_Click(object sender, EventArgs e)

{

this.жанрBindingSource.CancelEdit();

this.авторBindingSource.CancelEdit();

this.издательствоBindingSource.CancelEdit();

MessageBox.Show(«Изменения сохранить не удалось.»);

}

}

}

Приложение 3.
Листинг FormSet.cs

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;

namespace Biblio

{

public partial class FormSet : Form

{

public FormSet()

{

InitializeComponent();

}

private void FormSet_Load(object sender, EventArgs e)

{

// TODO: данная строка кода позволяет загрузить данные в таблицу «biblioDataSet.Пользователи». При необходимости она может быть перемещена или удалена.

this.пользователиTableAdapter.Fill(this.biblioDataSet.Пользователи);

}

private void button1_Click(object sender, EventArgs e)

{

this.пользователиBindingSource.EndEdit();

this.пользователиTableAdapter.Update(biblioDataSet);

MessageBox.Show(«Изменения сохранены.»);

}

private void button2_Click(object sender, EventArgs e)

{

this.пользователиBindingSource.CancelEdit();

MessageBox.Show(«Изменения сохранить не удалось.»);

}

}

}

Приложение 4.
Листинг FormReg.cs

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.Data.OleDb;

namespace Biblio

{

public partial class FormReg : Form

{

string name;

string pass;

int admin;

public FormReg()

{

InitializeComponent();

}

private void buttonOk_Click(object sender, EventArgs e)

{

name = textBoxL.Text;

pass = textBoxP.Text;

string CommandText = «SELECT * FROM [Пользователи] WHERE [Логин] = ‘» + name + «‘ AND [Пароль] = ‘» + pass + «‘»;

string Connect = «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Biblio.mdb;»;

var myConnection = new OleDbConnection(Connect);

OleDbCommand myCommand = new OleDbCommand(CommandText, myConnection);

myConnection.Open();

object result = myCommand.ExecuteScalar();

if (result == null)

MessageBox.Show(«Данный пользователь не зарегестрирован в базе данных АИС.», «Ошибка авторизация», MessageBoxButtons.OK, MessageBoxIcon.Error);

else

{

OleDbDataReader reader = myCommand.ExecuteReader();

reader.Read();

FormMain FM = new FormMain();

admin = Convert.ToInt32(reader[«Роль»].ToString());

this.Hide();

FM.RoleVisible(admin);

FM.ShowDialog();

}

myConnection.Close();

}

private void buttonС_Click(object sender, EventArgs e)

{

Application.Exit();

}

}

}

СПИСОК ДЛЯ ТРЕНИРОВКИ ССЫЛОК

  • Интегрированные среды разработки программ ( Microsoft Visual Studio )
  • Аббревиатуры в английском языке (Английские сленговые аббревиатуры)
  • Роль мотивации в поведении организации
  • Проблема личности в социальной психологии (Социально- психологические теории личности)
  • Исследование проблем защиты информации (АК «Собинбанк»)
  • Проектирование реализации операций бизнес-процесса «Планирование производства.
  • Организация рекламной деятельности в организации ИП Лапшин Р. В.
  • Анализ конкурентов на рынке и определение собственной конкурентоспособности (на примере ООО «Агроторг»)(Основы теории конкуренции)
  • Менеджмент человеческих ресурсов (ООО ЧОО «Вихрь»)
  • Особенности кадровой стратегии кредитной организации(Кадровая политика как элемент стратегического управления персоналом организации)
  • Адаптация персонала в организациях разных типов (Система адаптации в организациях разных типов)
  • РАЗЛИЧНЫЕ СПОСОБЫ ПРЕДОСТАВЛЕНИЯ ДАННЫХ В ИНФОРМАЦИОННЫХ СИСТЕМАХ (Информационные системы предприятий)

Введение

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

Содержание
Техническое задание……………………………………………………………………………5
1. Наименование проекта………………………………………………………….…..5
2. Основание для разработки……………………………………………………….…5
3. Исполнитель…………………………………………………………………………5
4. Цель и назначение разработки…………………………………………………..….5
5. Содержание работы……………………………………….…………………………5
5.1. Задачи, подлежащие решению……………………………………………5
5.2. Требования к программному изделию……………………………………6
5.3. Требования к составу программных компонентов..…….………………7
5.4. Требования к архитектуре системы.……….……………………………..7
5.5. Требования к базе данных ………………….…………..…..…………….7
5.6. Требования к входным и выходным данным …………..……………….8
5.7. Требования к составу и характеристикам технических средств……….8
5.8. Требования к лингвистическому обеспечению………………………….8
6. Этапы разработки……………………………………………………..……………..8
7. Требования к документации ………..……………………………….……………..9
8. Порядок приема……….. ……………..………….…………………………………9
9. Дополнительные условия……………..……………………………………………9

Конструкторская часть………………………………………………………………………10
1. Общетехническое обоснование разработки…………..…………………………..10
1.1. Описание предметной области……………….………………………….10
1.2. Функциональные задачи приложения………………………………….10
1.3. Анализ аналогов и прототипов…………….…………………………….10
2. Разработка структуры программного изделия…………………………………….12
2.1. Выявление потребителей и источников информации……..…………12
2.2. Сравнительный анализ средств разработки системы…….….…..……13
2.3. Выбор системы разработки……………………………….….…..……..14
2.4. Проектирование базы данных………………………….….…..………..14
2.5. Описание инфологической модели предметной области..….…………14
2.6. Даталогическая модель…………………………………..….…………..17

Технологическая часть……………………………………………………………………….19
1. Разработка интерфейсов взаимодействия пользователя с системой…….………19
1.1. Разработка экранных форм (страниц)……………….….………………19
1.2. Разработка графа диалога……………………………..…………………23
2. Руководство пользователя……………………………………………..…….………24
2.1. Открытие приложения……………………………………………………24
2.2. Постраничная навигация…………….…………………………………..24
2.3. Отправка извещений о задолженностях перед библиотеками.………..27
2.4. Предоставление пользователям полномочий сотрудников библиотек.27
3. Программа и методика испытаний…………………………………..…….………27
3.1. Объект испытаний……….……………………….………………………27
3.2. Цель испытания……………………..……………………………………27
3.3. Состав предъявляемой документации ……..……….…………………..28
3.4. Технические требования……………………………………..…………..28
3.5. Порядок проведения испытаний……..………………………………….28

Заключение……………………………………….…………………………………………….37

Список используемой литературы……………….…………………………………………38

Приложение……………………………….……….…………………………………………..39
1. Листинг основных модулей программы………..………………………………..39
1.1. Описание моделей для работы с базой данных……………………….39
1.2. Разметка веб-страниц…….……………………………………………..44
1.3. Дизайн веб-страниц…….……………………………………………….45
1.4. Функциональные модули……….………………………………………62
2. Графическое приложение………………………..………………………………..97

Техническое задание

1. Наименование проекта

Автоматизированная информационная библиотечная система (АИС “Библиотеки”).

2. Основание для разработки

Основанием для разработки является задание на курсовой проект, утвержденное кафедрой «Автоматизированные системы обработки информации и управления» МГТУ им. Н.Э. Баумана.

3. Исполнитель

Исполнителем является студент МГТУ им. Н.Э.Баумана группы ИУ 5-81 Николаев Константин Александрович.

4. Назначение и цель разработки

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

5. Содержание работы

5.1. Задачи, подлежащие решению

5.1.1 Анализ предметной области и создание ее формального описания
5.1.2 Определение функций, выполняемых системой;
5.1.3 Разработка инфологической и даталогической моделей системы;
5.1.4 Выбор основной технологии и средств разработки и реализации программных модулей;
5.1.5 Создание базы данных;
5.1.6 Составление структурной схемы системы;
5.1.7 Разработка интерфейса взаимодействия программы с пользователем;
5.1.8 Разработка алгоритма работы программы;
5.1.9 Разработка графа диалога и набора страниц;
5.1.10 Оформление документации.

5.2 Требования к программному изделию

5.2.1 Требования к функциональным характеристикам:
Автоматизированная библиотечная система должна выполнять следующие функции:

5.2.1.1 Содержать макет сайта, с помощью которого пользователь сможет использовать ресурсы библиотек.
5.2.1.2 Содержать постраничную навигацию по сайту системы.
5.2.1.3 Реализовывать возможность добавления новых библиотек и книг в систему.
5.2.1.4 Реализовывать считывание, первичный анализ корректности и сохранение в базу данных введённой пользователем информации.
5.2.1.5 Осуществлять поиск библиотек, книг по введенному пользователем запросу.
5.2.1.6 Реализовывать функцию онлайн-заказа книг c отправкой пользователю талона, подтверждающего факт заказа, по электронной почте.
5.2.1.7 Осуществлять отправку письма по указанному пользователем E-mail адресу для уведомления пользователя о задолженностях перед библиотеками.
5.2.1.8 Содержать список пользователей, получивших книг на руки с указанием дат получения, и список должников библиотек.
5.2.1.9 Основное управление и настройка системы должны осуществляться путём изменения данных в базе.

5.2.2 Требования к интерфейсу пользователя:
Пользователь должен иметь возможность:
5.2.2.1. Зайти на веб-сайт системы.
5.2.2.2. Чётко понимать, каким образом необходимо вести заполнение форм для добавления новых данных, и, в случае пропуска полей, получать сообщение о необходимости их заполнения.
5.2.2.3. Отправлять запросы для получения информации о книгах и библиотеках и оперативно получать результаты этих запросов.
5.2.2.4. Получать на E-mail письмо с информацией о задолженностях перед библиотеками.

5.3 Требования к составу программных компонентов

Для функционирования данной системы необходимо, чтобы на компьютере были установлены следующие программные продукты:
• ОС Microsoft Windows XP или старше;
• MS SQL Server 2005 Express Edition или более высокой редакции;

5.4 Требования к архитектуре системы

Система должна включать в себя:

• Веб-сайт, производящую работу с базой данных и реализующую интерфейс с пользователем;
• базу данных для хранения информации о библиотеках, книгах, пользователях и заказов.
• приложение, ответственное за выполнение функций системы и рассылку
E-mail сообщений с информацией о задолженностях.

5.5 Требования к базе данных

Автоматизированная система использует СУБД SQL Server 2005 для хранения следующей информации:
• список библиотек, использующих систему
• список книг
• список пользователей
• количество и местонахождение книг в конкретной библиотеки
• статистика о библиотеках, книгах и пользователях

5.6 Требования к входным и выходным данным

5.6.1 Входные данные
Входными данными является информация о книгах или библиотеках, полученная от администратора, или запросы от пользователя.
5.6.2 Выходные данные
Выходными данным является информация о библиотеках и книгах, найденная по запросу пользователю, и информация о заказах или
о задолженностях перед библиотеками, направляемая в письме пользователю.

5.7 Требования к составу и характеристикам технических средств

Приложение должно функционировать на IBM-совместимой ЭВМ следующей конфигурации:

• процессор семейства Intel Pentium IV и выше;
• оперативная память не менее 1 Гбайт;
• дисковая подсистема со свободным дисковым пространством
не менее 2 Гбайт;
• цветной монитор с поддержкой SVGA–режимов;
• стандартная русифицированная клавиатура;
• манипулятор мышь.

5.8 Требования к лингвистическому обеспечению

Интерфейс пользователя должен быть реализован на русском языке.

6. Этапы разработки

№ Этапы разработки Срок начала Срок выполнения
1 Разработка технического задания 07.02.2014 12.02.2014
2 Разработка эскизного проекта 14.02.2014 26.02.2014
3 Разработка технического проекта 28.02.2014 12.03.2014
4 Разработка программы 14.03.2014 02.04.2014
5 Отладка программы 04.04.2014 16.04.2014
6 Разработка программной документации 18.04.2014 07.05.2014
7 Оформление и представление документации 09.05.2014 14.05.2014
8 Защита выпускной работы До 02.07.2014
7. Требования к документации
Для приема программного изделия должны быть предоставлены следующие документы:
7.2. Техническое задание;
7.3. Расчетно-пояснительная записка;
7.4. Руководство пользователя;
7.5. Программа и методика испытаний;
7.6. Копия листов графической части.

8. Порядок приема
Прием и контроль программного изделия осуществляется в соответствии с документом «Программа и методика испытаний».

9. Дополнительные условия
Данное техническое задание может уточняться и изменяться в установленном порядке.

Конструкторская часть
1. Общетехническое обоснование разработки.

1.1. Описание предметной области
Предметной областью данной системы являются библиотеки. Система хранит данные о библиотеках, их каталогах и книгах. Пользователь может искать нужные им книги и осуществлять их заказ.
Данный программный продукт может быть использован в любой библиотеке. Система реализована в виде веб-приложения, поэтому она может быть размещена в Интернете и открыта для свободного доступа для одновременного использования многими библиотеками.
Дальнейшая разработка модели предметной области описана в разделе «Проектирование базы данных».

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

Управление профилями пользователей.

Реализация рассылки извещений о невозвращенных в срок книгах:

• Проверка возвращения книг в срок каждым пользователь
• Рассылка извещений

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

(Все данные указанные действия администратор обязан совершать через СУБД)

1.3. Анализ аналогов и прототипов
В качестве прототипа разрабатываемого продукта рассмотрим аналог системы:
http://library.bmstu.ru/ — сайт библиотеки МГТУ им. Баумана. Данный сайт оснащен эффективным и быстрым механизмом поиска, что является его главным достоинством. Сайт имеет достаточно дружелюбный интерфейс. Пользователь может узнавать информацию о своих книгах через личный кабинет. Недостатком является отсутствие возможности регистрации напрямую через сайт.

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

Параметры сравнения Варианты сравнения
АИС «Библиотеки» Библиотека
МГТУ им. Баумана
1. Простота организации интерфейса Оч.хор. Хор.
2. Эффективность поиска Хор. Отл.
3. Оперативность работы системы Отл. Отл.
4. Поддержка обратной связи
с пользователем Отл. Хор.

Таблица 1. Сравнительный анализ аналогов с разрабатываемой системой.

Перевод качественных характеристик в количественные производится в соответствии со следующей таблицей:
Качественный показатель Отл. Оч.хор. Хор. Удовл. Посредств. Плохо Оч. плохо Неуд.
Количественный показатель (нормированная шкала) 1 0,9 0,8 0,6 0,5 0,4 0,2 0

Проведение нормализации и определение весовых коэффициентов приводит к следующим результатам:
Параметры сравнения α Варианты сравнения
АИС «Библиотеки» Библиотека
МГТУ им. Баумана
1. Простота организации интерфейса 0.1 0,9 0,8
2. Эффективность поиска 0.4 0,8 1
3. Оперативность работы системы 0.3 1 1
4. Поддержка обратной связи
с пользователем 0.2 1 0,8
ИТОГО: 1 0,91 0,94

Таблица 2. Итоговые результаты сравнительного анализа аналогов системы.

Проведенный анализ показывает, что разрабатываемая система несколько уступает аналогу, однако в ней были учтены его недостатки, поэтому программный продукт АИС “Библиотеки” может быть использован как основа для более продвинутого варианта библиотечной системы.

2. Разработка структуры программного изделия

2.1. Выявление потребителей и источников информации.

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

2.2. Сравнительный анализ средств разработки системы.

Были рассмотрены три варианта средств разработки системы. Сравнительный анализ вариантов приведен в таблице 3.

MS Visual Studio + MS SQL Server PHP + PostgreSQL Delphi +
MS Access
Опыт работы 1 год 4 месяца 1,5 год
Распространенность отличная хорошая удовл.
Подддержка фирм-производителей отличная удовл. отличная
Совместимость компонентов отличная хорошая хорошая
Набор функциональных возможностей отличный хороший удовл.

Таблица 3. Сравнительный анализ средств разработки системы.

Для определения оптимального варианта с учетом указанных факторов воспользуемся методом взвешенной суммы.
Вначале рассчитываем коэффициент α для каждого фактора, указывающий важность данного фактора. Далее рассчитываем коэффициенты соответствия рассматриваемых вариантов средств разработки эталонному значению. Далее по формуле Y=ΣKij•α рассчитаем итоговый весовой коэффициент каждого варианта. Вариант с наибольшим итоговым весовым коэффициентом, согласно этому методу, будет оптимальным.

Окончательные результаты сравнительного анализа и выбор средств разработки системы приведены в таблице 4.

α
MS Visual Studio + MS SQL Server PHP + PostgreSQL Delphi +
MS Access
Опыт работы 0.2 0.6 0.2 1
Распространенность 0.1 1 0.8 0.6
Подддержка фирм-производителей 0.1 1 0.6 1
Совместимость компонентов 0.3 1 0.8 0.8
Набор функциональных возможностей 0.3 1 0.8 0.6
Σ 0.82 0.68 0.78
Таблица 4.Результаты сравнительного анализа и выбор средств разработки системы

По результатам анализы был выбран вариант: MS Visual Studio + MS SQL Server.

2.3. Выбор среды разработки.

Выбор архитектуры системы предопределен её локальным использованием на базе операционной системы Windows и выбранными средствами разработки.
В качестве системы разработки и исполняемого модуля выбрана среда программирования Microsoft Visual Studio 2012. Данная среда разработки имеет следующие положительные характеристики:

1. Поддерживает програмную платформу .NET Framework, позволяющую выполнять программы, написанные на разных языках программирования, что обеспечивает гибкость при разработке (в качестве языка программирования был выбран объектно-ориентированный язык C#).

2. Включает локальный сервер ASP.NET Development Server для проверки работоспособности web-приложения без установки постороннего ПО.

3. Удобный интерфейс, поддержка фирмы-производителя (Microsoft) и широкий ассортимент обучающих статей и примеров по разработки программного обеспечения.

4. Предоставление бесплатной лицензии на использование Microsoft Visual Studio 2012 для студентов технических вузов в рамках программы “Dreamspark” от компании Microsoft.

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

2.4. Проектирование базы данных.
В качестве СУБД была выбрана Microsoft SQL Server 2012, т.к. она в полной мере отвечает требованиям разрабатываемого продукта. Выбранная СУБД хорошо совместима со средой разрабротки и поддерживает язык запросов Transact-SQL.

2.5. Описание инфологической модели предметной области.
В результате анализа предметной области были выделены сущности, атрибуты, взаимосвязь между ними и построена инфологическая модель базы данных. Схема инфологической модели представлена на листе 2.

2.5.1. Описание сущностей и их атрибутов
2.5.1.1. Сущность «Библиотека»
Атрибуты:
• БиблиотекаId – Первичный ключ
• Название
• Адрес
• Телефон
• Число уникальных наименований

2.5.1.2. Сущность «Книга»
Атрибуты:
• КнигаId – Первичный ключ
• Название
• Автор
• Издательство
• Год издания
• Тематика
• ISBN
• Данные изображения
• Mime-тип изображения

2.5.1.3. Сущность «Книга В Библиотеке»
Атрибуты:
• Книга В БиблиотекеId – Первичный ключ
• Общее количество
• Текущее количество
• Отдел
• Шкаф
• Полка

2.5.1.4. Сущность «Заказ»
Атрибуты:
• Заказ ID – Первичный ключ
• Дата заказа
• Дата выдачи
• Дата возврата
• Вернуть не позднее
• Возвращена
• ПользовательId
• Фамилия пользователя
• Имя пользователя

2.5.1.5. Сущность «Пользователь»
Атрибуты:
• ПользовательId – Первичный ключ
• Логин
• Фамилия
• Имя
• Дата рождения
• E-mail

2.5.2. Описание связей

2.5.2.1. Связь «Содержится в»
Объединяет сущности «КнигаВБиблиотеке» и «Библиотека».
Тип связи – М:1

2.5.2.2. Связь «Хранится в»
Объединяет сущности «Книга» и «КнигаВБиблиотеке».
Тип связи – 1:М

2.5.2.3. Связь «На»
Объединяет сущности «Заказ» и «Книга».
Тип связи – М:1

2.5.2.4. Связь «Кому»
Объединяет сущности «Заказ» и «Библиотека».
Тип связи – М:1

2.5.2.5. Связь «От кого»
Объединяет сущности «Заказ» и «Пользователь».
Тип связи – М:1

2.5.2.6. Связь «Работает в»
Объединяет сущности «Пользователь» и «Библиотека».
Тип связи – М:М

2.6. Даталогическая модель.

На основе инфологической модели, описанной в пункте 2.2.5 данного документа, была построена даталогическая модель для реляционной СУБД Microsoft SQL Server 2005 Management Studio.
Для обеспечения целостности данных в соответствующие сущности инфологической модели добавляются ключевые атрибуты, которые функционально определены и зависят только от первичного ключа.
При отображении инфологической модели в даталогическую, сущности становятся таблицами, атрибуты – полями таблиц. В даталогическую модель вводятся связи, аналогичные связям инфологической модели.
Структура даталогической модели представлена на листе 1 в графической части раздела «Приложение» данной пояснительной записки.
Library
PK LibraryId Int
Name Nvarchar(max)
Adress Nvarchar(max)
Phone Nvarchar(max)
TotalUniqueBooks Int

Book
PK BookId Int
Name Nvarchar(max)
Author Nvarchar(max)
PublishingHouse Nvarchar(max)
YearOfPublishing Int
Subject Nvarchar(max)
ISBN Nvarchar(max)
ImageData Varbinary(max)
ImageMimeType Nvarchar(max)

Order
PK OrderId Int
DateOfOrder Datetime
DateOfIssue Datetime
DateOfReturn Datetime
ReturnBefore Datetime
Returned Bit
BookId Int
LibraryId Int
UserId Int
UserLastName Nvarchar(max)
UserFirstName Nvarchar(max)

User
PK UserId Int
Login Nvarchar(max)
LastName Nvarchar(max)
FirstName Nvarchar(max)
Birthdate Datetime
Email Nvarchar(max)

UserInLibrary
PK UserInLibraryId Int
UserId Int
LibraryId Int

Технологическая часть

1. Разработка интерфейсов взаимодействия пользователя с системой

1.1. Разработка экранных форм (страниц).

Главная (родительская) страница (home/index)
Все страницы разрабатываемого сайта библиотечной системы имеют общий шаблон стиля, а также наследуют свой формат от родительской страницы и включают все блоки, описанные ниже. Главная страница разделена на следующие блоки:

• Заголовок – Содержит название системы, а также функциональные кнопки «Вход», «Выход», «Регистрация». Также отображается имя пользователя.
• Меню – Содержит ссылки на разделы: «Главная страница», «Библиотеки», «Книги», «Контакты».

Рисунок 1. Главная страница.

Страница со списком книг (book/index)

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

• Список библиотек
• Строка поиска
• Фильтр для выбора критерия поиска

Рисунок 2. Страница со списком книг.

Страница с формой добавления книги (book/create)

Рисунок 3. Страница с формой добавления книги.

Страница с подробным описанием книги (book/details/1)

Рисунок 4. Страница с подробным описанием книги.

Страница с формой редактирования книги (book/edit/1)

Рисунок 5. Страница с формой редактирования книги.

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

Рисунок 6. Получение письма с талоном через веб-портал почтового провайдера rambler.ru.

Рисунок 7. Образец талона заказа.
Получение письма с извещением о задолженности.

• Раз в сутки система проводит проверку на наличие у пользователей задолженностей перед библиотеками и отправляет им по электронной почте соответствующие извещения.

Рисунок 8. Получение письма с извещением через веб-портал почтового провайдера rambler.ru.

1.2. Разработка графа диалога

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

2. Руководство пользователя

2.1. Открытие приложения

Открытие приложения осуществляется после ввода в адресную строку имени домена, на котором будет зарегистрировано данное web-приложение.
При открытии в браузере отображается главная страница приложения Home/Index. На сайте Библиотечной системы пользователь может перейти на следующие страницам:

1. «Главная страница»
2. «Контакты»
3. «Регистрация»
4. «Вход»
Если пользователь авторизирован, также будут доступны следующие страницы:
5. «Библиотеки»
6. «Книги»
7. Личный кабинет (ссылка с логином (именем входа) пользователя)
2.2. Постраничная навигация

2.2.1. «Главная страница»

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

2.2.2. «Контакты»

На странице «Контакты» содержится контактная информация для обратной связи пользователя с сотрудниками библиотечной системы.

2.2.3. «Библиотеки»

• На странице «Библиотеки» содержится список библиотек, использующих данную систему, со ссылками на подробное описание; строка поиска и выпадающий список для выбора критерия поиска.

• Для администратора также доступна ссылка для добавления новых библиотек в систему.

2.2.3.1. «Подробно»
На странице находится подробное описание библиотеки и ссылки для редактирования (для сотрудников или администратора) и удаления (только для администратора) библиотек из системы. Здесь же находятся ссылки на «Список книг в библиотеке», «Список заказов в библиотеке», «Список пользователей, получивших книги» и «Список должников» (для сотрудников и администратора).

2.2.3.2. «Редактировать»

На странице находится форма для редактирования данных о библиотеке.

2.2.4. «Книги»

• На странице «Книги» содержится список Книги, информация о которых содержится в системе, со ссылками на подробное описание; строка поиска и выпадающий список для выбора критерия поиска.

• Для администратора и сотрудников библиотек также доступна ссылка для добавления новых библиотек в систему.

2.2.4.1. «Подробно»

На странице находится подробное описание книги и ссылки для редактирования (для сотрудников или администратора) и удаления (только для администратора) книг из системы. Здесь же находятся ссылка на «Список библиотек, в которых имеется эта книга»

2.2.4.2. «Редактировать»

На странице находится форма для редактирования данных о книге.

2.2.5. «Список книг в библиотеке»

• На странице «Список книг в библиотеке» содержится список книг, имеющихся в выбранной библиотеке, со ссылками на подробное описание и ссылка на форму заказа книги. Если в настоящий момент в наличии нет ни одного экземпляра книги, пользователь получит соответствующее уведомление.

2.2.5.1. «Подробно»

На странице находится подробное описание местонахождения книги, ссылка на подробное описание самой книги и ссылки для редактирования и удаления (последние две доступны только для сотрудников или администратора) книг из системы. Здесь же находятся ссылка на «Список библиотек, в которых имеется эта книга»
2.2.6. «Список библиотек, в которых имеется эта книга»

• На странице «Список библиотек, в которых имеется эта книга» содержится список библиотек, в которых имеется выбранная книга, со ссылками на подробное описание и ссылка на форму заказа книги. Если в настоящий момент в наличии нет ни одного экземпляра книги, пользователь получит соответствующее уведомление.

2.2.6.1. «Подробно»

На странице находится подробное описание местонахождения книги, ссылка на подробное описание самой книги и ссылки для редактирования и удаления (последние две доступны только для сотрудников или администратора) книг из системы. Здесь же находятся ссылка на «Список библиотек, в которых имеется эта книга»

2.2.7. «Список заказов в библиотеке»

• На странице «Список заказов в библиотеке» содержится список заказов конкретной библиотеки со ссылками на подробное описание заказа, библиотеки и книги.

2.2.8. «Список пользователей, получивших книги»

• На странице «Список пользователей, получивших книги» содержится список пользователей, получивших книги на руки в конкретной библиотеке.

2.2.9. «Список должников»

• На странице «Список должников» содержится список пользователей, имеющих задолженности перед конкретной библиотекой.

2.2.10. Подробное описание заказа.

На странице находится подробное описание заказа и ссылки для редактирования (для сотрудников или администратора) и удаления (для пользователя, сделавшего заказ, или администратора) заказов из системы. Здесь же находятся ссылки на «Список заказов в библиотеке» и «Список заказов пользователя».

2.2.11. «Регистрация»

С помощью формы регистрации пользователь может зарегистрироваться в системе.

2.2.12. «Вход»

С помощью формы входа осуществляется аутентификация пользователя в системе.

2.2.13. Личный кабинет

• В личном кабинете пользователь может просмотреть список своих заказов.

• В личном кабинете находятся формы для редактирования личных данных и смены пароля.

2.2.14. Список заказов пользователя

• На странице «Список заказов пользователя» содержится список заказов конкретного пользователя со ссылками на подробное описание заказа, библиотеки и книги.

2.3. Отправка извещений о задолженностях перед библиотеками.

• Раз в сутки система проводит проверку на наличие у пользователей задолженностей перед библиотеками и отправляет им по электронной почте соответствующие извещения.

2.4. Предоставление пользователям полномочий сотрудников библиотек.
Для предоставления пользователю прав сотрудника библиотеки необходимо выполнить следующие действия:

• Присвоить пользователю роль “Librarian” через таблицу «webpages_UsersInRole» в базе данных «KP_Users»
• Добавить связь между пользователем и библиотеку через таблицу «UserInLibrary»

Эти действия необходимо выполнить через СУБД.

3. Программа и методика испытаний

3.1. Объект испытаний
Автоматизированная библиотечная система (АИС “Библиотеки”).

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

3.3. Состав предъявляемой документации
При проведении испытаний предоставляются следующие документы:
1. Техническое задание;
2. Руководство пользователя;
3. Программа и методика испытаний;

3.4. Технические требования
3.4.1. Задачи, подлежащие решению

Для корректного проведения испытаний следует изучить пункт «Руководство пользователя» расчетно-пояснительной записки и соблюдать все требования и инструкции, изложенные в этом пункте.

3.4.2. Требования к программной документации

Должны быть представлены все документы, указанные в пункте «Состав предъявляемой документации» данного документа.

3.5. Порядок проведения испытаний
3.5.1. Состав и структура технических и программных средств

Программный продукт разработан для использования под управлением операционной системы Microsoft Windows XP (или более поздних версий). Система разработана в Microsoft Visual Studio на языке C#, следовательно, для просмотра исходных кодов необходимо наличие данной среды разработки. База данных разработана на MS SQL Server 2012. Необходимые технические характеристики ПК объявлены в пункте «Требования к техническому обеспечению» технического задания.

3.5.2. Последовательность испытаний

3.5.2.1. Испытание системы должно проводиться в следующей последовательности:
• Установка и настройка системы на персональном компьютере или сервере
• Запуск системы
• Проведение испытаний
• Завершение работы

3.5.2.2. Последовательность проведения испытаний:

№ пункта ТЗ № п.п. Выполняемые действия Ожидаемый результат
5.2.1.1 1 Открытие страницы home/index

Вход на главную страницу сайта, с которой начинается работа с системой. (Рисунок 1)
5.2.1.2 2 Нажатие кнопок с именами страниц. Переход по страницам, содержащим различную информацию. (Рисунок 2,3,4)
5.2.1.3 3 Выбор пунктов «Добавить» на страницах «Библиотеки» и «Книги». Заполнение соответствующих форм. Добавление в базу данных записей с информацией о библиотеке и книге. (Рисунок 5,6)
5.2.1.4 4 Попытка добавить запись с некорректно заполненными полями. Появление сообщения об ошибке в соответствующем поле. Данные не будут сохранены. (Рисунок 7)
5.2.1.5 5 Введение запроса в строку поиска, выбор критерия поиска, нажатие кнопки «Поиск» на страницах «Библиотеки», «Книги». Вывод списка результатов запроса. (Рисунок 8,9)
5.2.1.6 6 Выбор пункта заказать на странице «Список книг в библиотеке» или на странице «Список библиотек, в которых имеется эта книга». Нажатие кнопки «Добавить».
Добавление в базу данных записи с информацией о заказе. Получение пользователем письма с талоном заказа. (Рисунок 10,11,12)
5.2.1.7 7 Проверка системой необходимости отправки извещения. Получение пользователем извещения о задолженности. (Рисунок 13)
5.2.1.8
8 Выбор пунктов
«Список пользователей, получивших книги» и «Список должников» на странице любой библиотеки. Загрузка страниц со списком пользователей, получивших книги на руки, и списком должников. (Рисунок 14, 15)
5.2.1.9
9 Добавление записей в таблицы «UserInLibary», «webpages_UsersInRole» через СУБД. Появление у пользователя полномочий для редактирования данных о библиотеке, добавления книг в базу данных и в библиотеку, просмотра списка заказов и списка должников библиотеки. (Рисунок 16)

3.6. Приложение. Изображения результатов испытаний

Рисунок 1. «Главная страница»

Рисунок 2. «Библиотеки»

Рисунок 3. «Книги»

Рисунок 4. «Контакты»

Рисунок 5. Добавление новой библиотеки

Рисунок 6. Добавление новой книги

Рисунок 7. Сообщение об ошибке при некорректном заполнении полей

Рисунок 8. Поиск библиотек

Рисунок 9. Поиск книг

Рисунок 10. Выбор книги для заказа

Рисунок 11. Добавление заказа

Рисунок 12. Получение пользователем талона заказа

Рисунок 13. Получение пользователем извещения о задолженности

Рисунок 14. «Список пользователей, получивших книги»

Рисунок 15. «Список должников»

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

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

Список используемой литературы

1. В.И. Кузовлев, Ю.Н.Филиппович. Методические указания по выполнению выпускной работы бакалавра по специальности «Информатика и вычислительная техника»
для студентов кафедры ”Системы обработки информации и управления»,
М.: МГТУ им Н.Э. Баумана, 2005 г.

2. Фримен А., Сандерсон С. ASP.NET MVC 3 Framework с примерами на C# для
профессионалов, 3-е изд.: Пер. с англ. – М. : ООО “И.Д. Вильямс”, 2012. – 672 с. :
ил. – Парал. тит. англ. ISBN 978-5-8459-1758-4 (рус.).

3. Интернет источники:
http://msdn.microsoft.com
http://stackoverflow.com
http://htmlbook.ru

Приложение

1. Листинг основных модулей программы

1.1. Описание моделей для работы с базой данных

Модели для доступа к базе KP_Library описаны в файле LibraryModels.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Web.Mvc;

namespace KP_Library.Models
{
public class LibraryContext: DbContext
{
public LibraryContext()
: base(«LibraryContext»)
{
}

public DbSet<Library> Libraries { get; set; }
public DbSet<Book> Books { get; set; }
public DbSet<BookInLibrary> BooksInLibrary { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<UserInLibrary> UsersInLibrary { get; set; }
}

[Table(«Library»)]
public class Library
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int LibraryId { get; set; }
[Required(ErrorMessage= «Требуется поле Название»)]
[DisplayName(«Название»)]
public string Name { get; set; }
[Required(ErrorMessage = «Требуется поле Адрес»)]
[DisplayName(«Адрес»)]
public string Adress { get; set; }
[Required(ErrorMessage = «Требуется поле Номер телефона»)]
[DisplayName(«Номер телефона»)]
[RegularExpression(@»^((8|+7)[- ]?)?((?d{3})?[- ]?)?[d- ]{7,10}$»)]
public string Phone { get; set; }
[Required]
[HiddenInput]
[DisplayName(«Число уникальных наименований»)]
public int TotalUniqueBooks { get; set; }

public virtual ICollection<Order> Orders { get; set; }
public virtual ICollection<BookInLibrary> BooksInLibrary { get; set; }
public virtual ICollection<UserInLibrary> UsersInLibrary { get; set; }
}

[Table(«Book»)]
public class Book
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int BookId { get; set; }
[Required(ErrorMessage = «Требуется поле Название»)]
[DisplayName(«Название»)]
public string Name { get; set; }
[Required(ErrorMessage = «Требуется поле Автор»)]
[DisplayName(«Автор»)]
public string Author { get; set; }
[Required(ErrorMessage = «Требуется поле Издетельство»)]
[DisplayName(«Издательство»)]
public string PublishingHouse { get; set; }
[Required(ErrorMessage = «Требуется поле Год издания»)]
[DisplayName(«Год издания»)]
public int YearOfPublishing { get; set; }
[Required(ErrorMessage = «Требуется поле Тематика»)]
[DisplayName(«Тематика»)]
public string Subject { get; set; }
[Required(ErrorMessage = «Требуется поле ISBN»)]
[RegularExpression(@»(?=.{17}$)97(?:8|9)([ -])d{1,5}1d{1,7}1d{1,6}1d$», ErrorMessage=»Номер ISBN должен соответствовать стандарту ISBN-13″)]
public string ISBN { get; set; }

public byte[] ImageData { get; set; }

[HiddenInput(DisplayValue = false)]
public string ImageMimeType { get; set; }

public virtual ICollection<BookInLibrary> BooksInLibrary { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}

[Table(«BookInLibrary»)]
public class BookInLibrary
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int BookInLibraryId { get; set; }

[Required]
[DisplayName(«Книга»)]
public int BookId { get; set; }
public virtual Book Book { get; set; }

[Required(ErrorMessage = «Требуется поле Всего экземпляров»)]
[DisplayName(«Всего экземпляров»)]
public int TotalQuantity { get; set; }
[Required(ErrorMessage = «Требуется поле Экземпляров в наличии»)]
[DisplayName(«Экземпляров в наличии»)]
public int CurrentQuantity { get; set; }

[Required]
[DisplayName(«Библиотека»)]
public int LibraryId { get; set; }
public virtual Library Library { get; set; }

[Required(ErrorMessage = «Требуется поле Отдел»)]
[DisplayName(«Отдел»)]
public int Department { get; set; }
[Required(ErrorMessage = «Требуется поле Шкаф»)]
[DisplayName(«Шкаф»)]
public int Bookcase { get; set; }
[Required(ErrorMessage = «Требуется поле Полка»)]
[DisplayName(«Полка»)]
public int Shelf { get; set; }
}

[Table(«Order»)]
public class Order
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int OrderId { get; set; }
[Required(ErrorMessage = «Требуется поле Дата заказа»)]
[DisplayName(«Дата заказа»)]
[DataType(DataType.Date)]
public DateTime? DateOfOrder { get; set; }
[DisplayName(«Дата выдачи»)]
[DataType(DataType.Date)]
public DateTime? DateOfIssue { get; set; }
[DisplayName(«Дата возврата»)]
[DataType(DataType.Date)]
public DateTime? DateOfReturn { get; set; }
[DisplayName(«Вернуть не позднее»)]
[DataType(DataType.Date)]
public DateTime? ReturnBefore { get; set; }
[Required]
[DisplayName(«Книга возвращена»)]
public bool Returned { get; set; }

[Required]
[DisplayName(«Книга»)]
public int BookId { get; set; }
public virtual Book Book { get; set; }
[Required]
[DisplayName(«Библиотека»)]
public int LibraryId { get; set; }
public virtual Library Library { get; set; }
[Required]
[DisplayName(«Пользователь»)]
public int UserId { get; set; }
[DisplayName(«Фамилия пользователя»)]
public string UserLastName { get; set; }
[DisplayName(«Имя пользователя»)]
public string UserFirstName { get; set; }
}

[Table(«UserInLibrary»)]
public class UserInLibrary
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserInLibraryId { get; set; }

[Required]
public int UserId { get; set; }

[Required]
public int LibraryID { get; set; }
public virtual Library Library { get; set; }
}

}

Модели для доступа к базе KP_Users описаны в файле AccountModels.cs

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Globalization;
using System.Web.Security;

namespace KP_Library.Models
{
public class UsersContext : DbContext
{
public UsersContext()
: base(«UsersContext»)
{
}

public DbSet<User> Users { get; set; }
}

public class RegisterExternalLoginModel
{
[Required]
[Display(Name = «Логин»)]
public string Login { get; set; }

public string ExternalLoginData { get; set; }
}

public class LocalPasswordModel
{
[Required(ErrorMessage = «Требуется поле Текущий пароль»)]
[DataType(DataType.Password)]
[Display(Name = «Текущий пароль»)]
public string OldPassword { get; set; }

[Required(ErrorMessage = «Требуется поле Новый пароль»)]
[StringLength(100, ErrorMessage = «{0} должен быть хотя бы {2} символов в длину.», MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = «Новый пароль»)]
public string NewPassword { get; set; }

[Required(ErrorMessage = «Требуется поле Подтвердите новый пароль»)]
[DataType(DataType.Password)]
[Display(Name = «Подтвердите новый пароль»)]
[Compare(«NewPassword», ErrorMessage = «Новый пароль и подтверждение пароля не совпадают.»)]
public string ConfirmPassword { get; set; }
}

public class LoginModel
{
[Required(ErrorMessage = «Требуется поле Логин»)]
[Display(Name = «Логин»)]
public string Login { get; set; }

[Required(ErrorMessage = «Требуется поле Пароль»)]
[DataType(DataType.Password)]
[Display(Name = «Пароль»)]
public string Password { get; set; }

[Display(Name = «Запомнить?»)]
public bool RememberMe { get; set; }
}

public class RegisterModel
{
[Required(ErrorMessage = «Требуется поле Логин»)]
[Display(Name = «Логин»)]
public string Login { get; set; }

[Required(ErrorMessage = «Требуется поле Пароль»)]
[StringLength(30, ErrorMessage = «Пароль не может быть меньше 6 и больше 30 символов.», MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = «Пароль»)]
public string Password { get; set; }

[Required(ErrorMessage = «Требуется поле Подтвердите пароль»)]
[DataType(DataType.Password)]
[Display(Name = «Подтвердите пароль»)]
[Compare(«Password», ErrorMessage = «Пароли не совпадают.»)]
public string ConfirmPassword { get; set; }

[Required(ErrorMessage = «Требуется поле Фамилия»)]
[Display(Name = «Фамилия»)]
public string LastName { get; set; }

[Required(ErrorMessage = «Требуется поле Имя»)]
[Display(Name = «Имя»)]
public string FirstName { get; set; }

[Required(ErrorMessage = «Требуется поле Дата рождения»)]
[Display(Name = «Дата рождения»)]
[DataType(DataType.Date)]
public DateTime Birthdate { get; set; }

[Required(ErrorMessage = «Требуется поле Адрес электронной почты»)]
[DataType(DataType.EmailAddress)]
[Display(Name = «Адрес электронной почты»)]
public string Email { get; set; }

}

public class ExternalLogin
{
public string Provider { get; set; }
public string ProviderDisplayName { get; set; }
public string ProviderUserId { get; set; }
}

/* Мои добавления */
[Table(«User»)]
public class User
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
[Required]
public string Login { get; set; }
[Required(ErrorMessage = «Требуется поле Имя»)]
[Display(Name = «Имя»)]
public string FirstName { get; set; }
[Required(ErrorMessage = «Требуется поле Фамилия»)]
[Display(Name = «Фамилия»)]
public string LastName { get; set; }
[Required(ErrorMessage = «Требуется поле Дата рождения»)]
[Display(Name = «Дата рождения»)]
[DataType(DataType.Date)]
public DateTime Birthdate { get; set; }
[Required(ErrorMessage = «Требуется поле Адрес электронной почты»)]
[DataType(DataType.EmailAddress)]
[Display(Name = «Адрес электронной почты»)]
public string Email { get; set; }
}

}

1.2. Разметка веб-страниц

Мастер-страница _Layout.cshtml

<!DOCTYPE html>
<html lang=»en»>
<head>
<meta charset=»utf-8″ />
<title>@ViewBag.Title — АИС «Библиотеки»</title>
<link href=»~/favicon.ico» rel=»shortcut icon» type=»image/x-icon» />
<meta name=»viewport» content=»width=device-width» />

@Styles.Render(«~/Content/css»)
@Scripts.Render(«~/bundles/modernizr»)
</head>
<body>
<header>
<div class=»content-wrapper»>
<div class=»float-left»>
<p class=»site-title»><b>@Html.ActionLink(«АИС «Библиотеки»», «Index», «Home»)</b></p>
</div>
<div class=»float-right»>
<section id=»login»>
@Html.Partial(«_LoginPartial»)
</section>
<nav>
<ul id=»menu»>
<li>@Html.ActionLink(«Главная», «Index», «Home»)</li>
@if (User.Identity.IsAuthenticated)
{ <li>@Html.ActionLink(«Библиотеки», «Index», «Library»)</li> }
@if (User.Identity.IsAuthenticated)
{ <li>@Html.ActionLink(«Книги», «Index», «Book»)</li> }
<li>@Html.ActionLink(«Контакты», «Contact», «Home»)</li>
</ul>
</nav>
</div>
</div>
</header>
<div id=»body»>
@RenderSection(«featured», required: false)
<section class=»content-wrapper main-content clear-fix»>
@RenderBody()
</section>
</div>
<footer>
<div class=»content-wrapper»>
<div class=»float-left»>
<p>&copy; @DateTime.Now.Year — АИС «Библиотеки»</p>
</div>
</div>
</footer>

@Scripts.Render(«~/bundles/jquery»)
@RenderSection(«scripts», required: false)
@RenderSection(«styles», required: false)
</body>
</html>

1.3. Дизайн веб-страниц

Дизайн страницы и стили шрифтов описаны в файле Site.css

html {
background-color: #DEB887/*#F5DEB3/*#e2e2e2*/;
margin: 0;
padding: 0;
}

body {
background-color: #F5DEB3/*#fff*/;
border-top: solid 10px #000;
color: black/*#333*/;
font-size: .85em;
font-family: «Segoe UI», Verdana, Helvetica, Sans-Serif;
margin: 0;
padding: 0;
}

a {
color: black/*#333*/;
outline: none;
padding-left: 3px;
padding-right: 3px;
text-decoration: underline;
}

a:link, a:visited,
a:active, a:hover {
color: black/*#333*/;
}

a:hover {
background-color: #cc9933/*#c7d1d6*/;
}

header, footer, hgroup,
nav, section {
display: block;
}

mark {
background-color: #a6dbed;
padding-left: 5px;
padding-right: 5px;
}

.float-left {
float: left;
}

.float-right {
float: right;
}

.clear-fix:after {
content: «.»;
clear: both;
display: block;
height: 0;
visibility: hidden;
}

h1, h2, h3,
h4, h5, h6 {
color: #000;
margin-bottom: 0;
padding-bottom: 0;
}

h1 {
font-size: 2em;
}

h2 {
font-size: 1.75em;
}

h3 {
font-size: 1.2em;
}

h4 {
font-size: 1.1em;
}

h5, h6 {
font-size: 1em;
}

h5 a:link, h5 a:visited, h5 a:active {
padding: 0;
text-decoration: none;
}

/* main layout
———————————————————-*/
.content-wrapper {
margin: 0 auto;
max-width: 1060px;
}

#body {
background-color: #DEB887/*#efeeef*/;
clear: both;
padding-bottom: 35px;
}

.main-content {
background: url(«../Images/accent.png») no-repeat;
padding-left: 10px;
padding-top: 30px;
}

.featured + .main-content {
background: url(«../Images/heroAccent.png») no-repeat;
}

header .content-wrapper {
padding-top: 20px;
}

footer {
clear: both;
background-color: #D2691E/*#CD853F*/;
font-size: .8em;
height: 50px;
}

/* site title
———————————————————-*/
.site-title {
color: black/*#c8c8c8*/;
font-family: Rockwell, Consolas, «Courier New», Courier, monospace;
font-size: 2.3em;
margin: 0;
}

.site-title a, .site-title a:hover, .site-title a:active {
background: #F5DEB3;
color: black/*#c8c8c8*/;
outline: none;
text-decoration: none;
}

/* login
———————————————————-*/
#login {
display: block;
font-size: .85em;
margin: 0 0 10px;
text-align: right;
}

#login a {
background-color: #cc9933;
margin-left: 10px;
margin-right: 3px;
padding: 2px 3px;
text-decoration: none;
}

#login a.username {
background: none;
margin: 0;
padding: 0;
text-decoration: underline;
}

#login ul {
margin: 0;
}

#login li {
display: inline;
list-style: none;
}

/* menu
———————————————————-*/
ul#menu {
font-size: 1.3em;
font-weight: 600;
margin: 0 0 5px;
padding: 0;
text-align: right;
}

ul#menu li {
display: inline;
list-style: none;
padding-left: 15px;
}

ul#menu li a {
background: none;
color: black/*#999*/;
text-decoration: none;
}

ul#menu li a:hover {
color: #333;
text-decoration: none;
}

/* page elements
———————————————————-*/
/* featured */
.featured {
background-color: #F5DEB3/*#fff*/;
}

.featured .content-wrapper {
background-color: #D2691E/*#7ac0da*/;
/*background-image: -ms-linear-gradient(left, #7ac0da 0%, #a4d4e6 100%);
background-image: -o-linear-gradient(left, #7ac0da 0%, #a4d4e6 100%);
background-image: -webkit-gradient(linear, left top, right top, color-stop(0, #7ac0da), color-stop(1, #a4d4e6));
background-image: -webkit-linear-gradient(left, #7ac0da 0%, #a4d4e6 100%);
background-image: linear-gradient(left, #7ac0da 0%, #a4d4e6 100%);*/
color: black/*#3e5667*/;
padding: 20px 40px 30px 40px;
}

.featured hgroup.title h1, .featured hgroup.title h2 {
color: black/*#fff*/;
}

.featured p {
font-size: 1.1em;
}

/* page titles */
hgroup.title {
margin-bottom: 10px;
}

hgroup.title h1, hgroup.title h2 {
display: inline;
}

hgroup.title h2 {
font-weight: normal;
margin-left: 3px;
}

/* features */
section.feature {
width: 300px;
float: left;
padding: 10px;
}

/* ordered list */
ol.round {
list-style-type: none;
padding-left: 0;
}

ol.round li {
margin: 25px 0;
padding-left: 45px;
}

ol.round li.zero {
background: url(«../Images/orderedList0.png») no-repeat;
}

ol.round li.one {
background: url(«../Images/orderedList1.png») no-repeat;
}

ol.round li.two {
background: url(«../Images/orderedList2.png») no-repeat;
}

ol.round li.three {
background: url(«../Images/orderedList3.png») no-repeat;
}

ol.round li.four {
background: url(«../Images/orderedList4.png») no-repeat;
}

ol.round li.five {
background: url(«../Images/orderedList5.png») no-repeat;
}

ol.round li.six {
background: url(«../Images/orderedList6.png») no-repeat;
}

ol.round li.seven {
background: url(«../Images/orderedList7.png») no-repeat;
}

ol.round li.eight {
background: url(«../Images/orderedList8.png») no-repeat;
}

ol.round li.nine {
background: url(«../Images/orderedList9.png») no-repeat;
}

/* content */
article {
float: left;
width: 70%;
}

aside {
float: right;
width: 25%;
}

aside ul {
list-style: none;
padding: 0;
}

aside ul li {
background: url(«../Images/bullet.png») no-repeat 0 50%;
padding: 2px 0 2px 20px;
}

.label {
font-weight: 700;
}

/* login page */
#loginForm {
/*border-right: solid 2px #c8c8c8;*/
float: left;
width: 55%;
}

#loginForm .validation-error {
display: block;
margin-left: 15px;
}

#loginForm .validation-summary-errors ul {
margin: 0;
padding: 0;
}

#loginForm .validation-summary-errors li {
display: inline;
list-style: none;
margin: 0;
}

#loginForm input {
width: 250px;
}

#loginForm input[type=»checkbox»],
#loginForm input[type=»submit»],
#loginForm input[type=»button»],
#loginForm button {
width: auto;
}

#socialLoginForm {
margin-left: 40px;
float: left;
width: 40%;
}

#socialLoginForm h2 {
margin-bottom: 5px;
}

#socialLoginList button {
margin-bottom: 12px;
}

#logoutForm {
display: inline;
}

/* contact */
.contact h3 {
font-size: 1.2em;
}

.contact p {
margin: 5px 0 0 10px;
}

.contact iframe {
border: 1px solid #333;
margin: 5px 0 0 10px;
}

/* forms */
fieldset {
border: none;
margin: 0;
padding: 0;
}

fieldset legend {
display: none;
}

fieldset ol {
padding: 0;
list-style: none;
}

fieldset ol li {
padding-bottom: 5px;
}

label {
display: block;
font-size: 1.2em;
font-weight: 600;
}

label.checkbox {
display: inline;
}

input, textarea {
border: 1px solid black/*#e2e2e2*/;
background: #fff;
color: black/*#333*/;
font-size: 1.2em;
margin: 5px 0 6px 0;
padding: 5px;
width: 300px;
}

textarea {
font-family: inherit;
width: 500px;
}

input:focus, textarea:focus {
border: 1px solid #7ac0da;
}

input[type=»checkbox»] {
background: transparent;
border: inherit;
width: auto;
}

input[type=»submit»],
input[type=»button»],
button {
background-color: #F5DEB3/*#d3dce0*/;
border: 1px solid black/*#787878*/;
cursor: pointer;
font-size: 1.2em;
font-weight: 600;
padding: 7px;
margin-right: 8px;
width: auto;
}

td input[type=»submit»],
td input[type=»button»],
td button {
font-size: 1em;
padding: 4px;
margin-right: 4px;
}

/* info and errors */
.message-info {
border: 1px solid;
clear: both;
padding: 10px 20px;
}

.message-error {
clear: both;
color: #e80c4d;
font-size: 1.1em;
font-weight: bold;
margin: 20px 0 10px 0;
}

.message-success {
color: #7ac0da;
font-size: 1.3em;
font-weight: bold;
margin: 20px 0 10px 0;
}

.error {
color: red/*#e80c4d*/;
}

/* styles for validation helpers */
.field-validation-error {
color: #e80c4d;
font-weight: bold;
}

.field-validation-valid {
display: none;
}

input.input-validation-error {
border: 1px solid #e80c4d;
}

input[type=»checkbox»].input-validation-error {
border: 0 none;
}

.validation-summary-errors {
color: #e80c4d;
font-weight: bold;
font-size: 1.1em;
}

.validation-summary-valid {
display: none;
}

/* tables
———————————————————-*/
table {
border-collapse: collapse;
border-spacing: 0;
margin-top: 0.75em;
border: 0 none;
}

th {
font-size: 1.2em;
text-align: left;
border: none 0px;
padding-left: 0;
}

th a {
display: block;
position: relative;
}

th a:link, th a:visited, th a:active, th a:hover {
color: black/*#333*/;
font-weight: 600;
text-decoration: none;
padding: 0;
}

th a:hover {
color: #000;
}

th.asc a, th.desc a {
margin-right: .75em;
}

th.asc a:after, th.desc a:after {
display: block;
position: absolute;
right: 0em;
top: 0;
font-size: 0.75em;
}

th.asc a:after {
content: ▲;
}

th.desc a:after {
content: ▼;
}

td {
padding: 0.25em 2em 0.25em 0em;
border: 0 none;
}

tr.pager td {
padding: 0 0.25em 0 0;
}

/********************
* Mobile Styles *
********************/
@media only screen and (max-width: 850px) {

/* header
———————————————————-*/
header .float-left,
header .float-right {
float: none;
}

/* logo */
header .site-title {
margin: 10px;
text-align: center;
}

/* login */
#login {
font-size: .85em;
margin: 0 0 12px;
text-align: center;
}

#login ul {
margin: 5px 0;
padding: 0;
}

#login li {
display: inline;
list-style: none;
margin: 0;
padding: 0;
}

#login a {
background: none;
color: #999;
font-weight: 600;
margin: 2px;
padding: 0;
}

#login a:hover {
color: #333;
}

/* menu */
nav {
margin-bottom: 5px;
}

ul#menu {
margin: 0;
padding: 0;
text-align: center;
}

ul#menu li {
margin: 0;
padding: 0;
}

/* main layout
———————————————————-*/
.main-content,
.featured + .main-content {
background-position: 10px 0;
}

.content-wrapper {
padding-right: 10px;
padding-left: 10px;
}

.featured .content-wrapper {
padding: 10px;
}

/* page content */
article, aside {
float: none;
width: 100%;
}

/* ordered list */
ol.round {
list-style-type: none;
padding-left: 0;
}

ol.round li {
padding-left: 10px;
margin: 25px 0;
}

ol.round li.zero,
ol.round li.one,
ol.round li.two,
ol.round li.three,
ol.round li.four,
ol.round li.five,
ol.round li.six,
ol.round li.seven,
ol.round li.eight,
ol.round li.nine {
background: none;
}

/* features */
section.feature {
float: none;
padding: 10px;
width: auto;
}

section.feature img {
color: #999;
content: attr(alt);
font-size: 1.5em;
font-weight: 600;
}

/* forms */
input {
width: 90%;
}

/* login page */
#loginForm {
border-right: none;
float: none;
width: auto;
}

#loginForm .validation-error {
display: block;
margin-left: 15px;
}

#socialLoginForm {
margin-left: 0;
float: none;
width: auto;
}

/* footer
———————————————————-*/
footer .float-left,
footer .float-right {
float: none;
}

footer {
text-align: center;
height: auto;
padding: 10px 0;
}

footer p {
margin: 0;
}
}

/* Мои классы */

.zeroQ {
color: red;
}

Стили jquery описаны в файле jquery.ui.theme.css

/*!
* jQuery UI CSS Framework 1.8.20
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Licensed under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*
* To view and modify this theme, visit http://jqueryui.com/themeroller/
*/

/* Component containers
———————————-*/
.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; }
.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #DEB887/*#ffffff{bgColorContent}*/ /*url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent} 50%/*{bgContentXPos} 50%/*{bgContentYPos} repeat-x*//*{bgContentRepeat}*/; color: black/*#222222{fcContent}*/; }
.ui-widget-content a { color: #222222/*{fcContent}*/; }
.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #D2691E/*#cccccc{bgColorHeader}*/ /*url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader} 50%/*{bgHeaderXPos} 50%/*{bgHeaderYPos} repeat-x*//*{bgHeaderRepeat}*/; color: black/*#222222{fcHeader}*/; font-weight: bold; }
.ui-widget-header a { color: #222222/*{fcHeader}*/; }

/* Interaction states
———————————-*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; }
.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; }
.ui-widget :active { outline: none; }

/* Interaction Cues
———————————-*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }

/* Icons
———————————-*/

/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; }

/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }

/* Misc visuals
———————————-*/

/* Corner radius */
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; }
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }

/* Overlays */
.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }
.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; }

1.4. Функциональные модули

Модуль проверки пользователей на наличие задолжностей включен в файл Global.asax.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Web;
using System.Web.Caching;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using WebMatrix.WebData;
using KP_Library.Models;
using KP_Library.Controllers;

namespace KP_Library
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801

public class MvcApplication : System.Web.HttpApplication
{
private const string DummyCacheItemKey = «NotificationCheck»;

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
RegisterCacheEntry();
}

//Для рассылок
private bool RegisterCacheEntry()
{
if (null != HttpContext.Current.Cache[DummyCacheItemKey]) return false;

HttpContext.Current.Cache.Add(DummyCacheItemKey, «Notify», null,
DateTime.MaxValue, TimeSpan.FromMinutes(5),//Установить подходящее время
CacheItemPriority.Normal,
new CacheItemRemovedCallback(CacheItemRemovedCallback));

return true;
}

private const string DummyPageUrl = «http://localhost:49583/Home/Contact»;

public void CacheItemRemovedCallback(string key, object value, CacheItemRemovedReason reason)
{
//Debug.WriteLine(«Cache item callback: » + DateTime.Now.ToString());

WebClient client = new WebClient();
client.DownloadData(DummyPageUrl);
// Do the service works
//Проверить, кому и что нужно отправить.
Notifications();
}

protected void Application_BeginRequest(Object sender, EventArgs e)
{
// If the dummy page is hit, then it means we want to add another item in cache

if (HttpContext.Current.Request.Url.ToString() == DummyPageUrl)
{
// Add the item in cache and when succesful, do the work.

RegisterCacheEntry();
}
}

private void Notifications()
{
LibraryContext db = new LibraryContext();
UsersContext dbUsers = new UsersContext();
foreach (var user in dbUsers.Users)
{
foreach (var order in db.Orders.Where(o => o.UserId == user.UserId))
{

if (!order.Returned && order.ReturnBefore != null && DateTime.Compare(DateTime.Now.Date, (DateTime)order.ReturnBefore) > 0)//Книга не возвращена в срок
{
string message = string.Empty;
//Формируем текст письма
message = «Здравствуйте, » + user.FirstName + » » + user.LastName + «!»;
message += Environment.NewLine;
message += «Информируем вас, что вы не вернули книгу » + order.Book.Name + » в библиотеку » + order.Library.Name + » в срок (до » + order.ReturnBefore.ToString().Substring(0, 10) + «).»;
message += Environment.NewLine;
message += «Просим вас вернуть книгу.»;
message += Environment.NewLine;
message += «С уважением, администрация АИС «Библиотеки»»;
//Отправляем письмо
SendNotification(user.Email, message);
}
}
}
}

private void SendNotification(string to, string message)
{
MailMessage mail = new MailMessage();
mail.To.Add(new MailAddress(to));
mail.Subject = «Задолжность перед библиотекой»;
mail.Body = message;
SmtpClient client = new SmtpClient();
client.Send(mail);
mail.Dispose();
}

}
}

Модуль генерации талона заказа – PdfTicket.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using KP_Library.Models;
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using PdfSharp.Pdf;
using PdfSharp.Pdf.Security;

namespace KP_Library.Functions
{
public class PdfTicket
{
public string CreateTicket(Order order)
{
Document document = CreateDocument(order);
document.UseCmykColor = true;
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(true, PdfFontEmbedding.Always);
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
//Ограничиваем права пользователя
PdfSecuritySettings securitySettings = pdfRenderer.PdfDocument.SecuritySettings;

// Setting one of the passwords automatically sets the security level to
// PdfDocumentSecurityLevel.Encrypted128Bit.
//securitySettings.UserPassword = «FlvbY»;
//securitySettings.OwnerPassword = «<b,kbjntrF»;

// Dont use 40 bit encryption unless needed for compatibility
//securitySettings.DocumentSecurityLevel = PdfDocumentSecurityLevel.Encrypted40Bit;

// Restrict some rights.
securitySettings.PermitAccessibilityExtractContent = false;
securitySettings.PermitAnnotations = false;
securitySettings.PermitAssembleDocument = false;
securitySettings.PermitExtractContent = false;
securitySettings.PermitFormsFill = false;
securitySettings.PermitFullQualityPrint = true;
securitySettings.PermitModifyDocument = false;
securitySettings.PermitPrint = true;

//
string filename = order.UserLastName + «_» + order.UserFirstName + «_» + order.DateOfOrder.ToString().Substring(0, 10).Replace(., -) + «.pdf»;
string targetFolder = HttpContext.Current.Server.MapPath(«~/tickets»);
string filepath = Path.Combine(targetFolder, filename);
pdfRenderer.PdfDocument.Save(filepath);
return filepath;
}

public Document CreateDocument(Order order)
{
// Create a new MigraDoc document
Document document = new Document();
// Add a section to the document
Section section = document.AddSection();
section.PageSetup.PageFormat = PageFormat.A6;//стандартный размер страницы
section.PageSetup.Orientation = Orientation.Portrait;//ориентация
section.PageSetup.BottomMargin = 10;//нижний отступ
section.PageSetup.TopMargin = 10;//верхний отступ
section.PageSetup.LeftMargin = 15;
section.PageSetup.RightMargin = 10;

Paragraph parTitle = section.AddParagraph();
parTitle.Format.Font.Color = Color.FromCmyk(0, 0, 0, 255);
parTitle.Format.Font.Size = Unit.FromPoint(16);
parTitle.Format.Alignment = ParagraphAlignment.Center;
parTitle.AddFormattedText(«АИС «Библиотеки»», TextFormat.Bold);
Paragraph mainPar = section.AddParagraph();
mainPar.Format.Font.Size = Unit.FromPoint(14);
mainPar.AddFormattedText(«
«);
mainPar.AddFormattedText(«ФИО
«, TextFormat.Bold);
mainPar.AddFormattedText(order.UserLastName + » » + order.UserFirstName + «

«);
mainPar.AddFormattedText(«Библиотека
«, TextFormat.Bold);
mainPar.AddFormattedText(«Название: » + order.Library.Name + «
«);
mainPar.AddFormattedText(» Адрес: » + order.Library.Adress + «

«);
mainPar.AddFormattedText(«Книга
«, TextFormat.Bold);
mainPar.AddFormattedText(«Автор: » + order.Book.Author + «
«);
mainPar.AddFormattedText(«Название: » + order.Book.Name + «
«);
mainPar.AddFormattedText(«ISBN: » + order.Book.ISBN + «
«);
return document;
}

}
}

Модуль перенаправления при попытке открыть страницу с недостаточными для этого правами доступа – HttpForbiddenResult.cs

using System.Net;
using System.Web.Mvc;

namespace KP_Library.Functions
{

public class HttpForbiddenResult : HttpStatusCodeResult
{
public override void ExecuteResult(ControllerContext context)
{
base.ExecuteResult(context);

// creates the ViewResult adding ViewData and TempData parameters
ViewResult result = new ViewResult
{
ViewName = «AccessDenied»,
ViewData = context.Controller.ViewData,
TempData = context.Controller.TempData
};

result.ExecuteResult(context);
}

// calls the base constructor with 403 status code
public HttpForbiddenResult()
: base(HttpStatusCode.Forbidden, «Forbidden»)
{
}
}

}

Контроллеры.

AccountController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Transactions;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using DotNetOpenAuth.AspNet;
using Microsoft.Web.WebPages.OAuth;
using WebMatrix.WebData;
using KP_Library.Filters;
using KP_Library.Models;

namespace KP_Library.Controllers
{
[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
//
// GET: /Account/Login

[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}

//
// POST: /Account/Login

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.Login, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}

// If we got this far, something failed, redisplay form
ModelState.AddModelError(«», «Неверный пароль или имя пользователя.»);
return View(model);
}

//
// POST: /Account/LogOff

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
WebSecurity.Logout();

return RedirectToAction(«Index», «Home»);
}

//
// GET: /Account/Register

[AllowAnonymous]
public ActionResult Register()
{
return View();
}

//
// POST: /Account/Register

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.Login, model.Password, new { LastName = model.LastName, FirstName = model.FirstName, Birthdate = model.Birthdate, Email = model.Email });
WebSecurity.Login(model.Login, model.Password);
return RedirectToAction(«Index», «Home»);
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError(«», ErrorCodeToString(e.StatusCode));
}
}

// If we got this far, something failed, redisplay form
return View(model);
}

//
// POST: /Account/Disassociate

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Disassociate(string provider, string providerUserId)
{
string ownerAccount = OAuthWebSecurity.GetUserName(provider, providerUserId);
ManageMessageId? message = null;

// Only disassociate the account if the currently logged in user is the owner
if (ownerAccount == User.Identity.Name)
{
// Use a transaction to prevent the user from deleting their last login credential
using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }))
{
bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
if (hasLocalAccount || OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name).Count > 1)
{
OAuthWebSecurity.DeleteAccount(provider, providerUserId);
scope.Complete();
message = ManageMessageId.RemoveLoginSuccess;
}
}
}

return RedirectToAction(«Manage», new { Message = message });
}

//
// GET: /Account/Manage

//Сделать полный профиль.

public ActionResult Manage(ManageMessageId? message)
{
ViewBag.StatusMessage =
message == ManageMessageId.ChangePasswordSuccess ? «Ваш пароль был изменен.»
: message == ManageMessageId.SetPasswordSuccess ? «Ваш пароль был установлен.»
: message == ManageMessageId.RemoveLoginSuccess ? «The external login was removed.»
: «»;
ViewBag.HasLocalPassword = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
ViewBag.ReturnUrl = Url.Action(«Manage»);
ViewBag.UserId = (int)Membership.GetUser().ProviderUserKey;
return View();
}

//
// POST: /Account/Manage

//По сути смена пароля

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Manage(LocalPasswordModel model)
{
bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
ViewBag.HasLocalPassword = hasLocalAccount;
ViewBag.ReturnUrl = Url.Action(«Manage»);
if (hasLocalAccount)
{
if (ModelState.IsValid)
{
// ChangePassword will throw an exception rather than return false in certain failure scenarios.
bool changePasswordSucceeded;
try
{
changePasswordSucceeded = WebSecurity.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword);
}
catch (Exception)
{
changePasswordSucceeded = false;
}

if (changePasswordSucceeded)
{
return RedirectToAction(«Manage», new { Message = ManageMessageId.ChangePasswordSuccess });
}
else
{
ModelState.AddModelError(«», «Неверно указан старый пароль и новый пароль не корректен.»);
}
}
}
else
{
// User does not have a local password so remove any validation errors caused by a missing
// OldPassword field
ModelState state = ModelState[«OldPassword»];
if (state != null)
{
state.Errors.Clear();
}

if (ModelState.IsValid)
{
try
{
WebSecurity.CreateAccount(User.Identity.Name, model.NewPassword);
return RedirectToAction(«Manage», new { Message = ManageMessageId.SetPasswordSuccess });
}
catch (Exception e)
{
ModelState.AddModelError(«», e);
}
}
}

// If we got this far, something failed, redisplay form
return View(model);
}

//
// POST: /Account/ExternalLogin

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
return new ExternalLoginResult(provider, Url.Action(«ExternalLoginCallback», new { ReturnUrl = returnUrl }));
}

//
// GET: /Account/ExternalLoginCallback

[AllowAnonymous]
public ActionResult ExternalLoginCallback(string returnUrl)
{
AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action(«ExternalLoginCallback», new { ReturnUrl = returnUrl }));
if (!result.IsSuccessful)
{
return RedirectToAction(«ExternalLoginFailure»);
}

if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
{
return RedirectToLocal(returnUrl);
}

if (User.Identity.IsAuthenticated)
{
// If the current user is logged in add the new account
OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
return RedirectToLocal(returnUrl);
}
else
{
// User is new, ask for their desired membership name
string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
ViewBag.ReturnUrl = returnUrl;
return View(«ExternalLoginConfirmation», new RegisterExternalLoginModel { Login = result.UserName, ExternalLoginData = loginData });
}
}

//
// POST: /Account/ExternalLoginConfirmation

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
{
string provider = null;
string providerUserId = null;

if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
{
return RedirectToAction(«Manage»);
}

if (ModelState.IsValid)
{
// Insert a new user into the database
using (UsersContext db = new UsersContext())
{
User user = db.Users.FirstOrDefault(u => u.Login.ToLower() == model.Login.ToLower());
// Check if user already exists
if (user == null)
{
// Insert name into the profile table
db.Users.Add(new User { Login = model.Login });
db.SaveChanges();

OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.Login);
OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError(«UserName», «User name already exists. Please enter a different user name.»);
}
}
}

ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
ViewBag.ReturnUrl = returnUrl;
return View(model);
}

//
// GET: /Account/ExternalLoginFailure

[AllowAnonymous]
public ActionResult ExternalLoginFailure()
{
return View();
}

[AllowAnonymous]
[ChildActionOnly]
public ActionResult ExternalLoginsList(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return PartialView(«_ExternalLoginsListPartial», OAuthWebSecurity.RegisteredClientData);
}

[ChildActionOnly]
public ActionResult RemoveExternalLogins()
{
ICollection<OAuthAccount> accounts = OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name);
List<ExternalLogin> externalLogins = new List<ExternalLogin>();
foreach (OAuthAccount account in accounts)
{
AuthenticationClientData clientData = OAuthWebSecurity.GetOAuthClientData(account.Provider);

externalLogins.Add(new ExternalLogin
{
Provider = account.Provider,
ProviderDisplayName = clientData.DisplayName,
ProviderUserId = account.ProviderUserId,
});
}

ViewBag.ShowRemoveButton = externalLogins.Count > 1 || OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
return PartialView(«_RemoveExternalLoginsPartial», externalLogins);
}

#region Helpers
private ActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction(«Index», «Home»);
}
}

public enum ManageMessageId
{
ChangePasswordSuccess,
SetPasswordSuccess,
RemoveLoginSuccess,
}

internal class ExternalLoginResult : ActionResult
{
public ExternalLoginResult(string provider, string returnUrl)
{
Provider = provider;
ReturnUrl = returnUrl;
}

public string Provider { get; private set; }
public string ReturnUrl { get; private set; }

public override void ExecuteResult(ControllerContext context)
{
OAuthWebSecurity.RequestAuthentication(Provider, ReturnUrl);
}
}

private static string ErrorCodeToString(MembershipCreateStatus createStatus)
{
// See http://go.microsoft.com/fwlink/?LinkID=177550 for
// a full list of status codes.
switch (createStatus)
{
case MembershipCreateStatus.DuplicateUserName:
return «User name already exists. Please enter a different user name.»;

case MembershipCreateStatus.DuplicateEmail:
return «A user name for that e-mail address already exists. Please enter a different e-mail address.»;

case MembershipCreateStatus.InvalidPassword:
return «The password provided is invalid. Please enter a valid password value.»;

case MembershipCreateStatus.InvalidEmail:
return «The e-mail address provided is invalid. Please check the value and try again.»;

case MembershipCreateStatus.InvalidAnswer:
return «The password retrieval answer provided is invalid. Please check the value and try again.»;

case MembershipCreateStatus.InvalidQuestion:
return «The password retrieval question provided is invalid. Please check the value and try again.»;

case MembershipCreateStatus.InvalidUserName:
return «The user name provided is invalid. Please check the value and try again.»;

case MembershipCreateStatus.ProviderError:
return «The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.»;

case MembershipCreateStatus.UserRejected:
return «The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.»;

default:
return «An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.»;
}
}
#endregion
}
}

BookController.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using KP_Library.Models;

namespace KP_Library.Controllers
{
public class BookController : Controller
{
private LibraryContext db = new LibraryContext();

//
// GET: /Book/

[Authorize]
public ActionResult Index()
{
return View();
}

//
// GET: /Book/Details/5

[Authorize]
public ActionResult Details(int id = 0)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (User.IsInRole(«admin») || db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == id))
{
ViewBag.AdminRight = true;
}
else
{
ViewBag.AdminRight = false;
}
Book book = db.Books.Find(id);
if (book == null)
{
return HttpNotFound();
}
return View(book);
}

//
// GET: /Book/Create

[Authorize(Roles = «admin, librarian»)]
public ActionResult Create()
{
return View();
}

//
// POST: /Book/Create

[HttpPost]
[Authorize(Roles = «admin, librarian»)]
public ActionResult Create(Book book, HttpPostedFileBase image)
{
if (image != null && image.ContentType != «image/jpeg» && image.ContentType != «image/png»)
{
ModelState.AddModelError(«», «Изображение должно иметь расширение «.jpg» или «.png»!»);
}
if (book.YearOfPublishing > DateTime.Now.Year)
{
ModelState.AddModelError(«», «Год издания книги не может быть позднее текущего года: » + DateTime.Now.Year + «!»);
}
if (ModelState.IsValid)
{
if (image != null)//Сохранять файл не в БД?
{
book.ImageMimeType = image.ContentType;
book.ImageData = new byte[image.ContentLength];
image.InputStream.Read(book.ImageData, 0, image.ContentLength);
}
db.Books.Add(book);
db.SaveChanges();
return RedirectToAction(«Index»);
}

return View(book);
}

//
// GET: /Book/Edit/5

[Authorize(Roles = «admin, librarian»)]
public ActionResult Edit(int id = 0)
{
Book book = db.Books.Find(id);
if (book == null)
{
return HttpNotFound();
}
return View(book);
}

//
// POST: /Book/Edit/5

[Authorize(Roles=»admin, librarian»)]
[HttpPost]
public ActionResult Edit(Book book, HttpPostedFileBase image)
{
if (image != null && image.ContentType != «image/jpeg» && image.ContentType != «image/png»)
{
ModelState.AddModelError(«», «Изображение должно иметь расширение «.jpg» или «.png»!»);
}
if (book.YearOfPublishing > DateTime.Now.Year)
{
ModelState.AddModelError(«», «Год издания книги не может быть позднее текущего года: » + DateTime.Now.Year + «!»);
}
if (ModelState.IsValid)
{
if (image != null)
{
book.ImageMimeType = image.ContentType;
book.ImageData = new byte[image.ContentLength];
image.InputStream.Read(book.ImageData, 0, image.ContentLength);
}
db.Entry(book).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction(«Index»);
}
return View(book);
}

//
// POST: /Book/Delete/5

[Authorize(Roles=»admin»)]
[HttpPost, ActionName(«Delete»)]
public ActionResult DeleteConfirmed(int id)
{
Book book = db.Books.Find(id);
db.Books.Remove(book);
db.SaveChanges();
return RedirectToAction(«Index»);
}

[Authorize(Roles = «admin»)]
[HttpGet]
public PartialViewResult DeleteConfirmation(string id)
{
ViewBag.BookId = id;
return PartialView(«_DeleteConfirmation»);
}

protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}

[Authorize]
public PartialViewResult BooksList(string id = «Название», string searchField = «Названию», string search = «»)
{
//Сортируем по столбцу id
//Ищем по search в searchField
IEnumerable<Book> Books = db.Books.ToList();
search = search.ToUpperInvariant();
switch (id)
{
case «Название»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
case «Автору»:
Books = Books.Where(b => b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
case «Издательству»:
Books = Books.Where(b => b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
case «Году издания»:
Books = Books.Where(b => b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.Name);
break;
case «Тематике»:
Books = Books.Where(b => b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
case «ISBN»:
Books = Books.Where(b => b.ISBN.Contains(search)).OrderBy(b => b.Name);
break;
}
break;
case «Автор»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.Author);
break;
case «Автору»:
Books = Books.Where(b => b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.Author);
break;
case «Издательству»:
Books = Books.Where(b => b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.Author);
break;
case «Году издания»:
Books = Books.Where(b => b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.Author);
break;
case «Тематике»:
Books = Books.Where(b => b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.Author);
break;
case «ISBN»:
Books = Books.Where(b => b.ISBN.Contains(search)).OrderBy(b => b.Author);
break;
}
break;
case «Издательство»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.PublishingHouse);
break;
case «Автору»:
Books = Books.Where(b => b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.PublishingHouse);
break;
case «Издательству»:
Books = Books.Where(b => b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.PublishingHouse);
break;
case «Году издания»:
Books = Books.Where(b => b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.PublishingHouse);
break;
case «Тематике»:
Books = Books.Where(b => b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.PublishingHouse);
break;
case «ISBN»:
Books = Books.Where(b => b.ISBN.Contains(search)).OrderBy(b => b.PublishingHouse);
break;
}
break;
case «Год издания»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
case «Автору»:
Books = Books.Where(b => b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
case «Издательству»:
Books = Books.Where(b => b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
case «Году издания»:
Books = Books.Where(b => b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
case «Тематике»:
Books = Books.Where(b => b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
case «ISBN»:
Books = Books.Where(b => b.ISBN.Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
}
break;
case «Тематика»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.Subject);
break;
case «Автору»:
Books = Books.Where(b => b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.Subject);
break;
case «Издательству»:
Books = Books.Where(b => b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.Subject);
break;
case «Году издания»:
Books = Books.Where(b => b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.Subject);
break;
case «Тематике»:
Books = Books.Where(b => b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.Subject);
break;
case «ISBN»:
Books = Books.Where(b => b.ISBN.Contains(search)).OrderBy(b => b.Subject);
break;
}
break;
case «ISBN»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.ISBN);
break;
case «Автору»:
Books = Books.Where(b => b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.ISBN);
break;
case «Издательству»:
Books = Books.Where(b => b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.ISBN);
break;
case «Году издания»:
Books = Books.Where(b => b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.ISBN);
break;
case «Тематике»:
Books = Books.Where(b => b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.ISBN);
break;
case «ISBN»:
Books = Books.Where(b => b.ISBN.Contains(search)).OrderBy(b => b.ISBN);
break;
}
break;
}
ViewBag.SearchField = searchField;
ViewBag.Search = search;
return PartialView(«_BooksList», Books);
}

[Authorize]
public PartialViewResult ChooseBooksList(string id = «Название», string searchField = «Названию», string search = «», int LibraryId = 0)
{
IEnumerable<Book> Books = db.Books.ToList();
Library lib = db.Libraries.FirstOrDefault(l => l.LibraryId == LibraryId);//Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId))
search = search.ToUpperInvariant();
switch (id)
{
case «Название»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
case «Автору»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
case «Издательству»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
case «Году издания»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.Name);
break;
case «Тематике»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
case «ISBN»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.ISBN.Contains(search)).OrderBy(b => b.Name);
break;
}
break;
case «Автор»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.Author);
break;
case «Автору»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.Author);
break;
case «Издательству»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.Author);
break;
case «Году издания»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.Author);
break;
case «Тематике»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.Author);
break;
case «ISBN»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.ISBN.Contains(search)).OrderBy(b => b.Author);
break;
}
break;
case «Издательство»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.PublishingHouse);
break;
case «Автору»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.PublishingHouse);
break;
case «Издательству»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.PublishingHouse);
break;
case «Году издания»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.PublishingHouse);
break;
case «Тематике»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.PublishingHouse);
break;
case «ISBN»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.ISBN.Contains(search)).OrderBy(b => b.PublishingHouse);
break;
}
break;
case «Год издания»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
case «Автору»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
case «Издательству»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
case «Году издания»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
case «Тематике»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
case «ISBN»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.ISBN.Contains(search)).OrderBy(b => b.YearOfPublishing);
break;
}
break;
case «Тематика»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.Subject);
break;
case «Автору»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.Subject);
break;
case «Издательству»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.Subject);
break;
case «Году издания»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.Subject);
break;
case «Тематике»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.Subject);
break;
case «ISBN»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.ISBN.Contains(search)).OrderBy(b => b.Subject);
break;
}
break;
case «ISBN»:
switch (searchField)
{
case «Названию»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.ISBN);
break;
case «Автору»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Author.ToUpperInvariant().Contains(search)).OrderBy(b => b.ISBN);
break;
case «Издательству»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.PublishingHouse.ToUpperInvariant().Contains(search)).OrderBy(b => b.ISBN);
break;
case «Году издания»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.YearOfPublishing.ToString().Contains(search)).OrderBy(b => b.ISBN);
break;
case «Тематике»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.Subject.ToUpperInvariant().Contains(search)).OrderBy(b => b.ISBN);
break;
case «ISBN»:
Books = Books.Where(b => !b.BooksInLibrary.Any(bil => bil.LibraryId == LibraryId) && b.ISBN.Contains(search)).OrderBy(b => b.ISBN);
break;
}
break;
}
ViewBag.SearchField = searchField;
ViewBag.Search = search;
ViewBag.LibraryId = LibraryId;
return PartialView(«_ChooseBooksList», Books);
}

[Authorize]
[Authorize(Roles = «admin, librarian»)]
public FileContentResult GetImage(int BookId)
{
Book book = db.Books.FirstOrDefault(b => b.BookId == BookId);
if (book != null)
{
return File(book.ImageData, book.ImageMimeType);
}
else
{
return null;
}
}

[Authorize]
[Authorize(Roles = «admin, librarian»)]
public ActionResult ChooseBook(int LibraryId = 0)
{
ViewBag.LibraryId = LibraryId;
return View();
}

}
}

BookInLibraryController.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using KP_Library.Models;
using System.Web.Security;
using KP_Library.Functions;

namespace KP_Library.Controllers
{
public class BookInLibraryController : Controller
{
private LibraryContext db = new LibraryContext();

//
// GET: /BookInLibrary/IndexForLibrary/5

[Authorize]
public ActionResult IndexForLibrary(int id, string ReturnUrl = «»)
{
var booksinlibrary = db.BooksInLibrary.Where(bil => bil.LibraryId == id).OrderBy(bil => bil.Book.Name).Include(b => b.Library).Include(b => b.Book);
ViewBag.LibraryId = id;
ViewBag.LibraryName = db.Libraries.Find(id).Name;
return View(booksinlibrary.ToList());
}

//
// GET: /BookInLibrary/IndexForBook/5

[Authorize]
public ActionResult IndexForBook(int id, string ReturnUrl = «»)
{
var booksinlibrary = db.BooksInLibrary.Where(bil => bil.BookId == id).OrderBy(bil => bil.Library.Name).Include(b => b.Library).Include(b => b.Book);
ViewBag.BookId = id;
ViewBag.BookName = db.Books.Find(id).Name;
return View(booksinlibrary.ToList());
}

[Authorize]
public ActionResult _EmptyList(string ReturnUrl)
{
ViewBag.ReturnUrl = ReturnUrl;
return View();
}

//
// GET: /BookInLibrary/Details/5

[Authorize]
public ActionResult Details(int id = 0)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (User.IsInRole(«admin») || db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == id))
{
ViewBag.AdminRight = true;
}
else
{
ViewBag.AdminRight = false;
}
BookInLibrary bookinlibrary = db.BooksInLibrary.Find(id);
if (bookinlibrary == null)
{
return HttpNotFound();
}
return View(bookinlibrary);
}

//
// GET: /BookInLibrary/Create

[Authorize]
public ActionResult Create(int BookId = 0, int LibraryId = 0)
{
if (BookId == 0)
{
//ViewBag.LibraryId = LibraryId;
return RedirectToAction(«ChooseBook», «Book», new { LibraryId = LibraryId } );
}
if (LibraryId == 0)
{
//ViewBag.BookId = BookId;
return RedirectToAction(«ChooseLibrary», «Library», new { BookId = LibraryId });
}
Book book = db.Books.FirstOrDefault(l => l.BookId == BookId);
ViewBag.BookId = book.BookId;
ViewBag.BookName = book.Name;
Library lib = db.Libraries.FirstOrDefault(l => l.LibraryId == LibraryId);
ViewBag.LibraryId = lib.LibraryId;
ViewBag.LibraryName = lib.Name;
//ViewBag.LibraryId = new SelectList(db.Libraries, «LibraryId», «Name»);
//ViewBag.BookId = new SelectList(db.Books, «BookId», «Name»);
return View();
}

//
// POST: /BookInLibrary/Create

[Authorize]
[HttpPost]
public ActionResult Create(BookInLibrary bookinlibrary)
{
if (ModelState.IsValid)
{
//bookinlibrary.Library.TotalUniqueBooks += 1;
db.BooksInLibrary.Add(bookinlibrary);
db.SaveChanges();
//Увеличить число книг в библиотеке
Library libr = db.Libraries.Find(bookinlibrary.LibraryId);
libr.TotalUniqueBooks = libr.TotalUniqueBooks + 1;
db.Entry(libr).State = EntityState.Modified;
db.SaveChanges();
//По умолчанию все книги в этой же библиотеке
return RedirectToAction(«IndexForLibrary», new { id = bookinlibrary.LibraryId });
}
//ViewBag.LibraryId = new SelectList(db.Libraries, «LibraryId», «Name», bookinlibrary.LibraryId);
//ViewBag.BookId = new SelectList(db.Books, «BookId», «Name», bookinlibrary.BookId);
Book book = db.Books.FirstOrDefault(l => l.BookId == bookinlibrary.BookId);
ViewBag.BookId = book.BookId;
ViewBag.BookName = book.Name;
Library lib = db.Libraries.FirstOrDefault(l => l.LibraryId == bookinlibrary.LibraryId);
ViewBag.LibraryId = lib.LibraryId;
ViewBag.LibraryName = lib.Name;
return View(bookinlibrary);
}

//
// GET: /BookInLibrary/Edit/5

[Authorize]
public ActionResult Edit(int id = 0)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (!User.IsInRole(«admin») && !db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == id))
{
return new HttpForbiddenResult();
}
BookInLibrary bookinlibrary = db.BooksInLibrary.Find(id);
if (bookinlibrary == null)
{
return HttpNotFound();
}
ViewBag.LibraryId = new SelectList(db.Libraries, «LibraryId», «Name», bookinlibrary.LibraryId);
ViewBag.BookId = new SelectList(db.Books, «BookId», «Name», bookinlibrary.BookId);
return View(bookinlibrary);
}

//
// POST: /BookInLibrary/Edit/5

//Отредактировать
[Authorize]
[HttpPost]
public ActionResult Edit(BookInLibrary bookinlibrary)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (!HttpContext.User.IsInRole(«admin») && !db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == bookinlibrary.Library.LibraryId))
{
return new HttpForbiddenResult();
}
if (ModelState.IsValid)
{
db.Entry(bookinlibrary).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction(«Details», new { id = bookinlibrary.BookInLibraryId });
}
ViewBag.LibraryId = new SelectList(db.Libraries, «LibraryId», «Name», bookinlibrary.LibraryId);
ViewBag.BookId = new SelectList(db.Books, «BookId», «Name», bookinlibrary.BookId);
return View(bookinlibrary);
}

[Authorize]
[HttpPost, ActionName(«Delete»)]
public ActionResult DeleteConfirmed(int id)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (!HttpContext.User.IsInRole(«admin») && !db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == id))
{
return new HttpForbiddenResult();
}
BookInLibrary bil = db.BooksInLibrary.Find(id);
//Уменьшить число книг в библиотеке
Library libr = db.Libraries.Find(bil.LibraryId);
libr.TotalUniqueBooks = libr.TotalUniqueBooks — 1;
db.Entry(libr).State = EntityState.Modified;
db.SaveChanges();
//
db.BooksInLibrary.Remove(bil);
db.SaveChanges();
return RedirectToAction(«IndexForLibrary», new { id = bil.LibraryId });
}

[Authorize]
[HttpGet]
public PartialViewResult DeleteConfirmation(string id)
{
ViewBag.BookInLibraryId = id;
return PartialView(«_DeleteConfirmation»);
}

protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}

HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using KP_Library.Filters;

namespace KP_Library.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
//ViewBag.Message = «Modify this template to jump-start your ASP.NET MVC application.»;

return View();
}

public ActionResult Contact()
{
//ViewBag.Message = «Your contact page.»;

return View();
}
}
}

LibraryController.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using KP_Library.Models;
using KP_Library.Functions;

namespace KP_Library.Controllers
{
public class LibraryController : Controller
{
private LibraryContext db = new LibraryContext();

//
// GET: /Library/

[Authorize]
public ActionResult Index()
{
return View();
}

//
// GET: /Library/Details/5

[Authorize]
public ActionResult Details(int id = 0)
{
Library library = db.Libraries.Find(id);
if (library == null)
{
return HttpNotFound();
}
int userId = (int)Membership.GetUser().ProviderUserKey;
if (HttpContext.User.IsInRole(«admin») || db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == id))
{
ViewBag.AdminRight = true;
}
else
{
ViewBag.AdminRight = false;
}
return View(library);
}

//
// GET: /Library/Create

[Authorize(Roles=»admin»)]
public ActionResult Create()
{
return View();
}

//
// POST: /Library/Create

[Authorize(Roles = «admin»)]
[HttpPost]
public ActionResult Create(Library library)
{
if (ModelState.IsValid)
{
library.TotalUniqueBooks = 0;
db.Libraries.Add(library);
db.SaveChanges();
return RedirectToAction(«Index»);
}

return View(library);
}

//
// GET: /Library/Edit/5

[Authorize]
public ActionResult Edit(int id = 0)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (!HttpContext.User.IsInRole(«admin») && !db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == id))
{
return new HttpForbiddenResult();
}
Library library = db.Libraries.Find(id);
if (library == null)
{
return HttpNotFound();
}
return View(library);
}

//
// POST: /Library/Edit/5

[Authorize]
[HttpPost]
public ActionResult Edit(Library library)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (!User.IsInRole(«admin») && !db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == library.LibraryId))
{
return new HttpForbiddenResult();
}
if (ModelState.IsValid)
{
db.Entry(library).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction(«Details», new { id = library.LibraryId });
}
return View(library);
}

//
// POST: /Library/Delete/5

[Authorize(Roles = «admin»)]
[HttpPost, ActionName(«Delete»)]
public ActionResult DeleteConfirmed(int id)
{
Library library = db.Libraries.Find(id);
db.Libraries.Remove(library);
db.SaveChanges();
return RedirectToAction(«Index»);
}

[HttpGet]
[Authorize]
public PartialViewResult DeleteConfirmation(string id)
{
ViewBag.LibraryId = id;
return PartialView(«_DeleteConfirmation»);
}

protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}

[Authorize]
public PartialViewResult LibrariesList(string id = «Название», string searchField = «Названию», string search = «»)
{
IEnumerable<Library> Libraries = db.Libraries.ToList();
search = search.ToUpperInvariant();
switch (id)
{
case «Название»:
switch (searchField)
{
case «Названию»:
Libraries = Libraries.Where(l => l.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
case «Адресу»:
Libraries = Libraries.Where(l => l.Adress.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
}
break;
case «Адрес»:
switch (searchField)
{
case «Названию»:
Libraries = Libraries.Where(l => l.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.Adress);
break;
case «Адресу»:
Libraries = Libraries.Where(l => l.Adress.ToUpperInvariant().Contains(search)).OrderBy(b => b.Adress);
break;
}
break;
case «Число уникальных наименований»:
switch (searchField)
{
case «Названию»:
Libraries = Libraries.Where(l => l.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.TotalUniqueBooks);
break;
case «Адресу»:
Libraries = Libraries.Where(l => l.Adress.ToUpperInvariant().Contains(search)).OrderBy(b => b.TotalUniqueBooks);
break;
}
break;
}
ViewBag.SearchField = searchField;
ViewBag.Search = search;
return PartialView(«_LibrariesList», Libraries);
}

[Authorize]
public PartialViewResult ChooseLibrariesList(string id = «Название», string searchField = «Названию», string search = «», int BookId = 0)
{
IEnumerable<Library> Libraries = db.Libraries.ToList();
search = search.ToUpperInvariant();
switch (id)
{
case «Название»:
switch (searchField)
{
case «Названию»:
Libraries = Libraries.Where(l => !l.BooksInLibrary.Any(bil => bil.BookId == BookId) && l.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
case «Адресу»:
Libraries = Libraries.Where(l => !l.BooksInLibrary.Any(bil => bil.BookId == BookId) && l.Adress.ToUpperInvariant().Contains(search)).OrderBy(b => b.Name);
break;
}
break;
case «Адрес»:
switch (searchField)
{
case «Названию»:
Libraries = Libraries.Where(l => !l.BooksInLibrary.Any(bil => bil.BookId == BookId) && l.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.Adress);
break;
case «Адресу»:
Libraries = Libraries.Where(l => !l.BooksInLibrary.Any(bil => bil.BookId == BookId) && l.Adress.ToUpperInvariant().Contains(search)).OrderBy(b => b.Adress);
break;
}
break;
case «Число уникальных наименований»:
switch (searchField)
{
case «Названию»:
Libraries = Libraries.Where(l => !l.BooksInLibrary.Any(bil => bil.BookId == BookId) && l.Name.ToUpperInvariant().Contains(search)).OrderBy(b => b.TotalUniqueBooks);
break;
case «Адресу»:
Libraries = Libraries.Where(l => !l.BooksInLibrary.Any(bil => bil.BookId == BookId) && l.Adress.ToUpperInvariant().Contains(search)).OrderBy(b => b.TotalUniqueBooks);
break;
}
break;
}
ViewBag.SearchField = searchField;
ViewBag.Search = search;
ViewBag.BookId = BookId;
return PartialView(«_ChooseLibrariesList», Libraries);
}

[Authorize]
public ActionResult ChooseLibrary(int BookId = 0)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
IQueryable<int> availLibIDs = db.UsersInLibrary.Where(uil => uil.UserId == userId).Select(uil => uil.LibraryID);
IQueryable<Library> Libraries = db.Libraries.Where(l => availLibIDs.Contains(l.LibraryId));
ViewBag.BookId = BookId;
return View(Libraries.ToList());
}
}
}

OrderController.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Objects;
using System.Linq;
using System.Net.Mail;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using KP_Library.Functions;
using KP_Library.Models;

namespace KP_Library.Controllers
{
public class OrderController : Controller
{
private LibraryContext db = new LibraryContext();
private UsersContext db_users = new UsersContext();

//
// GET: /Order/IndexForLibrary/2

[Authorize]
public ActionResult IndexForLibrary(int id, string ReturnUrl = «»)
{
var orders = db.Orders.Where(o => o.LibraryId == id).OrderBy(o => o.DateOfOrder).Include(o => o.Library).Include(o => o.Book);
if (orders.Count() == 0)
{
return RedirectToAction(«_EmptyList», new { ReturnUrl = ReturnUrl });
}
return View(orders.ToList());
}

//
// GET: /Order/IndexForUser/2

[Authorize]
public ActionResult IndexForUser(int id, string ReturnUrl = «»)
{
if (!HttpContext.User.IsInRole(«admin») && (int)Membership.GetUser().ProviderUserKey != id)
{
return new KP_Library.Functions.HttpForbiddenResult();
}
var orders = db.Orders.Where(o => o.UserId == id).Include(o => o.Library).Include(o => o.Book);
if (orders.Count() == 0)
{
return RedirectToAction(«_EmptyList», new { ReturnUrl = ReturnUrl });
}
return View(orders.ToList());
}

//
// GET: /Order/Details/5

[Authorize]
public ActionResult Details(int id = 0)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (HttpContext.User.IsInRole(«admin») || db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == id))
{
ViewBag.AdminRight = true;
}
else
{
ViewBag.AdminRight = false;
}
Order order = db.Orders.Find(id);
if (order == null)
{
return HttpNotFound();
}
ViewBag.UserId = order.UserId;
return View(order);
}

//
// GET: /Order/Create/1

[Authorize]
public ActionResult Create(int id)
{
//ViewBag.BookId = new SelectList(db.Books, «BookId», «Name»);
//ViewBag.LibraryId = new SelectList(db.Libraries, «LibraryId», «Name»);
BookInLibrary bil = db.BooksInLibrary.Find(id);
Book book = db.Books.FirstOrDefault(l => l.BookId == bil.BookId);
ViewBag.BookId = book.BookId;
ViewBag.BookName = book.Name;
Library lib = db.Libraries.FirstOrDefault(l => l.LibraryId == bil.LibraryId);
ViewBag.LibraryId = lib.LibraryId;
ViewBag.LibraryName = lib.Name;
return View();
}

//
// POST: /Order/Create

[Authorize]
[HttpPost]
public ActionResult Create(Order order)
{
order.UserId = (int)Membership.GetUser().ProviderUserKey;
//order.UserLogin = Membership.GetUser().UserName;
User user = db_users.Users.Find(order.UserId);
order.UserLastName = user.LastName;
order.UserFirstName = user.FirstName;
if (ModelState.IsValid)
{
db.Orders.Add(order);
db.SaveChanges();
Book book = db.Books.Find(order.BookId);
Library lib = db.Libraries.Find(order.LibraryId);
BookInLibrary bil = book.BooksInLibrary.Intersect(lib.BooksInLibrary).FirstOrDefault();
bil.CurrentQuantity = bil.CurrentQuantity — 1;
db.Entry(bil).State = EntityState.Modified;
db.SaveChanges();
//Талончик
PdfTicket pdf = new PdfTicket();
string filepath = pdf.CreateTicket(order);
//Отправляем письмо
MailMessage mail = new MailMessage();
mail.To.Add(new MailAddress(user.Email));
mail.Subject = «Талон заказа»;
string message = «Здравствуйте, » + user.FirstName + » » + user.LastName + «!»;
message += Environment.NewLine;
message += «Отправляем вам ваш талон заказа.»;
message += Environment.NewLine;
message += «С уважением, администрация АИС «Библиотеки»»;
mail.Body = message;
//if (!string.IsNullOrEmpty(attachFile))
mail.Attachments.Add(new Attachment(filepath));
SmtpClient client = new SmtpClient();
client.Send(mail);
mail.Dispose();
//Удаляем файл.
System.IO.File.Delete(filepath);
//
return RedirectToAction(«IndexForUser», new { id = order.UserId });
}

ViewBag.BookId = new SelectList(db.Books, «BookId», «Name», order.BookId);
ViewBag.LibraryId = new SelectList(db.Libraries, «LibraryId», «Name», order.LibraryId);
return View(order);
}

//
// GET: /Order/Edit/5

[Authorize]
public ActionResult Edit(int id = 0)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (!HttpContext.User.IsInRole(«admin») && !db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == id))
{
return new HttpForbiddenResult();
}
Order order = db.Orders.Find(id);
if (order == null)
{
return HttpNotFound();
}
ViewBag.BookId = new SelectList(db.Books, «BookId», «Name», order.BookId);
ViewBag.LibraryId = new SelectList(db.Libraries, «LibraryId», «Name», order.LibraryId);
ViewBag.UserId = order.UserId;
return View(order);
}

//
// POST: /Order/Edit/5

[Authorize]
[HttpPost]
public ActionResult Edit(Order order)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (!HttpContext.User.IsInRole(«admin») && !db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == order.LibraryId))
{
return new HttpForbiddenResult();
}
if (order.DateOfReturn != null)
{
order.Returned = true;
Book book = db.Books.Find(order.BookId);
Library lib = db.Libraries.Find(order.LibraryId);
BookInLibrary bil = book.BooksInLibrary.Intersect(lib.BooksInLibrary).FirstOrDefault();
bil.CurrentQuantity = bil.CurrentQuantity + 1;
db.Entry(bil).State = EntityState.Modified;
db.SaveChanges();
}
if (ModelState.IsValid)
{
db.Entry(order).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction(«Details», new { id = order.OrderId });
}
ViewBag.BookId = new SelectList(db.Books, «BookId», «Name», order.BookId);
ViewBag.LibraryId = new SelectList(db.Libraries, «LibraryId», «Name», order.LibraryId);
return View(order);
}

//
// POST: /Order/Delete/5

[Authorize]
[HttpPost, ActionName(«Delete»)]
public ActionResult DeleteConfirmed(int id)
{
Order order = db.Orders.Find(id);
int userId = (int)Membership.GetUser().ProviderUserKey;
if (userId != order.UserId || (!order.Returned && order.DateOfIssue != null))
{
return new HttpForbiddenResult();
}
if (!order.Returned)
{
Book book = db.Books.Find(order.BookId);
Library lib = db.Libraries.Find(order.LibraryId);
BookInLibrary bil = book.BooksInLibrary.Intersect(lib.BooksInLibrary).FirstOrDefault();
bil.CurrentQuantity = bil.CurrentQuantity + 1;
db.Entry(bil).State = EntityState.Modified;
db.SaveChanges();
}
db.Orders.Remove(order);
db.SaveChanges();
return RedirectToAction(«IndexForUser», new { id = order.UserId });
}

[Authorize]
[HttpGet]
public PartialViewResult DeleteConfirmation(string id)
{
ViewBag.OrderId = id;
return PartialView(«_DeleteConfirmation»);
}

protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}

[Authorize]
public ActionResult IssuedBooks(int id, string ReturnUrl = «»)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (!User.IsInRole(«admin») && !db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == id))
{
return new HttpForbiddenResult();
}
IEnumerable<Order> orders = db.Orders.Where(o => o.LibraryId == id && o.DateOfIssue != null).Include(o => o.Library).Include(o => o.Book);
if (orders.Count() == 0)
{
return RedirectToAction(«_EmptyList», new { ReturnUrl = ReturnUrl });
}
return View(orders.OrderBy(o => o.UserLastName).ToList());
}

[Authorize]
public ActionResult DebtorsList(int id, string ReturnUrl = «»)
{
int userId = (int)Membership.GetUser().ProviderUserKey;
if (!User.IsInRole(«admin») && !db.UsersInLibrary.Any(ul => ul.UserId == userId && ul.LibraryID == id))
{
return new HttpForbiddenResult();
}
List<int> ordersId = new List<int>();
List<Order> orders = new List<Order>();
foreach (var order in db.Orders)
{
if (!order.Returned && order.ReturnBefore != null && DateTime.Compare(DateTime.Now.Date, (DateTime)order.ReturnBefore) > 0)//Книга не возвращена в срок
{
ordersId.Add(order.OrderId);
}
}
foreach (var ordId in ordersId)
{
orders.Add(db.Orders.Where(o => o.OrderId == ordId).Include(o => o.Library).Include(o => o.Book).FirstOrDefault());
}
if (orders.Count() == 0)
{
return RedirectToAction(«_EmptyList», new { ReturnUrl = ReturnUrl });
}
return View(orders.OrderBy(o => o.UserLastName));
}

[Authorize]
public ActionResult _EmptyList(string ReturnUrl)
{
ViewBag.ReturnUrl = ReturnUrl;
return View();
}

}
}

UserController.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using KP_Library.Models;

namespace KP_Library.Controllers
{
public class UserController : Controller
{
private UsersContext usersDb = new UsersContext();

//
// GET: /User/

//

public PartialViewResult _UserData()
{
int userId = (int)Membership.GetUser().ProviderUserKey;
KP_Library.Models.User user = usersDb.Users.Find(userId);
return PartialView(user);
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ManageData(User user)
{
if (ModelState.IsValid)
{
usersDb.Entry(user).State = EntityState.Modified;
usersDb.SaveChanges();
return RedirectToAction(«Manage», «Account», new { Message = «Личные данные изменены.» });
}
return RedirectToAction(«Manage», «Account»,new { Message = «Ошибка при заполнении формы.» });
}

}
}


Подборка по базе: Начинающему библиотекарю.doc, Лучший библиотекарь_Гимназия.doc, стат отчет библиотека.docx, Ядова К. 05.06. Инженерные сети. Городская водопроводная сеть, к, Азбука библиотекаря.pdf, Библиотековедение. Основные виды деятельности в библиотечном дел, ПЗ 1 — библиотека.docx, ЭССЕ по практике -Научная Библиотека ПОИ-Б-03 СУША Я. С. .docx, Сценарий Городская боль 2.docx, Должностная инструкция библиотекаря в школе.docx


Федеральное государственное бюджетное

образовательное учреждение

высшего профессионального образования

«Сибирский государственный аэрокосмический университет

имени академика М.Ф. Решетнёва» (СибГАУ)
Аэрокосмический колледж

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту
по дисциплине «Технология разработки программного обеспечения»

на тему: «Городская библиотека»

Выполнил студент группы П-20-19

Очной формы обучения

Гильденштерн Сергей Вячеславович

Руководитель:

преподаватель, Гвоздиевская О.С.

Дата сдачи: «____» _________ 2022 г.

Дата защиты: «____» _________ 2022 г.

Оценка: __________________
__________________ (подпись руководителя)

Красноярск 2022 г.

  1. МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
  2. федеральное государственное бюджетное образовательное учреждение
  3. высшего образования
  4. «Сибирский государственный университет науки и технологий
  5. имени академика М.Ф. Решетнева»

Аэрокосмический колледж

Задание на курсовой проект
Разработать программное обеспечение АИС «Городская библиотека»

Исходные данные: Формуляр;

Разработать: 1) Удобный пользовательский интерфейс;

2) Указанные методы и

сделать возможным подключение

остальных методов, оценить

точность каждого метода;

3) Полное тестирование ППП;

4) Документацию на ППП;

5) Контрольные примеры.
Дата выдачи задания «____» ____________ 2022 г.

Руководитель Гвоздиевская О.С.

Исполнитель

студент группы П-20-19 Гильденштерн С.В.

Срок защиты проекта «____» ____________ 2022 г.

Содержание

Введение………………………………………………………………………………4

1. Разработка системного проекта………………………………………………..…5

1.1 Назначение разработки…………………………………………………………..5

1.2 Требования к функциональным характеристикам……………………………..5

1.3 Требования к надежности и безопасности………………………………………5

1.4 Требования к составу и параметрам технических средств……………………5

1.5 Требования к информационной и программной совместимости………………6

2. Разработка технического проекта

2.1 Анализ требований и определение спецификаций программного обеспечения

2.2 Проектирование модели данных

2.3 Детальное проектирование программного обеспечения

3. Реализация

3.1 Обоснование выбора средств разработки

3.2 Описание основных программных модулей

4. Тестирование программного продукта

5. Документация пользователя

5.1 Руководство пользователя

5.2 Справочная система

Заключение

Список литературы

Приложения А Контрольные примеры

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

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

Пояснительная записка содержит _ листов, в том числе _ таблиц, _ рисунков, _ схем, _ использованных источников, _ приложения.

Разработка системного проекта
Назначение разработки
Программа будет использоваться в библиотеке двумя группами пользователей: библиотекарь и посетитель.

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

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

Для посетителя библиотеки программа предоставляет следующие возможности:

  • поиск книг;
  • просмотр информации о книгах;
  • добавление и удаление книг из «корзины»;
  • создание заявки на получение книг.

Для библиотекаря программа предоставляет следующие возможности:

  • просмотр заявок посетителей;
  • выдача книг посетителям;
  • приём книг посетителей.

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

Компьютер библиотекаря, включающий в себя:

  • процессор x86 с тактовой частотой, не менее 1 ГГц;
  • оперативную память объемом, не менее 2 Гб;
  • видеокарту, монитор, мышь, клавиатура.

Компьютер посетителя, включающий в себя:

  • процессор x86 с тактовой частотой, не менее 1 ГГц;
  • оперативную память объемом, не менее 2 Гб;
  • видеокарту, монитор, мышь.

Компьютер для СУБД, включающий в себя:

  • процессор x86 с тактовой частотой, не менее 2 ГГц;
  • оперативную память объемом, не менее 8 Гб.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *