Вы находитесь на странице: 1из 84

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

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


МОСКОВСКИЙ ЭЛЕКТРОННО-ТЕХНОЛОГИЧЕСКИЙ ТЕХНИКУМ
ГОСУДАРСТВЕННОЙ АКАДЕМИИ ИННОВАЦИЙ

Допустить к защите
« » ____________________

ДИПЛОМНЫЙ ПРОЕКТ

НА ТЕМУ: «Разработка системы ведения и учета протоколов совещаний»

Дипломант: Смирнов Глеб Андреевич

Руководитель дипломного проекта: Шипиев Роман Николаевич

Консультанты:

По технологической части: Шипиев Роман Николаевич

По экономической части: Баранов Виталий Петрович

Рецензент: Ерёменко Василий Витальевич

2008г.
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ДОПОЛНИТЕЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
МОСКОВСКИЙ ЭЛЕКТРОННО-ТЕХНОЛОГИЧЕСКИЙ ТЕХНИКУМ
ГОСУДАРСТВЕННОЙ АКАДЕМИИ ИННОВАЦИЙ

«УТВЕРЖДАЮ»
Зам. директора по учебной работе.
______________________________
«______» _______________ 2008 г.

ЗАДАНИЕ
НА ДИПЛОМНЫЙ ПРОЕКТ

Студенту Смирнову Глебу Андреевичу группы П-401 специальности 230105

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


совещаний»

Техническое задание на проектирование


Постановка задачи, входная и выходная информация

Целью дипломного проекта является создание системы по ведению и


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

1) Предоставлять возможности ввода информации о предстоящих


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

2) Предоставлять информацию о будущих, прошедших и отмененных


совещаниях.

3) Предоставлять информацию о совещаниях в формате RSS.

Входными данными системы являются:

— реквизиты участников совещания;

— реквизиты совещания.

Выходными данными системы являются:

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

— протоколы состоявшихся совещаний.


3
RU.МЭТТ.18108-01 84 01

СОДЕРЖАНИЕ
Введение.......................................................................................................................5
1 Общая часть..............................................................................................................6
1.1 Постановка задачи.............................................................................................6
1.1.1 Назначение задачи......................................................................................6
1.1.2 Технико-математическое описание задачи...............................................6
1.1.3 Требования к программе..........................................................................12
1.1.4 Требования к составу и параметрам технических средств...................12
1.2 Описание языка программирования..............................................................14
1.2.1 Выбор языка программирования............................................................14
1.2.2 Элементы языка программирования.......................................................15
2 Специальная часть..................................................................................................32
2.1 Описание алгоритма........................................................................................32
2.1.1 Схемы алгоритма......................................................................................32
2.1.2 Описание работы программы..................................................................38
2.2 Текст программы.............................................................................................44
2.2.1 Схема базы данных (файл db/schema.rb)................................................44
2.2.2 Контроллеры системы..............................................................................44
2.2.3 Модели системы.......................................................................................49
2.3 Инструкция на выполнение программы........................................................50
2.3.1 Общие сведения........................................................................................50
2.3.2 Вызов и загрузка.......................................................................................50
2.3.3 Входные данные........................................................................................51
2.3.4 Выходные данные.....................................................................................51
2.3.5 Сообщения программы............................................................................51
2.3.6 Техника безопасности при работе на компьютере................................52
2.4 Описание процесса отладки программы.......................................................53
2.4.1 Методы отладки........................................................................................53
2.4.2 Тестирование.............................................................................................55
4
RU.МЭТТ.18108-01 84 01

2.4.3 Контрольный пример...............................................................................58


3 Экономическая часть..............................................................................................67
3.1 Расчет системы................................................................................................67
3.1.1 Материальные затраты.............................................................................67
3.1.2 Заработная плата разработчиков.............................................................67
3.1.3 Часовая тарифная ставка..........................................................................67
3.1.4 Расчет стоимости основных фондов.......................................................68
3.2 Расчет затрат на тиражирование (производство) системы..........................71
3.2.1 Расчет стоимости основных фондов.......................................................71
3.2.2 Расчет производственной мощности выпуска продукции на год........72
3.2.3 Расчет материальных затрат....................................................................72
3.2.4 Расчет заработной платы специалистов и сотрудников........................73
3.2.5 Расчет сметы цеховых расходов на год...................................................74
3.2.6 Калькуляция себестоимости выпускаемой продукции.........................75
3.2.7 Диаграмма удельного веса затрат на производство (тиражирование)
системы...............................................................................................................77
3.2.8 Определение точки безубыточности графическим методом................78
3.2.9 Определение маржинального дохода графическим методом...............78
3.2.10 Определение критического объема производства в натуральных единицах
графическим методом.......................................................................................79
3.2.11 Определение критической суммы товарной продукции графическим
методом...............................................................................................................79
3.2.12 Сводная таблица технико-экономических показателей......................80
3.3 Вывод................................................................................................................81
Заключение.................................................................................................................82
Список используемых источников...........................................................................83
5
RU.МЭТТ.18108-01 84 01

ВВЕДЕНИЕ
Разработка системы ведения и учета протоколов совещаний ведется на
основании приказа ФГОУ ДПО МЭТТ ГАИ № 43-С от 04.04.08 «Об утверждении
тем дипломных проектов, о назначении руководителей дипломных проектов».

Полное название программы: система ведения и учета протоколов совещаний.

Краткое название программы: система.


6
RU.МЭТТ.18108-01 84 01

1 ОБЩАЯ ЧАСТЬ

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

1.1.1 Назначение задачи


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

Главной задачей разрабатываемой системы является задача информирования


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

1.1.2 Технико-математическое описание задачи


Программа вычисления должна быть реализована на базе следующих
технологий:

— протокол передачи данных HTTP[1];

— инструментарий разработки Ruby on Rails[2];

— трехуровневая архитектура MVC[3];

— технология ORM[4];

— язык разметки гипертекста HTML[5];

— формат RSS[6].

1.1.2.1 Протокол передачи данных HTTP


HTTP (от англ. HyperText Transfer Protocol — «протокол передачи
гипертекста») — сетевой протокол прикладного уровня для передачи файлов. В
стеке TCP/IP для HTTP зарезервированы порты 80 и 8080 транспортных протоколов
TCP и UDP (на практике используется только первый).

Основным назначением HTTP является передача веб-страниц (текстовых


файлов с разметкой HTML), хотя с помощью него с успехом передаются и другие
файлы, как связанные с веб-страницами (изображения и приложения), так и не
связанные с ними.
7
RU.МЭТТ.18108-01 84 01

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


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

1.1.2.2 Инструментарий разработки Ruby on Rails


Ruby on Rails — объектно-ориентированный программный каркас для
создания веб-приложений, написанный на языке программирования Ruby[7]. Ruby
on Rails предоставляет каркас модель-представление-контроллер[3] (Model-View-
Controller) для веб-приложений, а также обеспечивает их интеграцию с веб-сервером
и сервером базы данных.

Ruby on Rails является открытым программным обеспечением и


распространяется под лицензией MIT[8].

1.1.2.2.1 Принципы

Инструментарий Ruby on Rails определяет следующие принципы разработки


приложений:

– приложения не должны определять собственную архитектуру, поскольку


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

– язык Ruby позволяет использовать легко читаемую нотацию для


определения семантики приложений (таких как отношения между таблицами в
базе данных);

– инструментарий Ruby on Rails предоставляет механизмы повторного


использования, позволяющие минимизировать дублирование кода в приложениях
(принцип Don’t Repeat Yourself);

– по умолчанию используются соглашения по конфигурации, типичные для


большинства приложений (принцип Convention over configuration). Явная
спецификация конфигурации требуется только в нестандартных случаях.
8
RU.МЭТТ.18108-01 84 01

1.1.2.2.2 Архитектура

Основными компонентами приложений Ruby on Rails являются модель


(model), представление (view) и контроллер (controller).

Модель предоставляет остальным компонентам приложения объектно-


ориентированное представление данных (таких как каталог продуктов или список
заказов). Объекты модели осуществляют загрузку и сохранение данных в
реляционной базе данных, а также реализуют бизнес-логику.

Благодаря возможностям динамической типизации в языке Ruby разработчику


достаточно наследовать свой класс модели от базового класса ActiveRecord::Base.
Ruby on Rails автоматически связывает классы модели с таблицами в базе данных и
создает атрибуты объектов для соответствующих полей таблицы.

Представление создает пользовательский интерфейс для отображения


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

В Ruby on Rails представление описывается при помощи шаблонов RHTML.


Они представляют собой файлы HTML с дополнительными включениями
фрагментов кода Ruby (Embedded Ruby или ERb). Вывод, сгенерированный
встроенным кодом Ruby, включается в текст шаблона, после чего получившаяся
страница HTML возвращается пользователю. Представления могут использовать
фрагменты других представлений и, в свою очередь, быть включенными в шаблон
(layout) более высокого уровня.

Контроллер — основной компонент, отвечающий за взаимодействие с


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

Контроллером в Ruby on Rails является класс, наследованный от


ActionController::Base. Открытые методы контроллера являются так называемыми
9
RU.МЭТТ.18108-01 84 01

действиями (actions). Action часто соответствует отдельному представлению.


Например, по запросу пользователя admin/list будет вызван метод list класса
AdminController и затем использовано представление list.rhtml.

1.1.2.2.3 Интеграция

Ruby on Rails может работать с Apache, Lighttpd или любым другим веб-
сервером, поддерживающим FastCGI. Для разработки и отладки часто используется
встроенный в Ruby веб-сервер WEBrick или Mongrel.

В качестве сервера базы данных поддерживаются MySQL, Firebird,


PostgreSQL, IBM DB2, Oracle и Microsoft SQL Server. Также поддерживается
встраиваемая база данных SQLite.

1.1.2.3 Архитектура MVC


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

Шаблон MVC позволяет разделить данные, представление и обработку


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

– модель (model). Модель предоставляет данные (обычно для View), а также


реагирует на запросы (обычно от контролера), изменяя свое состояние;

– представление (view). Отвечает за отображение информации


(пользовательский интерфейс);

– контролер (controller). Интерпретирует данные, введенные пользователем, и


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

Важно отметить, что как представление, так и контролер зависят от модели.


Однако модель не зависит ни от представления, ни от контролера. Это одно из
ключевых достоинств подобного разделения. Оно позволяет строить модель
10
RU.МЭТТ.18108-01 84 01

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

1.1.2.4 Технология ORM


