Разработка объектно-ориентированной модели информационной подсистемы для деканата ВУЗа (учет успеваемости студентов)

Разработка объектно-ориентированной модели подсистемы "StudentCount" для деканата ВУЗа (автоматизация учета студентов и их успеваемости). Для решения данной задачи использовалось CASE–средство Rational Rose, сгенерирован программный код для языка С++.

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

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

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

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

СОДЕРЖАНИЕ

Введение

1. Краткая характеристика предметной области

1.1 Общая характеристика деканата вуза

1.2 Обоснование актуальности разработки объектно-ориентированной модели информационной подсистемы для деканата вуза

1.3 Формулировка задач проектирования

2. Создание диаграммы прецедентов

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

4. Создание диаграммы сотрудничества

5. Создание диаграммы классов

6. Добавление деталей к описаниям операций и определение атрибутов классов. Добавление связей между классами

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

8. Создание диаграммы размещения

9. Генерация программного кода С++

Заключение

Библиографический список

Приложение А. Сгенерированный Rational Rose листинг кода. Приложения на языке С++

ВВЕДЕНИЕ

автоматизация учет студент программный

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

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

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

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

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

- провести декомпозицию поставленной задачи.

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

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

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

- автоматизированный учет и ведение статистики по всем процессам.

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

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

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

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

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

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

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

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

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

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

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

Приложение к курсовому проекту содержит листинг сгенерированного Rational Rose кода на языке С++.

1. КРАТКАЯ ХАРАКТЕРИСТИКА ПРЕДМЕТНОЙ ОБЛАСТИ

1.1 Общая характеристика деканата вуза

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

В деканате составляется расписание занятий. Деканат контролирует работу преподавателей и студентов на предмет её соответствия учебному плану, осуществляет общее руководство научной работой студентов.

1.2 Обоснование актуальности разработки объектно-ориентированной модели информационной подсистемы для деканата вуза

Эффективное управление базой данных студентов невозможно без системы автоматизации. Информационная система «Деканат» предназначена для ведения личных дел студентов и может работать отдельно или в составе ИС «Электронные ведомости». Она позволяет автоматизировать:

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

- создание электронных личных дел студентов;

- перевод студентов в другую группу, зачисление, отчисление;

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

- поиск студентов в базе данных;

- получение сводных данных по контингенту студентов и формирование отчетов;

- получение статистики для подготовки отчетов.

1.3 Формулировка задач проектирования

Основной задачей проектирования является разработка объектно-ориентированной системы. Для решения задачи необходимо построить модель в пакете Rational Rose. Разработка модели включает несколько этапов.

1. Построить диаграммы прецедентов. Привести и описать диаграммы вариантов использования информационной системы учета успеваемости студентов.

2. Построить диаграммы последовательности. Привести и описать диаграммы последовательности для одного из прецедентов информационной системы учета успеваемости студентов.

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

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

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

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

7. Построить диаграммы размещения.

8. Привести и описать порядок генерации программного кода на языке С++ для информационной системы учета успеваемости студентов.

Выводы

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

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

2. СОЗДАНИЕ ДИАГРАММЫ ПРЕЦЕДЕНТОВ

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

Добавим действующее лицо на диаграмму, для этого необходимо выбрать на панели инструментов инструмент «Actor» и добавить его на диаграмму.

Добавление действующего лица представлено на рисунке 2.1.

Рисунок 2.1 - Добавление действующего лица на диаграмму

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

Рисунок 2.2 - Действующее лицо на диаграмме классов

Затем, перейдем к следующему шагу создания диаграммы, добавим на нее варианты использования. Создадим вариант использования «Ввести ФИО студента». Для этого необходимо выбрать на панели действий пиктограмму «User Case», и щелкнуть мышкой в рабочей области. Процесс добавления представлен на рисунке 2.3.

Рисунок 2.3 - Добавление на диаграмму варианта использования

«Внести в список нового студента»

Аналогично добавим следующие варианты использования: «Ввод новых данных», «Поиск студента по ФИО», «Редактирование данных об успеваемости», «Удаление студента из списка». После выполнения вышеописанных действий на диаграмме классов будут содержаться объекты, представленные на рисунке 2.4.

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

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

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

Рисунок 2.5 - Диаграмма прецедентов информационной подсистемы

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

Для добавления спецификации к варианту использования необходимо открыть его спецификацию (Open specification) и на вкладке Files добавить текстовой файл - описание спецификации варианта использования. Для этого необходимо выполнить команду «Insert File» контекстного меню, и выбрать соответствующий файл. Спецификация варианта использования «Внести в список нового студента» представлена на рисунке 2.6.

Рисунок 2.6 - Окно спецификации варианта использования

«Внести в список нового студента»

Выводы

1. Диаграмма прецедентов содержит одно действующее лицо: «Пользователь».

2. На диаграмме прецедентов размещено пять вариантов использования: «Внести в список нового студента», «Ввод новых данных», «Поиск студента по ФИО», «Редактирование данных об успеваемости», «Удаление студента из списка».

3. Главным вариантом использования является «Внести в список нового студента».

3. СОЗДАНИЕ ДИАГРАММЫ ПОСЛЕДОВАТЕЛЬНОСТИ

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

Для добавления на диаграмму действующего лица и объектов следует:

1) Перетащить действующее лицо Пользователь с браузера на диаграмму.

2) На панели инструментов нажать кнопку Object (Объект).

3) Щелкнуть мышью в верхней части диаграммы, чтобы поместить туда новый объект.

4) Назвать объект «Аккаунт».

5) Повторить этапы 3 и 4, чтобы поместить на диаграмму все остальные объекты: «Учет успеваемости» и «База данных».

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

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

