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

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.07.2017
Размер файла 418,3 K

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

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

Размещено на http://www.allbest.ru/

Содержание

Введение

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

1.1 Основные понятия и определения

1.2 Общее описание разрабатываемого ПП

2. Анализ методов и средств решения поставленной задачи

2.1 Теоретические основы

2.2 Аналитический обзор существующего ПО

3. Анализ требований к ПП

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

3.2 Требования к интерфейсу

3.3 Система приоритетов при разработке ПП

4. Проектирование ПП

4.1 Архитектура ПП

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

4.3 Проектирование структур данных и алгоритмов

4.3.1 Общий алгоритм программы

4.3.2 Алгоритм работы отдельных стадий выполнения программы

4.4 Проектирование пользовательского интерфейса

5. Реализация ПП

5.1 Особенности реализации системы

5.2 Политика безопасности

6. Тестирование ПП

6.1 Обоснование методики тестирования

6.2 Результаты тестирования

7. Внедрение системы

7.1 Действия с участниками.

7.1.1 Добавление участника

7.1.2 Загрузка сохраненного списка участников

7.1.3 Удаление участников

7.2 Действия с задачами.

7.2.1 Добавление задач

7.2.2 Загрузка сохраненного списка задач

7.2.3 Удаление задач из списка

7.3 Заполнение основных полей

7.3.1 Поля "Дата"

7.3.2 Поле "Язык"

7.3.3 Поле "Сортировка"

7.4 Получение отчета

7.5 Расшифровка результатов отчета

Заключение

Список использованных источников

Введение

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

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

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

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

В рамках этой ВКР создается программа, решающая данную задачу.

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

1.1 Основные понятия и определения

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

Курсы направлены на изучение и совершенствование навыков программирования на различных языках (С++, Java и пр.) среди студентов и школьников старших классов.

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

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

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

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

1.2 Общее описание разрабатываемого ПП

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

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

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

Программа будет обладать следующими свойствами:

· Простой и понятный интерфейс

· Высокая скорость обработки информации (при быстром Интернет - соединении)

· Удобство в использовании

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

2. Анализ методов и средств решения поставленной задачи

2.1 Теоретические основы

Парсинг (Parsing) - это принятое в информатике определение синтаксического анализа. Для этого создается математическая модель сравнения лексем с формальной грамматикой, описанная одним из языков программирования. Например, PHP, Perl, Ruby, Python. [6]

Программа (или скрипт), которая занимается этим, называется парсером. Его основное назначение - сбор контента с одного или нескольких сайтов, анализ и наполнение им своих проектов. Кроме того, часто используется парсинг результатов выдачи поисковых систем. В зависимости от поставленной задачи, контент может быть скопирован полностью или частично. Парсеры бывают узкоспециализированные и универсальные. Узкоспециализированные занимаются копированием текста или изображения, а универсальные могут скопировать и то и другое вместе.[6]

Как правило, алгоритм действия таких программ всегда схожий.

· Выход в интернет.

· Получение доступа к коду веб-ресурса, его скачивание.

· Чтение и извлечение данных. Их обработка.

· Представление данных в удобном виде (формате). Например, .html, .doc и т.д.

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

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

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

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

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

2.2 Аналитический обзор существующего ПО

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

Datacol

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

Программа обладает рядом преимуществ. Рассмотрим их подробнее.

· Наличие демо-версии.

На мой взгляд, это является одним из главных преимуществ. Скачав какой-либо другой платный парсер, мы не можем быть уверены, что он сможет выполнить все те задачи, которые мы перед ним ставим. Кроме того, иногда подобная программа требуется для применения всего один-два раза. У Datacol существует и платная и бесплатная версия (демо-версия). Конечно, возможностей у платной версии гораздо больше, но не всегда эти возможности необходимы. Иногда демо-версии бывает достаточно. Кроме того, можно использовать бесплатную версию для ознакомления с ПП, чтобы удостовериться в необходимости покупки. В данном случае, у полной версии следующие достоинства: доступ в закрытый раздел форума, платные консультации по использованию, заказ платных настроек, заказ платных плагинов и количество собранных данных не ограничивается (в демо-версии до 25 результатов). Цена на момент написания ВКР: от 459 руб./мес.