ORM — (англ. Object-relational mapping) технология в программировании,
которая связывает базы данных с концепциями объектно-ориентированных языков
программирования, создавая (как результат) «виртуальную объектную базу данных».

С точки зрения программиста, система должна выглядеть как постоянное


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

На практике все не так просто и очевидно. Все системы ORM обычно


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

Но ORM позволяет избавить программиста от написания большого


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

1.1.2.5 Язык разметки гипертекста HTML


HTML (от англ. Hypertext Markup Language — «язык разметки гипертекста»)
— это стандартный язык разметки документов во Всемирной паутине. Практически
все веб-страницы создаются при помощи языка HTML или его последователя —
XHTML.

Формально, HTML является приложением SGML (стандартного обобщённого


языка разметки) и соответствует международному стандарту
ISO 8879.
11
RU.МЭТТ.18108-01 84 01

Язык HTML был разработан британским учёным Тимом Бернерсом-Ли


приблизительно в 1991—1992 годах в стенах Европейского совета по ядерным
исследованиям в Женеве (Швейцария). HTML создавался как язык для обмена
научной и технической документацией, пригодный для использования людьми, не
являющимися специалистами в области вёрстки. HTML успешно справлялся с
проблемой сложности SGML путём определения небольшого набора структурных и
семантических элементов (размечаемых «тегами»), служащих для создания
относительно простых, но красиво оформленных документов. Помимо упрощения
структуры документа, в HTML внесена поддержка гипертекста. Мультимедийные
возможности были добавлены позже. Изначально язык HTML был задуман и создан
как средство структурирования и форматирования документов без их привязки к
средствам воспроизведения (отображения). В идеале, текст с разметкой HTML
должен был без стилистических и структурных искажений воспроизводиться на
оборудовании с различной технической оснащенностью (цветной экран
современного компьютера, монохромный экран органайзера, ограниченный по
размерам экран мобильного телефона или устройства и программы голосового
воспроизведения текстов). Однако, современное применение HTML очень далеко от
его изначальной задачи. С течением времени, основная идея
платформонезависимости языка HTML была отдана в своеобразную жертву
современным потребностям в мультимедийном и графическом оформлении.

1.1.2.6 Формат RSS


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

В разных версиях аббревиатура RSS имела разные расшифровки:

— Rich Site Summary (RSS 0.9x) — обогащённая сводка сайта;


12
RU.МЭТТ.18108-01 84 01

— RDF Site Summary (RSS 0.9 и 1.0) — сводка сайта с применением


инфраструктуры описания ресурсов;

— Really Simple Syndication (RSS 2.x) — очень простое приобретение


информации.

Обычно с помощью RSS 2.0 даётся краткое описание новой информации,


появившейся на сайте, и ссылка на её полную версию. Интернет-ресурс в формате
RSS называется RSS-каналом, RSS-лентой или RSS-фидом.

Многие современные браузеры, почтовые клиенты и Интернет-пейджеры


умеют работать с RSS-лентами, среди них Safari, Maxthon, Miranda, Mozilla Firefox,
Mozilla Thunderbird, Opera, Microsoft Internet Explorer (начиная с 7-й версии). Кроме
того, существуют специализированные приложения (RSS-агрегаторы), собирающие
и обрабатывающие информацию RSS-каналов. Также очень популярны веб-
агрегаторы, представляющие собой сайты по сбору и отображению RSS-каналов,
такие как Яндекс.Лента, Google Reader, Новотека и Bloglines.

1.1.3 Требования к программе


Система должна выполнять следующие функции:

— предоставлять возможности ввода информации о предстоящих


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

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


совещаниях.

— предоставлять информацию о совещаниях в формате RSS.

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


Требования к параметрам программно-технических средств для серверной
части:

– процессор с производительностью не ниже Intel Core 2 Duo;

– операционная система семейства Unix ( рекомендуется ), MacOS или


13
RU.МЭТТ.18108-01 84 01

Windows;

– оперативное запоминающее устройство не менее 1 Гб;

– наличие свободного пространства на накопителе жестких магнитных


дисков не менее 200Мб;

– сетевая карта;

– настроенный сетевой интерфейс;

– установленный и настроенный интерпретатор Ruby версии не ниже 1.8.6;

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


Ruby on Rails версии не ниже 2.0.2;

– установленная и настроенная СУБД ( PostgreSQL, MySQL, SQLite, Oracle,


DB2, FireBird, FrontBase, SQLServer, SyBase ).

Требования к параметрам программно-технических средств для клиентской


части:

– процессор с производительностью не ниже Intel Core 2 Duo;

– операционная система семейства MacOS, Unix или Windows;

– оперативное запоминающее устройство не менее 1 Гб;

– видеокарта;

– клавиатура;

– монитор;

– сетевая карта;

– настроенный сетевой интерфейс;

– наличие веб-обозревателя (рекомендуется Microsoft Internet Explorer версии


не ниже 7).
14
RU.МЭТТ.18108-01 84 01

1.2 Описание языка программирования

1.2.1 Выбор языка программирования


Среди множества языков программирования для реализации системы выбор
стоял между такими языками, как Python[9], PHP[10] и Ruby[7]. Все они имеют
следующие общие характеристики:

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


приложений, базирующихся на протоколе HTTP (web-приложения);

— поддерживаются практически всеми web-серверами;

— имеют обширные библиотеки и инструментарии для разработки web-


приложений;

— обладают в той или иной степени объектно-ориентированными


возможностями;

— являются динамическими языками программирования


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

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


Windows, Unix, MacOS, BeOS и других;

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


более компактный код.

Выбор остановился на Ruby, чему способствовали следующие моменты:

— язык Ruby очень прост в изучении по сравнению со всеми остальными


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

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

— язык Ruby отличается чрезвычайной предсказуемостью: ни на одном


другом языке невозможно написать достаточно большую программу и
увидеть, что она работает с первой попытки;
15
RU.МЭТТ.18108-01 84 01

— в языке Ruby прекрасно реализована работа с файловой системой


(платформонезависимая, со своим языком шаблонов);

— это язык, с которым исключительно приятно иметь дело (по сугубо


субъективному мнению автора этой работы).

Такие языки программирования, как C, C++, C#, Pascal, Delphi, BASIC, Java и
другие C-подобные даже не рассматривались в виду низкой продуктивности при
разработке веб-приложений.

1.2.2 Элементы языка программирования


При создании системы был использован язык программирования Ruby.
Данный выбор обусловлен достоинствами и преимуществами этого языка
программирования над другими языками (динамичность, «все - объект»,
лаконичность синтаксиса, поддержка элементов функционального
программирования и так далее[11]).

1.2.2.1 Основные положения языка


