База данных отеля

 

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

"Московский государственный технический университет радиотехники,

электроники и автоматики"

МГТУ МИРЭА

Факультет информационных технологий Кафедра вычислительной техники





КУРСОВОЙ ПРОЕКТ

по дисциплине

«Объектно-ориентированное программирование»

Тема курсового проекта «База данных отеля»





Студент группы ИТВ-2-10

Ковалев А.В.

Руководитель курсового проекта

Ст. преп. каф. ВТ Смирнов С.С.

Рецензент Ст. преп. каф. МОВС, к.т.н.

Смольянинова В.А.




Москва 2012

ЗАДАНИЕ

на выполнение курсового проекта

по дисциплине «Объектно-ориентированное программирование»


Студент Коваленко Ю.В. Группа ИТВ - 2 - 10

1.Тема «База данных отеля»

2.Исходные данные.

Разработать программу, позволяющую: фиксировать информацию о новых клиентах и снимаемые ими номера в объектной БД, реализовывать поисковые запросы по отдельным кпараметрам. Для реализации использовать среду VisualAge Smalltalk.

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

Вопросы: концептуальный анализ предметной области (ПрО), разработка объектной модели ПрО, программная реализация с учетом шаблона проектирования MVC, тестирование.

Графический материал: концептуальные структуры действий, схема визуальной композиции.


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

№ этапаЭтап курсового проекта, работы выполнил и представил результаты руководителю проекта (работы), дата и подпись исполнителяРаботу по этапу курсового проекта (работы) принял на рассмотрение, дата и подпись руководителяРекомендации и замечания по этапу курсового проекта (работы) выдал исполнителю, дата и подпись руководителяОценка выполнения этапа курсового проекта, (работы) (в соответствии с балльно-рейтинговой системой)Комментарии руководителя курсового проекта (работы) 123Реферат


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

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

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

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

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

Следующий раздел описывает программную реализацию проектируемой системы в среде программирования VisualAge Smalltalk 7.5.2

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

В заключении кратко сформулированы выводы по данной работе.

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

Всего в пояснительной записке 41 страница, 1 таблица и 47 рисунков.

Список литературы содержит 5 наименований.


Содержание


1 Введение

2 Концептуальный анализ

2.1 Методика концептуального анализа

2.2 Концептуальный анализ деятельности БД

2.2.1 Уточнение постановки задачи

2.2.2 Концептуальный анализ задачи добавления новой записи о клиенте

2.2.3 Концептуальный анализ задачи добавления новой записи о номере

.2.4 Концептуальный анализ задачи удаления записей

.2.5 Концептуальный анализ задачи поиска записей

3 Переход от концептуальной модели к объектной

4 Программная реализация

4.1 Класс «HotelBDUser»

4.2 Класс «HotelBDRoom»

4.3 Класс «HotelBDCore»

4.4 Класс «HotelBDAddUser»

4.5 Класс «HotelBDAddRoom»

.6 Класс «HotelBDSearchEngine»

.7 Класс «HotelBDAnswerWindow»

.8 Класс «HotelBDMainWindow»

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

5.1 Тест №1 Исходные данные

5.2 Тест №2. Работа с запросами

.3 Тест №3. Удаление

.4 Тесты поиска

.4.1 Тест №4.1 Поиск по имени

.4.2 Тест №4.2 Поиск по полу

.4.3 Тест №4.3 Поиск по типу номера

.4.4 Тест №4.4 Поиск по всем параметрам

Заключение

Список литературы


1 Введение


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

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

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

концептуального описания предметной области (ПрО) поставленной задачи;

проектирования объектной модели ПрО;

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

Язык Smalltalk является «чистым» объектным языком программирования, т.е. не объектно-ориентированным, как другие современные языки такие, как C++, Object Pascal и др. Это означает, что использование Smalltalk побуждает разработчика мыслить исключительно в объектом стиле, т.к. другие стили программирования (например, процедурное) просто не поддерживаются. Указанная особенность хорошо согласуется с целями изучения курса ООП.

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

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

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

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

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

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

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

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

Заявленные цели курсового проекта достигаются в процессе решения следующих задач:

выбор функций для базы данных

концептуальный анализ предметной области с точки выбранных функций по методике, изложенной в [1];

трансформация результатов концептуального анализа в объектную модель;

реализация разрабатываемой программы в среде VisualAge Smalltalk;

тестирование работоспособности полученной программы.

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