· Универсальность.

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

· Помощь при настройке.

Не все пользователи, при первом запуске программы могут сразу разобраться в ее работе. На официальном сайте Datacol (http://web-data-extractor.net) существует специальный форум, на котором разработчики парсера обеспечивают поддержку пользователям, отвечая на все интересующие их вопросы. Далеко не каждый бесплатный парсер может похвастаться таким, так как не существует выгоды в поддержке программы, за которую никто не будет платить.

· Удобство и гибкость экспорта.

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

· Обновление программы.

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

· Отсутствие ограничения по количеству потоков.

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

· Одновременный запуск нескольких кампаний.

В Datacol существует возможность парсинга сразу нескольких кампаний, что значительно увеличивает удобство ее использования.[3]

К сожалению, этот парсер обладает рядом недостатков.

· Запутанный интерфейс.

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

· Зависимость от метода отправки формы.

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

Content Downloader

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

Принцип работы программы достаточно прост, пользователь указывает в программе (в HTML коде) в каких частях страницы находятся необходимые данные. Затем выбирает формат отчета. Сразу возникает отличие от Datacol, в котором практически не нужны навыки программирования (используется автоматический подбор формул), Content Downloader требует хотя бы минимальных знаний языка HTML. [4]

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

· Сайтов, блогов, Интернет-магазинов. При этом выводит данные в нужном формате в CSV файлы, либо в txt.

· Любой части кода с любой введенной в ПП ссылки (как вариант собранной программой).

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

· Абсолютно любых ссылок с сайта, которые удовлетворяют заданным фильтрам.

· Google картинок в разные папки по списку ключевиков.

Преимущества программы:

· Наличие демо-версии.

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

· Обновление программы.

Разработчики Content Downloader регулярно выпускают обновления для своего ПП. Учитываются пожелания пользователей, устраняются различные ошибки, добавляются новые функции.

· Помощь при настройке.

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

· Возможность запуска нескольких кампаний.

В отличие от Datacol, в Content Downloader, чтобы запустить одновременно несколько кампаний, существует необходимость запуска второй копии Content Downloader на ПК. Но это никак не влияет на функциональность, несмотря на это маленькое неудобство, все работает отлично. [4]

Недостатки программы:

· Стоимость.

Продукт является платным, существует три версии для покупки (Content Downloader Start (1000 рублей), Content Downloader Standard (2000 рублей), Content Downloader ULTIMATE (3000 рублей)). 6 месяцев обновление бесплатно, далее можно оформить платную подписку.

· Ограничение по количеству потоков.

В отличие от Datacol, у которого такого ограничения нет, в Content Downloader предусмотрено несколько версий программы, которые различаются по возможному количеству потоков (от 5 до 50).

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

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

3. Анализ требований к ПП

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

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

Соответственно, максимальное количество одновременно работающих пользователей - 1 человек.

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

Выходная информация - отчет в формате html, в котором содержится информация об участниках и о решенных/нерешенных ими задачах.

Таким образом, продукт будет обладать следующими функциями:

· Просмотр результатов решения задач по идентификатору (логину) студента по каждому электронному архиву задач.

· Cохранение результатов просмотра в отдельном html документе с разных сайтов.

· Составление таблицы - результата в отчете по возрастанию занятого места.

· Добавление и удаление участников кружка и сохранение их в шаблоне

· Добавление и удаление списка задач для проверки, сохранение их в шаблоне (создание курсов с определенным набором задач).

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

· Установка баллов преподавателем для конкретных задач на сайтах http://acm.timus.ru и https://acmp.ru, получение баллов с сайта http://atpp.vstu.edu.ru.

3.2 Требования к интерфейсу

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

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

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

· Быть простым и эргономичным.

· Быть интуитивно понятным.

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

· Предоставлять выбор места сохранения отчета на диске.

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

· Максимально обеспечивать корректный ввод данных в ПП.

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

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

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

3.3 Система приоритетов при разработке ПП

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

· Удобство ввода данных.

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

· Время реакции системы

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

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

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

· Надежность системы.

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

· Время разработки и внедрения системы.

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

4. Проектирование ПП

4.1 Архитектура ПП

Программный продукт будет представлять собой Jar файл, с множеством классов. Программу представим в виде слоев:

· Интерфейс программы.

· Контроллер.

· Внутренняя логика.

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

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

· Наличие бесплатной версии (Community Edition). При желании можно приобрести и платную (Ultimate).

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

· Это интуитивно понятная среда разработки, она проста в использовании.

· IntelliJ IDEA поддерживает большинство современных технологий.

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

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

Кроме всего вышеперечисленного, IntelliJ IDEA является "умной средой". Она "догадывается" о намерениях пользователя, подсказывает и помогает ему в работе, тем самым экономит затраты времени и сил. Единственным ее минусом, на мой взгляд, является то, что для новичка в программировании будет сложно разобраться с системой разработки GUI (графического интерфейса пользователя). В качестве языка программирования, IntelliJ IDEA, как правило, использует Java. [8]

Для создания графического интерфейса будем использовать приложение JavaFX Scene Builder, которое обеспечивает визуальную среду разработки. Оно запускается прямо из IntelliJ IDEA и позволяет проектировать пользовательский интерфейс для JavaFX без кодирования. Выбирается компонент и перетаскиванием добавляется на экран. Кроме того, можно легко изменять его свойства, применять таблицы стилей, а также, что немаловажно, интегрировать полученный код с логикой приложения. Приложение помогает быстро и легко создать удобный пользовательский интерфейс.[7]

JavaFX - это современная библиотека для создания GUI на языке Java.. Она используется для создания настольных приложений, запускаемых непосредственно из-под операционных систем, для интернет-приложений (RIA), работающих в браузерах, и для приложений на мобильных устройствах. Данная библиотека вытесняет другую графическую библиотеку SWING (также написана на Java), становясь все более популярной. Она позволяет создавать впечатляющие интерфейсы программ, имеет хорошую документацию и легка в освоении. [9]

Для обработки HTML файлов будем использовать библиотеку Jsoup. Она позволяет манипулировать данными (читать, разбирать и модифицировать), используя методы JQuery, CSS и DOM. Для анализа библиотеке можно предоставлять URL, строку или файл. Jsoup достаточно часто обновляется и, что немаловажно, поддерживает HTML5.

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

· Умный переход.

При пошаговой отладке иногда есть необходимость перейти не к следующему по порядку методу, а к какому-то конкретному. Для этого и существует умный переход. Необходимо лишь нажать горячую клавишу и выбрать из списка тот, который нужен. Это позволяет экономить затраты времени и сил разработчика. [12]

· Переход назад.

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

· Переход к курсору.

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

· Добавление меток.

Используется для того, чтобы выделить цветом определенный элемент. Таким образом, во время отладки при появлении элемента в списке, вы сразу заметите его. [12]

· Вычисление выражений.

Во время отладки можно вычислить любое выражение. [12]

· Точки останова.

Помимо условных точек останова, существуют еще точки останова переменных (срабатывают при чтении или записи в какую-то переменную), точки останова по событиям (вычисляя определенное выражение в нужной строке кода, при этом выполнение не прерывается) и временные точки останова (сработают только один раз).[12]

· Замена во время режима отладки.

В результате того, что ВМ (Виртуальная машина) Java поддерживает HotSwap, существует возможность вносить изменения прямо в процессе отладки. При этом перезагружаются измененные классы.[12]

4.3 Проектирование структур данных и алгоритмов

4.3.1 Общий алгоритм программы

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

1) Получение данных от пользователя.