— комментарий начинается с символа "решетка" ( # ) и действует до конца
строки (EOL);

— программа на Ruby состоит из последовательности выражений;

— выражения могут разделяться символом "точка с запятой" ( ; ) или


символом конца строки (EOL), кроме случая незаконченного выражения
(например "+" в конце строки);

— «обратный слеш» (\) в конце строки позволяет явно указать, что


выражение незаконченно и окончания следует искать в последующих строках.
16
RU.МЭТТ.18108-01 84 01

1.2.2.2 Зарезервированные слова

Т а б л и ц а 1 — список зарезервированных слов


alias and BEGIN begin break case class def defined
do else elsif END end ensure false for if
in module next nil not or redo rescue retry
return self super then true undef unless until when
while yield

1.2.2.3 Типы данных


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

1.2.2.4 Числа
Существуют следующие формы задания чисел: 123, 1_234, 123.45, 1.2e-3,
0xffff (шестнадцатеричное), 0b01011 (двоичное), 0377 (восьмеричное).

Помимо перечисленных, существуют другие (неявные) формы задания чисел:

— ?a ASCII код символа "a";

— ?C-a Код сочетания Ctrl+a;

— ?M-a Код сочетания Alt+a;

— ?M-C-a Код сочетания Ctrl+Alt+a;

— :symbol Целое значение, соответствующее идентификаторам,


переменным и операторам.

1.2.2.5 Строки
Существуют следующие формы задания строк:

— 'без возможности вставки (interpolation)';

— "#{interpolation}, #{$interpolation}, #{@interpolation} и управл.


последоват.\n";
17
RU.МЭТТ.18108-01 84 01

— %q! без возможности вставки (interpolation)!;

— %!Есть вставки и управляющие последовательности!;

— %Q(Есть вставки и управляющие последовательности);

— `echo выполнение команды ОС со вставками и управляющими


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

— %x/echo выполнение команды ОС со вставками и управляющими


последовательностями/.

1.2.2.6 Управляющие последовательности


Используются следующие управляющие последовательности: \t (табуляция), \n
(переход на новую строку), \r (возврат каретки), \f (подача страницы), \b (удаление
последнего символа), \a (звонок), \e (клавиша Отмена), \s (пробел), \nnn
(восьмеричное число) , \nn (шестнадцатеричное число), \сx (Ctrl+x), \C-x (Ctrl
+x), \M-x (Alt+x), \M-\C-x (Ctrl+Alt+x)

1.2.2.7 Диапазоны
Используются следующие формы задания диапазонов:

— 1..10;

— 'a'..'z';

— (1..10) === 5 => true;

— (1..10) == 15 => false.

1.2.2.8 Регулярные выражения


Используются следующие формы задания регулярных выражений:

— /обычное регулярное выражение/i;

— %r|альтернативная форма задания регулярных выражений|.

Задействованы следующие элементы регулярных выражений:

— . любой символ исключая перевод строки;


18
RU.МЭТТ.18108-01 84 01

— [] любой символ из указанных;

— [^ ] любой символ, кроме указанных;

— * 0 или более повторений предыдущего регулярного выражения;

— *? 0 или более повторений предыдущего регулярного выражения


(скупой);

— + 1 или более повторений предыдущего регулярного выражения;

— +? 1 или более повторений предыдущего регулярного выражения


(скупой);

— ? 0 или 1 повторений предыдущего регулярного выражения;

— | альтернатива;

— () группировка регулярных выражений;

— ^ начало строки или текста;

— $ конец строки или текста;

— #{m,n} не меньше m и не больше n повторений предыдущего


регулярного выражения;

— #{m,n}? не меньше m и не больше n повторений предыдущего


регулярного выражения (жадный);

— \A начало строки;

— \b граница слова;

— \B не граница слова;

— \d цифра, то есть [0-9];

— \D не цифра, то есть [^0-9];

— \s пробельный (whitespace) символ, то есть [ \t\n\r\f];

— \S не пробельный символ, то есть [^ \t\n\r\f];

— \w символ, то есть [0-9a-zA-Z_];


19
RU.МЭТТ.18108-01 84 01

— \W не символ, то есть [^0-9a-zA-Z_];

— \z конец текста;

— \Z конец текста или позиция перед завершающим переводом строки;

— (?# ) комментарий;

— (?: ) группировка без сохранения;

— (?= ) позитивная опережающая проверка;

— (?! ) негативная опережающая проверка;

— (?ix-ix) включение/отключение режимов для оставшейся части


выражения;

— (?ix-ix: ) включение/отключение режимов для содержимого скобок;

1.2.2.9 Массивы
Массивы могут быть заданы одним из следующих способов:

— [1, 2, 3];

— %w(foo bar baz).

Индексы в массивах могут быть отрицательными и отсчет тогда будет вестись


от конца массива (то есть -1 означает "последний элемент").

1.2.2.10 Словари
Словари (они же ассоциативные массива, они же хеши) могут быть заданы
одним из следующих способов:

— { 1 => 2, 2 => 4, 3 => 6 };

— { key => value, ... }.

1.2.2.11 Файлы
Работа с файлами осуществляется при помощи следующих методов:

— File.join(p1,p2,p3, ... ,pN) => "p1/p2/.../pN" платформонезависимый путь;


20
RU.МЭТТ.18108-01 84 01

— File.new(path,modestring="r") => file;

— File.new(path,modenum[,permnum])> file/li>;

— File.open(fileName,aModeString="r"){ |file| block } -> block_result;

— File.open(fileName[,aModeNum [, aPermNum]]){ |file| block } ->


block_result;

— IO.foreach(path,setstring=$/){ |line| block } -> block_result;

— IO.readlines( path ) => array;

— IO.read( path ) => string.

1.2.2.12 Строка для задания режима чтения записи файла


— r чтение с начала файла (режим по умолчанию);

— r+ чтение-запись с начала файла;

— w обнуление или создание файла для записи;

— w+ обнуление или создание файла для чтения-записи;

— a указатель устанавливается на конец файла или создается и


открывается на запись;

— a+ указатель устанавливается на конец файла или создается и


открывается на чтение-запись;

— b (только для DOS/Windows) двоичный режим чтения-записи


(используется совместно с другими режимами).

1.2.2.13 Переменные
— $global_variable глобальные переменные;

— @instance_variable переменные объекта;

— @@class_variable переменные класса;

— [OtherCLass::]CONSTANT константа

— local_variable локальная переменная.


21
RU.МЭТТ.18108-01 84 01

1.2.2.14 Псевдопеременные
— self возвращает указатель на текущий объект;

— nil единственный объект класса NilClass (эквивалентен false) и


имеет смысл "пустоты";

— true единственный объект класса TrueClass и имеет смысл


"истины";

— false единственный объект класса FalseClass и имеет смысл


"лжи";

— __FILE__ имя обрабатываемого в текущий момент файла;

— __LINE__ текущий номер строки в обрабатываемом исходном файле.

1.2.2.15 Предопределенные переменные


— $! последнее сообщение об ошибке;

— $@ местоположение ошибки (массив с трассировочным


стеком);

— $& текст совпадения (регулярные выражения);

— $` текст перед совпадением (регулярные выражения);

— $' текст после совпадения (регулярные выражения);

— $+ текст, совпавший с последней закрытой парой


круглых скобок (регулярные выражения);

— $n n-тое подвыражение в последнем совпадении, то же


самое, что и $~[n]. (регулярные выражения);

— $~ последнее совпадение с регулярным выражением в


виде массива подвыражений;

— $= флаг зависимости от регистра символов;

— $/ разделитель во входных строках;

— $ разделитель в выходных строках;


22
RU.МЭТТ.18108-01 84 01

— $, разделитель для print и Array#join;

— $; разделитель по умолчанию для String#split;

— $. номер последней строки, прочитанной


интерпретатором;

— $< результат виртуальной конкатенации файлов, имена


которых переданы в командной строке;

— $> источник вывода по умолчанию для print, printf (по


умолчанию равен $stdout);

— $_ последняя строка, прочитанная gets или readline;

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

— $* аргументы командной строки в виде массива (аналог


args);

— $$ id процесса интерпретатора;

— $? статус завершения последнего дочернего процесса;

— $: массив путей для загрузки библиотек и модулей;

— $" массив с именами подключенных библиотек;

— $DEBUG если интерпретатор запущен с опцией -d, то равен


true (только для чтения);

— $FILENAME текущий обрабатываемый файл при использовании


$<, аналогично вызову $<.filename;

— $LOAD_PATH псевдоним для $:;

— $stderr текущий стандартный поток ошибок;

— $stdin текущий стандартный поток ввода;

— $stdout текущий поток вывода;

— $VERBOSE если интерпретатор запущен с опцией -v, то равен


23
RU.МЭТТ.18108-01 84 01

true (только для чтения);

— $-0 псевдоним для $/;

— $-a если интерпретатор запущен с опцией -a, то равен


true (только для чтения);

— $-d псевдоним для $DEBUG;

— $-F псевдоним для $;;

— $-i удерживает расширения, по умолчанию nil;

— $-I псевдоним для $:;

— $-l если интерпретатор запущен с опцией -l, то равен true


(только для чтения);

— $-p если интерпретатор запущен с опцией -p, то равен


true (только для чтения);

— $-v псевдоним для $VERBOSE.

1.2.2.16 Предопределенные глобальные константы


— TRUE псевдоним для true;

— FALSE псевдоним для false;

— NIL псевдоним для nil;

— STDIN псевдоним для $stdin;

— STDOUT псевдоним для $stdout;

— STDERR псевдоним для $stderr;

— ENV словарь, который содержит переменные


окружения;

— ARGF псевдоним для $<;

— ARGV псевдоним для $*;

— DATA указатель на область после __END__;


24
RU.МЭТТ.18108-01 84 01

— VERSION строка с версией интерпретатора;

— RUBY_RELEASE_DATE строка с датой выпуска интерпретатора;

— RUBY_PLATFORM идентификатор платформы.

1.2.2.17 Выражения
Элементом выражения могут быть базовые типы (см. выше), команда shell,
переменная, константа или вызов метода.

1.2.2.18 Операторы и приоритеты (в порядке убывания)


— ::;

— [];

— **;

— - (унарный), + (унарный), !, ~;

— *, /, %;

— +, -;

— <<, >>;

— &;

— |, ^;

— >, >=, <, <=;

— <=>, ==, ===, !=, =~, !~;

— &&;

— ||;

— .., ...;

— = (+=, -= ...);

— not;

— and, or.
25
RU.МЭТТ.18108-01 84 01

Почти все представленные выше операторы являются методами (т.е. их можно


переопределить), кроме следующих: =, .. , ... , !, not, &&, and, ||, or, !=, !~. В добавок
ко всему, над составными операторами (то есть += и др.) пользователь не властен (то
есть зависит от метода +, в случае с +=).

1.2.2.19 Управляющие конструкции


Существуют следующие условные конструкции:

if логическое_выражение [then]
программный_код
elsif логическое_выражение [then]
программный_код
else
программный_код
end

unless логическое_выражение [then]


программный_код
else
программный_код
end

программный_код unless логическое_выражение

программный_код if логическое_выражение

case выражение_для_проверки
when шаблон [, шаблон]... [then]
программный_код
when шаблон [, шаблон]... [then]
программный_код
[else
программный_код]
end

Существуют следующие циклические конструкции:

while логическое_выражение [do]


программный_код
end
26
RU.МЭТТ.18108-01 84 01

until логическое_выражение [do]


программный_код
end

begin
программный_код
end while логическое_выражение

begin
программный_код
end until логическое_выражение

for счетчик[, счетчик]... in множество [do]


программный_код
end

множество.each do | счетчик[, счетчик]... |


программный_код
end

программный_код while логическое_выражение

программный_код until логическое_выражение

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

— break завершает текущий цикл.

— redo начинает текущий цикл сначала.

— next переходит к следующей итерации текущего цикла.

— retry повторяет итерацию без проверки условия для тещего цикла.

1.2.2.20 Вызов метода


Почти все доступные вызовы метода являются опциональными и
следовательно синтаксис вызова не очень простой. Ниже представлено несколько
примеров:

— method;
27
RU.МЭТТ.18108-01 84 01

— obj.method;

— Class::method;

— method(arg1, arg2);

— method(arg1, key1 => val1, key2 => val2, aval1, aval2) #{ блок };

— method(arg1, *[arg2, arg3]) соответствует: method(arg1, arg2, arg3).

Описание использованных элементов:

— invocation := [receiver ('::' | '.')] name [ parameters ] [ block ];

— parameters := ( [param]* [, hashlist] [*array] [&aProc] );

— block := { blockbody } | do blockbody end.

1.2.2.21 Создание класса


Имя класса всегда должно начинаться с большой латинской буквы:

class Identifier [< superclass ]


программный_код
end
# единичный класс (singleton), добавляет метод(ы) к экземпляру класса
class << obj
программный_код
end

1.2.2.22 Создание модуля


module Identifier
программный_код
end

1.2.2.23 Создание метода


def method_name(arg_list, *list_expr, &block_expr)
программный_код
end
# единичный метод
def expr.identifier(arg_list, *list_expr, &block_expr)
программный_код
end

Следует учитывать несколько особенностей:


28
RU.МЭТТ.18108-01 84 01

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

— аргументы могут иметь значения по умолчанию (name=expr);

— method_name может быть символьным оператором;

— объявление метода не может быть вложенным в другой метод;

— методы могут переопределять операторы: .., |, ^, &, <=>, ==, ===, =~, >,
>=, <, <=, +, -, *, /, %, **, <<, >>, ~, +@, -@, [], []= (2 аргумента).

1.2.2.24 Ограничение доступа


Существуют следующие модификаторы доступа:

— public - полностью доступно.

— protected - доступно только внутри класса и внутри непосредственных


потомков.

— private - доступно только внутри класса.

Ограничение на чтение-запись атрибутов (начинаются с @) производится


посредством наличия/отсутствия одноименных методов.

По умолчанию класс не дает доступа к атрибутам своих объектов (начинаются


с @).

Могут использоваться как для явного указания имен методов так и для
разделения класса на "области доступа".

class A
protected
def protected_method
# ничего
end
end

class B < A
public
def test_protected
myA = A.new
myA.protected_method
29
RU.МЭТТ.18108-01 84 01

end
end
b = B.new.test_protected

1.2.2.25 Методы доступа


Класс Module содержит следующие вспомогательные методы:

— attr_reader атрибут[, атрибут]... - создает одноименный метод чтения


значения атрибута;

— attr_writer атрибут[, атрибут]... - создает одноименный метод изменения


значения атрибута (т.е. атрибут=);

— attr атрибут[, разрешение_на_запись] - эквивалентно "attr_reader


атрибут; attr_writer атрибут if разрешение_на_запись";

— attr_accessor атрибут[, атрибут]... - эквивалентно "attr атрибут, TRUE"


для каждого аргумента.

1.2.2.26 Псевдонимы
alias старое_название, новое_название

Создает новое имя метода (новое_название) для старого (старое_название).


старое_название может быть любым существующим методом или оператором, но не
может быть локальной или внутренней константой или именем класса

1.2.2.27 Блоки/замыкания
Блоками являются следующие конструкции:

— do ... end;

— { ... }.

Область видимости переменных объявленных внутри блока ограничена


блоком. Блок может получать аргументы при помощи ключевого слова yield (при
создании метода). Формы записи {} и do/end отличаются тем, что конструкции
do/end применяются преимущественно для циклов, а {} для всего остального.
30
RU.МЭТТ.18108-01 84 01

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

— Kernel#proc;

— Proc#new;

— Вызов метода с аргументом &block.

1.2.2.29 Обработка исключений:


begin
программный_код
[rescue [класс_ошибки [=> трассировка],..]
программный_код]
[else
программный_код]
[ensure
программный_код]
end

Следует обращать внимание на то, что аргументом по умолчанию для rescue


является StandardError, а не Exception.

1.2.2.30 Стандартная библиотека


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

1.2.2.31 Встроенные классы


Разработчику доступны следующие классы: Object, Hash, Symbol, IO, File,
Continuation, File::Stat, Data, NilClass, Exception, StandardError, LocalJumpError,
SystemStackError, ZeroDivisionError, RangeError, FloatDomainError, SecurityError,
ThreadError, IOError, EOFError, ArgumentError, IndexError, RuntimeError, TypeError,
SystemCallError, Errno::*, RegexpError, SignalException, Interrupt, Fatal,
NoMemoryError, ScriptError, LoadError, NameError, SyntaxError, NotImplementedError,
SystemExit, Array, Proc, String, Numeric, Float, Integer, Bignum, Fixnum, Regexp,
Thread, Module, Class, ThreadGroup, Method, UnboundMethod, Struct, Struct::Tms,
31
RU.МЭТТ.18108-01 84 01

TrueClass, Time, Dir, Binding, Range, MatchData, FalseClass.

1.2.2.32 Встроенные модули


Разработчику доступны следующие модули: Comparable, Enumerable, Errno,
FileTest, GC, Kernel, Marshal, Math, ObjectSpace, Precision, Process.

1.2.2.33 Поддержка сокетов


Поддержка сокетов обеспечивается следующими классами: BasicSocket,
IPSocket, TCPSocket, SOCKSSocket, TCPServer, UDPSocket, UNIXSocket, Socket.

1.2.2.34 Поддержка Windows


Для разработчиков, использующих операционную систему Windows
существуют следующие классы: WIN32OLE, WIN32OLE_EVENT, Win32API.
32
RU.МЭТТ.18108-01 84 01

2 СПЕЦИАЛЬНАЯ ЧАСТЬ
2.1 Описание алгоритма

2.1.1 Схемы алгоритма

2.1.1.1 Структурная схема системы

Модели Контроллеры Представления

View View

Report Conference Conference

User RSS RSS

Post Personal Personal

Control Control
33
RU.МЭТТ.18108-01 84 01

2.1.1.2 Схема алгоритма администрирования системы


НАЧАЛО

Авторизация и
аутентификация

Ожидание
события

управлять Управление
совещаниями совещаниями

назначить Назначить новое


совещание совещание

управлять Управление
списком списком
сотрудников сотрудников

управлять Управление
списком списком
должностей должностей

выйти из режима
администрирования

ОСТАНОВ
34
RU.МЭТТ.18108-01 84 01

2.1.1.3 Схема алгоритма управления совещаниями


НАЧАЛО

Вывод
информации о
совещаниях

Ожидание
события

добавить Добавление
совещание нового совещания

отменить
Отмена совещания
совещание

перенести Перенос
совещание совещания

выход

ОСТАНОВ
35
RU.МЭТТ.18108-01 84 01

2.1.1.4 Схема алгоритма назначения нового совещания


НАЧАЛО

Ввод реквизитов
нового
совещания

Выбор
участников
совещания

Добавление нового
совещания

ОСТАНОВ

2.1.1.5 Схема алгоритма переноса совещания


НАЧАЛО

Изменение
реквизитов
совещания

Перенос совещания

ОСТАНОВ
36
RU.МЭТТ.18108-01 84 01

2.1.1.6 Схема алгоритма управления списком сотрудников


НАЧАЛО

Вывод списка
сотрудников

Ожидание
события

удалить Удаление
сотрудника сотрудника

Ввод реквизитов
добавить
нового
сотрудника
сотрудника

Добавление нового
сотрудника

выход

ОСТАНОВ
37
RU.МЭТТ.18108-01 84 01

2.1.1.7 Схема алгоритма управления списком должностей


НАЧАЛО

Вывод списка
должностей

Ожидание
события

удалить Удаление
должность должности

добавить Ввод реквизитов


должность новой должности

Добавление новой
должности

выход

ОСТАНОВ
38
RU.МЭТТ.18108-01 84 01

2.1.1.8 Структурная схема базы данных

reports

PK id
users
posts
PK id date
PK id theme
surname question
post name FK1 user
created_at otchestvo report
updated _at FK1 post cancel
e_mail transfer
created_at transfer_date
updated_at finish
created_at
updated_at

2.1.2 Описание работы программы

2.1.2.1 Описание структурной схемы системы


Система реализована как трехуровневое приложение[3]. Она состоит из трех
моделей, пяти контроллеров и пяти представлений.

2.1.2.2 Описание моделей


Модели являются объектно-ориентированным представлением таблиц базы
данных. Имя модели, как правило, отличается от имени таблицы в базе данных
одной буквой: имя таблицы получается добавлением буквы -s в конец имени модели.

Система реализована в виде следующих моделей:

1) Модель Post реализует работу с должностями сотрудников.


