Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ADD6.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
772 Кб
Скачать
☆

2 Обзор системы

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

  • Разграничение прав доступа пользователей

    • Запрос имени пользователя

    • Запрос пароля

    • Применение политики безопасности в соответствии с введенными данными

  • Работа с БД

    • Реализация запросов пользователя

      • Просмотр таблиц

      • Добавление данных в таблицы

      • Изменение данных в таблицах

      • Удаление данных из таблиц

    • Поиск данных

      • Поиск по конкретным значениям атрибутов

        • Поиск по ФИО ди-джея

        • Поиск по дате рождения ди-джея

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

        • Поиск по ведущему передачи

        • Поиск по названию передачи

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

        • Поиск по названию песни

        • Поиск по исполнителю песни

        • Поиск по жанру песни

        • Поиск по рейтингу песни

        • Поиск по дате эфира

        • Поиск по времени начала эфира

        • Поиск по ведущему эфира

      • Поиск по интервалам значений атрибутов

        • Поиск по дате рождения ди-джея

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

        • Поиск по рейтингу песни

        • Поиск по дате эфира

        • Поиск по времени начала эфира

  • Формирование плана эфира

    • Выбор песен для эфира

    • Выбор передач для эфира

    • Выбор ведущего эфира

    • Генерация вариантов расписания эфира

  • Сохранение плана эфира, одобренного пользователем

    • Формирование текстового файла (на жестком диске, в специально отведенной папке)

    • Запись в файл всех данных об эфире

  • Помощь

    • Открытие файла помощи

  • Выход

    • Выход из программы по желанию пользователя

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

3 Контекст системы

4 Проектирование системы

4.1Метод проектирования

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

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

Используемая среда разработки – Borland C++ Builder 6. Этот выбор обусловлен тем, что данная среда удобна в работе, обладает широким набором типовых графических компонент и у разработчика есть опыт работы с этой средой, что ускорит работу.

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

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

4 .2 Описание декомпозиции

  1. Описание компонент

5.1 EnterUnit (Вход)

Тип: Главный модуль

Назначение: Эта компонента необходима для входа в систему и вызова справки.

Для достижения этой цели компонента отображает на экране графическое окно “FormEnter” следующего вида:

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

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

Выход: нет

Задача:

Компонента отображает на экране окно “FormEnter” и ожидает нажатия одной из кнопок.

При нажатии кнопки “ButtonEnter” (она отображается с надписью «Вход»), компонента считывает значения строк имени и пароля и записывает их в глобальные переменные “NAME”, “KEY” соответственно. Затем передает управление компоненте «Разграничение прав доступа пользователей».

При нажатии кнопки “ButtonHelp1” (она отображается с надписью «ОК»), компонента передает управление компоненте «Функция вызова справки»

Условия применения: Данная компонента находится в верхнем уровне иерархии компонент. Она, в зависимости от действий пользователя, передает управление компонентам «Разграничение прав доступа пользователей» или «Функция вызова справки».

Обращения:

Radio.exe

    1. Access (Разграничение прав доступа пользователей)

Тип: Модуль

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

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

Вход: Нет

Выход: Нет

Задача:

Компонента запускает подфункцию «Вход зарегистрированного пользователя» с параметрами NAME, KEY.

Если функция «Вход зарегистрированного пользователя» вернула значение “false”, компонента передает управление компоненте «Вход» и завершает свою работу.

Если функция «Вход зарегистрированного пользователя» вернула значение “true”, компонента отображает на экране графическое окно “FormMain”, которое имеет следующий вид:

При открытии вкладки «Работа с БД», компонента запускает подфункцию «Проверка: есть ли у пользователя право на действие, которое он пытается выполнить» для действия «Просмотр таблиц».

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

Если оба раза эта подфункция вернула значение “true”, то на экране отображаются все таблицы, кроме таблицы «Пользователи», и данные всех их столбцов.

Если в первый раз подфункция «Проверка: есть ли у пользователя право на действие, которое он пытается выполнить» вернула значение “true”, а во второй – “false”, то на экране отображаются все таблицы, кроме таблицы «Пользователи», и данные всех их столбцов, за исключением таблицы «Ди-джеи», в которой не отображаются данные столбцов: номер телефона, адрес, дата рождения.

Если в первый раз подфункция «Проверка: есть ли у пользователя право на действие, которое он пытается выполнить» вернула значение “false”, а во второй – “ true ”, то на экране отображается только таблица «Ди-джеи».

Если эта подфункция оба раза вернула значение “false”, открывается следующая вкладка.

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

При нажатии одной из кнопок: ButtonFind (Найти), ButtonUpdate (Изменить), ButtonAdd (Добавить), ButtonDel (Удалить), вызывается подфункция «Проверка: есть ли у пользователя права на действие, которое он пытается совершить».