2) Проверка данных на корректность.

3) Составление листа запросов.

4) Произведение опроса нужных ресурсов согласно листу.

a) На каждом шаге - получение данных с требуемых ресурсов.

b) Обработка полученных данных.

5) Составление рейтинга на основе всех результатов.

6) Вывод результатов в отчет.

4.3.2 Алгоритм работы отдельных стадий выполнения программы

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

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

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

2) Проверка наличия идентификаторов у инспектируемых студентов для заданных ресурсов.

3) Проверка корректности ИД (только цифры).

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

5) Проверка корректности баллов (только цифры и запятые).

6) Проверка наличия временного интервала.

7) Проверка наличия задач и их источников.

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

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

1) Составление общего списка задач и инспектируемых студентов.

2) Создание данных для запроса (один запрос хранит в себе ИД, ресурс, номер требуемой задачи).

3) Запись запроса в лист запросов.

Третья стадия - получение результатов на основе листа запросов, на ней производятся следующие действия:

1) Перебирая лист запросов, вызываем требуемый ресурс, передав ему данные для запроса.

2) Получаем страницу, передаем её соответствующему парсеру.

3) Получаем от парсера лист с результатами по текущей задаче.

4) Заносим этот лист в хеш таблицу, где ключ ФИО, следующий ключ это номер задачи с префиком (зависит от источника).

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