Предоставляет доступ к таблице posts базы данных.

2) Модель User реализует работу с сотрудниками. Предоставляет доступ к


таблице users базы данных.

3) Модель Report реализует работу с протоколами совещаний.


Предоставляет доступ к таблице reports базы данных.
39
RU.МЭТТ.18108-01 84 01

2.1.2.3 Описание контроллеров и представлений


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

Система реализована в виде следующих контроллеров:

1) Контроллер View занимается обработкой данных для подробного отчета


по совещанию. Использует модель Report.

2) Контроллер Conference занимается обработкой данных для работы с


протоколами совещаний. Использует модели Report и User.

3) Контроллер RSS занимается обработкой данных для предоставления


отчета по предстоящим, отмененным и перенесенным совещаниям в формате
RSS. Использует модель Report.

4) Контроллер Personal занимается обработкой данных для работы со


списками сотрудников и должностей. Использует модели User и Post.

5) Контроллер Control ограничивает доступ к администрированию


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

2.1.2.4 Описание алгоритма администрирования системы


1) Производится запрос пароля. Если пароль введен неверно или не введен
совсем — доступ к процессу администрирования системы не предоставляется.

2) Происходит ожидание события, который должен инициировать


пользователь. После того, как пользователь определился с необходимым
действием, производится переход на обработку соответствующего события.
При возникновении события «выйти из режима администрирования» процесс
администрирования системы прекращается.
40
RU.МЭТТ.18108-01 84 01

3) При возникновении события «управлять совещаниями» вызывается


подпрограмма управления совещаниями.

4) При возникновении события «назначить совещание» вызывается


подпрограмма назначения нового совещания.

5) При возникновении события «управлять списком сотрудников»


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

6) При возникновении события «управлять списком должностей»


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

2.1.2.5 Описание алгоритма управления совещаниями


1) Производится вывод информации о будущих, отмененных и
перенесенных совещаниях.

2) Происходит ожидание события, который должен инициировать


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

3) При возникновении события «добавить совещание» вызывается


подпрограмма добавления нового совещания.

4) При возникновении события «отменить совещание» происходит отмена


совещания путем установки флага cancel таблицы reports в значение true.

5) При возникновении события «перенести совещание» вызывается


подпрограмма переноса совещания.

2.1.2.6 Описание алгоритма назначения нового совещания


1) Производится запрос реквизитов нового совещания: называние, время
проведения, вопросы для обсуждения.

2) Пользователю предоставляется возможность выбрать сотрудников,


которым необходимо присутствовать на совещании.
41
RU.МЭТТ.18108-01 84 01

3) Происходит добавление указанных реквизитов совещания в базу данных.

2.1.2.7 Описание алгоритма переноса совещания


1) Производится запрос на изменение реквизитов совещания. В частности,
предлагается ввести новую дату совещания.

2) Осуществляется перенос совещания путем модификации записи


таблицы report в базе данных.

2.1.2.8 Описание алгоритма управления списком сотрудников


1) Вывод списка всех сотрудников, которые зарегистрированы в системе.

2) Происходит ожидание события, который должен инициировать


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

3) При возникновении события «удалить сотрудника» происходит удаление


сотрудника путем удаления записи из таблицы users базы данных.

4) При возникновении события «добавить сотрудника» происходит запрос


реквизитов нового сотрудника.

5) После того, как необходимые реквизиты введены происходит добавление


нового сотрудника. Осуществляется это путем добавления новой записи в
таблицу users базы данных.

2.1.2.9 Описание алгоритма управления списком должностей


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

2) Происходит ожидание события, который должен инициировать


пользователь. После того, как пользователь определился с необходимым
действием, производится переход на обработку соответствующего события.
При возникновении события «выход» работа алгоритма прекращается.
42
RU.МЭТТ.18108-01 84 01

3) При возникновении события «удалить должность» производится


удаление должности посредством удаления соответствующей записи из
таблицы posts в базе данных.

4) При возникновении события «добавить должность» производится


запрос реквизитов новой должности.

5) После ввода необходимых реквизитов производится добавление новой


должности путем добавления новой записи в таблицу posts базы данных.

2.1.2.10 Описание структурной схемы базы данных


База данных состоит из трех таблиц: posts, users и reports. В них хранятся
данные о должностях, сотрудниках и информация о совещаниях, соответственно.