Если эта подфункция возвращает значение “true”, данная компонента передает управление компоненте «Работа с БД».

Если подфункция «Проверка: есть ли у пользователя права на действие, которое он пытается совершить» возвращает значение “false”, компонента запускает подфункцию «Вывод на экран сообщения о невозможности совершения действия».

При открытии вкладки «Создать эфир»

Компонента запускает подфункцию «Проверка: есть ли у пользователя права на действие, которое он пытается совершить» и если она возвращает значение “true”, данная компонента передает управление компоненте «Формирование плана эфира».

Если эта подфункция возвращает значение “false”, открывается следующая вкладка.

При открытии вкладки «Утвердить эфир»

Компонента вызывает подфункцию «Проверка: есть ли у пользователя права на действие, которое он пытается совершить» и если она возвращает значение “true”, список эфиров заполняется данными из таблицы «Эфир».

Если эта подфункция возвращает значение “false”, открывается следующая вкладка.

При выборе строки в списке эфиров в правом окне отображается расписание этого эфира.

При нажатии кнопки “ButtonConfirm” (Утвердить) вызывается компонента «Сохранение плана эфира».

При открытии вкладки «Работа с пользователями», компонента вызывает подфункцию «Проверка: есть ли у пользователя права на действие, которое он пытается совершить», и, если она возвращает значение “false”, открывается следующая вкладка.

Если функция «Проверка: есть ли у пользователя права на действие, которое он пытается совершить» возвращает значение “true”, компонента передает управление компоненте «Работа с БД», которая возвращает все данные таблицы «Пользователи». Компонента отображает их на экране.

При нажатии пользователем кнопки “ButtonReg”, которая отображается с надписью «Добавить», компонента отображает окно вида:

И, после нажатия кнопки “ButtonDataReg” (ОК), сохраняет значения полей ввода в две строковые переменные: RegName, RegKey.

После этого компонента вызывает подфункцию «Регистрация пользователей» с параметрами RegName, RegKey.

Если функция «Регистрация пользователей» возвращает значение “true”, управление передается компоненте «Работа с БД».

При нажатии пользователем кнопки “ButtonUpdUser”, которая отображается с надписью «Изменить», компонента сохраняет значения первых двух столбцов выделенной строки в переменные UpdName, UpdKey.

После этого компонента вызывает подфункцию «Изменение прав доступа пользователя» с параметрами UpdName, UpdKey.

Если функция «Изменение прав доступа пользователя» возвращает значение “true”, управление передается функции «Работа с БД».

При открытии вкладки «Справка», компонента передает управление компоненте «Функция вызова справки».

Условия применения: Данная компонента находится в верхнем уровне иерархии компонент, она передает управление компонентам: «Работа с БД», «Сохранение плана эфира, одобренного пользователем» и «Формирование плана эфира».

Обращения:

void Access();

    1. Registration (Регистрация пользователей)

Тип: функция

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

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

    • string Name - имя пользователя

    • string Key - пароль пользователя

    • bool Viewing - право на просмотр данных

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

    • bool ViewDjConf - право на просмотр личной информации о ди-джеях

Как было сказано выше, к личной информации относятся номера телефонов, адреса и даты рождения ди-джеев

    • bool WriteDelInf - право на запись и удаление данных

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

    • bool WriteDelDjConf - право на запись и удаление личной информации о ди-джеях

    • bool Administrator - право на просмотр, запись, удаление любых данных.

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

    • bool PlanGeneration - право на планирование эфира

Это право дает доступ к функции планирования эфира, и, по завершении планирования, результаты (планы эфиров) сохраняются в БД независимо от того, есть ли у пользователя право “WriteDelInf”.

    • bool ConfirmPlan - право на утверждение плана эфира

Это право разрешает просмотр таблицы эфиров и изменение атрибута “confirmed” этой таблицы, даже если это противоречит другим правам.

Вход: На вход поступают две строковые переменные.

Выход: Данная компонента возвращает значение “true”, если структура «Пользователь» успешно заполнена, в противном случае возвращается значение “false”.

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

Задача:

Компонента запускает подфункцию «Проверка: не совпадает ли имя регистрируемого пользователя с именем уже существующего», и, если она вернула значение “true”, то происходит запуск подфункции «Заполнение структуры данными о новом пользователе» и завершение работы компоненты со значением “true”.

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

Условия применения: Данная компонента находится во втором уровне иерархии компонент и является дочерней для компоненты «Разграничение прав доступа пользователей».

Обращения:

void Registration(string name, string key)

    1. EnterUser (Вход зарегистрированного пользователя)

Тип: Функция