На выходе получаем:

1) Хеш-таблицу с задачами, решенными в срок.

2) Хеш-таблицу с задачами, решенными вне срока.

3) Хеш-таблицу с количеством попыток.

4) Хеш-таблицу с общим количеством полученных баллов (если рейтинг составляется на их основе).

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

6) Хеш-таблицу с местом конкретного участника (на случай если кол-во баллов или решенных задач одинаково, одного отсортированного листа будет недостаточно).

И завершающая стадия - это составление отчета, на основе данных, полученных на четвертой стадии.

Здесь алгоритм работы следующий:

1) Получаем шаблон отчета.

2) Подготавливаем шаблон - вставляем номера задач с префиксом в качестве заголовков столбца.

3) Идя по списку участников:

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

4) Сохраняем отчет в том месте, где указывает пользователь.

4.3.3 Проектирование основных классов

· Парсеры.

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

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

· Классы составления GET запросов к сайтам.

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

Каждый конкретный класс работает с определенным сайтом. Внутри себя хранит шаблон для составления GET запроса. Он устанавливает данные для запроса в нужные параметры и возвращает уже готовый GET запрос.

· Класс сбора результатов по сайтам.

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

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

· Класс анализа полученных результатов.

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

· Класс составления отчета.

Работает с шаблоном отчета. В его функционал входят задачи:

1) Подготовка шаблона (выставление заголовков задач с префиксом).

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

3) Выдача отчета в виде строки.

4.4 Проектирование пользовательского интерфейса

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

· ФИО инспектируемых студентов для вставки в отчет.

· Их ИД на требуемых ресурсах.

· Номера задач с указанием источника.

· Разбалловка задач (за исключением сайта кафедры).

· Период, в течении которого задачи должны были быть решены.

· Возможно, указать язык программирования, если курс специализирован.

· Вид составления рейтинга.

Чтобы занести эти данные, в интерфейсе должны содержаться элементы, приведенные в табл. 1:

Смысловое значение

Вид интерфейса

ФИО, ИД для разных ресурсов

Таблица, поля для добавления новых строк в таблицу

Номера задач, разбалловка, источник

Таблица, поля для добавления новых строк в таблицу

Период

Календарь

Язык

Текстовое поле

Табл.1

Также должны быть функциональные элементы - кнопки, которые позволяют совершать пользователю следующие действия:

· Добавить строку в таблицу (на каждую таблицу).

· Удалить строку из таблицы (на каждую таблицу).

· Получить отчет.

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

· Сохранить/загрузить курс.

· Сохранить/загрузить список инспектируемых студентов.

· Инструкция.

Карта пользовательского интерфейса представлена в табл.2

Вкладка 1

Вкладка 2

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

Таблица задач. Кнопки добавить, удалить. Текстовые поля ФИО, ID timus, ID acmp, ID atpp.

Общее

Меню (сохранить/загрузить курс, сохранить/загрузить список, инструкция)