2.1.2.10.1 Описание таблицы posts

1) Поле id — уникальный идентификатор записи в таблице. Имеет тип


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

2) Поле post — название должности. Имеет тип string.

3) Поле created_at — дата и время создания записи. Имеет тип datetime.

4) Поле updated_at — дата и время текущего изменения. Имеет тип


datetime.

2.1.2.10.2 Описание таблицы users

1) Поле id — уникальный идентификатор записи в таблице. Имеет тип


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

2) Поле surname — фамилия сотрудника. Имеет тип string.

3) Поле name — имя сотрудника. Имеет тип string.

4) Поле otchestvo — отчество сотрудника. Имеет тип string.

5) Поле post — должность сотрудника. Имеет тип string.

6) Поле e_mail — электронный адрес сотрудника. Имеет тип string.


43
RU.МЭТТ.18108-01 84 01

7) Поле created_at — дата и время создания записи. Имеет тип datetime.

8) Поле updated_at — дата и время текущего изменения. Имеет тип


datetime.

2.1.2.10.3 Описание таблицы reports

1) Поле id — уникальный идентификатор записи в таблице. Имеет тип


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

2) Поле date — дата проведения совещания. Имеет тип datetime.

3) Поле theme — тема совещания. Имеет тип string.

4) Поле question — вопросы для обсуждения. Имеет тип text.

5) Поле user — сотрудники, участвующие в совещании. Имеет тип text.

6) Поле report — решения принятые по вопросам совещания. Имеет тип


text.

7) Поле cancel — признак отмены совещания. Имеет тип boolean.

8) Поле transfer — признак переноса совещания. Имеет тип boolean.

9) Поле transfer_date — время, на которое было перенесено совещание.


Имеет тип datetime.

10)Поле finish — признак завершившегося совещания. Имеет тип boolean.

11)Поле created_at — дата и время создания записи. Имеет тип datetime.

12)Поле updated_at — дата и время текущего изменения. Имеет тип


datetime.

2.2 Текст программы

2.2.1 Схема базы данных (файл db/schema.rb)


ActiveRecord::Schema.define(:version => 3) do

create_table "posts", :force => true do |t|


t.string "post"
44
RU.МЭТТ.18108-01 84 01

t.datetime "created_at"
t.datetime "updated_at"
end

create_table "reports", :force => true do |t|


t.datetime "date"
t.string "theme"
t.text "question"
t.text "user"
t.text "report"
t.boolean "cancel"
t.boolean "transfer"
t.datetime "transfer_date"
t.boolean "finish"
t.datetime "created_at"
t.datetime "updated_at"
end

create_table "users", :force => true do |t|


t.string "surname"
t.string "name"
t.string "otchestvo"
t.string "post"
t.string "e_mail"
t.datetime "created_at"
t.datetime "updated_at"
end

end

2.2.2 Контроллеры системы

2.2.2.1 Контроллер View (файл app/controllers/view_controller.rb)


class ViewController < ApplicationController

def index
@reports=Report.find(:all)
for z in @reports
z.update_attribute(:finish, true) if (z.date<Time.now)
if (!z.transfer_date.nil?)
z.update_attribute(:finish, true) if (z.transfer_date<Time.now)
z.update_attribute(:finish, false) if (z.transfer_date>Time.now)
end
end
45
RU.МЭТТ.18108-01 84 01

@list1=Report.find(:all,:conditions => {:report => nil, :finish => false ,:cancel =>
false},:order => "date",:limit =>15)
@list2=Report.find(:all,:conditions => {:report => nil, :transfer => true, :finish =>
false,:cancel => false},:order => "date")
@list3=Report.find(:all,:conditions => {:report => nil, :cancel => true, :finish =>
false},:order => "date",:limit =>15)
end

def list
@reports=Report.find(:all)
for z in @reports
z.update_attribute(:finish, true) if (z.date<Time.now)
if (!z.transfer_date.nil?)
z.update_attribute(:finish, true) if (z.transfer_date<Time.now)
z.update_attribute(:finish, false) if (z.transfer_date>Time.now)
end
end
@lists=Report.find(:all,:order => "date DESC")
end

def show
@lists=Report.find(:all,:conditions => {:id => params[:id]})
end
end

2.2.2.2 Контроллер Conference (файл app/controllers/conference_controller.rb)


class ConferenceController < ApplicationController
before_filter :authentication
layout "conference", :except => [:field,:datetime,:create]

def create
@users = User.find(:all, :order => "post")
flash[:err1]=""
flash[:err2]=""
flash[:err3]=""
if request.post?
@reports = Report.new
@reports.date=DateTime.parse(params[:date][:year]+"-"+params[:date][:month]
+"-"+params[:date][:day]+" "+params[:date][:hour]+":"+params[:date][:minute])
@reports.theme=params[:theme]
@reports.question=(1..flash[:i]).to_a.map{|x|params[:"arg#{x}"]}.map{|x| (x=="")?(nil):
(x)}.compact.join("/*/")
@reports.user=(0..flash[:jim]).to_a.map{|x|params[:"box#{x}"]}.map{|x| (x=="")?(nil):
46
RU.МЭТТ.18108-01 84 01

(x)}.compact.map{|y| User.find(:all,:conditions => "id = #{y}").map{|c| c.surname+"


"+c.name+" "+c.otchestvo+" ("+c.post+")"} }.join("/*/")
@reports.cancel=false
@reports.transfer=false
@reports.finish=false
if (@reports.theme.blank?)
@reports.theme=""
flash[:err1]="Поле не может быть пустым!"
end
if (@reports.question.blank?)
@reports.question=""
flash[:err2]="Поле не может быть пустым!"
end
if (@reports.user.blank?)
@reports.user=""
flash[:err3]="Должен быть выбран хотя бы один человек!"
end
@reports.save
end
flash[:i]=1
end

def edit
@report1=Report.find(:all)
for z in @report1
z.update_attribute(:finish, true) if (z.date<Time.now)
if (!z.transfer_date.nil?)
z.update_attribute(:finish, true) if (z.transfer_date<Time.now)
z.update_attribute(:finish, false) if (z.transfer_date>Time.now)
end
end
if request.post?
@report1=Report.find(flash[:transf])
@report1.update_attribute(:transfer_date, DateTime.parse(params[:date][:year]
+"-"+params[:date][:month]+"-"+params[:date][:day]+" "+params[:date][:hour]
+":"+params[:date][:minute]))
@report1.update_attribute(:transfer, true)
redirect_to :action => 'edit'
end
@report1=Report.find(:all,:conditions => {:report => nil},:order => "date DESC")
end

def report
@report2=Report.find(params[:id]).question.split("/*/")
if request.post?
47
RU.МЭТТ.18108-01 84 01

if (!params[:rep1].blank?)
@report2=Report.find(params[:id])
@report2.update_attribute(:report, params[:rep1])
redirect_to :action => 'edit'
else
flash[:err]="Отчет не может быть пустым!!!"
end
end
end

def field
end

def destroy
@destroy = Report.find(params[:id].to_i).destroy
redirect_to :action => 'edit'
end

def cancel
@report2=Report.find(params[:id].to_i)
@report2.update_attribute(:cancel, true)
redirect_to :action => 'edit'
end

def datetime
end

end

2.2.2.3 Контроллер RSS (файл app/controllers/rss_controller.rb)


class RssController < ApplicationController
session :off

def list
@report1=Report.find(:all)
for z in @report1
z.update_attribute(:finish, true) if (z.date<Time.now)
if (!z.transfer_date.nil?)
z.update_attribute(:finish, true) if (z.transfer_date<Time.now)
z.update_attribute(:finish, false) if (z.transfer_date>Time.now)
end
end
@time_table=Report.find(:all,:conditions => {:report => nil, :finish => false},:order =>
48
RU.МЭТТ.18108-01 84 01

"date",:limit =>30)

end

end

2.2.2.4 Контроллер Personal (файл app/controllers/presonal_controller.rb)


class PersonalController < ApplicationController
before_filter :authentication

def index
end

def post
@post2 = Post.new(params[:post2])
flash[:err]=""
if request.post?
if (@post2.post.blank?)
@post2.post=""
flash[:err]="Это поле не может быть пустым!"
end
redirect_to :action =>:post if (@post2.save)
end
@post1 = Post.find(:all)
end

def user
@user1 = User.find(:all)
end

def new_user
flash[:err1]=""
flash[:err2]=""
flash[:err3]=""
flash[:err4]=""
@post = Post.find(:all).map{|x| [x.post,x.post]}
@user2 = User.new(params[:user2])
if request.post?
if (@user2.surname.blank?)
@user2.surname=""
flash[:err1]="Поле не может быть пустым"
end
49
RU.МЭТТ.18108-01 84 01

if (@user2.name.blank?)
@user2.surname=""
flash[:err2]="Поле не может быть пустым"
end
if (@user2.otchestvo.blank?)
@user2.otchestvo=""
flash[:err3]="Поле не может быть пустым"
end
if (!@user2.e_mail[/\S+@\S+[.]\S+/])
flash[:err4]="Введен не верный Е-mail"
end
redirect_to :action =>:user if (@user2.save)
end
end

def destroy
@destroy = Post.find(params[:id].to_i).destroy if params[:break]=='post'
@destroy = User.find(params[:id].to_i).destroy if params[:break]=='user'
redirect_to :action => params[:break]
end
end

2.2.2.5 Контроллер Control (файл app/controllers/control_controller.rb)


class ControlController < ApplicationController

def index
if request.post?
cookies[:pass]=params[:pass]
redirect_to :controller => 'conference',:action => 'edit'
end
end
end

2.2.3 Модели системы

2.2.3.1 Модель Post (файл app/models/post.rb)


class Post < ActiveRecord::Base
validates_size_of :post, :minimum => 1
end

2.2.3.2 Модель User (файл app/models/user.rb)


class User < ActiveRecord::Base
validates_size_of :surname, :minimum => 1
validates_size_of :name, :minimum => 1
50
RU.МЭТТ.18108-01 84 01

validates_size_of :otchestvo, :minimum => 1


validates_format_of :e_mail,:with => /\S+@\S+[.]\S+/
end

2.2.3.3 Модель Report (файл app/models/report.rb)


class Report < ActiveRecord::Base
validates_size_of :theme, :minimum => 1
validates_length_of :question, :minimum => 1
validates_length_of :user, :minimum => 1
end

2.3 Инструкция на выполнение программы

2.3.1 Общие сведения


Система реализована с помощью программного каркаса Ruby on Rails и
представляет из себя клиент-серверное приложение, где в качестве сервера
выступает сама система (в виде приложения для веб-сервера), а в качестве клиента
— веб-обозреватель.

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


следующая информация:

1) Список должностей сотрудников.

2) Список сотрудников.