Назначение: Аутентификация

Для достижения этой цели, компонента проверяет существование пользователя с таким именем и верность пароля и, при положительном результате проверок, заполняет структуру данных «Права» правами данного пользователя, взятыми из БД. Структура «Права» содержит:

    • bool Viewing - право на просмотр данных

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

    • bool ViewDjConf - право на просмотр личной информации о ди-джеях

Как было сказано выше, к личной информации относятся номера телефонов, адреса и даты рождения ди-джеев

    • bool WriteDelInf - право на запись и удаление данных

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

    • bool WriteDelDjConf - право на запись и удаление личной информации о ди-джеях

    • bool Administrator - право на просмотр, запись, удаление любых данных.

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

    • bool PlanGeneration - право на планирование эфира

Это право дает доступ к функции планирования эфира, и, по завершении планирования, результаты (планы эфиров) сохраняются в БД независимо от того, есть ли у пользователя право “WriteDelInf”.

    • bool ConfirmPlan - право на утверждение плана эфира

Это право разрешает просмотр таблицы эфиров и изменение атрибута “confirmed” этой таблицы, даже если это противоречит другим правам.

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

Выход: Данная компонента возвращает значение “true”, если вход пользователя произошел успешно, в противном случае компонента возвращает значение “false”.

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

Задача:

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

Если подфункция «Проверка существования пользователя с заданным именем» возвращает значение “false”, то компонента вызывает подфункцию «Выдача на экран соответствующего сообщения об ошибке входа в систему» и завершает свою работу, возвращая значение “false”.

Если подфункция «Проверка верности пароля» возвращает значение “true”, то компонента вызывает подфункцию «Ассоциация пользователя с его правами» и, после ее завершения, тоже завершает свою работу, возвращая значение “true”.

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

Условия применения: Данная компонента находится во втором уровне иерархии компонент и является дочерней для компоненты «Разграничение прав доступа пользователей».

Обращения:

void EnterUser(string name, string key)

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

Тип: Функция

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

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

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

Выход: Компонента возвращает значение “true”, если структура «Пользователь» успешно заполнена, в противном случае компонента возвращает значение “false”.

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

Задача:

Компонента отображает на экране окно “FormUpdRole”:

После нажатия кнопки “ButtonUpdRole”, компонента вызывает подфункцию «Проверка: останется ли после изменений хотя бы один пользователь с правами администратора».

Если подфункция «Проверка: останется ли после изменений хотя бы один пользователь с правами администратора» возвращает значение “false”, то компонента вызывает подфункцию «Выдача сообщения о невозможности изменения прав доступа» и завершает свою работу, возвращая значение “false”.

Если подфункция «Проверка: останется ли после изменений хотя бы один пользователь с правами администратора» возвращает значение “true”, то компонента вызывает подфункцию «Заполнение структуры данных новыми данными» и, после ее завершения, тоже завершает свою работу, возвращая значение “true”.

Условия применения: Данная компонента находится во втором уровне иерархии компонент и является дочерней для компоненты «Разграничение прав доступа пользователей».

Обращения:

void SetRole(string name, string key)

    1. SaveFinishPlan (Сохранение плана эфира, одобренного

пользователем)

Тип: Функция

Назначение: Данная компонента необходима для сохранения плана эфира в текстовый файл.

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

Вход: На вход поступает массив структур «ЭлементЭфира», структура «ЭлементЭфира» содержит:

  • TDateTime TimeStart – время включения песни или передачи

  • AnsiString ElementName – название песни или передачи

  • AnsiString ExecElName – исполнитель песни или ведущий передачи

Выход: Выходом данной компоненты является файл формата *.txt, заполненный расписанием эфира.

Задача:

Компонента суммирует первые две строки полученного на вход расписания эфира в переменную FileName типа string.

Затем компонента создает файл FileName.txt если такого еще не существует.

Компонента открывает файл FileName.txt и переписывает туда полученное расписание эфира, после чего закрывает файл.

Условия применения: Данная компонента находится в верхнем уровне иерархии компонент.

Обращения:

Void SaveFinishPlan(StringList plan)

    1. Planing (Формирование плана эфира)

Тип: Функция

Назначение: Данная компонента необходима для генерации планов эфиров.

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

Вход: нет

Выход: нет

Задача:

Компонента считывает данные окна “FormMain” в структуру «Ограничения эфира», которая имеет вид:

  • string DateOfEfir – Дата эфира

  • string TimeOfEfir – Время начала эфира

  • string Topic – Тема эфира

  • StringList Leaders – Желательные ведущие

  • StringList Songs – Желательные песни

  • StringList Transfers – Желательные передачи

