Разработка системы учета успеваемости студентов на основе рейтинговой системы - подсистема "Кафедра"

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

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

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

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

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

Содержание

  • Введение
  • 1 Формирование требований к программному средству
    • 1.1 Разработка диаграммы вариантов использования
      • 1.1.1 Выявление акторов
      • 1.1.2 Выявление вариантов использования
      • 1.1.3 Создание диаграммы вариантов использования
  • 2 Анализ предметной области
    • 2.1 Описание потоков данных
    • 2.2 Построение диаграммы потоков данных
  • 3 Проектирование программного средства
    • 3.1 Проектирование архитектуры программного средства
      • 3.1.1 Шаблон MVC
      • 3.2 Проектирование структуры информационного обеспечения
    • 3.3 Проектирование интерфейса программного средства
  • 4 Реализация программного средства
    • 4.1 Выбор средств реализации
    • 4.2 Реализация информационного обеспечения
    • 4.3 Реализация пользовательского интерфейса
    • 4.4 Реализация функциональности программного средства
    • 4.5 Организация взаимодействия приложения с базой данных.
    • 4.6 Справочная система
  • 5 Тестирование программного средства
  • Заключение
  • Приложение А. Введение
  • Приложение Б. Диаграмма потоков данных
  • Приложение В. ER-диаграмма
  • Приложение Г. Исходный код
  • Введение

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

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

1 Формирование требований к программному средству

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

1.1 Разработка диаграммы вариантов использования

учет успеваемость студент программа

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

1.1.1 Выявление акторов

Краткое описание акторов представлено в таблице 1.

Таблица 1. Выявление акторов.

Актор

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

Администратор

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

Администратор кафедры

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

Преподаватель

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

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

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

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

Акторы

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

Создается структура факультетов и кафедр ВУЗа

Главный администратор

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

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

Главный администратор, администратор кафедры

Получение статистики по кафедре

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

Главный администратор, Администратор кафедры

Добавление учебных работ и оценок студентов

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

Главный администратор, Администратор кафедры, Преподаватель

Получение статистики и данных об успеваемости

Позволяет пользователю получить данные о рейтинге студентов/групп

Главный администратор, Администратор кафедры, Преподаватель

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

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

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

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

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

Опишем данные системы в виде диаграммы потоков данных (data flows diagram). Для этого определим потоки данных, объекты и хранилища.

2.1 Описание потоков данных

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

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

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

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

2.2 Построение диаграммы потоков данных

На основе приведенного описания построим диаграмму потоков данных. Диаграмма потоков данных схематично представлена в приложении Б.

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

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

Общую схему функционирования web-приложения можно представить следующим образом: пользователь запрашивает страницу через свой web-браузер. Web-браузер формирует HTTP-запрос и отправляет его серверу. Сервер анализирует запрос, далее он либо выдает запрошенный пользователем файл (картинка, статический HTML, flash-анимация), либо передает управление PHP-скрипту. Если пользователь ввел какие-либо данные в форму, то они передаются в скрипт как параметры. В зависимости от запрошенных данных скрипт может обращаться к серверу баз данных и получать данные из БД. Затем скрипт формирует HTML-страницу и передает ее web-серверу, а тот, в свою очередь, возвращает страницу браузеру пользователя через HTTP. Концептуальную схему этого процесса можно увидеть на рисунке 2.

Рис. 2. Общая схема функционирования web-приложения

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

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

3.1.1 Шаблон MVC

Для отделения логической структуры и реализации компонентов ПС будет применен шаблон проектирования (паттерн) программного обеспечения model-controller-view. Суть его заключается в том, что ПС разделяется на три независимых компонента :

· Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера ), изменяя свое состояние.

· Представление (View). Отвечает за отображение информации (пользовательский интерфейс).