3) Информация и совещаниях и протоколы совещаний.

Для базы данных системы может быть использована любая СУБД из списка
поддерживаемых программным каркасом Ruby on Rails.

2.3.2 Вызов и загрузка


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

1) Запустить веб-сервер следующей командой:

ruby script/server [-p номер_порта].

2) Запустить веб-обозреватель. Для корректного отображения страниц


системы, рекомендуется использовать веб-обозреватель Microsoft Internet
51
RU.МЭТТ.18108-01 84 01

Explorer версии не ниже 7.

3) Набрать в браузере адрес сервера. Если при запуске сервера был


использован порт, отличный от 80, то следует в строке адреса явно указать его.
Если при запуске сервера порт не был указан, то систему следует искать на
порту 3000 (порт следует явно указать в адресе запроса, например
http://my_server:3000/, где my_server — адрес компьютера на котором была
запущена серверная часть системы).

2.3.3 Входные данные


Входными данными системы являются:

1) Реквизиты сотрудника (в том числе и должность).

2) Реквизиты совещания (в том числе и протокол совещания).

2.3.4 Выходные данные


Выходными данными системы являются:

1) Вопросы системы.

2) Варианты ответов на вопросы системы.

2.3.5 Сообщения программы


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

1) «Поле не может быть пустым!» выводится, когда пользователь не ввел


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

2) «Должен быть выбран хотя бы один человек!» выводится, когда


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

3) «Отчет не может быть пустым!!!» выводится, когда при оформлении


протокола не введено ни одного решения по вопросам прошедшего совещания.

4) «Это поле не может быть пустым!» выводится в случае добавления


52
RU.МЭТТ.18108-01 84 01

новой должности, когда само название должности не было указано.

5) «Введен не верный Е-mail» выводится в случае добавления нового


сотрудника, когда в поле «E-mail» была введена строка, которая не может быть
адресом электронной почты.

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


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

Перед первым включением компьютера следует проверить, соответствует ли


напряжение в сети тому, на которое рассчитан компьютер.

Системный блок компьютера желательно поставить в таком месте, чтобы он не


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

К современному производственному освещению, в том числе освещению


рабочих помещений пользователей персональных компьютеров, предъявляются
высокие требования как гигиенического, так и технико-экономического характера.
Правильно спроектированное и выполненное освещение обеспечивает высокий
уровень работоспособности, оказывает положительное психологическое воздействие
на работающих, способствует увеличению производительности труда. В
53
RU.МЭТТ.18108-01 84 01

вычислительных центрах или в комнатах операторов, как правило, применяют


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

Рекомендуемая освещенность для работы с экраном дисплея составляет 200


лк, а при работе с экраном в сочетании с работой над документацией 400 лк.
Рекомендуемые яркости в поле зрения операторов должны лежать в пределах 1:5 –
1:10. Для обеспечения оптимальных условий зрительной работы операторов
дисплейных устройств необходимо определенная цветовая отделка помещений.

2.4 Описание процесса отладки программы

2.4.1 Методы отладки


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

Во-первых, это синтаксические ошибки, связанные с неправильным


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

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


54
RU.МЭТТ.18108-01 84 01

Это ошибки при выполнении программы.

Ну и, наконец, наиболее тяжелые ошибки бывают связаны с неправильным


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

Процесс поиска и исправления ошибок в программе, когда факт их


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

Отладка производится в два этапа:

1) Определение природы и местонахождения возможной ошибки в


программе.

2) Исправление найденной ошибки.

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

1) Запуск в режиме отладки всех виртуальных машин, предназначенных


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

2) Управление выполнением параллельной программы с помощью


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

2.4.1.1 Расстановка отладочной печати по всей программе


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

2.4.1.2 Отладка с использованием встроенных средств языка программирования


Суть данного метода сводится к установке большого набора точек прерывания
55
RU.МЭТТ.18108-01 84 01

или пошаговому исполнению программы.

2.4.1.3 Методы индукции


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

2.4.2 Тестирование
Процесс выполнения программы с целью обнаружения ошибок называется
тестированием.

Тестирование осуществляется по средствам выполнения текстовых примеров.


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

Процесс тестирования включает в себя:

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

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

— тестирование системы в целом.

Тестирование модуля включает в себя следующие этапы:

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


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

— тестирование в экстремальных условиях предполагает проверку


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

— тестирование в исключительных условиях – предполагает проверку


работы программы при вводе неправильных данных.
56
RU.МЭТТ.18108-01 84 01

Также проводят тестирование по методу сверху вниз, стремясь к


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

Сначала используют трансляцию – специальную программу, которая


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

И в конечном итоге выполнение - если в результате выполнения программы и


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

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


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

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


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

Существуют следующие методики тестирования:

— тестирование методом «Черного ящика»;

— тестирование методом «Белого ящика»;

— тестирование эргономичности;

— тестирование нарастающей интеграции.

2.4.2.1 Тестирование методом "Черного ящика"


Тестирование методом "Черного ящика" предполагает обработку системы как
"непрозрачного объекта", таким образом, знание внутренней структуры в явном виде
не используется. Тестирование этим методом обычно подразумевает проверку
функциональных возможностей. Синонимами понятия метода "Черного ящика"
являются: поведенческое тестирование, функциональное тестирование, метод
непрозрачного ящика, метод закрытого ящика. При тестировании программного
57
RU.МЭТТ.18108-01 84 01

обеспечения методом "Черного ящика" тестировщик знает только набор вводимых


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

2.4.2.2 Тестирование методом "Белого ящика"


Тестирование методом "белого ящика" предполагает обработку системы как
"прозрачного объекта" и позволяет заглянуть внутрь, фокусируя внимание на
использовании знаний о конкретном программном обеспечении для правильного
подбора тестовых данных. Синонимами понятия метода "Белого ящика" являются:
структурное тестирование, метод прозрачного ящика, метод стеклянного ящика. В
отличие от метода "Черного ящика" данный метод основан на использовании
определенных знаний программного кода, необходимых для контроля корректности
данных на выходе. Тест является правильным только в том случае, когда
тестировщик знает, что конкретно должна делать программа. Таким образом,
тестировщик может контролировать ожидаемый результат. Тестирование методом
"Белого ящика" не обрабатывает случайные ошибки, но наряду с этим весь видимый
код должен быть удобочитаемым.

2.4.2.3 Тестирование эргономичности


Тестирование эргономичности является частью процесса создания
необходимых условий для "удобства пользователя". Этот тип тестирования включает
набор методов, которые позволяют пользователям (тестировщикам) проверить
систему. Типичный тест на эргономичность заключается в том, что пользователи
выполняют с прототипом (или другой системой) ряд операций, в то время как
наблюдатели документируют все, что они делают и говорят. Такое тестирование
проводится одновременно с одним или несколькими пользователями работающими
вместе. Тестирование может включать сбор информации о последовательности
действий, совершаемых пользователем в процессе выполнения задачи; ошибок,
которые они делают; когда и чем они недовольны; насколько быстро они выполняют
58
RU.МЭТТ.18108-01 84 01

операции; преуспевают ли они в выполнении этих операций, а так же насколько они


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

2.4.2.4 Тестирование нарастающей интеграции


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

2.4.3 Контрольный пример


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

Информацию мы получим в двух различных форматах: HTML и RSS.


Несмотря на то, что оба этих формата очень часто применяются в сети Интернет,
они имеют различное назначение, но об этом ниже.

Для начала запустим серверную часть системы. По умолчанию, серверная


часть системы будет прослушивать порт с номером 3000. О том, как запустить
серверную часть читайте в пункте 2.3.2. «Вызов и загрузка».

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


В нашем случае это будет Microsoft Internet Explorer версии 7 (см. рис. 1), который
идет в поставке с операционной системой Microsoft Windows Vista.
59
RU.МЭТТ.18108-01 84 01

Рабочее окно веб-обозревателя Microsoft Internet Explorer версии 7

Рисунок 1
После запуска веб-обозревателя необходимо набрать адрес по которому
запущена серверная часть. В нашем случае адрес будет выглядеть как http://localhost:
3000/ . Если при обращении к этому адресу происходит ошибка, то проверьте
правильность набранного адреса и удостоверьтесь в том, что серверная часть
системы работает. В крайнем случае попытайтесь запустить серверную часть
системы еще раз.

В случае правильности набранного адреса в адресной строке веб-обозревателе


и безупречной работы серверной части системы должна появиться веб-страница с
большой надписью «Информация» (см. рис. 2).
60
RU.МЭТТ.18108-01 84 01

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

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

— дата и время проведения совещания;

— тематика совещания;

— участники совещания, явка которых на него обязательна;

— ссылка на более подробную информацию о совещании (в частности, там


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

Помимо информации о ближайших совещаниях, на этой же странице


публикуется информация о последних перенесенных (см. рис. 3) и отмененных
61
RU.МЭТТ.18108-01 84 01

совещаниях (см. рис. 4).

Последние перенесенные совещания

Рисунок 3
62
RU.МЭТТ.18108-01 84 01

Последние 15 отмененных совещаний

Рисунок 4

Есть нажать на ссылку «Посмотреть» справа от реквизитов любого из


совещаний (будь то отмененное, перенесенное или еще не состоявшееся совещание),
то произойдет переход на страницу с подробной информацией по этому совещанию
(см. рис. 5). Как можно заметить, помимо информации, которая публикуется на
стартовой странице, здесь добавлен такой пункт, как «Вопросы, вынесенные на
обсуждение».
63
RU.МЭТТ.18108-01 84 01

Вид веб-страницы с подробной информацией о совещании

Рисунок 5

Помимо уже рассмотренного веб-интерфейса (построенного на базе языка


разметки HTML) есть еще интерфейс, который построен на формате RSS и
предназначен для обработки программами (так называемыми RSS-агрегаторами).
Этот интерфейс нужен для того, чтобы пользоваться веб-интерфейсом системы, но
всегда быть в курсе изменений в расписании совещаний.

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


набрать в адресной строке веб-обозревателя (так как все современные веб-
обозреватели имеют функцию RSS-агрегатора) адрес http://localhost:3000/rss/list (см.
рис. 6).
64
RU.МЭТТ.18108-01 84 01