2 Концептуальный анализ


2.1 Методика концептуального анализа

программа объектная предметная модель

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

В данной работе используется методика концептуального анализа, изложенная в [1]. Отличительная особенность этой методики в том, что она предлагает четкий алгоритм диалога разработчиков с экспертами, которого следует придерживаться, в то время как прочие методологии ООП [2,3,4] предлагают лишь набор рекомендаций.

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

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

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

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

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

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

a.Когда можно совершить данное действие? Ответом на вопрос является описание физических ограничений.

b.Когда нужно совершить данное действие? Ответом на вопрос является описание условий необходимости реализации.

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

6.Относительно каждого из условий, определенных в пунктах 4 и 5, необходимо задаться вопросом: «Каким образом это условие формируется?». На данный вопрос могут быть получены следующие варианты ответа:

a.Условие представляет собой информацию, поясняющую ход процесса.

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

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

8.Относительно каждого из выявленных в пункте 7 действий необходимо повторить шаги 3-8.

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


2.2 Концептуальный анализ деятельности БД


2.2.1 Уточнение постановки задачи

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

1.Добавление новых записей о клиентах, включающих в себя имя, фамилию и пол.

2.Добавление к клиентам записей о снятых ими номерах, включающих номер комнаты, тип номера и время, на которое этот номер снят.

.Удаление выбранных записей.

.Нахождение записей по задаваемым параметрам.

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


2.2.2 Концептуальный анализ задачи добавления новой записи о клиенте

После получения данных о новом клиенте, запись о нём будет добавлена в БД и отображена (рис.1)

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


2.2.3 Концептуальный анализ задачи добавления новой записи о номере

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


2.2.4 Концептуальный анализ задачи удаления записей

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


2.2.5 Концептуальный анализ задачи поиска записей

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

Запрос №1 по имени и фамилии (рис. 4).

Запрос №2 по полу (рис. 5).

Запрос №3 по типу снятого номера (рис.6).

Запрос №4 по всем параметрам (рис.7).


3 Переход от концептуальной модели к объектной