· Поведение (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.

Рис. 3. Структура MVC

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

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

Рис. 3. Диаграмма последовательностей архитектуры MVC

3.2 Проектирование структуры информационного обеспечения

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

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

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

3.3 Проектирование интерфейса программного средства

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

Интерфейс нашего ПС будет состоять из 4х основных блоков:

1. Заголовок (Хэдер) . Содержит картинку и название ПС.

2. Нижняя часть (Футер). Содержит копирайт.

3. Блок меню слева. Содержит меню с основной навигацией системы.

4. Блок содержимого (контент). В нем будет отображаться основное содержимое.

Структура блоков показана на рисунке 4.

Хэдер

Меню

Контент

Футер

Рис. 4. Структура интерфейса программного средства

При проектировании интерфейса нужно так же учесть следующее:

· Активные элементы интерфейса (ссылки, кнопки) должны выделяться и контрастировать со статическими.

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

· Интерфейс должен быть прост и не перегружен лишними элементами.

4 Реализация программного средства

4.1 Выбор средств реализации

Для реализации нашей задачи нам необходима система клиент-сервер с централизованным хранением данных успеваемости и разграничением доступа к этим данным. Для этого была выбрана платформа Web, с использованием языка PHP, веб-сервера Apache и сервера баз данных MySql.

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

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

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

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

· Нет необходимости в специальной клиентской части - доступ к системе можно получить из любого web-браузера.

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

Веб-сервер Apache является одним из самых распространенных серверов. Он установлен на более чем 80% всех интернет-серверов и является стандартом де-факто в этой сфере. Установка и настройка сервера хорошо документирована. Кроме того, существую дистрибутивы для всех распространенных ОС, таких как Windows, Unix и Linux.

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

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

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

Еще один важный критерий выбора данных средств - независимость от платформы конечного кода и структуры БД системы: веб-приложение, созданное под ОС Windows легко, без изменений переносится на платформу Linux/Unix.

4.2 Реализация информационного обеспечения

Для создания физической структуры БД было использовано средство phpMyAdmin, которое является административной утилитой серверов MySql, написанной на PHP.

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

· с помощью phpMyAdmin создается новая база данных, определяются имена пользователей и пароли для доступа к БД, если это необходимо

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

· осуществляется создание таблицы в phpMyAdmin

· процесс повторяется для всех таблиц в структуре БД

· при создании представления проектируется SQL запрос к БД, производится тестирование его на правильность полученных данных, а затем создание представления с помощью специального средства phpMyAdmin

4.3 Реализация пользовательского интерфейса

Пользовательский интерфейс реализуется путем отделения HTML-кода от кода программного средства, и использования прослойки - библиотеки-шаблонизатора. Для нашей системы была выбрана библиотека Smarty.

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

Создание шаблона происходит следующим образом: в текстовом редакторе создается и редактируется HTML-страница нужной нам структуры, затем в код страницы вводятся специальные Smarty-теги, ответственные за отображение активного контента. Такие теги имеют вид: {тег [параметр …]} для управляющей структуры, например if, for, или foreach. Тег {$переменная} выведет значение переменной в место, где он расположен. Так, например тег {$content} выведет значение переменной $content.

В нашей системе будет один первичный и несколько вторичных шаблонов. Первичный шаблон содержит в себе полный код HTML-страницы, разделенной на блоки, тэг <head> и ссылку на подключаемые таблицы стилей CSS и статические элементы дизайна. Для отображения конкретного содержимого используется вторичный шаблон, он может содержать в себе таблицы, формы и т. д. Какой следует подключить вторичный шаблон - определяет котроллер, получивший управление в данный момент. Имя вторичного шаблона передается в первичный и тот включает необходимый шаблон в вывод.

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

Конечный пользовательский интерфейс представлен на рисунке 5.

Рис. 5. Скриншот ПС

4.4 Реализация функциональности программного средства

Функциональность нашего программного средства реализуется с помощью нескольких классов. Кратко опишем их:

1) Класс Registry. Реализует общий реестр приложения, в котором хранятся все экземпляры классов, глобальные переменны и прочее. Данный класс был создан с использованием шаблона проектирования «Синглтон». Этот шаблон гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа. Таким образом, мы можем получить экземпляр класса Registry из любой точки нашей программы. Использование реестра в ПС предотвращает засорение глобальной области видимости переменными.