Интерфейс системы в формате RSS в окне Microsoft Internet Explorer 7

Рисунок 6
Наш веб-обозреватель назвал интерфейс нашей системы в формате RSS не
иначе, как «веб-канал» и предложил на него подписаться.

Если тщательней изучить содержимое «веб-канала», то можно заметить, что в


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

Чтобы убедиться в том, что в «веб-канале» содержится только информация и


ничего кроме, подключимся к нашему «веб-каналу» другим RSS-агрегатором (в
частности, программой FeedDemon версии 2.7).

Запустим программу FeedDemon и нажмем на кнопку Subscribe (подписаться).


После этого появится окно в котором нам предложат ввести адрес «веб-канала» (см.
65
RU.МЭТТ.18108-01 84 01

рис. 7).

Окно подписки программы FeedDemon версии 2.7

Рисунок 7
Как только мы ввели адрес нашего «веб-канала», следует нажать на кнопку
«Next» (следующий). Появится следующий слайд (см. рис. 8) на котором нам
предложат ввести название нашего «веб-канала».

Так как все атрибуты интерфейса в формате RSS заполнены верно, то в


качестве названия «веб-канала» нам предложат «Расписание совещаний». Не будем
упорствовать и согласимся с этим предложением нажатием на кнопку
«Next» (следующий). Сразу после этого, программа FeedDemon соединится с нашим
«веб-каналом» и загрузит всю имеющуюся информацию о текущем состоянии
расписания совещаний (см. рис. 10).
66
RU.МЭТТ.18108-01 84 01

Предложение ввода названия «веб-канала»

Рисунок 8
Обратите внимание, что загруженная информация оформлена совсем не так,
как на рисунке 6, что свидетельствует о том, что интерфейс определяет RSS-
агрегатор FeedDemon, а не «веб-канал».

Если в программе FeedDemon подписаться на ее один «веб-канал», то


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

Манипулируя подписками на «веб-каналы» можно получить свою


собственную ленту новостей в которой будет содержаться только важная для
конкретного пользователя информация.
67
RU.МЭТТ.18108-01 84 01

Таким образом мы рассмотрели оба интерфейса системы: основанный на


языке разметке HTML и основанный на формате RSS. Каждый из этих интерфейсов
предоставляет разные возможности и различный инструментарий для управления
информацией, предоставляемой нашей системой.

Информация о расписании совещаний в окне программы FeedDemon 2.7

Рисунок 9
68
RU.МЭТТ.18108-01 84 01

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

3.1 Расчет системы

3.1.1 Материальные затраты

Т а б л и ц а 2 — расчет материальных затрат (за весь период)


Единица Цена,
Показатель Количество Сумма, руб.
измерения руб.
Электроэнергия кВт 1,53 42 64,26
Microsoft Windows XP шт. 4199 1 4199
Professional
Microsoft Office 2007 шт. 5499 1 5499
Диск DVD-R 8x шт. 20 2 40
Интернет-доступ - 3000 - 3000
Бумага А4 500 листов упак. 200 1 200
Карандаш шт. 14 10 140
Ластик шт. 10 4 40
Итого: 13182,26

3.1.2 Заработная плата разработчиков

Т а б л и ц а 3 — расчет заработной платы (за месяц)


Часовая тарифная Количество Сумма з/п,
Должность
ставка, руб. часов руб.
Руководитель проекта 350 40 14000
Программист 280 176 49280
Итого: 63280

3.1.3 Часовая тарифная ставка


Месячный эффективный фонд рабочего времени:

— количество дней разработки программы = 1 месяц;

— календарное время = 30 дней;

— выходные дни (с учетом праздников) = 8 дней;

— праздники = 0 раб. дней;


69
RU.МЭТТ.18108-01 84 01

— отпуск = 0 раб. дней.

Итого эффективный фонд месячный:

— рабочего времени в месяц = 22 день;

— рабочих часов в день = 8 часов.

Месячный эффективный фонд рабочего времени в часах (см. таблицу 3).

Руководитель проекта:

— Тэ = 5 * 8 = 40 час/месяц;

— ФОТмес = Стч*Тэ = 350 * 40 = 14000 руб.

Программист:

— Тэ = 22 * 8 = 176 час/месяц;

— ФОТмес = Стч * Тэ = 280 * 176 = 49280 руб.

3.1.4 Расчет стоимости основных фондов

Т а б л и ц а 4 — расчет стоимости основных фондов


Норма
Первоначальная Количество Сумма,
Основные фонды амортизации
стоимость, руб единиц руб
годовая, %
Аренда помещения 34000 1 - -
35 м2
Персональный 28000 2 25 1166,67
компьютер
Офисная мебель 94000 - 25 1958,33
Потолочная лампа 3000 2 25 125
Настольная лампа 2000 2 25 83,33
Модем 2000 1 25 41,67
Принтер/сканер/ко 7040 1 25
пир 146,67
Итого: 3521,67
Расчет амортизации на систему (см. таблицу 4).

Персональный компьютер:
70
RU.МЭТТ.18108-01 84 01

— ОФп = 28000 * 2 = 56000 руб.;

— Амес = 56 * 0,25 / 12 = 1166,67 руб.

Офисная мебель:

— ОФп = 94000 руб.;

— Амес = 94 * 0,25 / 12 = 1958,33 руб.

Потолочная лампа:

— ОФп = 3000 * 2 = 6000 руб.;

— Амес = 6000 * 0,25 / 12 = 125 руб.

Настольная лампа:

— ОФп = 2000 * 2 = 4000 руб.;

— Амес = 4000 * 0,25 / 12 = 83,33 руб.

Модем:

— ОФп = 2000 руб.;

— Амес = 2 * 0,25 / 12 = 41,67 руб.

Принтер/сканер/копир:

— ОФп = 7040 руб.;

— Амес = 7040 * 0,25 / 12 = 146,67 руб.


71
RU.МЭТТ.18108-01 84 01

Т а б л и ц а 5 — калькуляция расходов на разработку системы


Единица
Статья расходов Количество Сумма, руб.
измерения
Материалы - - 13182,26
Заработная плата руб. - 63280
Отчисления в ЕСН % 26 16452,80
Итого переменные расходы: 92915,06
Аренда помещения м2 35 34000
Амортизация руб. - 3521,67
оборудования
Налог на % 2,20 338,40
имущество
Освещение кВт 100 30,60
Отопление м2 30 367,50
Итого постоянные расходы: 38258,17
Всего полная себестоимость на создание системы: 131173,23
Расчеты к таблице 5.

Отчисления в ЕСН:

— общая зарплата = 63280 руб/месяц;

— ЕСН = 63280 * 0,26 = 16452,80 руб/месяц.

Аренда помещения:

— арендуемая площадь = 35 м2;

— стоимость 1 м2 за год = 432$;

— по курсу 1$ = 27 руб.;

— аренда помещения = 35 * 432 * 27 = 34000 руб/месяц.

Налог на имущество:

(34000 + 28000 * 2 + 94000 + 10000 + 2000 + 7040) * 0,02 / 12 = 338,40


руб/месяц.

Освещение:
72
RU.МЭТТ.18108-01 84 01

1,53 * 20 = 30,60 руб/месяц.

Отопление:

— стоимость на 1 м2 = 10,5 руб/месяц;

— общая стоимость = 35 * 10,5 = 367,50 руб/месяц.

3.2 Расчет затрат на тиражирование (производство) системы

3.2.1 Расчет стоимости основных фондов

Т а б л и ц а 6 — расчет стоимости основных фондов


Основные фонды Первоначал Количе Норма Сумма
ьная ство амортизаци амортизации
стоимость, единиц и годовая, % годовая, руб.
руб.
Аренда помещения 200 м2 2700000 1 - -
Офисная мебель 180000 - 25 45000
Приборы для освещения 60000 - 25 15000
помещений
Персональный компьютер 30000 2 25 15000
Автоматический дубликатор 457650 2 25 228825
CD/DVD дисков «R-Quest»
(~88 дисков/час)
Производственный 418500 1 25 104625
термопринтер для печати на
CD/DVD (~200 дисков/час)
Целлофанирующий станок 38340 1 25 9585
(полуавтомат, упаковка до 400
дисков/час)
Фотопринтер «Epson» 21560 1 25 5390
Сабельный резак для бумаги 9688 1 25 2422
Модем 2000 1 25 500
Принтер/сканер/копир 10850 1 25 2712,50
«Xerox» лазерный
Итого: 429059,50
73
RU.МЭТТ.18108-01 84 01

3.2.2 Расчет производственной мощности выпуска продукции на год.


Эффективный фонд рабочего времени производства в год:

— календарное время = 365 дней;

— праздники = 11 дней;

— выходные дни = 104 дня;

— итого = 250 дней.

Предприятие работает в две смены.

Годовой эффективный фонд рабочего времени в часах:

Tэ = 250 * 2 * 8 = 4000 часов.

Объем выпуска продукции за час:

— Vвып_одного_дубликатора = 87 дисков/час;

— количество дубликаторов = 2 штуки;

— Vвып_за_час = 87 * 2 = 174 дисков/час.

Объем выпуска продукции за год:

Vвып = 174 * 4000 = 696000 дисков/год.

3.2.3 Расчет материальных затрат

Т а б л и ц а 7 — расчет материальных затрат


Статья затрат Единица Оптовая цена, Количество Сумма, руб.
измерения руб.
Microsoft Windows шт. 4199 1 4199
XP Professional
Microsoft Office шт. 5499 1 5499
2003 Basic Edition
Adobe Photoshop шт. 27616 1 27616
9.0
Электроэнергия кВт 1,53 6000 9180
Интернет-доступ месяц 4000 12 48000
Диск CD-R 700MB шт. 5,80 696000 4036800
74
RU.МЭТТ.18108-01 84 01

Окончание таблицы 7
Статья затрат Единица Оптовая цена, Количество Сумма, руб.
измерения руб.
Коробка под DVD шт. 2,10 696000 1461600
диск
Полипропиленовая м2 10 12429 124290
пленка для дисков
Вкладыш для шт. 3,40 696000 2366400
диска бумажный
Черная лента для шт. 1499 230 344770
термопринтера
трехцветная лента шт. 2999 424 1271576
для термопринтера
Картриджи для шт. 114,40 220 25168
фотопринтера
«Epson» (8 цветов)
Стандартный шт. 2678 50 133900
картридж для
«Xerox»
Картонная коробка шт. 1,40 3867 5413,80
Упаковочная лента шт. 6 194 1164
Канцелярские - - - 30000
расходы
Итого: 9895575,80