Календари: начало курса, конец курса

Текстовое поле: язык программирования

Выпадающий список: вид рейтинга

Табл. 2

5. Реализация ПП

5.1 Особенности реализации системы

Согласно проекту ПП, реализуем необходимые классы и структуры.

Приведем набор реализованных классов в виде таблицы, см. табл.3

Название класса (набора классов)

Описание

Родитель/интерфейс

Потомок

HttpGetQuery

HttpGetAcmp

Строит запрос для acmp

HttpGetAtpp

Строит запрос для atpp

HttpGetTimus

Строит запрос для timus

HtmlParser

AcmpParser

Парсер сайта acmp

AtppParser

Парсер сайта atpp

AtppPointsParser

Парсер сайта atpp (достает баллы у задач)

TimusParser

Парсер сайта timus

-

ResultMapper

Отвечает за получение результатов

-

ResultItem

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

-

TaskList

Составляет лист из всех задач с указанием источника

-

Tasks

Сущность: содержит источник, массив номеров задач и баллов к ним

-

User

Сущность, содержит ФИО и ИД для сайтов

-

UserList

Составляет общий лист испытуемых

-

ControllerMain

Отвечает за главный интерфейс

-

ControllerErrorMS

Отвечает за интерфейс отображения ошибок

-

DataChecker

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

-

InternetConnector

Устанавливает соединение с сайтом, возвращает страницу в виде String

-

Main

Главный класс, отвечает за запуск приложения

-

Points

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

-

QueryData

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

-

QueryDataListBuilder

Строит лист сущностей QueryData, на основе UserList и TasksList

-

ReportBuilder

Занимается построением отчета

-

Template

Содержит в себе шаблон отчета

-

TemplateSaver

Класс-сущность для сохранения списков и курсов

-

Validator

Хранит в себе фильтры, методы проверки

Табл.3

Приведем код некоторых классов и методов:

public class AcmpParser extends HtmlParser {

private static final int INDEX_DATE = 1;

private static final int INDEX_TASK_NUMBER = 3;

private static final int INDEX_LANG = 4;

private static final int INDEX_STATUS = 5;

private static HttpGetAcmp httpGetAcmp = new HttpGetAcmp();

/**

* Конструктор, формирует лист с результатами {@link ResultItem}

*

* @param queryData

*/

public AcmpParser(QueryData queryData) {

super(queryData, httpGetAcmp);

addResultAll();

createResultItemList();

}

private void createResultItemList() {

if (table.size() != 0) {

for (Element elem : table) {

ResultItem resultItem = new ResultItem()

.setTaskNum(getTaskNum(elem, INDEX_TASK_NUMBER))

.setStatus(getStatus(elem, INDEX_STATUS))

.setLang(getLanguage(elem, INDEX_LANG))

.setDate(getDate(elem))

.setSiteName(ACMP);

addResultItemAll(resultItem);

}

} else {

ResultItem resultItem = new ResultItem();

resultItem.setStatus("none");

addResultItemAll(resultItem);

}

}

private Date getDate(Element elem) {

try {

return DateFormat.getInstance().parse(getTbByIndex(elem, INDEX_DATE).text());

} catch (ParseException e) {

e.printStackTrace();

}

return new Date();

}

private void addResultAll() {

Elements elements1 = document.getElementsByClass("gray");

Elements elements2 = document.getElementsByClass("white");

int page = 1;

while (!elements1.isEmpty() || !elements2.isEmpty()) {

String urlNextPage = urlSite + "&page=" + page;

List<Element> tempList = new ArrayList<>();

tempList.addAll(elements1.subList(0, elements1.size()));

tempList.addAll(elements2.subList(0, elements2.size()));

for (Element elem : tempList) {

if (isRequiredLang(elem, INDEX_LANG) || ControllerMain.language.isEmpty()) {

table.add(elem);

}

}

document = Jsoup.parse(ic.getHTML(urlNextPage));

elements1 = document.getElementsByClass("gray");

elements2 = document.getElementsByClass("white");

page++;

}

}

}