Для предотвращения создания экземпляра класса, его конструктор описан с ключевым словом private, запрещающим доступ к конструктору извне:

private function __construct()

{}

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

private function __clone()

{}

Метод getInstance() предназначен для возвращения единственного экземпляра класса, который хранится в статическом поле $_instance. Если экземляр еще не создан (в случае первого вызова getInstance), то он создается:

public static function getInstance()

{

if (!self::$_instance) {

self::$_instance = new self;

}

return self::$_instance;

}

Все данные хранятся в поле-массиве $vars.

Кроме того, данный класс реализует два интерфейса: ArrayAccess и Iterator. Это позволяет использовать экземпляр класса в качестве объекта перечисления, а также обращаться к классу как к массиву, что очень удобно для нашей задачи. Класс реализует следующие методы, описанные в интерфейсе ArrayAccess: set(), get(), remove(), offsetExists(), offsetGet(), offsetSet(), offsetUnset() и методы, описанные в интерфейсе Iterator: rewind(), current(), key(), next(), valid(). При обращении с объектом как с массивом PHP ищет реализацию этих методов и прозрачно вызывает их. Вместо

$registry->set('key', 'value');

мы вызываем

$registry['key'] = 'value';

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

· datestr_to_timestamp() - преобразует дату формата 'дд-мм-гггг' в метку времени Unix.

· get_script_url() - Возвращает абсолютный адрес вызывающего скрипта. Метод вызывается один раз в файле index.php для определения URL нашего скрипта, для последующего построения всех ссылок.

· get_options() - метод принимает в качестве параметра массив, содержащий полученную из БД таблицу и возвращает HTML-код для заполнения тега <select>. Вторым параметром метод принимает имя идентификаторного поля таблицы $id_fld, которое будет вставлено в тег элемента списка, а третьим - имя поля таблицы $text_fld, которое будет отображаться в списке: <option value=$id_fld>$text_fld</option>. Четвертый параметр $selected не обязателен - он принимает значение поля идентификатора таблицы, которое будет выбрано в списке.

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

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

· htmlchars_deep() - рекурсивно преобразует специальные символы в HTML сущности. Если передан массив, то функция рекурсивно вызывает себя для всех ее элементов. Используется для предотвращения интерпретации строки как HTML кода.

· get_menu() - метод возвращает массив с элементами меню для текущей роли пользователя.

· make_menu() - функция используется для построения HTML-кода меню из массива, выданного функцией lib::get_menu().

· is_childless() - используется для определения, есть ли у заданной таблицы зависимые элементы в другой таблице. Например если вызвать функцию с идентификатором факультета, то она вернет true в том случае, если на данном факультете нет ни одной кафедры.

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

· redirect() - производит HTTP-перенаправление браузера пользователя на другую страницу.

3) Класс Controller_base. Абстрактный класс, от которого наследуются все остальные контроллеры. Он описывает действие по умолчанию в виде метода index(), который должен быть реализован в классах-потомках. Содержит поле registry, где хранится экземпляр реестра.
Каждый класс-потомок может реализовать любое количество методов-действий, но реализация действия по-умолчанию index() обязательна.

Пусть мы, например, унаследовали класс Controller_hello от Controller_base и реализовали в нем 2 метода - index() и world().Такой подход упрощает добавление новой функциональности к нашей системе - все, что требуется - добавить еще один класс-контроллер и реализовать функциональность в нем.

4) Класс Router. В зависимости от строки запроса находит нужный контроллер и действие и передает ему управление. Если контроллер не найден, показывает сообщение об ошибке. Методы класса:

· setPath() - устанавливает путь до папки с классами-контроллерами.

· getController() - обрабатывает строку запроса и находит необходимый файл контроллера. Умеет производить рекурсивный поиск в структуре папок, если контроллер вложенный. При попытке неавторизированного доступа возвращает user/login, показывающий форму авторизации.

· delegate() - осуществляет проверку на доступность контроллера, выданного методом getController, подключает файл, создает экземпляр класса и осуществляет вызов нужного действия. Если контроллер отсутствует, выдает ошибку 404.

5) Класс Access. Проверяет разрешения пользователя на доступ к определенным функциям ПС. Реализуемые методы:

· get_privilege() - получает строку, идентифицирующую привилегию и возвращает true в том случае, если у текущего пользователя имеется соответствующее разрешение.

· restrict() - метод выводит сообщение «Доступ запрещен» и завершает выполнение сценария, запрещая таким образом доступ пользователя к текущей странице. Вызывается в случае, если разрешения пользователя не позволяют ему получить доступ к данной функциональности.

Последовательность действий системы, при получении запроса от пользователя, выглядит следующим образом: система получает запрос от пользователя, запускается Front Controller в виде скрипта index.php. Он подключает скрипт startup.php, в котором происходит подключение необходимых библиотек и классов и их инициализация. Затем index.php передает управление экземпляру класса Router, в котором происходит запуск нужного контроллера. Контроллер выполняет необходимые действия, передает параметры шаблону и определяет имя вторичного шаблона. Затем управление возвращается в index.php, который передает параметры первичному шаблону и инициирует его вывод.

На рисунке 6 можно увидеть диаграмму последовательности работы компонентов системы.

Рис. 6. Диаграмма последовательности работы компонентов

4.5 Организация взаимодействия приложения с базой данных.

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

· Поддержка PHP 4 и 5, СУБД: MySQL, PostgreSQL и InterBase/FireBird.

· Простой и лаконичный интерфейс

· Условные макроподстановки ({}-блоки) и placeholder-ы в теле SQL-запроса

· Экранирование спецсимволов и защита от SQL - инъекций

· Объединение операций выборки и получения данных

Создание объекта для работы с БД выглядит следующим образом:

$DB = DbSimple_Generic::connect($DSN);

Переменная $DSN задается в конфигурационном файле и имеет вид “scheme://user:password@host/database”, где scheme - сервер БД (например mysql, interbase), user и password - имя пользователя и пароль для доступа к БД, host - адрес сервера, где расположена БД, database - имя нашей БД.

Выборка из БД осуществляется следующим образом:

$table = $DB->select(`SELECT * FROM table');

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

$id = $table[0][`id'];

4.6 Справочная система

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

5 Тестирование программного средства

Проведем тестирование системы на некорректный ввод данных.

При попытке ввести несуществующие данные при регистрации система выдает сообщение: “Имя пользователя или пароль не верны ”.

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

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

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

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

Кроме того система имеет защиту от атак типа SQL-инъекции и XSS (cross site scripting)

Заключение

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

Приложение А. Введение

1. Введение

1.1 Цель

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

1.2 Краткое содержание

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

2. Описание пользователей

2.1 Сведения о пользователях

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

2.2 Пользовательская среда

Для доступа к системе пользователю необходимо наличии web-браузера на компьютере, а также подключение к сети Internet/intranet, для обеспечения доступа к серверу.

2.3 Профили пользователей

Типичный представитель

Администратор

Описание

Администратор системы

Тип

Администратор

Ответственности

Перенос инфраструктуры ВУЗа в систему (факультеты, кафедры, специальности)

Критерий успеха

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

Типичный представитель

Администратор кафедры

Описание

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

Тип

Пользователь

Ответственности

Редактирование списков групп и студентов в них

Критерий успеха

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

Типичный представитель

Преподаватель

Описание

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

Тип

Пользователь

Ответственности

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

Критерий успеха

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

2.4 Ключевые потребности пользователей

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

3. Краткий обзор изделия

3.1 Контекст использования системы

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

3.2 Предположения и зависимости

Система не определяет зависимостей.

3.2 Сводка возможностей

Выгоды заказчика

Поддерживающие возможности

Упрощение поиска литературы

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

Ускорение обращения информации

Система позволит ускорить процесс получения экземпляров электронной литературы

Отказ от излишних коммуникаций

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

3.3 Предположения и зависимости

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

4. Возможности продукта

4.1 Хранение данных

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

4.2 Расчет рейтингов

Формирование на основе полученных данных рейтингов студентов

5. Ограничения

Система должна использовать СУБД реляционного доступа.

6. Другие требования к изделию

6.1 Применяемые стандарты

Система должна соответствовать всем стандартам Web-интерфейса.

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

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

· Наличие web-сервера с установленным модулем PHP.

· Наличие сервера БД MySQL.

6.3 Эксплуатационные требования

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

Приложение Б. Диаграмма потоков данных

Приложение В. ER-диаграмма

Приложение Г. Исходный код

Пример исходного кода контроллера facults:

<?php

require_once ('classes/controller_base.class.php');

class Controller_facults extends Controller_Base

{

function index ()

{

$registry = $this->registry;

$full = false;

if ($registry['access']->get_privilege('edit_facults_priv')) $full = true;

$DB = $registry['DB'];

$table = $DB->select('SELECT * FROM facults');

$fields = array('id'=>'id', 'Название'=>'name');

$widths = array('40', '130');

$registry['tpl'] = 'list.tpl';

$add_form = 'Название: <input type="text" name="name"/><br/>';

$params = array('full'=>$full, 'edit'=>site_url.'facults/edit', 'del'=>site_url.'facults/del',

'table'=>$table, 'fields'=>$fields, 'widths'=>$widths, 'add'=>site_url.'facults/add', 'add_form'=>$add_form);

$registry['title'] = 'Список факультетов';

$registry['tpl_params'] = $params;

$registry['help'] = 'Здесь представлен список факультетов ВУЗа.

Администратор может добавлять, удалять и редактировать названия факультетов';

}

function del ()

{

$registry = $this->registry;

if (!$registry['access']->get_privilege('edit_facults_priv')) $registry['access']->restrict();

$id = (int)$this->args[0];

if ($id<=0) return;

if (!lib::is_childless('facults', $id)) {$registry['message'] = 'Невозможно удалить. Сначала удалите

дочерние элементы. <a href="javascript:history.back()">Назад</a>'; return;}

if (!isset($this->args[0])) return;

$DB = $registry['DB'];

$DB->query('DELETE FROM `facults` WHERE id=? LIMIT 1', $id);

lib::redirect(site_url.'facults');

}

function edit ()

{

$registry = $this->registry;

if (!$registry['access']->get_privilege('edit_facults_priv')) $registry['access']->restrict();

if (!isset($this->args[0])) return;

$DB = $registry['DB'];

$id = (int)$this->args[0];

if ($id<=0) return;

$table = $DB->select('SELECT * FROM facults WHERE id=? LIMIT 1', $id);

$name = $table[0]['name'];

if (empty($_POST['name']))

{

$smarty = $registry['smarty'];

//$smarty->assign('name', $name);

$edit_form = 'Название: <input type="text" name="name" value="'.$name.'"/><br/>';

//$smarty->assign('fields', array('Название'=>'name'));

//$smarty->assign('values', array('name'=>$name));

$smarty->assign('edit_form', $edit_form);

$smarty->display('popup_edit.tpl');

exit();

}

else

{

$name = $_POST['name'];

$DB->query('UPDATE `facults` SET name=? WHERE id=? AND NOT name=?',$name, $id, $name);

echo lib::reload_caller_js();

exit();

}

//$registry['message'] = 'Редактируем '.$id;

}

function add ()

{

if (!isset($_POST['name'])) return;

$name = $_POST['name'];

$registry = $this->registry;

if (!$registry['access']->get_privilege('edit_facults_priv')) $registry['access']->restrict();

$DB = $registry['DB'];

$res = $DB->query('INSERT INTO `facults` (name) VALUES (?)', $name);

if (!$res)

{

$registry['message'] = 'Ошибка добавления';

return;

}

lib::redirect(site_url.'facults');

}

}

?>

Класс Router:

<?php

Class Router {

private $registry;

private $path;

private $args = array();

function __construct() {

$this->registry = Registry::getInstance();

}

function setPath($path) {

$path = trim($path, '/\\');

$path .= DIRSEP;

if (is_dir($path) == false) {

throw new Exception ('Invalid controller path: `' . $path . '`');

}

$this->path = $path;

}

/**

* Получает данные о контроллере

*

* @param string $file Имя файла контроллера

* @param string $controller Имя контроллера, по умолчанию 'index'

* @param string $action Имя действия, по умолчанию 'index'

* @param array $args Массив аргументов, переданных через URL

* @return void

*/

private function getController(&$file, &$controller, &$action, &$args) {

$route = (empty($_GET['route'])) ? '' : $_GET['route'];

if (empty($route)) { $route = 'index'; }

// Хак! Если пользователь не вошел кидаем на вход

if (!@$_SESSION['auth']) $route = 'user/login';

// Получаем раздельные части

$route = trim($route, '/\\');

$parts = explode('/', $route);

// Находим правильный контроллер

$cmd_path = $this->path;

foreach ($parts as $part) {

$fullpath = $cmd_path . $part;

// Есть ли папка с таким путём?

if (is_dir($fullpath)) {

$cmd_path .= $part . DIRSEP;

array_shift($parts);

continue;

}

// Находим файл

if (is_file($fullpath . '.php')) {

$controller = $part;

array_shift($parts);

break;

}

}

if (empty($controller)) { $controller = 'index'; };

// Получаем действие

$action = array_shift($parts);

if (empty($action)) { $action = 'index'; }

$file = $cmd_path . $controller . '.php';

$args = $parts;

}

function delegate() {

// Анализируем путь

/**

* @var string $file

*/

$file = $controller = $action = $args = '';

$this->getController($file, $controller, $action, $args);

// Файл доступен?

if (is_readable($file) == false) {

die ('404 Not Found');

}

// Подключаем файл

include ($file);

// Создаём экземпляр контроллера

$class = 'Controller_' . $controller;

$controller = new $class($this->registry);

// Действие доступно?

if (is_callable(array($controller, $action)) == false) {

die ('404 Not Found');

}

// Выполняем действие

$controller->args = $args;

$controller->$action();

}

}

?>

Класс Registry:

<?php

class Registry implements ArrayAccess, Iterator

{

private $vars = array();

/**

* @var Registry

*/

public static $_instance;

private function __construct(){

}

/**

* Возвращает экземпляр класса

*

* @return Registry

*/

public static function getInstance()

{

if (!self::$_instance) {

self::$_instance = new self;

}

return self::$_instance;

}

function set($key, $var) {

/*if (isset($this->vars[$key]) == true) {

throw new Exception('Unable to set var `' . $key . '`. Already set.');

}*/

$this->vars[$key] = $var;

return true;

}

function get($key) {

if (isset($this->vars[$key]) == false) {

return null;

}

return $this->vars[$key];

}

function remove($key) {

unset($this->vars[$key]);

}

function offsetExists($offset) {

return isset($this->vars[$offset]);

}

function offsetGet($offset) {

return $this->get($offset);

}

function offsetSet($offset, $value) {

$this->set($offset, $value);

}

function offsetUnset($offset) {

unset($this->vars[$offset]);

}

public function rewind() {

reset($this->vars);

}

public function current() {

$var = current($this->vars);

return $var;

}

public function key() {

$var = key($this->vars);

return $var;

}

public function next() {

$var = next($this->vars);

return $var;

}

public function valid() {

$var = $this->current() !== false;

return $var;

}

}

?>

Шаблон Index.tpl:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html xml:lang="ru-RU" lang="ru-RU">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<link REL="STYLESHEET" Href="/css/main.css" Type="TEXT/CSS">

<title>{$page_title}</title>

<script type="text/javascript">

{literal}

function toggle()

{

sp = document.getElementById("help_content");

sig = document.getElementById("sign");

if (sp.style.display=="none")

{

sp.style.display="block";

sig.innerHTML = "-";

}

else

{

sp.style.display="none";

sig.innerHTML = "+";

}

}

{/literal}

</script>

</head>

<body>

<table border="0" id="tbl_main">

<tr>

<td colspan="2" id="header"><h1 style='margin-left: 5px; color: #000077;'>Система учета успеваемости студентов</h1></td>

</tr>

<tr id="main" height="450">

<td id="left">

{if $username}

<div id="userbox">

Пользователь: {$username} <small><a href="/user/logout">[Выход]</a></small>

</div>

{/if}

<div id='menu'>

<ul>

{$menu}

</ul>

</div>

</td>

<td id="right">

{if $help}

<div id='help_container'>

<div id='spoiler_head' onclick="toggle()"><span id='sign'>+</span>Справка</div>

<div id='help_content'>{$help}</div>

</div>

{/if}

{if $message}<div id="message">{$message}</div>{/if}

{if $tpl}{include file=$tpl}{/if}&nbsp;</td>

</tr>

<tr>

<td colspan="2" id='footer'><center>&copy; Гром Николай, 2008 г</center></td>

</tr>

</table>

</body>

</html>

Шаблон list.tpl:

<script type="text/javascript">

function popup(url)

{literal}

{

pop=window.open("", "popup","toolbar=0,width=300,height=250,left=160,top=300,resizable=false,fullscreen=0,toolbar=0,status=0,location=0");

pop.document.location=url;

pop.focus();

}

{/literal}

</script>

<center><h2>{$page_title}</h2></center>

<br/>

{if empty($params.table)}

<h2>Извините, записей не найдено</h2>

{else}

<table border="0" id='list'>

<tr>

{foreach from=$params.fields key=field_header item=field_name name='hdr'}

{assign var=iter value=$smarty.foreach.hdr.iteration-1}

<th {if !empty($params.widths)}width='{$params.widths[$iter]}'{/if}>{$field_header}</th>

{/foreach}

{if $params.full}

{if $params.edit}<th>&nbsp;</th>{/if}

<th>&nbsp;</th>

{/if}

</tr>

{foreach from=$params.table item=row name='tbody'}

<tr class={if $smarty.foreach.tbody.iteration % 2==0}'even'{else}'odd'{/if}>

{foreach from=$params.fields item=field_name}

<td>{if $params.links.$field_name}<a href="{$params.links.$field_name}/{$row.id}">{/if}{$row.$field_name|default:"Нет"}{if $params.links.$field_name}</a>{/if}</td>

{/foreach}

{if $params.full}

{if $params.edit}<td><a href="{$params.edit}/{$row.id}" onclick="popup('{$params.edit}/{$row.id}');return false;"><img alt='Редактировать' title='Редактировать' border="0" src='/img/edit.png'/></a></td>{/if}

<td><a href="{$params.del}/{$row.id}"><img alt='Удалить' title='Удалить' border="0" src='/img/del.png'/></a></td>

{/if}

</tr>

{/foreach}

</table>

<br/><br/>

{/if}

<br>

{if $params.full}

Добавить:

<form method="post" action="{$params.add}" id="add_new">

{$params.add_form}

<br/>

<input type="submit" value="Добавить"/>

</form>

{/if}

Размещено на Allbest.ru


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

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