Рисунок 3.1 - Диаграмма последовательности для варианта использования «Внесение в список нового студента»

Аналогичным образом создаем диаграмму последовательности для варианта использования «Поиск студента и ввод данных», рисунок 3.2. Также создаем диаграммы последовательности для вариантов использования «Редактирование данных об успеваемости», «Удаление студента из списка».

Рисунок 3.2 - Диаграмма последовательности для варианта использования «Поиск студента и ввод данных»

Рисунок 3.3 - Диаграмма последовательности для варианта использования «Редактирование данных об успеваемости»

Рисунок 3.4 - Диаграмма последовательности для варианта использования «Удаление студента из списка»

Рисунок 3.5 - Альтернативный поток «Студент не найден» для варианта использования «Поиск студента по ФИО»

На рисунке 3.5 представлен альтернативный поток «Студент не найден», возникающий в случае, если введенные данные ФИО студента не найдены в базе данных. После ввода ФИО с клавиатуры, объект «Аккаунт» делает запрос базе данных с целью проверки существования введенных данных ФИО студента, далее осуществляется поиск в базе данных студентов. Если таковые данные отсутствуют, то возникает ошибка «данный студент не найден», и пользователю предлагается еще раз ввести данные.

Альтернативный поток «Неверные данные» для варианта использования «Редактирование данных об успеваемости» представлен на рисунке 3.6 и вызывается в случае неверно заполненных полей учета аттестаций, допусков, экзаменов и зачетов.

Рисунок 3.6 - Альтернативный поток «Неверные данные» для варианта использования «Редактирование данных об успеваемости»

Выводы

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

2. Диаграмма последовательности содержит три объекта: «Аккаунт», «Учет успеваемости», «База данных» и одно действующее лицо - «Пользователь».

4. СОЗДАНИЕ ДИАГРАММЫ СОТРУДНИЧЕСТВА

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

Для создания диаграммы сотрудничества необходимо перейти на диаграмму последовательности «Внесение в список нового студента» и нажать клавишу F5. Таким образом, в рабочем окне Rational Rose появится новая диаграмма сотрудничества, рисунок 4.1.

Рисунок 4.1 - Диаграмма сотрудничества для варианта использования

«Внесение в список нового студента»

Выводы

1. Как видно из рисунка 4.1, здесь представлена вся та информация, которая была и на диаграмме последовательности, но кооперативная диаграмма по-другому описывает поток событий. Из нее легче понять связи между объектами, однако труднее уяснить последовательность событий.

2. Диаграмма сотрудничества для основного потока варианта использования «Внесение в список нового студента» содержит одно действующее лицо - «Пользователь», три объекта: «Аккаунт», «База данных» и «Учет успеваемости», а также 12 операций.

5. СОЗДАНИЕ ДИАГРАММЫ КЛАССОВ

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

Создадим классы: «Account», «RegInfo», «DataBase».

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

Класс «RegInfo» содержит всю учетную информацию об успеваемости студента, получаемую из базы данных.

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

Для создания класса в броузере щелкаем правой кнопкой мыши по Use Case View - New - Class Diagram. Далее выбираем на панели инструментов инструмент «Class» и щелкаем мышкой на свободном месте диаграммы. В появившемся классе вводим имя, или выбираем из представленного списка. Создаем три класса, подписываем их. Результат показан на рисунке 5.1.

Рисунок 5.1 - Диаграмма классов для информационной подсистемы учета студентов

Выводы

1. Диаграмма классов определяет типы классов системы и различного рода статические связи, которые существуют между ними. В этом разделе были нанесены классы на диаграмму. Наша диаграмма классов содержит три класса: «Account», «RegInfo», «DataBase».

2. Возможен выбор класса из уже существующих.

3. Класс «Account» представляет собой интерфейс приложения с полями для ввода ФИО студента, таким образом он предоставляет возможность для доступа в систему, а также задает ограничения для пользователя. Класс «RegInfo» содержит всю учетную информацию об успеваемости студента, получаемую из базы данных. Класс «DataBase» отвечает за работу с базой данных, в которой хранится информация обо всех студентах данного факультета.

6. ДОБАВЛЕНИЕ ДЕТАЛЕЙ К ОПИСАНИЯМ ОПЕРАЦИЙ И ОПРЕДЕЛЕНИЕ АТРИБУТОВ КЛАССОВ. ДОБАВЛЕНИЕ СВЯЗЕЙ МЕЖДУ КЛАССАМИ

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

1) В меню модели выбрать пункт Tools > Options.

2) Перейти на вкладку Diagram.

3) Убедиться, что переключатель Show Visibility отмечен.

4) Убедиться, что переключатель Show Stereotypes отмечен.

5) Убедиться, что переключатель Show Operation Signatures отмечен.

6) Убедиться, что переключатели Show All Attributes и Show All Operations отмечены.

7) Убедиться, что переключатели Suppress Attributes и Suppress Operations не отмечены.

8) Перейти на вкладку Notation.

9) Убедиться, что переключатель Visibility as Icons не отмечен.

Добавим к каждому классу атрибуты и операции. Откроем окно спецификации отдельного класса, нажав правой кнопкой мыши по классу на диаграмме и затем Open Specification (Рисунок 6.1).

Перейдем на вкладку Operations, правой кнопкой по полю, затем Insert. Вводим имя новой операции в поле Name, а также задаем ее тип в поле Return type (рисунок 6.2). Далее, переходим на вкладку Attributes, правой кнопкой по полю, затем Insert. Задаем имя атрибута и его тип, в нашем случае String - строковый (рисунок 6.3).

Рисунок 6.1 - Окно спецификации класса «Account»

Рисунок 6.2 - Окно спецификации операции

Рисунок 6.3 - Окно спецификации атрибута «Фамилия»