· Обработка нажатия кнопки "Получить отчет"

public void getReport(ActionEvent actionEvent) {

language = field_lang.getText();

setCheckedDate();

errors = DataChecker.validData();

if (errors.isEmpty()) {

UserList userList = new UserList(new ArrayList<>(userObservableList));

TaskList taskList = new TaskList(new ArrayList<>(taskObservableList));

QueryDataListBuilder queryDataListBuilder = new QueryDataListBuilder(userList, taskList);

ResultMapper resultMapper = new ResultMapper(queryDataListBuilder);

ReportBuilder reportBuilder = new ReportBuilder(resultMapper, taskList);

String resultFile = reportBuilder.reportBuild();

if (Main.getFileResult() == null) {

Main.showAndSave(resultFile);

} else {

Main.saveHtmlDocument(resultFile);

}

} else {

controllerErrorMS.createErrorsMS();

}

}

· Класс построения отчета

public class ReportBuilder {

private static final String TEMPLATE = "row";

private static final String POINTS = "points";

private static final String LEVEL = "level";

private static final String NAME = "name";

private static final String SOLVE_CLASS = "solve";

private static final String OLD_SOLVE_CLASS = "oldsolve";

private static final String NOT_SOLVE_CLASS = "notsolve";

private static final String PLUS = "+";

private static final String MINUS = "-";

private static final String POINTS_HEAD = "pointsHead";

private Element rowTemplate;

private Element headerTemplate;

private Element tdTemplate;

private Document table;

private String lastIdRow = "header";

private String lastIdColumn = "fio";

private HashMap<String, HashMap<String, List<ResultItem"> resultMap = new HashMap<>();

private StoreBuilder sb;

private ResultMapper resultMapper;

ReportBuilder(ResultMapper resultMapper, TaskList taskList) {

this.resultMapper = resultMapper;

resultMap = resultMapper.getResultMap();

sb = new StoreBuilder(resultMapper);

String html = Template.template;

table = Jsoup.parse(html);

if (sort.equals(SORT_BY_SOLVE)) {

table.getElementById(POINTS_HEAD).remove();

}

setThTemplate();

setTdTemplate();

setTaskColumns(taskList);

setRowTemplate(taskList);

createReport();

}

private void createReport() {

ArrayList<String> names = sb.getStoreList();

String status, style;

for (String name : names) {

Set<String> taskNums = resultMap.get(name).keySet();

Element row = createNewResultRow(name);

row.getElementById(NAME).html(name);

row.getElementById(LEVEL).html(getPlace(name));

if (sort.equals(SORT_BY_POINTS)) {

row.getElementById(POINTS).html(getPoints(name));

}

for (String task : taskNums) {

List<ResultItem> resultItems = resultMap.get(name).get(task);

status = isSolveOrOldSolve(name, task) ? PLUS : MINUS;

if (status.equals(PLUS)) {

style = (sb.isSolve(name, task)) ? SOLVE_CLASS : OLD_SOLVE_CLASS;

} else {

style = NOT_SOLVE_CLASS;

}

row.getElementById(task).addClass(style);

row.getElementById(task).html(resultMapper.getFio_task_tryCount_map().get(name).get(task) + status);

}

table.getElementById(lastIdRow).after(row.toString());

lastIdRow = name;

}

}

private String getPoints(String name) {

return (sb.getFio_solvePoints_map().get(name) != null) ? String.valueOf(sb.getFio_solvePoints_map().get(name)) :

"0";

}

private String getPlace(String name) {

return String.valueOf(sb.getFio_place().get(name));

}

private boolean isSolveOrOldSolve(String name, String task) {

return sb.isSolve(name, task) || sb.isOldSolve(name, task);

}

private void setTaskColumns(TaskList taskList) {

String[] taskNum = taskList.getAllTasks();

Element newTh;

for (String aTaskNum : taskNum) {

newTh = createNewTh(aTaskNum);

table.getElementById(lastIdColumn).after(newTh.toString());

lastIdColumn = aTaskNum;

}

}

String reportBuild() {

return table.toString();

}

private Element createNewTemplateTd(String id) {

Element newTd = tdTemplate.clone();

newTd.attr("id", id);

return newTd;

}

private void setRowTemplate(TaskList taskList) {

rowTemplate = table.getElementById(TEMPLATE);

table.getElementById(TEMPLATE).remove();

if (sort.equals(SORT_BY_SOLVE)) {

rowTemplate.getElementById(POINTS).remove();

}

String lastTdID = "name";

String[] taskNums = taskList.getAllTasks();

for (String task : taskNums) {

Element newTd = createNewTemplateTd(task);

rowTemplate.getElementById(lastTdID).after(newTd.toString());

lastTdID = task;

}

}

private void setThTemplate() {

headerTemplate = table.getElementById("taskNum");

table.getElementById("taskNum").remove();

}

private void setTdTemplate() {

tdTemplate = table.getElementById("td");

table.getElementById("td").remove();

}

private Element createNewTh(String taskNum) {

Element newTh = headerTemplate.clone();

newTh.attr("id", taskNum);

newTh.html(taskNum);

return newTh;

}

private Element createNewResultRow(String id) {

Element newRow = rowTemplate.clone();

newRow.attr("id", id);

return newRow;

}

}