3.2.4 Расчет заработной платы специалистов и сотрудников

Т а б л и ц а 8 — расчет заработной платы специалистов и сотрудников


Должность Количество Оклад в Премия 40%, Годовая сумма,
человек месяц, руб. руб. руб.
Начальник цеха 1 36000 14400 604800
Главный 1 32000 12800 537600
бухгалтер
Главный 1 32000 12800 537600
экономист
75
RU.МЭТТ.18108-01 84 01

Окончание таблицы 8
Должность Количество Оклад в Премия 40%, Годовая сумма,
человек месяц, руб. руб. руб.
Менеджер по 2 30000 - 720000
управлению
персоналом
Графический 1 26000 - 312000
дизайнер
Системный 2 23000 - 552000
администратор
Работник цеха 8 16000 - 1536000
Упаковщик- 2 16000 - 384000
грузчик
Водитель 1 22000 - 264000
грузовика
Охранник 2 22000 - 528000
Уборщица 2 12000 - 288000
Итого: 6264000

3.2.5 Расчет сметы цеховых расходов на год

Т а б л и ц а 9 — расчет сметы цеховых расходов на год


Статья затрат Единица измерения Сумма, руб.
Аренда помещения м2 2700000
Электроэнергия кВт 1836
Отопление м2 25200
Горюче-смазочные л 59535
материалы
Командировочные расходы - -
Отчисления на содержание руб. 12528000
аппарата управления
фирмой
Налог на имущество 2% руб. 34324,76
Итого по смете: 15348895,76
Расчеты к смете (см. таблицу 9).

Аренда помещения:
76
RU.МЭТТ.18108-01 84 01

— арендуемая площадь = 200 м2;

— стоимость 1 м2 за год = 500$;

— по курсу 1$ = 27 руб.;

— аренда помещения = 200 * 500 * 27 = 2700000 руб/год.

Электроэнергия:

1,53 * 100 * 12 = 1836 руб/год.

Отопление:

— стоимость на 1 м2 = 10,5 руб/месяц;

— общая стоимость = 200 * 10,5 * 12 = 25200 руб/год.

Горюче-смазочные материалы:

— средняя затрата бензина за день = 50 л по цене 18,90 руб.;

— грузовик развозит продукцию каждый 4-й день:

250 / 4 = 63 дня/год;

— затрата бензина = 50 * 18,9 * 63 = 59535 руб/год.

Налог на имущество:

1716238 * 0,02 = 34324,76 руб/год.

3.2.6 Калькуляция себестоимости выпускаемой продукции

Т а б л и ц а 10 — калькуляция себестоимости выпускаемой продукции


Статья расходов Единица Сумма, руб. Удельный вес, %
измерения
Материалы - 9895575,80 29,36
Электроэнергия кВт 9180 0,03
Фонд оплаты труда руб. 6264000 18,58
ЕСН (26%) руб. 1628640 4,83
Итого переменные расходы: 17797395,80 -
77
RU.МЭТТ.18108-01 84 01

Окончание таблицы 10
Статья расходов Единица Сумма, руб. Удельный вес, %
измерения
Цеховые расходы руб. 15348895,76 45,54
Амортизация руб. 429059,50 1,27
оборудования
Расходы на руб. 131173,23 0,39
разработку системы
Итого условно постоянные расходы: 15909128,49 -
Всего полная себестоимость: 33706524,29 100
Прибыль руб. 49813475,71 147,79
предприятия
Товарная продукция руб. 83520000 -
НДС – 18% руб. 15033600 -
Свободная руб. 98553600 -
отпускная цена за
весь выпуск
Расчеты к таблице 10:

— ТП = V * Ц = 696000 * 120 = 83520000 руб/год;

— П = ТП – С/с= 83520000 – 33706524,29 = 49813475,71 руб/год;

— НДС = ТП * 0,18 = 83520000 * 0,18 = 15033600 руб.;

— Цсвободная_отпускная = ТП + НДС = 83520000 + 15033600 = 98553600 руб.


78
RU.МЭТТ.18108-01 84 01

3.2.7 Диаграмма удельного веса затрат на производство (тиражирование) системы


Расчет эффективности производства методом маржинального анализа

4,83

Материалы

18,58 Электроэнергия
45,54
Фонд оплаты труда

ЕСН
0,03
Цеховые расходы

Амортизация оборудования

1,27 Расходы на разработку ПП


29,36
0,39

Диаграмма затрат на производство

Рисунок 10
Определение точки безубыточности аналитическим методом:

— ТП = 83520000 руб.;

— V = 696000 шт.;

— П = 49813475,71 руб.;

— a = 15909128,49 руб. (условно постоянные расходы);

— Дм = а + П = 65722604,20 руб.;

— Тбутп = ТП * а / Дм = 20217251,40 руб.;

— Тбуv = V * а / Дм = 168477 шт.


79
RU.МЭТТ.18108-01 84 01

3.2.8 Определение точки безубыточности графическим методом.

ТП, с/с, П (млн.руб)


100

90
ТП
83,5
80

70

60
П
50

40

33,7
30

Тбу ∑b
20,2
20
c/cп
15,9

10
a
0 696
0 100
168,5
200 300 400 500 600 700 V (тыс.шт)

Рисунок 11

3.2.9 Определение маржинального дохода графическим методом

ТП, с/с, П (млн.руб)


100

90
ТП
83,5
80

70

60
П
50 Дм

40

33,7
30
a
20,2
Тбу
20
17,8

10 ∑b

0 696
0 100
168,5
200 300 400 500 600 700 V (тыс.шт)

Рисунок 12
80
RU.МЭТТ.18108-01 84 01

3.2.10 Определение критического объема производства в натуральных единицах


графическим методом

Прибыль (млн.руб)
60

50
49,8

40

30

20

10
Тбуv
0
696 V (тыс.шт)
0 100 168,5 200 300 400 500 600 700
-10
-16
-20

-30

-40

-50

-60
Убытки

Рисунок 13
3.2.11 Определение критической суммы товарной продукции графическим
методом

Прибыль (млн.руб)
60

50
49,8

40

30

20

10
Тбутп
0
0 20
20,2
40 60 80
83,5
100
ТП (млн.руб)
-10
-16
-20

-30

-40

-50

-60
Убытки

Рисунок 14
81
RU.МЭТТ.18108-01 84 01

3.2.12 Сводная таблица технико-экономических показателей

Т а б л и ц а 11 — технико-экономические показатели
Наименование показателя Единица Величина
измерения показателя
Объем производства шт. 696000
Товарная продукция без НДС руб. 83520000
НДС 18% руб. 15033600
Товарная продукция с НДС руб. 98553600
Годовой фонд оплаты труда руб. 6264000
Численность персонала чел. 23
Производительность труда (штук) шт/чел. 30261
Производительность труда (рублей) руб/чел. 4284939,13
Среднемесячная заработная плата одного руб. 272347,83
сотрудника
Полная себестоимость ТП руб. 33706524,29
Затраты на 1 рубль товарной продукции коп. 40
Прибыль производства руб. 49813475,71
Рентабельность производства % 147,79
Критический объем производства шт. 168477
Критический объем товарной продукции руб. 20217251,40
Отпускная цена предприятия руб/ед. 120
Свободная отпускная цена с НДС руб/ед. 141,60
Расчеты к таблице 11:

— производительность труда (штук) = 696000 / 23 = 30261 шт/чел.;

— производительность труда (рублей) = 98553600 / 23 = 4284939,13


руб/чел.;

— среднемесячная зарплата одного сотрудника = 6264000 / 23 = 272347,83


руб.;

— З = С/спол / ТПбез_НДС * 100 = 33706524,29 / 83520000 / 100 = 40 коп.;

— R = П / С/спол * 100% = 49813475,71 / 33706524,29 * 100 = 147,79%;

— Цотп = ТПбез_НДС / Vпрод = 83520000 / 696000 = 120 руб.;


82
RU.МЭТТ.18108-01 84 01

— Цотп_с_НДС = ТПс_НДС / Vпрод = 98553600 / 696000 = 141,60 руб.

3.3 Вывод
Производство системы при незначительных затратах на разработку способно
приносить неплохие прибыли. Рентабельность производства при максимальных
затратах равна 147,79%, но у этого бизнеса есть огромный недостаток –
непостоянство производимой продукции. В условиях бесперебойного выпуска
продукции возникает проблема сбыта и тут может помочь только смена
производимого программного продукта.
83
RU.МЭТТ.18108-01 84 01

ЗАКЛЮЧЕНИЕ
В результате дипломного проектирования были выполнены все требования
задания на дипломное проектирование. В дальнейшем, в системе планируется
осуществить возможность рассылки уведомлений о создании совещания (в котором
должен принять участие адресат) и начале совещания (или за 10-15 минут до
времени начала) по электронной почте. Также планируется добавить более удобный
редактор протоколов совещаний, переработать интерфейс пользователя и провести
глубокую переработку исходного кода (чтобы повысить его читабельность и
увеличить способность к дальнейшему масштабированию системы).
84
RU.МЭТТ.18108-01 84 01

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ


1. Сообщество Wikipedia, Протокол HTTP, 2007, http://ru.wikipedia.org/wiki/HTTP
2. Сообщество Wikipedia, Инструментарий разработчика Ruby on Rails, 2007,
http://ru.wikipedia.org/wiki/Ruby_on_Rails
3. Сообщество Wikipedia, Технология MVC, 2007, http://ru.wikipedia.org/wiki/MVC
4. Сообщество Wikipedia, ORM, 2007, http://ru.wikipedia.org/wiki/ORM
5. Сообщество Wikipedia, Язык разметки HTML, 2007,
http://ru.wikipedia.org/wiki/HTML
6. Сообщество Wikipedia, Формат RSS, 2008, http://ru.wikipedia.org/wiki/RSS
7. Сообщество Wikipedia, Язык программирования Ruby, 2008,
http://ru.wikipedia.org/wiki/Ruby
8. Сообщество Wikipedia, Лицензия MIT, 2007,
http://ru.wikipedia.org/wiki/Лицензия_MIT
9. Сообщество Wikipedia, Язык программирования Python, 2007,
http://ru.wikipedia.org/wiki/Python
10. Сообщество Wikipedia, Язык программирования PHP, 2007,
http://ru.wikipedia.org/wiki/PHP
11. Matz, Ruby syntax, 1999, http://docs.huihoo.com/ruby/ruby-man-1.4/syntax.html

Оценить