Выполняя аналогичные операции, заполним классы «RegInfo» и «DataBase».

В таблице 6.1 представлено описание каждого класса диаграммы.

Таблица 6.1 - Описание классов разрабатываемой информационной подсистемы

Класс «Account»

Параметр

Значение

Атрибуты

Фамилия: String - фамилия студента

Имя: String - имя студента

Отчество: String - отчество студента

Операции

EnterSystem() - позволяет войти в систему

ExitSystem() - позволяет выйти из системы

SearchStudent() - осуществляет поиск студента в списке

Класс «RegInfo»

Атрибуты

FIO: String - ФИО студента

CardNumber: String - номер зачетной книжки

Subject: String - название дисциплины

Attestation: String - аттестация студента

Admission: String - допуск к экзаменам/зачетам

Exam: String - оценка по экзамену/зачет

Операции

EnterFIO() - получает от пользователя ФИО студента

EnterCardNumber () - получает номер зачетной книжки студента

EnterSubject () - сохраняет название дисциплины

EnterAttestation () - получает от пользователя информацию об аттестации студента

EnterAdmission () - получает от пользователя информацию о допуске студента

EnterExam () - получает от пользователя информацию об оценках студента по экзамену

Update() - изменяет записи в полях

SendToDB() - отправляет запрос в базу данных

Класс «Database»

Атрибуты

DBName: String - имя базы данных

DBServerName: String - имя сервера базы данных

DBPassword: String - пароль к базе данных

Операции

Connect() - получает доступ к базе данных

Disconnect() - разрывает связь с базой данных

GetRecord() - получить запись из базы данных

CheckRecord() - найти запись в базе данных

UpdateRecord() - сохранить данные

SendData() - отправить ответ на запрос

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

а) связь между классами «Account» и «RegInfo» - ассоциативная, т.к. один класс вызывает метод другого, здесь другой тип связи неуместен. Аккаунтов может быть много, т.к. много студентов, а учетная система всего лишь одна, поэтому кратность связи со стороны класса «Account» - 1..n, а со стороны «RegInfo» - 1;

б) связь между классами «RegInfo» и «DataBase» - ассоциативная, т.к. один класс вызывает метод другого, здесь другой тип связи неуместен. И учетная система со стандартными полями одна, также и база данных одна. Следовательно, кратность связи со стороны обоих классов - 1;

в) связь между классами «Account» и «DataBase» - ассоциативная, т.к. один класс вызывает метод другого, здесь другой тип связи неуместен. Аккаунтов может быть много, т.к. много студентов, а база данных одна. Следовательно, кратность связи со стороны класса «Account» - 1..n, а со стороны «DataBase» - 1.

Процесс связывания классов отношениями аналогичен процессу связывания объектов на диаграмме состояний, или диаграмме последовательности. Для начала необходимо выбрать тип отношения, выберем «Unidirectional Association», зажмем левую кнопку мыши на классе «Account» и протянем связь к классу «RegInfo». Теперь необходимо установить кратность связей. Для этого открываем спецификацию связи двойным щелчком на связи, представленную на рисунке 6.4.

Переходим на вкладку «Role A Detail» и в поле «Multiplicity» выбираем цифру один. На вкладке «Role B Detail» в поле «Multiplicity» выбираем «1..n».

Рисунок 6.4 - Окно спецификации связи между классами

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

Законченный вариант диаграммы классов представлен на рисунке 6.5.

Рисунок 6.5 - Диаграмма классов разрабатываемой информационной подсистемы

Выводы

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

2. Кратность связи между классами «Account - DataBase» - многие-к-одному. Кратность связи между классами «Account - RegInfo» - многие-к-одному. Кратность связи между классами «RegInfo - DataBase» - один-к-одному.

7. СОЗДАНИЕ ДИАГРАММЫ СОСТОЯНИЙ ДЛЯ КЛАССОВ И ДИАГРАММЫ КОМПОНЕНТОВ

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

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

Добавим на диаграмму точку старта и первое состояние класса. Для добавления точки начала необходимо на панели инструментов выбрать инструмент «Start State» и добавить её на диаграмму состояний. Добавление происходит с помощью инструмента «State» (рисунок 7.1).

Рисунок 7.1 - Добавление точки старта и состояния класса на диаграмму состояний

Откроем окно спецификации состояния «Ожидание ввода ФИО студента», которое изображено на рисунке 7.2.

Рисунок 7.3 - Окно спецификации состояния «Поиск студента»

Перейдем на вкладку «Actions». С помощью пункта «Insert» контекстного меню добавим новое действие «Инициализация», как показано на рисунке 7.3. По умолчанию тип запуска «On Entry» т.е. при входе (запуске состояния). Также введем остальные операции.

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

Следующим шагом является добавление связей между состояниями. Добавление связей между состояниями аналогично добавлению связей между классами, только выполняется инструментами «State Transition» и «Transition To Self».

Конечный вариант диаграммы состояний представлен на рисунке 7.4 для класса «Account», 7.5 для класса «RegInfo» и 7.6 для класса «DataBase».

Рисунок 7.4 - Диаграмма состояний для класса «Account»

Рисунок 7.5 - Диаграмма состояний для класса «RegInfo»

Рисунок 7.6 - Диаграмма состояний для класса «DataBase»

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

Добавление заголовка класса происходит с помощью инструмента «Package Specification», добавление файла исходного кода с помощью инструмента «Package Body». После добавления заголовка или тела класса на диаграмму необходимо ввести его имя. Также в окне спецификации компонента необходимо поменять язык на C++ в выпадающем списке Language (рисунок 7.7).

Рисунок 7.7 - Окно спецификации компонента «Account»

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

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

