отчёт по курсачу БД

реклама
Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
Самарский государственный
аэрокосмический университет
имени академика С.П.Королёва
Факультет информатики
Кафедра информационных систем и технологий
Пояснительная записка
к курсовому проекту
по курсу: “Проектирование БД”
Вариант № 18
Выполнил: Федькаев А.В.
студент группы 651
Руководитель проекта:
Чигарина Елена Ивановна
Самара 2008
РЕФЕРАТ
Курсовой проект.
Пояснительная записка: 16 стр., 13 рис., 2 ист.
БАЗА ДАННЫХ, КОНЦЕПТУАЛЬНАЯ МОДЕЛЬ, ЛОГИЧЕСКАЯ МОДЕЛЬ,
ФИЗИЧЕСКАЯ МОДЕЛЬ, МЕТОДОЛОГИЯ,
SQL,
ЗАПРОС, КУРСОР,
ТРИГГЕР, НОРМАЛЬНАЯ ФОРМА, КОРТЕЖ, ДОМЕН
С помощью CASE – средства ERWin построена логическая модель базы данных
в методологии IDEF1X. Осуществлен переход от логической модели базы
данных к физической и построена схема базы данных в СУБД Visual FoxPro и
MS Access. Разработано два пользовательских приложения.
2
СОДЕРЖАНИЕ
ЗАДАНИЕ
4
1.
Описание предметной области
5
2.
Логическая модель базы данных
5
3.
Реализация проекта средствами FoxPro
4.
3.1.
Физическая модель базы данных
3.2.
Код приложения
6
3.2.1. Работа со справочной информацией
6
3.2.2. Работа с оперативной информацией
7
3.2.3. Составление отчета №2
9
3.2.4. Составление отчета №1
9
3.2.5. Составление отчета №3
10
Разработка приложения в среде MS Access 2003 и Delphi 7
4.1.
Физическая модель базы данных
12
4.2.
Интерфейсы системы
12
4.3.
Код приложения
4.3.1. Составление отчета №1
15
4.3.2. Составление отчета №2
15
4.3.3. Составление отчета №3
15
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
16
3
ЗАДАНИЕ
По описанию предметной области построить логическую модель базы
данных по методологии IDEF1X. От логической модели перейти к физической
модели. По физической модели сгенерировать схему базы данных в СУБД
FoxPro и Access. Создать приложение средствами FoxPro. Создать приложение
средствами Delphi, используя технологию ADO для доступа к данным,
хранящимся в формате Access. Для каждого приложения разработать
интерфейс пользователя, обеспечить ограничения целостности данных и
удобные средства ведения данных.
4
1. Описание предметной области
В
городской
администрации
хранится
информация
о
фирмах,
занимающихся распространением компьютерной техники. Каждая фирма
характеризуется названием, адресом, ФИО директора. Каждая фирма имеет
сотрудников, характеризующихся ФИО, должностью, окладом. Каждая фирма
имеет прайс-лист по имеющемуся в продаже товару. Фирма кроме того
характеризуется формой собственности, общей площадью помещений, общим
числом сотрудников.
Запросы:
1. Вывести сведения в виде отчёта о фирмах, сгруппировав их по форме
собственности.
2. Вывести сведения о сотрудниках указанной фирмы.
3. Вывести сведения о площадях фирм, расположенных в указанном районе.
2. Логическая модель базы данных
Используя CASE – средство ERWin построим логическую модель базы данных
в методологии IDEF1X. Результат моделирования представлен на рисунке 1.
Рисунок 1 – Логическая структура базы данных
5
3. Разработка приложения в среде MS FoxPro v.8.0
3.1. Физическая модель базы данных
Перейдем от логической модели базы данных к физической модели. По
физической модели сгенерируем схему базы данных в СУБД Visual FoxPro.
Дополним полученную схему связями. Схема БД показана на рисунке 2.
Рисунок 2 – Физическая структура БД для реализации MS FoxPro 8.0
3.2.
Код приложения
Приложение реализовано в среде MS Visual FoxPro v.8.0
3.2.1 Работа со справочной информацией, на примере справочника
“Район”
Нажатие кнопки “Добавить”
thisformset.fInput.tInput.Value = ''
thisformset.command = 0
thisformset.fInput.Visible = .T.
thisform.Enabled = .F.
Нажатие кнопки “Изменить”
thisformset.fInput.tInput.Value = thisform.gData.column1.text1.Value
thisformset.command = 1
thisformset.fInput.Visible = .T.
thisform.Enabled = .F.
Нажатие кнопки “Удалить”
DELETE FROM dst WHERE name_distr = thisformset.fRef.gData.column1.text1.Value
thisform.Refresh
Нажатие кнопки “Применить”
6
cmm = thisformset.command
IF NOT EMPTY(thisform.tInput.Value) then
TRY
DO CASE
CASE cmm = 0
INSERT INTO dst (name_distr) VALUES (thisform.tInput.Value)
CASE cmm = 1
oldname = thisformset.fRef.gData.column1.text1.Value
newname = thisform.tInput.Value
UPDATE dst SET name_distr = newname WHERE name_distr = oldname
ENDCASE
thisform.Visible = .F.
thisformset.fRef.Enabled = .T.
thisformset.fRef.Refresh
CATCH
MESSAGEBOX("Íåêîððåêòíûé ââîä")
ENDTRY
ENDIF
3.2.2 Работа с оперативной информацией о фирмах
Форма “Фирмы”
Нажатие кнопки “Добавить”
thisformset.fInput.tName.Value = ''
thisformset.fInput.tAddr.Value = ''
thisformset.fInput.cType.Value = ''
thisformset.fInput.cDistr.Value = ''
thisformset.fInput.tDirect.Value = ''
thisformset.fInput.sArea.Value = 0
thisformset.fInput.sStaff.Value = 0
thisformset.command = 0
thisformset.fInput.Visible = .T.
thisform.Enabled = .F.
Нажатие кнопки “Изменить”
thisformset.fInput.tName.Value = firmview.name_firm
thisformset.fInput.cType.Value = firmview.name_owner
thisformset.fInput.cDistr.Value = firmview.name_distr
thisformset.fInput.tAddr.Value = firmview.addres
thisformset.fInput.tDirect.Value = firmview.fio_direct
thisformset.fInput.sArea.Value = firmview.area
thisformset.fInput.sStaff.Value = firmview.staff
thisformset.command = 1
thisformset.fInput.Visible = .T.
thisform.Enabled = .F.
Нажатие кнопки “Удалить”
DELETE FROM firm WHERE name_firm = firmview.name_firm
thisformset.fRef.gData.RecordSource = ''
SELECT 1
USE
SELECT 4
USE
SELECT 3
USE
SELECT 2
USE
PACK firm
USE Curs!firmview IN 0
thisformset.fRef.gData.RecordSource = 'firmview'
thisform.Refresh
Нажатие кнопки “Применить”
7
cmm = thisformset.command
IF
NOT
EMPTY(thisform.tName.Value)
AND
NOT
EMPTY(thisform.cType.Value)
AND
NOT
EMPTY(thisform.cDistr.Value)
AND
NOT
EMPTY(thisform.tAddr.Value)
AND
NOT
EMPTY(thisform.tDirect.Value) then
TRY
SELECT id_distric FROM district WHERE name_distr = thisform.cDistr.Value INTO ARRAY idd
SELECT id_ownership FROM ownershi WHERE name_owner=thisform.cType.Value INTO
ARRAY ido
DO CASE
CASE cmm = 0
INSERT INTO firm (name_firm, id_distric, addres, fio_direct, id_ownership, area,
staff)
VALUES
(thisform.tName.Value,
idd(1),
thisform.tAddr.Value,
thisform.tDirect.Value,
ido(1),
thisform.sArea.Value, thisform.sStaff.Value)
CASE cmm = 1
newname_firm = thisform.tName.Value
newid_distric = idd(1)
newaddres = thisform.tAddr.Value
newfio_direct = thisform.tDirect.Value
newid_ownership = ido(1)
newarea = thisform.sArea.Value
newstaff = thisform.sStaff.Value
UPDATE firm SET name_firm = newname_firm, id_distric = newid_distric, addres
= newaddres, fio_direct = newfio_direct, id_ownership = newid_ownership, area = newarea, staff = newstaff WHERE
name_firm = thisformset.fRef.gData.column1.text1.Value
ENDCASE
thisform.Visible = .F.
thisformset.fRef.Enabled = .T.
thisformset.fRef.gData.RecordSource = ''
SELECT 1
USE
SELECT 4
USE
SELECT 3
USE
SELECT 2
USE
USE Curs!firmview IN 0
thisformset.fRef.gData.RecordSource = 'firmview'
thisformset.fRef.Refresh
CATCH
MESSAGEBOX("Íåêîððåêòíûé ââîä")
ENDTRY
ELSE
MESSAGEBOX("Íåêîòîðûå ïîëÿ íå çàïîëíåíû")
ENDIF
На рисунке 3 представлен код SQL для отображения сведений о фирмах.
Рисунок 3 – SQL код отображения записей о фирмах
8
3.2.3 Составление отчета №2
Вывести сведения о сотрудниках указанной фирмы.
Нажатие кнопки «Показать»:
SELECT f.name_firm, e.fio_employ, p.name_post, s.salary FROM firm AS f INNER JOIN ((post AS p
INNER JOIN staff AS s ON p.id_post = s.id_post) INNER JOIN employee AS e ON e.id_employe =
s.id_employe) ON f.id_firm = s.id_firm WHERE f.name_firm=thisform.cFirm.Value INTO CURSOR
firm_emp
thisform.gData.RecordSource = 'firm_emp'
Форма отображения результатов выполнения запроса показана на
рисунке 4.
Рисунок 4 – Отображения отчета №1
3.2.4 Составление отчета №1
Вывести, в виде отчёта, информацию о фирмах сгруппировав их по форме
собственности.
Конструктор отчёта показан на рисунке 5.
9
Рисунок 5 – Конструктор отчета №1
Форма отображения отчета представлена на рисунке 6.
Рисунок 6 – Форма отчета №1
3.2.5 Составление отчета №3
Вывести сведения о площадях фирм расположенных в указанном районе.
Нажатие кнопки «Показать»
SELECT firm.name_firm, district.name_distr, firm.area FROM district INNER JOIN firm ON
district.id_distric = firm.id_distric WHERE district.name_distr=thisform.cDistr.Value INTO
CURSOR firm_dstr
thisform.gData.RecordSource = 'firm_dstr'
10
Форма отображения отчета представлена на рисунке 7.
Рисунок 7 – Форма отчета №3
11
4. Разработка приложения в среде MS Access 2003 и Delphi 7
4.1. Физическая модель базы данных
Перейдем от логической модели базы данных к физической модели. По
физической модели сгенерируем схему базы данных в СУБД MS Access 2003.
Дополним полученную схему связями. Схема БД показана на рисунке 8.
Рисунок 8 – Физическая структура БД для реализации в MS Access 2003
4.2 Интерфейсы системы
В систему можно зайти в качестве администратора или просто
пользователя
(рисунок
Администратор
9).
обладает
всеми
правами,
пользователь может просматривать справочную и оперативную информацию, а
также делать запросы.
Рисунок 9 – Вход в БД
Для выбора действий пользователь приложения использует главную
форму программы (рисунок 10).
12
Рисунок 10 – Главное меню приложения
Ведение справочников и оперативной информации осуществляется с
помощью
кнопок
навигации.
Для
выбора
отображаемой
информации
пользователю предоставляются три списка выбора со справочниками (рисунок
11), оперативной информацией (рисунок 12) и запросами (рисунок 13). При
выборе запросов, в случае необходимости ввода дополнительной информации,
появляется дополнительный список выбора.
13
Рисунок 11 – Отображение справочной информации о типах организации
Рисунок 12 – Форма отображение оперативной информации о фирмах
14
Рисунок 13 – Отображение результатов запроса с параметром
4.3 Написание запросов к БД MSAccess 2003
4.3.1 Составление отчета №1
Вывести сведения о фирмах сгруппировав их по форме собственности.
Текст запроса:
SELECT f.name_firm, o.name_ownership, d.name_district, f.addres, f.fio_director, f.area, f.staff
FROM ownership AS o INNER JOIN (firm AS f INNER JOIN district AS d ON f.id_district =
d.id_district) ON o.id_ownership = f.id_ownership ORDER BY o.name_ownership
4.3.2 Составление отчета №2
Вывести информацию о сотрудниках фирмы указанной в параметре.
Текст запроса:
SELECT f.name_firm, e.fio_employee, p.name_post, s.salary FROM firm AS f INNER JOIN ((post
AS p INNER JOIN staff AS s ON p.id_post = s.id_post) INNER JOIN employee AS e ON
e.id_employee = s.id_employee) ON f.id_firm = s.id_firm WHERE f.name_firm=<параметр
запроса>
4.3.3 Составление отчета №3
Вывести информацию о площадях фирм расположенных в указанном
районе.
Текст запроса:
SELECT firm.name_firm, district.name_district, firm.area FROM district INNER JOIN firm ON
district.id_district = firm.id_district WHERE district.name_district=<значение параметра>
15
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Чигарина Е.И. Лекции по курсу Базы данных. Самара, 2003 г.
2. Чигарина Е.И. CASE –средства проектирования баз данных. Самара, 2001 г.
16
Скачать