Затем компонента вызывает функцию «Проверка существования желательных ведущих, передач и песен», и, если она возвращает значение “true”,компонента вызывает функцию «Выбор ведущего эфира».

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

Если функция «Выбор ведущего эфира» возвращает значение “false”, компонента завершает свою работу.

Если функция «Выбор ведущего эфира» возвращает значение “true”, компонента вызывает функцию «Выбор передач для эфира».

Если функция «Выбор передач для эфира» возвращает значение “false”, компонента завершает свою работу.

Если функция «Выбор передач для эфира» возвращает значение “true”, компонента вызывает функцию «Выбор песен для эфира».

Затем компонента вызывает функцию «Генерация вариантов расписания эфира», и, после ее завершения, записывает полученные варианты расписания в поле Memo формы “FormMain” вкладки «Создать эфир». После чего, завершает свою работу.

Условия применения: Данная компонента находится в верхнем уровне иерархии компонент.

Обращения:

void Planing();

    1. VarOfPlan (Генерация вариантов расписания эфира)

Тип: Функция

Назначение: Данная компонента необходима для составления различных планов эфира из подобранных списков песен и передач.

Вход: На вход данной компоненты поступают:

  • Массив структур «Песня»

    • AnsiString SongName – Название песни

    • AnsiString ExecName – Исполнитель

  • Массив структур «Передача»

  • AnsiString TransfName – Название передачи

  • AnsiString LeaderName – Ведущий

  • Строка, содержащая имя ведущего эфира

Выход: На выходе получаем массив структур «ЭлементЭфира»

Задача:

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

После этого, компонента запускает цикл, в котором поочередно вызывает функции «Генерация времени начала других передач» и «Генерация времени начала песен», и проверяет, не превысил ли таймер значение 25 секунд.

Выход из цикла осуществляется, если:

  1. таймер превысил данное значение

  2. функция «Генерация времени начала песен» завершила свою работу вследствие окончания списка песен, не имеющих времени начала

  3. функция «Генерация времени начала других передач» завершила свою работу вследствие превышения счетчика вызовов этой функции своего порогового значения.

В случаях (1) и (2), компонента вызывает функцию «Заполнение структуры «Эфир»» и, после ее выполнения, завершает свою работу.

В случае (3), компонента передает управление компоненте «Выбор передач для эфира» и ожидает нового списка передач для повторной попытки планирования.

Условия применения: Данная компонента находится на втором уровне иерархии компонент и является дочерней для компоненты «Формирование плана эфира».

Обращения:

VarOfPlan(TSong *massSong, TTransfer *massTransf, AnsiString leader)

    1. WorkWithDB (Работа с БД)

Тип: Функция

Назначение: Осуществляет работу с БД

Для достижения этой цели компонента формирует и реализует запросы к БД.

Вход: идентификатор действия

Выход: результат запроса

Задача:

Компонента запускает функцию «Формирование запросов к БД» и ожидает результата от БД

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

Обращения:

void WorkWithDB(int id)

    1. InquiryForm (Формирование запросов к БД)

Тип: Функция

Назначение: Формирование запросов к БД

Для достижения этой цели компонента определяет, какую из подфункций: «Найти», «Добавить», «Изменить», «Удалить», необходимо вызвать, вызывает ее и передает строку запроса к СУБД компоненте «Реализация запросов к БД».

Вход: идентификатор действия

Выход: строка запроса к СУБД в соответствии со стандартом языка SQL

Задача:

Если идентификатор действия равен “1”, компонента вызывает функцию «Найти».

Если идентификатор действия равен “2”, компонента вызывает функцию «Изменить».

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

Если идентификатор действия равен “4”, компонента вызывает функцию «Удалить».

После завершения выбранной функции компонента передает результат в компоненту «Реализация запросов к БД».

Условия применения: Данная компонента находится во втором уровне иерархии компонент и является дочерней для компоненты «Работа с БД».

Обращения:

void InquiryForm(int id)

    1. InquiryRealise (Реализация запросов к БД)

Тип: Модуль работы с БД

Назначение: Непосредственная работа с СУБД

Вход: строка запроса к СУБД в соответствии со стандартом языка SQL

Выход: результат запроса

Задача:

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

Условия применения: компонента находится во втором уровне иерархии компонент и является дочерней для компоненты «Работа с БД».

Обращения:

InquiryRealise(string str)

    1. Help (Функция вызова справки)

Тип: Функция

Назначение: Информирование пользователя о возможностях и правилах работы с программой

Для достижения этой цели компонента отображает на экране файл справки

Вход: нет

Выход: нет

Задача:

Компонента находит в своей директории файл HELP.html и открывает его.

Условия применения: Компонента находится в верхнем уровне иерархии компонент.

Обращения:

void Help();

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