Готовая диаграмма компонентов изображена на рисунке 7.8.

Рисунок 7.8 - Диаграмма компонентов информационной подсистемы для деканата ВУЗа

Выводы

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

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

8. СОЗДАНИЕ ДИАГРАММЫ РАЗМЕЩЕНИЯ

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

Для создания диаграммы размещения добавим на нее с панели инструментов элемент «Processor», назовем его «StudentCountServer». Добавим сервер базы данных, несколько клиент-компьютеров и принтер. Следующим шагом является добавление соединений между устройствами системы. Соединение добавляется с помощью инструмента «Connection». Конечный вариант диаграммы представлен на рисунке 8.1.

Рисунок 8.1 - Диаграмма размещения информационной подсистемы для

деканата ВУЗа

Выводы

1. Информационная подсистема StudentCount способна работать в локальной сети. Ей могут пользоваться одновременно несколько пользователей.

2. Все данные студентов хранятся в базе данных, расположенной на сервер-компьютере.

9. ГЕНЕРАЦИЯ ПРОГРАММНОГО КОДА С++

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

1. Открыть диаграмму компонентов системы.

2. Выбрать тело пакета, а также спецификацию пакета, нажать правой кнопкой мыши и открыть спецификацию объектов.

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

4. Выбрать все объекты на диаграмме компонентов.

5. Выбрать Tools - C++ - Code Generation в главном меню (рисунок 9.1).

Рисунок 9.1 - Пункт меню для генерации программного кода на языке С++

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

Рисунок 9.2 - Окно с сообщением об успешной генерации программного кода

Выводы

1. В рамках курсового проекта был сгенерирован программный код Rose C++ для трех классов подсистемы.

2. Программный код генерировался для всех классов сразу.

ЗАКЛЮЧЕНИЕ

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

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

В курсовом проекте сгенерирован программный код для языка С++. Программный код сгенерирован Rational Rose для всех классов информационной подсистемы.

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Буч, Г. Язык UML для пользователя: Пер. с англ [Текст]/Г. Буч, Д. Рамбо, А. Джекобсон. - М.: ДМК, 2000. - 432 с., ил. (Серия «для программистов»)

2. Боггс, У. UML и Rational Rose: Пер. с англ [Текст]/ У. Боггс, М. Боггс. - М.: Издательство «Лори», 2000. - 581 с.

3. Буч Г., Рамбо Д., Джекобсон А. UML : специальный справочник. - СПб.: Питер, 2002.-432с., ил.

4. Ларман, К. применение UML и шаблонов проектирования: Пер. с англ. [Текст]/ К. Ларман - М.: Издательский дом «Вильямс», 2001. - 496 с. ил.

5. ЕСКД: ГОСТ 2.104 - 68 «Основные надписи».

6. ЕСКД: ГОСТ 2.106 - 68 «Текстовые документы».

7. ЕСКД: ГОСТ 2.109 - 73 «Основные требования к чертежам».

8. ЕСКД: ГОСТ 2.301 - 68 «Форматы».

9. ЕСКД: ГОСТ 2.101 - 81 «Шрифты чертежные».

10. ЕСКД: ГОСТ 2.316 - 68 «Правила нанесения на чертежах надписей, технических требований и таблиц».

11. ЕСКД: ГОСТ 2.321 - 84 «Обозначения буквенные».

ПРИЛОЖЕНИЕ А

Сгенерированный Rational Rose листинг кода приложения на языке С++

Source File: Account.h

//## begin module%1.7%.codegen_version preserve=yes

// Read the documentation to learn more about C++ code generator

// versioning.

//## end module%1.7%.codegen_version

//## begin module%4E0234BF0100.cm preserve=no

// %X% %Q% %Z% %W%

//## end module%4E0234BF0100.cm

//## begin module%4E0234BF0100.cp preserve=no

//## end module%4E0234BF0100.cp

//## Module: Account%4E0234BF0100; Package specification

//## Subsystem: <Top Level>

//## Source file: C:\Program Files\Rational\Rose\C++\source\Account.h

#ifndef Account_h

#define Account_h 1

//## begin module%4E0234BF0100.additionalIncludes preserve=no

//## end module%4E0234BF0100.additionalIncludes

//## begin module%4E0234BF0100.includes preserve=yes

//## end module%4E0234BF0100.includes

// RegInfo

#include "RegInfo.h"

// DataBase

#include "DataBase.h"

//## begin module%4E0234BF0100.declarations preserve=no

//## end module%4E0234BF0100.declarations

//## begin module%4E0234BF0100.additionalDeclarations preserve=yes

//## end module%4E0234BF0100.additionalDeclarations

//## begin Account%4E01013D0230.preface preserve=yes

//## end Account%4E01013D0230.preface

//## Class: Account%4E01013D0230

//## Category: <Top Level>

//## Persistence: Transient

//## Cardinality/Multiplicity: n

class Account