5.2 Политика безопасности

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

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

· Запрет ввода всех символов, кроме цифр в поля идентификаторов.

· Запрет ввода всех символов, кроме цифр и разделителей в поля "Баллы", "Задачи".

· Запрет ввода в поля "Дата" (только выбор из календаря).

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

· Соответствия количества баллов количеству задач.

· Заполненности полей (кроме поля "Язык программирования").

· Есть ли как минимум одна запись в каждой таблице.

· 6. Тестирование ПП

6.1 Обоснование методики тестирования

Тестирование ? это процесс выполнения программ или иная деятельность с программой и программными документами, осуществляемая в целях обнаружения факта наличия ошибок или аттестации программного продукта.[5]

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

Существует три стратегии тестирования по знанию внутренностей системы: "черный ящик", "белый ящик", а также комбинирование двух этих методов. Для нашей системы выберем стратегию "черного ящика" или тестирование с управлением по данным. Она обычно применяется для тестирования пользовательских интерфейсов. При этом требуется взаимодействие с системой: ввод данных и сбор результатов, но нет необходимости в знании ее внутреннего устройства. Цель такого тестирования - выяснить, при каких условиях и данных программа ведет себя не так, как прописано в спецификации. [11]

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

Функциональное тестирование включает следующие методы:

· Эквивалентное разбиение.

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

· Анализ граничных значений.

Производится анализ значений, находящихся на границах классов эквивалентности. [11]

· Анализ причинно-следственных связей.

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

· Предположение об ошибке.

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

Для нашей системы рассмотрим следующий набор тестов.

Поле "идентификатор" (программа написана таким образом, что возможен ввод только цифр в поле):

· Идентификатор участника должен быть положительным числом.

· Идентификатор участника является отрицательным числом.

· Идентификатора участника на сайте не существует.

· Идентификатор не введен.

Поле "дата" (предусматривает выбор даты из календаря) :

· Даты введены верно, есть промежуток между ними.

· Даты перепутаны местами.

· Введена одна и та же дата.

· Дата не введена.

Поле "номера задач" (предусмотрен ввод только цифр):

· Введены положительные номера задач.

· Введены отрицательные номера задач.

· Номер задачи не введен.

· Номер задачи введен некорректно (несколько разделителей, лишний разделитель и т.д.).

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

· Язык введен верно.

· Язык введен не верно.

· Ничего не введено.

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

· Ничего не выбрано.

· Выбран элемент списка.

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

· Загрузка пустого шаблона.

· Загрузка шаблона некорректного формата.

· Загрузка корректного шаблона.

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

· Не выбран ни один сайт для отчета.

· Выбран один сайт.

· Выбрано два разных сайта.

· Выбрано два одинаковых сайта.