Элемент концептуальной моделиЭлемент объектной моделиОбъект: БДНевизуальный класс HotelBDCore.Объект: АдминистраторПользователь системы. В объектной модели явно не представлен.Объект: ПользовательКласс HotelBDUserОбъект: Добавление нового пользователяВизуальный класс HotelBDAddUserОбъект: НомерКласс HotelBDRoomОбъект: Добавление новой комнаты пользователюВизуальный класс HotelBDAddRoomОбъект: Отчет по поискуВизуальный класс HotelBDAnswerWindowОбъект: ПоискВизуальный класс HotelBDSearchEngineОбъект: Запрос №1Метод findFSName:with: класса HotelBDCoreОбъект: Запрос №2Метод findSex: класса HotelBDCoreОбъект: Запрос №3Метод findType: класса HotelBDCoreОбъект: Запрос №3Метод findFSNameSexType:with:with:with: класса HotelBDCoreОтношение: Запросил функцию «добавить пользователя»(Администратор, БД)Состояние, возникающее после нажатия кнопки «добавить пользователя». Вызывается визуальный класс HotelBDAddUserОтношение: Занесен в БД(Пользователь, БД)Состояние, возникающее в системе в результате действия «Добавить пользователя». Модифицируется поле bd класса HotelBDCoreОтношение: Запросил функцию «добавить номер»(Администратор, БД)Состояние, возникающее после нажатия кнопки «добавить номер». Вызывается визуальный класс HotelBDAddRoomОтношение: Занесен в БД(Номер, БД)Состояние системы, возникающее в результате действия «Добавить номер». Модифицируется поле bd класса HotelBDCoreОтношение: Выбран(Пользователь, БД)Состояние, возникающее при выборе записи пользователя в списке БДОтношение: Принадлежит(Номер,Пользователь)Метод haveRoom: класса HotelBDUserОтношение:Выделены(Записи,БД)Состояние системы, Возникающее в системе в результате выбора записей в БД Отношение: Запросил функцию «Удалить записи»(Администратор, БД)Состояние, возникающее после нажатия кнопки «Удалить».Отношение: Запросил функцию «Удаление»(Администратор, БД)Состояние, возникающее после выполнения кнопки «Удалить». Модифицируется поле bd класса HotelBDCoreОтношение: Удалены(Записи, БД)Состояние, возникающее после нажатия кнопки «Поиск». Вызывается визуальный класс HotelBDSearchEngineОтношение: Вызвал(Администратор, Запрос№1)Состояние, возникающее после нажатия кнопки «Поиск по ФИ» в окне класса HotelBDSearchEngine. Вызывает метод findFSName:with: класса HotelBDCoreОтношение: Вызвал(Администратор, Запрос№2)Состояние, возникающее после нажатия кнопки «Поиск по полу» в окне класса HotelBDSearchEngine. Вызывает метод findSex: класса HotelBDCoreОтношение: Вызвал(Администратор, Запрос№3)Состояние, возникающее после нажатия кнопки «Поиск по типу номера» в окне класса HotelBDSearchEngine. Вызывает метод findType: класса HotelBDCoreОтношение: Вызвал(Администратор, Запрос№4)Состояние, возникающее после нажатия кнопки «Расширенный поиск» в окне класса HotelBDSearchEngine. Вызывает метод findFSNameSexType:with:with:with: класса HotelBDCoreОтношение: Получил(Администратор, Отчет)Состояние, возникающее после вывода резуальтатов поискового запроса в визуальном классе HotelBDAnswerWindowСвойство объекта «Пользователь» Имя Поле FName класса HotelBDUserСвойство объекта «Пользователь» ФамилияПоле SName класса HotelBDUserСвойство объекта «Пользователь» ПолПоле sex класса HotelBDUserСвойство объекта «Номер» НомерПоле number класса HotelBDRoomСвойство объекта «Номер» ТипПоле type класса HotelBDRoomСвойство объекта «Номер» Время снятияПоле days класса HotelBDRoomСвойство объекта «Запрос№1» ИмяПоле FNameSet класса HotelBDSearchEngine, исходный параметр метода findFSName:with:Свойство объекта «Запрос№1» ФамилияПоле SNameSet класса HotelBDSearchEngine, исходный параметр метода findFSName:with:Свойство объекта «Запрос№2» ПолПоле sexSet класса HotelBDSearchEngine, исходный параметр метода findSex:Свойство объекта «Запрос№3» ТипПоле sexSet класса HotelBDSearchEngine, исходный параметр метода findType:Свойство объекта «Запрос№4» ИмяПоле FNameSet класса HotelBDSearchEngine, исходный параметр метода findFSNameSexType:with:with:with: класса HotelBDCoreСвойство объекта «Запрос№4» ФамилияПоле SNameSet класса HotelBDSearchEngine, исходный параметр метода findFSNameSexType:with:with:with: класса HotelBDCoreСвойство объекта «Запрос№4» ПолПоле sexSet класса HotelBDSearchEngine, исходный параметр метода findFSNameSexType:with:with:with: класса HotelBDCoreСвойство объекта «Запрос№4» ТипПоле typeSet класса HotelBDSearchEngine, исходный параметр метода findFSNameSexType:with:with:with: класса HotelBDCoreСвойство объекта «База данных» модель БДПоле bd класса HotelBDСore, экземпляр класса OrderedColelction, хранит в себе все записи

4 Программная реализация


Руководствуясь объектной моделью, полученной ранее, была произведена программная реализация. Для этого в среде VisualAge Smalltalk были заведены классы, показанные на рис. 7. Всего потребовалось создать два обычных Smalltalk-класса, один класс, являющийся невизуальным компонентом, пять классов, обладающих визуальным пользовательским интерфейсом. Кроме того, один класс был создан средой программирования автоматически и служит внутренним целям среды. Далее последовательно опишем содержание пользовательских классов.


Рис. 7


4.1 Класс «HotelBDUser»

Рис. 8

Object subclass: #HotelBDUser

instanceVariableNames: 'user FName SName sex haveRooms ': '': ''

FName

^FName

FName: anObject

FName := anObject.signalEvent: #name with: anObject

SName

^SName

SName: anObject

SName := anObject.signalEvent: #name with: anObject

sex

^sex

sex: anObject

sex := anObject.signalEvent: #sex with: anObject

addRoom:room

haveRooms isNil ifTrue:[haveRooms:=OrderedCollection new].add:room.

haveRoom: RoomType

|flag|:=false.isNil :[do:[:room| (room type = RoomType):[flag:=true]]].

^flag

printString

|str|:=FName,' ',SName,' пол = ',sex,'; номер: '.

haveRooms isNil ifTrue:[str:=str,'Íåò'];