{

//## begin Account%4E01013D0230.initialDeclarations preserve=yes

//## end Account%4E01013D0230.initialDeclarations

public:

//## Constructors (generated)

Account();

Account(const Account &right);

//## Destructor (generated)

~Account();

//## Assignment Operation (generated)

Account & operator=(const Account &right);

//## Equality Operations (generated)

int operator==(const Account &right) const;

int operator!=(const Account &right) const;

//## Other Operations (specified)

//## Operation: Autorization%4E0104F0025A

Boolean Autorization ();

//## Operation: DataRequest%4E01054000E5

Boolean DataRequest ();

//## Operation: GetData%4E02152E0060

Boolean GetData ();

//## Operation: DataCheck%4E01055503A6

Boolean DataCheck ();

//## Operation: EnterSystem%4E0215550173

Boolean EnterSystem ();

//## Get and Set Operations for Associations (generated)

//## Association: <unnamed>%4E01018A0088

//## Role: Account::<the_RegInfo>%4E01018A01E1

const RegInfo * get_the_RegInfo () const;

void set_the_RegInfo (RegInfo * value);

//## Association: <unnamed>%4E021F3303AB

//## Role: Account::<the_DataBase>%4E021F3401BA

const DataBase * get_the_DataBase () const;

void set_the_DataBase (DataBase * value);

// Additional Public Declarations

//## begin Account%4E01013D0230.public preserve=yes

//## end Account%4E01013D0230.public

protected:

// Additional Protected Declarations

//## begin Account%4E01013D0230.protected preserve=yes

//## end Account%4E01013D0230.protected

private:

//## Get and Set Operations for Class Attributes (generated)

//## Attribute: \324\340\354\350\353\350\377%4E010199020E

const String get_XXXXXXX () const;

void set_XXXXXXX (String value);

//## Attribute: \310\354\377%4E0104D20201

const String get_XXX () const;

void set_XXX (String value);

//## Attribute: \316\362\367\345\361\362\342\356%4E0104E10119

const String get_XXXXXXXX () const;

void set_XXXXXXXX (String value);

// Additional Private Declarations

//## begin Account%4E01013D0230.private preserve=yes

//## end Account%4E01013D0230.private

private: //## implementation

// Data Members for Class Attributes

//## begin Account::\324\340\354\350\353\350\377%4E010199020E.attr preserve=no private: String {U}

String XXXXXXX;

//## end Account::\324\340\354\350\353\350\377%4E010199020E.attr

//## begin Account::\310\354\377%4E0104D20201.attr preserve=no private: String {U}

String XXX;

//## end Account::\310\354\377%4E0104D20201.attr

//## begin Account::\316\362\367\345\361\362\342\356%4E0104E10119.attr preserve=no private: String {U}

String XXXXXXXX;

//## end Account::\316\362\367\345\361\362\342\356%4E0104E10119.attr

// Data Members for Associations

//## Association: <unnamed>%4E01018A0088

//## begin Account::<the_RegInfo>%4E01018A01E1.role preserve=no public: RegInfo {1..n -> 1RHN}

RegInfo *the_RegInfo;

//## end Account::<the_RegInfo>%4E01018A01E1.role

//## Association: <unnamed>%4E021F3303AB

//## begin Account::<the_DataBase>%4E021F3401BA.role preserve=no public: DataBase {1..n -> 1RHN}

DataBase *the_DataBase;

//## end Account::<the_DataBase>%4E021F3401BA.role

// Additional Implementation Declarations

//## begin Account%4E01013D0230.implementation preserve=yes

//## end Account%4E01013D0230.implementation

};

//## begin Account%4E01013D0230.postscript preserve=yes

//## end Account%4E01013D0230.postscript

// Class Account

//## Get and Set Operations for Class Attributes (inline)

inline const String Account::get_XXXXXXX () const

{

//## begin Account::get_XXXXXXX%4E010199020E.get preserve=no

return XXXXXXX;

//## end Account::get_XXXXXXX%4E010199020E.get

}

inline void Account::set_XXXXXXX (String value)

{

//## begin Account::set_XXXXXXX%4E010199020E.set preserve=no

XXXXXXX = value;

//## end Account::set_XXXXXXX%4E010199020E.set

}

inline const String Account::get_XXX () const

{

//## begin Account::get_XXX%4E0104D20201.get preserve=no

return XXX;

//## end Account::get_XXX%4E0104D20201.get

}

inline void Account::set_XXX (String value)

{

//## begin Account::set_XXX%4E0104D20201.set preserve=no

XXX = value;

//## end Account::set_XXX%4E0104D20201.set

}

inline const String Account::get_XXXXXXXX () const

{

//## begin Account::get_XXXXXXXX%4E0104E10119.get preserve=no

return XXXXXXXX;

//## end Account::get_XXXXXXXX%4E0104E10119.get

}

inline void Account::set_XXXXXXXX (String value)

{

//## begin Account::set_XXXXXXXX%4E0104E10119.set preserve=no

XXXXXXXX = value;

//## end Account::set_XXXXXXXX%4E0104E10119.set

}

//## Get and Set Operations for Associations (inline)

inline const RegInfo * Account::get_the_RegInfo () const

{

//## begin Account::get_the_RegInfo%4E01018A01E1.get preserve=no

return the_RegInfo;

//## end Account::get_the_RegInfo%4E01018A01E1.get

}

inline void Account::set_the_RegInfo (RegInfo * value)

{

//## begin Account::set_the_RegInfo%4E01018A01E1.set preserve=no

the_RegInfo = value;

//## end Account::set_the_RegInfo%4E01018A01E1.set

}

inline const DataBase * Account::get_the_DataBase () const

{

//## begin Account::get_the_DataBase%4E021F3401BA.get preserve=no

return the_DataBase;

//## end Account::get_the_DataBase%4E021F3401BA.get

}

inline void Account::set_the_DataBase (DataBase * value)

{

//## begin Account::set_the_DataBase%4E021F3401BA.set preserve=no

the_DataBase = value;

//## end Account::set_the_DataBase%4E021F3401BA.set

}

//## begin module%4E0234BF0100.epilog preserve=yes

//## end module%4E0234BF0100.epilog

#endif

Source File: Account.cpp

//## begin module%1.7%.codegen_version preserve=yes

// Read the documentation to learn more about C++ code generator

// versioning.

//## end module%1.7%.codegen_version

//## begin module%4E0234F503C5.cm preserve=no

// %X% %Q% %Z% %W%

//## end module%4E0234F503C5.cm

//## begin module%4E0234F503C5.cp preserve=no