Чтобы протестировать поле "баллы" (предусмотрено только для сайтов http://acm.timus.ru и https://acmp.ru, существует возможность ввода только цифр и разделителей), необходимо:

· Не введено ничего.

· Введено корректно.

· Введено некорректно (лишние разделители и т.д.).

· Введено баллов меньше, чем записано задач.

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

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

6.2 Результаты тестирования

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

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

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

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

Определим основные параметры ПП:

· Производительность системы.

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

· Удобство ручного ввода.

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

Время, затрачиваемое пользователем на добавление новых 6 задач: 22 секунды.

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

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

· Надежность системы.

За время тестирования системы зависаний и иных сбоев обнаружено не было.

Все функциональные возможности разработанного ПП соответствуют функциям, которые были заявлены в п. 3.1.

7. Внедрение системы

7.1 Действия с участниками.

7.1.1 Добавление участника

Чтобы добавить нового участника введите имя в поле "ФИО". Затем заполните поля с идентификаторами ("ID acmp", "ID timus" и "ID attp"), заранее зарегистрировавшись на соответствующих сайтах (http://acm.timus.ru, http://atpp.vstu.edu.ru и https://acmp.ru). Нажмите кнопку "Добавить" и убедитесь в том, что участник появился в таблице.

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

После совершения изменений в поле нажмите "Enter".

Для сохранения списка участников откройте вкладку "Файл" и выберите "Сохранить список". Затем введите имя сохраняемого файла и укажите место сохранения.

7.1.2 Загрузка сохраненного списка участников

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

7.1.3 Удаление участников

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

7.2 Действия с задачами.

7.2.1 Добавление задач

Чтобы добавить задачи введите их номера в поле "Задачи" через запятую. Затем выберите сайт, с которого будет осуществляться сбор данных (http://acm.timus.ru, http://atpp.vstu.edu.ru или https://acmp.ru). Нажмите кнопку "Добавить" и убедитесь в том, что задача (список задач) появилась в таблице.

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

После совершения изменений в поле нажмите "Enter".

Для сохранения списка задач откройте вкладку "Файл" и выберите "Сохранить курс". Затем введите имя сохраняемого файла и укажите место сохранения.

7.2.2 Загрузка сохраненного списка задач

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

7.2.3 Удаление задач из списка

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

7.3 Заполнение основных полей

7.3.1 Поля "Дата"

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

7.3.2 Поле "Язык"

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


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

  • Характеристика и особенности системы Pascal ABC 3.0.1. Обучение программированию школьников и студентов младших курсов. Создание и отладка программного продукта для поиска документа, книги в библиотеке или в архиве, получения информации об издании.

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

  • Порядок сбора данных с помощью программного обеспечения "ПРОЛОГ". Языки программирования VBA и HTML, их характерные особенности. Web-сервера Apache, принцип работы серверной системы. Реализация сбора данных и разработка сайта с показаниями приборов.

    дипломная работа [4,4 M], добавлен 24.09.2014

  • Расчет издержек предприятия на разработку программного продукта и экономической эффективности от его внедрения. Топология физических связей и структуризация сети. Характеристика программного обеспечения. Средства автоматизации, описание алгоритма задачи.

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

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

    дипломная работа [3,0 M], добавлен 28.01.2014

  • Возможности создания баз данных средствами программного продукта SQL. Изучение предметной области и разработка проекта базы данных по учету студентов "Журнал классного руководителя". Задачи реализации программного средства, его тестирование и отладка.

    курсовая работа [3,7 M], добавлен 07.12.2012

  • Обоснование выбора языка программирования. Анализ входных и выходных документов. Логическая структура базы данных. Разработка алгоритма работы программы. Написание программного кода. Тестирование программного продукта. Стоимость программного продукта.

    дипломная работа [1008,9 K], добавлен 13.10.2013

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

    дипломная работа [2,7 M], добавлен 18.04.2014

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

    курсовая работа [3,7 M], добавлен 05.04.2012

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

    дипломная работа [2,1 M], добавлен 12.04.2014

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

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

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