ifFalse:[do:[:an|str:=str,an printString]].


4.2 Класс «HotelBDRoom»


Рис.9


Object subclass: #HotelBDRoom

instanceVariableNames: 'number type days ': '': ''

days

^days

days: anObject

days := anObject.signalEvent: #days with: anObject

number

^number

number: anObject

number := anObject.signalEvent: #number with: anObject

type

^type: anObject:= anObject.signalEvent: #type with: anObject

printString

^'номер ',number,' типа ',type,' на ',days,' дней; '.


.3 Класс «HotelBDCore»


Рис.10


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


AbtAppBldrPart subclass: #HotelBDCore

instanceVariableNames: 'bd ': '': ''

init

bd:=OrderedCollection new.

bd

^bd

bd: anObject

bd := anObject.signalEvent: #bd with: anObject.

newUser: user

bd add:user.signalEvent: #bdChanged with: bd;: #justAdded with: (Array with:user)

addRoom: room toUser: user

room isNil ifFalse:[do:[:h|h addRoom:room].signalEvent: #bdChanged with: bd;: #justAdded with: user asArray.]

removeSelected: selecteditems

selecteditems do:[:el| bd remove:el].signalEvent: #bdChanged with: bd.

findFSName: FNameSet with: SNameSet

|str|

(FNameSet notNil)&(SNameSet notNil):[^(bd select:[:user| (user FName = FNameSet)&(user SName = SNameSet)]) asArray].

(FNameSet notNil)&(SNameSet isNil) :[^(bd select:[:user| user FName = FNameSet]) asArray].

(FNameSet isNil)&(SNameSet notNil) :[^(bd select:[:user| user SName = SNameSet]) asArray].

(FNameSet isNil)&(SNameSet isNil) :[^(str:=(Неверные параметры поиска)) asArray].

findSex: sexSet

|str|

(sexSet notNil):[^(bd select:[:user| (user sex = sexSet)]) asArray];

ifFalse:[^(str:=( Неверные параметры поиска)) asArray].

findType: typeSet

|str|

(typeSet notNil):[^(bd select:[:user| ((user haveRoom: typeSet) = true)]) asArray];

ifFalse:[^(str:=( Неверные параметры поиска)) asArray].

findFSNameSexType: FNameSet with: SNameSet with: sexSet with: typeSet

|str|

(FNameSet notNil)&(SNameSet notNil) &(sexSet notNil)& (typeSet notNil):[^(bd select:[:user| (user FName = FNameSet)&(user SName = SNameSet)&(user sex = sexSet)&((user haveRoom: typeSet) = true)]) asArray].

ifFalse:[^(str:=( Неверные параметры поиска)) asArray].


.4 Класс «HotelBDAddUser»


Является визуальным классом, содержащим оконный пользовательский интерфейс (рис.11).


Рис.11

Связи.

. Связь «событие-действие» между событием «clicked» кнопки «отмена» и действием «closeWidget» окна.

. Связь «событие-код» между событием «clicked» кнопки «Добавить» и пользовательским методом «saveTo:».

. Связь «атрибут как параметр» между свойством «object» текстового поля ввода с параметром «FName» связи №1

. Связь «атрибут как параметр» между свойством «object» текстового поля ввода параметром «SName» связи №1

. Связь «атрибут как параметр» между свойством «selectedItem» поля ввода параметром «sex» связи №1


Рис.12


Предназначен для добавления записей о новых пользователях в БД.

AbtAppBldrView subclass: #HotelBDAddUser

instanceVariableNames: 'selectedUser ': '': ''.

selectedUser

^selectedUser

selectedUser: anObject

selectedUser := anObject.signalEvent: #selectedUser with: anObject

newUser: FName with: SName sex: sex

self selectedUser: (HotelBDUser new FName:FName; SName:SName; sex:sex).

(self subpartNamed: 'Window') closeWidgetCommand.


Рис.13


.5 Класс «HotelBDAddRoom»


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


4.5.1 Методы


Рис.14


AbtAppBldrView subclass: #HotelBDAddRoom

instanceVariableNames: 'selectedRoom ': '': ''

selectedRoom

^selectedRoom

selectedRoom: anObject

selectedRoom := anObject.signalEvent: #selectedRoom with: anObject

createNewRoom: number with: type with: days

self selectedRoom: (HotelBDRoom new number:number; type:type; days:days).

(self subpartNamed: 'Window') closeWidgetCommand.


4.5.2 Визуальная композиция


Рис.15


. Связь «событие-действие» между событием «clicked» кнопки «отмена» и действием «closeWidget» окна.

. Связь «событие-код» между событием «clicked» кнопки «Добавить» и пользовательским методом «createNewRoom: number with: type with: days».

. Связь «атрибут как параметр» между свойством «object» текстового поля ввода с параметром «number» связи №1

. Связь «атрибут как параметр» между свойством «object» текстового поля ввода параметром «days» связи №1

. Связь «атрибут как параметр» между свойством «selectedItem» поля ввода параметром «type» связи №1


Рис.15

4.6 Класс «HotelBDSearchEngine»


Является визуальным классом, содержащим оконный пользовательский интерфейс (рис.16). Предназначен для вызова запросов поиска.


Рис.16


.6.1 Методы

Рис.17


Рис.18

AbtAppBldrView subclass: #HotelBDSearchEngine

instanceVariableNames: 'NFNameSet NSNameSet NSexSet NTypeSet ': '': ''

init

self: nil;: nil;: nil;: nil.

NFNameSet

^NFNameSet

NFNameSet: anObject

NFNameSet := anObject

NSNameSet

^NSNameSet

NSNameSet: anObject

NSNameSet := anObject

NSexSet

^NSexSet

NSexSet: anObject

NSexSet := anObject

NTypeSet

^NTypeSet

NTypeSet: anObject

NTypeSet := anObjectCategorized.

newFSNameSets: FName and: SName

self init.NFNameSet: FName.NSNameSet: SName.signalEvent: #FSNameSearch.

(self subpartNamed: 'Window') closeWidgetCommand.

newSexSets: NSex

self NSexSet: NSex.signalEvent: #SexSearch.

(self subpartNamed: 'Window') closeWidgetCommand.

newTypeSets: NTypeNTypeSet: NType;: #TypeSearch.

(self subpartNamed: 'Window') closeWidgetCommand.

newSFNameSexType: FName and: SName with: NSex with: NType

self NFNameSet: FName;: SName.NSexSet: NSex.NTypeSet: NType.signalEvent: #AllSearch.

(self subpartNamed: 'Window') closeWidgetCommand.


4.6.2 Сигналы и переменные, видимые в других моделях


Рис.19

Рис.20


.6.3 Визуальная композиция

1. Связь «событие-действие» между событием «clicked» кнопки «отмена» и действием «closeWidget» окна.

. Связь «событие-код» между событием «clicked» кнопки «Найти человека» и пользовательским методом «newFSNameSets:and:».

. Связь «атрибут как параметр» между свойством «object» текстового поля ввода с параметром «FName» связи №2

. Связь «атрибут как параметр» между свойством «object» текстового поля ввода с параметром «SName» связи №2

. Связь «событие-код» между событием «clicked» кнопки «Поиск по полу» и пользовательским методом «newSexSets:».

. Связь «атрибут как параметр» между свойством «choseditems» поля выбора с параметром «sex» связи №5

. Связь «событие-код» между событием «clicked» кнопки «Отобразить тип номеров» и пользовательским методом «newTypeSets:».

. Связь «атрибут как параметр» между свойством «choseditems» поля выбора с параметром «type» связи №7

. Связь «событие-код» между событием «clicked» кнопки «Поиск» и пользовательским методом «newSFNameSexType:and:with:with:».

. Связь «атрибут как параметр» между свойством «object» текстового поля ввода с параметром «FName» связи №9

. Связь «атрибут как параметр» между свойством «object» текстового поля ввода с параметром «SName» связи №9

. Связь «атрибут как параметр» между свойством «choseditems» поля выбора с параметром «sex» связи №9

. Связь «атрибут как параметр» между свойством «choseditems» поля выбора с параметром «type» связи №9


4.7 Класс «HotelBDAnswerWindow»

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


Рис.21


.7.1 Методы и переменные видимые в других моделях


Рис.22

4.7.2 Визуальная композиция

1. Связь «событие-действие» между событием «clicked» кнопки «Закрыть» и действием «closeWidget» окна.


4.8 Класс «HotelBDMainWindow»

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


Рис.23


4.8.1 Методы

Рис.24

AbtAppBldrView subclass: #HotelBDMainWindow: '': '': ''

LoadFile: aFile

(self subpartNamed: 'HotelBDCore') bd: (ObjectLoader new loadFromFile: aFile)

SaveFile: aFile

ObjectDumper new unload: ((self subpartNamed: 'HotelBDCore') bd) intoFile: aFile


4.8.2 Визуальная композиция

1. Связь «событие-действие» между событием «clicked» кнопки «Выход» и действием «closeWidget» окна.

. Связь «атрибут-атрибут» между свойством «self» меню и свойством «menu» формой.

. Связь «событие-действие» между событием «clicked» кнопки в меню «Выход» и действием «closeWidget» окна.

. Связь «событие-действие» между событием «clicked» меню и «promt» файлового менеджера.

. Связь «событие-действие» между событием «clicked» меню и «promt» файлового менеджера.

. Связь «событие-код» между событием «ok» файлового менеджера и пользовательским методом «saveTo:».

. Связь «событие-код» между событием «ok» файлового менеджера и пользовательским методом «loadFrom:».

. Связь «событие-код» между событием «clicked» кнопки «Добавить Пользователя» и методом «OpenWidget» класса HotelBDAddUser.

. Связь «событие-действие» между событием «closedWidget» окна HotelBDAddUser и методом «NewUser:» класса HotelBDCore.

. Связь «атрибут как параметр» между атрибутом «SelectedUser» класса HotelBDAddUser с параметром «user» связи №9

. Связь «событие-код» между событием «clicked» кнопки «Добавить номер» и методом «OpenWidget» класса HotelBDAddRoom.

. Связь «событие-действие» между событием «closedWidget» окна HotelBDAddRoom и методом «AddRoom:» класса HotelBDCore.

. Связь «атрибут как параметр» между атрибутом «SelectedRoom» класса HotelBDAddRoom с параметром «room» связи №11

. Связь «атрибут как параметр» между атрибутом «selecteditems» обьекта list1 с параметром «user» связи №11

. Связь «атрибут атрибут» между атрибутом «selectedvalid» обьекта list1 с атрибутом «enabled» кнопки «удалить»

. Связь «атрибут атрибут» между атрибутом «enabled» кнопки «удалить» и атрибутом «enabled» кнопки «добавить номер»

. Связь «событие-действие» между событием «openedWidget» окна HotelBDMainWindow и методом «init» класса HotelBDCore.

. Связь «событие-действие» между событием «normalResult» метода №19 и действием «diselectAll» обьекта list1.

. Связь «событие-действие» между событием «bdChanged» класса HotelBDCore и действием «items» обьекта list1.

. Связь «событие-действие» между событием «justAdded» класса HotelBDCore и действием «selecteditems» обьекта list1.

. Связь «событие-код» между событием «clicked» кнопки «Очистить» и методом «initclear:» класса HotelBDСore.

. Связь «атрибут как параметр» между атрибутом «items» обьекта list1 с параметром «items» связи №21

. Связь «событие-код» между событием «clicked» кнопки «Удалить» и методом «removeSelected:» класса HotelBDСore.

. Связь «атрибут как параметр» между атрибутом «items» обьекта list1 с параметром «items» связи №23

. Связь «событие-код» между событием «clicked» кнопки «Добавить Пользователя» и методом «OpenWidget» класса HotelBDSearchEngine.

. Связь «событие-код» между событием «FSNameSearch» окна HotelBDSearchEngine и методом «FindFSName:with:» класса HotelBDСore.

. Связь «атрибут как параметр» между атрибутом «FNameSet» окна HotelBDSearchEngine с параметром «FName» связи №26

. Связь «атрибут как параметр» между атрибутом «SNameSet» окна HotelBDSearchEngine с параметром «SName» связи №26

. Связь «событие-действие» между событием «normalresult» связи №26 и действием «items» обьекта object1.

. Связь «событие-действие» между событием «FSNameSearch» окна HotelBDSearchEngine и действием «openWidget» HotelBDAnswerWindow.

. Связь «событие-код» между событием «SexSearch» окна HotelBDSearchEngine и методом «findSex:» класса HotelBDСore.

. Связь «атрибут как параметр» между атрибутом «SexSet» окна HotelBDSearchEngine с параметром «sex» связи №31

. Связь «событие-действие» между событием «normalresult» связи №31 и действием «items» обьекта object1.

. Связь «событие-действие» между событием «SexSearch» окна HotelBDSearchEngine и действием «openWidget» HotelBDAnswerWindow.

. Связь «событие-код» между событием «NTypeSearch» окна HotelBDSearchEngine и методом «findType:» класса HotelBDСore.

. Связь «атрибут как параметр» между атрибутом «TypeSet» окна HotelBDSearchEngine с параметром «type» связи №35

. Связь «событие-действие» между событием «normalresult» связи №35 и действием «items» обьекта object1.

. Связь «событие-действие» между событием «TypeSearch» окна HotelBDSearchEngine и действием «openWidget» HotelBDAnswerWindow.

. Связь «событие-код» между событием «AllSearch» окна HotelBDSearchEngine и методом «findFSNameSexType:with:with:with:» класса HotelBDСore.

. Связь «атрибут как параметр» между атрибутом «FNameSet» окна HotelBDSearchEngine с параметром «FName» связи №39

. Связь «атрибут как параметр» между атрибутом «SNameSet» окна HotelBDSearchEngine с параметром «SName» связи №39

. Связь «атрибут как параметр» между атрибутом «SexSet» окна HotelBDSearchEngine с параметром «sex» связи №39

. Связь «атрибут как параметр» между атрибутом «TypeSet» окна HotelBDSearchEngine с параметром «type» связи №39

. Связь «событие-действие» между событием «normalresult» связи №39 и действием «items» обьекта object1.

. Связь «событие-действие» между событием «AllSearch» окна HotelBDSearchEngine и действием «openWidget» HotelBDAnswerWindow.

. Связь «атрибут атрибут» между атрибутом «self» объекта object1 и атрибутом «list1items» окна HotelBDAnswerWindow


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


5.1 Тест №1 Исходные данные


Запустим программу (рис. 25)


Рис.25


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


Рис. 26


Введем некоторые исходные данные (рис. 27).


Рис. 27

5.2 Тест №2. Добавление номеров


На главной форме нажмем кнопку «Добавить номер» и введем необходимые данные (рис. 28).


Рис. 28


Выполним это для нескольких пользователей с разными параметрами (рис. 29).


Рис. 29


.3 Тест №3. Удаление


Удалим несколько выбранных пользователей, выбрав их (рис.30) и нажав кнопку «удалить» (рис.31).


Рис.30 Рис. 31


Удалим оставшихся пользователей (рис. 32) с помощью кнопки «очистить» (рис.33).


Рис. 32 Рис. 33

5.1 Тесты поиска.


.4.1 Тест №4.1 Поиск по имени

Введем некоторые начальные значения (упрощённые, для простоты понятия) (рис. 34).


Рис. 34


Введем поиск по имени «а» с помощью кнопки «поиск» (рис. 35) и введения необходимых параметров (рис. 36)


Рис. 35 Рис. 36


Введем поиск по имени и фамилии, открыв «поиск» (рис. 37) и введя необходимые параметры. (рис. 38).


Рис. 37 Рис. 38


5.4.2 Тест №4.2 Поиск по полу

Введем начальные параметры (рис. 39).


Рис. 39


Применим поиск по полу «Ж» открыв «поиск» (рис. 40) и введя необходимые параметры запроса (рис. 41).


Рис. 40 Рис. 41


5.4.3 Тест №4.3 Поиск по типу номера

Введем начальные параметры (рис. 42).

Рис. 42


Применим поиск по типу «2» открыв «поиск» (рис. 43) и введя необходимые параметры запроса (рис. 44).


Рис. 43 Рис. 44


.4.4 Тест №4.4 Поиск по всем параеметрам

Введем начальные параметры (рис. 45).


Рис. 45


Применим поиск по имени «а», фамилии «b», полу «М»,типу «2» открыв «поиск» (рис. 46) и введя необходимые параметры запроса (рис. 47).

Рис. 46Рис. 47


Заключение


В процессе выполнения курсового проекта на примере не сложной практической задачи были закреплены теоретические знания в области концептуального анализа предметной области и проектирования объектной модели. Также были получены практические навыки программирования в среде VisualAge на языке Smalltalk.

Список литературы


1.Смирнов С.С., Смольянинова В.А. Разработка многоагентных систем в среде Jason. Введение в язык AgentSpeak.

2.Гради Буч Объектно-орентированный анализ и проектирование с примерами приложений.

.Роберт У. Основные концепции языков программирования.

.Тимоти Бадд Объектное-орентированное программирование

.Документация к среде VisualAge Smalltalk.


МИНОБРНАУКИ РОССИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Московский государствен

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