//## end module%4E0234F503C5.cp

//## Module: Account%4E0234F503C5; Package body

//## Subsystem: <Top Level>

//## Source file: C:\Program Files\Rational\Rose\C++\source\Account.cpp

//## begin module%4E0234F503C5.additionalIncludes preserve=no

//## end module%4E0234F503C5.additionalIncludes

//## begin module%4E0234F503C5.includes preserve=yes

//## end module%4E0234F503C5.includes

// Account

#include "Account.h"

//## begin module%4E0234F503C5.declarations preserve=no

//## end module%4E0234F503C5.declarations

//## begin module%4E0234F503C5.additionalDeclarations preserve=yes

//## end module%4E0234F503C5.additionalDeclarations

// Class Account

Account::Account()

//## begin Account::Account%4E01013D0230_const.hasinit preserve=no

//## end Account::Account%4E01013D0230_const.hasinit

//## begin Account::Account%4E01013D0230_const.initialization preserve=yes

//## end Account::Account%4E01013D0230_const.initialization

{

//## begin Account::Account%4E01013D0230_const.body preserve=yes

//## end Account::Account%4E01013D0230_const.body

}

Account::Account(const Account &right)

//## begin Account::Account%4E01013D0230_copy.hasinit preserve=no

//## end Account::Account%4E01013D0230_copy.hasinit

//## begin Account::Account%4E01013D0230_copy.initialization preserve=yes

//## end Account::Account%4E01013D0230_copy.initialization

{

//## begin Account::Account%4E01013D0230_copy.body preserve=yes

//## end Account::Account%4E01013D0230_copy.body

}

Account::~Account()

{

//## begin Account::~Account%4E01013D0230_dest.body preserve=yes

//## end Account::~Account%4E01013D0230_dest.body

}

Account & Account::operator=(const Account &right)

{

//## begin Account::operator=%4E01013D0230_assign.body preserve=yes

//## end Account::operator=%4E01013D0230_assign.body

}

int Account::operator==(const Account &right) const

{

//## begin Account::operator==%4E01013D0230_eq.body preserve=yes

//## end Account::operator==%4E01013D0230_eq.body

}

int Account::operator!=(const Account &right) const

{

//## begin Account::operator!=%4E01013D0230_neq.body preserve=yes

//## end Account::operator!=%4E01013D0230_neq.body

}

//## Other Operations (implementation)

Boolean Account::SearchStudent ()

{

//## begin Account::SearchStudent%4E0104F0025A.body preserve=yes

//## end Account::SearchStudent%4E0104F0025A.body

}

Boolean Account::ExitSystem ()

{

//## begin Account::ExitSystem%4E01055503A6.body preserve=yes

//## end Account::ExitSystem%4E01055503A6.body

}

Boolean Account::EnterSystem ()

{

//## begin Account::EnterSystem%4E0215550173.body preserve=yes

//## end Account::EnterSystem%4E0215550173.body

}

// Additional Declarations

//## begin Account%4E01013D0230.declarations preserve=yes

//## end Account%4E01013D0230.declarations

//## begin module%4E0234F503C5.epilog preserve=yes

//## end module%4E0234F503C5.epilog

Source File: RegInfo.h

//## begin module%1.7%.codegen_version preserve=yes

// Read the documentation to learn more about C++ code generator

// versioning.

//## end module%1.7%.codegen_version

//## begin module%4E02351F034D.cm preserve=no

// %X% %Q% %Z% %W%

//## end module%4E02351F034D.cm

//## begin module%4E02351F034D.cp preserve=no

//## end module%4E02351F034D.cp

//## Module: RegInfo%4E02351F034D; Package specification

//## Subsystem: <Top Level>

//## Source file: C:\Program Files\Rational\Rose\C++\source\RegInfo.h

#ifndef RegInfo_h

#define RegInfo_h 1

//## begin module%4E02351F034D.additionalIncludes preserve=no

//## end module%4E02351F034D.additionalIncludes

//## begin module%4E02351F034D.includes preserve=yes

//## end module%4E02351F034D.includes

// DataBase

#include "DataBase.h"

//## begin module%4E02351F034D.declarations preserve=no

//## end module%4E02351F034D.declarations

//## begin module%4E02351F034D.additionalDeclarations preserve=yes

//## end module%4E02351F034D.additionalDeclarations

//## begin RegInfo%4E01015203A9.preface preserve=yes

//## end RegInfo%4E01015203A9.preface

//## Class: RegInfo%4E01015203A9

//## Category: <Top Level>

//## Persistence: Transient

//## Cardinality/Multiplicity: n

class RegInfo

{

//## begin RegInfo%4E01015203A9.initialDeclarations preserve=yes

//## end RegInfo%4E01015203A9.initialDeclarations

public:

//## Constructors (generated)

RegInfo();

RegInfo(const RegInfo &right);

//## Destructor (generated)

~RegInfo();

//## Assignment Operation (generated)

RegInfo & operator=(const RegInfo &right);

//## Equality Operations (generated)

int operator==(const RegInfo &right) const;

int operator!=(const RegInfo &right) const;

//## Other Operations (specified)

//## Operation: CheckAttendance%4E0215BD00E7

Boolean CheckAttendance ();

//## Operation: CheckSession%4E0215C902BF

Boolean CheckSession ();

//## Operation: CheckRating%4E0215CA02E6

Boolean CheckRating ();

//## Operation: CheckGrant%4E0215CB0396

Boolean CheckGrant ();

//## Operation: Update%4E0215FC01F2

Boolean Update ();

//## Operation: SendToDB%4E02160703DA

Boolean SendToDB ();

//## Get and Set Operations for Associations (generated)

//## Association: <unnamed>%4E01018E02D6

//## Role: RegInfo::<the_DataBase>%4E01018F0069

const DataBase * get_the_DataBase () const;

void set_the_DataBase (DataBase * value);

// Additional Public Declarations

//## begin RegInfo%4E01015203A9.public preserve=yes

//## end RegInfo%4E01015203A9.public

protected:

// Additional Protected Declarations

//## begin RegInfo%4E01015203A9.protected preserve=yes

//## end RegInfo%4E01015203A9.protected

private:

//## Get and Set Operations for Class Attributes (generated)

//## Attribute: Attendance%4E02157201AC

const String get_Attendance () const;

void set_Attendance (String value);

//## Attribute: Session%4E02159003CD

const String get_Session () const;

void set_Session (String value);

//## Attribute: Rating%4E02159902CE

const String get_Rating () const;

void set_Rating (String value);

//## Attribute: Grant%4E0215A3019D

const String get_Grant () const;

void set_Grant (String value);

// Additional Private Declarations

//## begin RegInfo%4E01015203A9.private preserve=yes

//## end RegInfo%4E01015203A9.private

private: //## implementation

// Data Members for Class Attributes

//## begin RegInfo::Attendance%4E02157201AC.attr preserve=no private: String {U}

String Attendance;

//## end RegInfo::Attendance%4E02157201AC.attr

//## begin RegInfo::Session%4E02159003CD.attr preserve=no private: String {U}

String Session;

//## end RegInfo::Session%4E02159003CD.attr

//## begin RegInfo::Rating%4E02159902CE.attr preserve=no private: String {U}

String Rating;

//## end RegInfo::Rating%4E02159902CE.attr

//## begin RegInfo::Grant%4E0215A3019D.attr preserve=no private: String {U}

String Grant;

//## end RegInfo::Grant%4E0215A3019D.attr

// Data Members for Associations

//## Association: <unnamed>%4E01018E02D6

//## begin RegInfo::<the_DataBase>%4E01018F0069.role preserve=no public: DataBase {1 -> 1RHN}

DataBase *the_DataBase;

//## end RegInfo::<the_DataBase>%4E01018F0069.role

// Additional Implementation Declarations

//## begin RegInfo%4E01015203A9.implementation preserve=yes

//## end RegInfo%4E01015203A9.implementation

};

//## begin RegInfo%4E01015203A9.postscript preserve=yes

//## end RegInfo%4E01015203A9.postscript

// Class RegInfo

//## Get and Set Operations for Class Attributes (inline)

inline const String RegInfo::get_Attendance () const

{

//## begin RegInfo::get_Attendance%4E02157201AC.get preserve=no

return Attendance;

//## end RegInfo::get_Attendance%4E02157201AC.get

}

inline void RegInfo::set_Attendance (String value)

{

//## begin RegInfo::set_Attendance%4E02157201AC.set preserve=no

Attendance = value;

//## end RegInfo::set_Attendance%4E02157201AC.set

}

inline const String RegInfo::get_Session () const

{

//## begin RegInfo::get_Session%4E02159003CD.get preserve=no

return Session;

//## end RegInfo::get_Session%4E02159003CD.get

}

inline void RegInfo::set_Session (String value)

{

//## begin RegInfo::set_Session%4E02159003CD.set preserve=no

Session = value;

//## end RegInfo::set_Session%4E02159003CD.set

}

inline const String RegInfo::get_Rating () const

{

//## begin RegInfo::get_Rating%4E02159902CE.get preserve=no

return Rating;

//## end RegInfo::get_Rating%4E02159902CE.get

}

inline void RegInfo::set_Rating (String value)

{

//## begin RegInfo::set_Rating%4E02159902CE.set preserve=no

Rating = value;

//## end RegInfo::set_Rating%4E02159902CE.set

}

inline const String RegInfo::get_Grant () const

{

//## begin RegInfo::get_Grant%4E0215A3019D.get preserve=no

return Grant;

//## end RegInfo::get_Grant%4E0215A3019D.get

}

inline void RegInfo::set_Grant (String value)

{

//## begin RegInfo::set_Grant%4E0215A3019D.set preserve=no

Grant = value;

//## end RegInfo::set_Grant%4E0215A3019D.set

}

//## Get and Set Operations for Associations (inline)

inline const DataBase * RegInfo::get_the_DataBase () const

{

//## begin RegInfo::get_the_DataBase%4E01018F0069.get preserve=no

return the_DataBase;

//## end RegInfo::get_the_DataBase%4E01018F0069.get

}

inline void RegInfo::set_the_DataBase (DataBase * value)

{

//## begin RegInfo::set_the_DataBase%4E01018F0069.set preserve=no

the_DataBase = value;

//## end RegInfo::set_the_DataBase%4E01018F0069.set

}

//## begin module%4E02351F034D.epilog preserve=yes

//## end module%4E02351F034D.epilog

#endif

Source File: RegInfo.cpp

//## begin module%1.7%.codegen_version preserve=yes

// Read the documentation to learn more about C++ code generator

// versioning.

//## end module%1.7%.codegen_version

//## begin module%4E0235600268.cm preserve=no

// %X% %Q% %Z% %W%

//## end module%4E0235600268.cm

//## begin module%4E0235600268.cp preserve=no

//## end module%4E0235600268.cp

//## Module: RegInfo%4E0235600268; Package body

//## Subsystem: <Top Level>

//## Source file: C:\Program Files\Rational\Rose\C++\source\RegInfo.cpp

//## begin module%4E0235600268.additionalIncludes preserve=no

//## end module%4E0235600268.additionalIncludes

//## begin module%4E0235600268.includes preserve=yes

//## end module%4E0235600268.includes

// RegInfo

#include "RegInfo.h"

//## begin module%4E0235600268.declarations preserve=no

//## end module%4E0235600268.declarations

//## begin module%4E0235600268.additionalDeclarations preserve=yes

//## end module%4E0235600268.additionalDeclarations

// Class RegInfo

RegInfo::RegInfo()

//## begin RegInfo::RegInfo%4E01015203A9_const.hasinit preserve=no

//## end RegInfo::RegInfo%4E01015203A9_const.hasinit

//## begin RegInfo::RegInfo%4E01015203A9_const.initialization preserve=yes

//## end RegInfo::RegInfo%4E01015203A9_const.initialization

{

//## begin RegInfo::RegInfo%4E01015203A9_const.body preserve=yes

//## end RegInfo::RegInfo%4E01015203A9_const.body

}

RegInfo::RegInfo(const RegInfo &right)

//## begin RegInfo::RegInfo%4E01015203A9_copy.hasinit preserve=no

//## end RegInfo::RegInfo%4E01015203A9_copy.hasinit

//## begin RegInfo::RegInfo%4E01015203A9_copy.initialization preserve=yes

//## end RegInfo::RegInfo%4E01015203A9_copy.initialization

{

//## begin RegInfo::RegInfo%4E01015203A9_copy.body preserve=yes

//## end RegInfo::RegInfo%4E01015203A9_copy.body

}

RegInfo::~RegInfo()

{

//## begin RegInfo::~RegInfo%4E01015203A9_dest.body preserve=yes

//## end RegInfo::~RegInfo%4E01015203A9_dest.body

}

RegInfo & RegInfo::operator=(const RegInfo &right)

{

//## begin RegInfo::operator=%4E01015203A9_assign.body preserve=yes

//## end RegInfo::operator=%4E01015203A9_assign.body

}

int RegInfo::operator==(const RegInfo &right) const

{

//## begin RegInfo::operator==%4E01015203A9_eq.body preserve=yes

//## end RegInfo::operator==%4E01015203A9_eq.body

}

int RegInfo::operator!=(const RegInfo &right) const

{

//## begin RegInfo::operator!=%4E01015203A9_neq.body preserve=yes

//## end RegInfo::operator!=%4E01015203A9_neq.body

}

//## Other Operations (implementation)

Boolean RegInfo::EnterFIO ()

{

//## begin RegInfo::EnterFIO%4E0215BD00E7.body preserve=yes

//## end RegInfo::EnterFIO%4E0215BD00E7.body

}

Boolean RegInfo::EnterCardNumber ()

{

//## begin RegInfo::EnterCardNumber%4E0215C902BF.body preserve=yes

//## end RegInfo::EnterCardNumber%4E0215C902BF.body

}

Boolean RegInfo::EnterSubject ()

{

//## begin RegInfo::EnterSubject%4E0215CA02E6.body preserve=yes

//## end RegInfo::EnterSubject%4E0215CA02E6.body

}

Boolean RegInfo::EnterAttestation ()

{

//## begin RegInfo::EnterAttestation%4E0215CB0396.body preserve=yes

//## end RegInfo::EnterAttestation%4E0215CB0396.body

}

Boolean RegInfo::EnterAdmission ()

{

//## begin RegInfo::EnterAdmission%4E0215FC01F2.body preserve=yes

//## end RegInfo::EnterAdmission%4E0215FC01F2.body

}

Boolean RegInfo::Update ()

{

//## begin RegInfo::Update%4E0215FC01F2.body preserve=yes

//## end RegInfo::Update%4E0215FC01F2.body

}

Boolean RegInfo::SendToDB ()

{

//## begin RegInfo::SendToDB%4E02160703DA.body preserve=yes

//## end RegInfo::SendToDB%4E02160703DA.body

}

// Additional Declarations

//## begin RegInfo%4E01015203A9.declarations preserve=yes

//## end RegInfo%4E01015203A9.declarations

//## begin module%4E0235600268.epilog preserve=yes

//## end module%4E0235600268.epilog

Source File: DataBase.h

//## begin module%1.7%.codegen_version preserve=yes

// Read the documentation to learn more about C++ code generator

// versioning.

//## end module%1.7%.codegen_version

//## begin module%4E0235060105.cm preserve=no

// %X% %Q% %Z% %W%

//## end module%4E0235060105.cm

//## begin module%4E0235060105.cp preserve=no

//## end module%4E0235060105.cp

//## Module: DataBase%4E0235060105; Package specification

//## Subsystem: <Top Level>

//## Source file: C:\Program Files\Rational\Rose\C++\source\DataBase.h

#ifndef DataBase_h

#define DataBase_h 1

//## begin module%4E0235060105.additionalIncludes preserve=no

//## end module%4E0235060105.additionalIncludes

//## begin module%4E0235060105.includes preserve=yes

//## end module%4E0235060105.includes

// DBServer\.exe

#include "DBServerexe.h"

//## begin module%4E0235060105.declarations preserve=no

//## end module%4E0235060105.declarations

//## begin module%4E0235060105.additionalDeclarations preserve=yes

//## end module%4E0235060105.additionalDeclarations

//## begin DataBase%4DFF7F710228.preface preserve=yes

//## end DataBase%4DFF7F710228.preface

//## Class: DataBase%4DFF7F710228

//## Category: <Top Level>

//## Persistence: Transient

//## Cardinality/Multiplicity: n

class DataBase

{

//## begin DataBase%4DFF7F710228.initialDeclarations preserve=yes

//## end DataBase%4DFF7F710228.initialDeclarations

public:

//## Constructors (generated)

DataBase();

DataBase(const DataBase &right);

//## Destructor (generated)

~DataBase();

//## Assignment Operation (generated)

DataBase & operator=(const DataBase &right);


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

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