Выбор инструментальных средств разработки системы. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Выбор инструментальных средств разработки системы.



Реферат

Курсовой проект, 53 с., 7 рис., 1 табл., 19 источников, приложения.

 

В работе описан процесс и результаты проектирования и разработки (реализации) информационно-справочной системы “База данных о сетях зоопарков”.

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

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

Информационно-справочная система “База данных о сетях зоопарков” выполняет следующие основные функции:

- добавление элементов для каждого уровня иерархии структуры;

- удаление элемента для каждого уровня иерархии структуры;

- сохранение и загрузка структуры из файла;

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

Данная информационно-справочная система разработана в среде Microsoft Visual FoxPro 9 SP2.

с привлечением справочной информации.

Работа информационно-справочной системы возможна в операционной системе WINDOWS на компьютерах.

Дальнейшее развитие работы возможно в сторону

- наращивания уровней структуры;

- улучшения алгоритмов обработки данных;

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

- улучшение графического интерфейса.

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

 

ПРОГРАММИРОВАНИЕ, Microsoft Visual FoxPro, ФАЙЛ, УКАЗАТЕЛЬ, СПИСОК, ОКНО, ВВОД.

 

 

РЕФЕРАТ

Курсовий проект, 53 с., 7 рис., 1 табл., 19 джерел, додатки.

 

У роботі описаний процес і результати проектування та розробки (реалізації) інформаційно-довідкової системи “База даних мереж зоопарків”.

Результат проектування представлений у вигляді пояснювальної записки до курсового проекту.

Результат розробки представлений у вигляді сукупності програмних документів, що приводяться в додатку до курсового проекту.

Інформаційно-довідкова система “База даних мереж зоопарків ” виконує такі основні функції:

- додавання елементів для кожного рівня ієрархії структури;

- видалення елемента для кожного рівня ієрархії структури;

- збереження та завантаження структури з файлу;

- графічний висновок даних і доступ до них.

Дана інформаційно-довідкова система розроблена в Microsoft Visual FoxPro 9 SP із залученням інформації з довідників.

Робота інформаційно-довідкової системи можлива в операційній системі WINDOWS на комп'ютерах.

Подальший розвиток роботи можливий в сторону:

- нарощування рівнів структури;

- поліпшення алгоритмів обробки даних;

- додавання різних видів сортування;

- поліпшення графічного інтерфейсу.

Робота має практичну цінність. Розрахунок економічної ефективності не проводився.

 

ПРОГРАМУВАННЯ, Microsoft Visual FoxPro, ФАЙЛ, ВКАЗІВНИК, СПИСОК, ВІКНО, ВВЕДЕННЯ.

 

THE ABSTRACT

Course Project, 53 p., 7 pic.,. 1 tables. 19 sources. applications.

 

This work describes the process and results of design and development (implementation) of information “Zoos networks database”.

The result of the design is presented in the form of an explanatory note to the course project.

The result of the development is presented as a set of program documents, as annexed to the course project.

Information system of the “Zoos networks database” performs the following functions:

- addition elements for each level of the hierarchy structure;

- removing an element for each level of the hierarchy structure;

- saving and loading the structure from the file;

- a graphical output of data and access to them.

This information system is developed in an environment Microsoft Visual FoxPro 9 SP2 involving reference.

An information and referral system is available in the WINDOWS OS on computers.

Further development work is possible in the direction of

- increasing levels of structure;

- improvement of data processing algorithms;

- addition of various sorting;

- improvement of the GUI.

The work has practical value. Cost-effectiveness was not produced.

 

PROGRAMMING, Microsoft Visual FoxPro, FILE, INDEX, LIST, WINDOW ENTER.

 

 

СОДЕРЖАНИЕ

Введение………………………………………………………………………………..6

1 Постановка задачи………………………………………………………………6

2 Анализ решаемой задачи…………………………………………………….....6

2.1 Анализ предметной области……………………………………………...6

2.2 Цели и задачи системы…………………………………………………...7

2.3 Назначение системы...…………………………………………………….7

2.4 Требование к системе………………….………………………………….7

3 Проектирование…………………...…………………….……………………….8

3.1 Выбор инструментальных средств разработки системы……………….8

3.1.1. Сервер баз данных……………........………………………..8

3.1.2. Технологии реализации системы……………….………….9

3.2 Проектирование архитектуры системы………………………………….9

4 Разработка……………………………………………………………………....11

4.1 Разработка базы данных системы………………………………………11

4.1.1 Разработка схемы базы данных…………………………...11

4.1.2 Разработка базовых запросов……………………………...12

4.2 Разработка модулей системы…………………………………………...24

5 Выводы………………………………………………………………………….24

6 Перечень использованных источников……………………………………….25

 

 

Введение.

Сейчас в Украине очень развита система зоопарков и продолжает увеличиваться. Количество зоопарков превышает 25 из которых 7 имеют общегосударственное значение (в том числе и Менский зоологический парк). Кроме того насчитывается более 15 мини-зоопарков.

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

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

 

Постановка задачи

 

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

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

По каждому из этих объектов хранится следующая информация:

ГОРОД: название города, где находится зоопарк;

ЗООПАРК: название зоопарка;

РАБОЧИЕ: Фамилия имя отчество сотрудника.

УСЛУГИ: специализация рабочего;

ЖИВОТНЫЕ: название животного за кем с услуг работает рабочий;

Реализовать мультисписковую структуру, которая обеспечивает хранение информации и позволяет осуществить:

Ввод и удаление данных о каждом объекте;

Сохранение и извлечение из файла;

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

Взаимодействие с пользователем ИСС организовать с помощью системы меню и структурированных форм ввода.

 

Анализ решаемой задачи.

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

Заданием данной работы является реализация задачи:

Объекты: город; зоопарк; животное; рабочий; услуги, которые рабочий может оказывать животному (чистка, мойка, расчесывание, кормление). Бизнес-логика: при добавлении нового животного связывать его с работником, у которого наименьшее количество животных такого вида. Формы: TOP10 работников месяца.

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

Т.е. имеется множество городов, каждый из которых содержит множество зоопарков. Каждый зоопарк содержит множество рабочих. За каждым рабочим закреплено множество животных. Связи, зависимость и принадлежность между множествами выглядят приблизительно так:

Животное
Город
Зоопарк
Рабочий
Услуга

 

Цели и задачи системы.

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

Назначение системы.

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

Требование к системе.

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

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

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

 

 

Проектирование.

Сервер баз данных

Для выполнения данной работы я рассматривал в качестве сервера несколько бесплатных СУБД:

- Microsoft SQL Server Express;

- MySQL community;

- PostgreSQL.

 

PostgreSQL является одним из самых профессиональных СУБД. Она свободно распространяемая и максимально соответствует стандартам SQL. PostgreSQL или Postgres стараются полностью применять ANSI/ISO SQL стандарты своевременно с выходом новых версий.

От других СУБД PostgreSQL отличается поддержкой востребованного объектно-ориентированного и/или реляционного подхода к базам данных. Например, полная поддержка надежных транзакций, т.е. атомарность, последовательность, изоляционность, прочность (Atomicity, Consistency, Isolation, Durability (ACID).) Благодаря мощным технологиям Postgre очень производительна. Параллельность достигнута не за счет блокировки операций чтения, а благодаря реализации управления многовариантным параллелизмом (MVCC), что также обеспечивает соответствие ACID. PostgreSQL очень легко расширять своими процедурами, которые называются хранимые процедуры. Эти функции упрощают использование постоянно повторяемых операций.

Хотя PostgreSQL и не может похвастаться большой популярностью в отличии от MySQL и MS SQL, существует довольно большое число приложений облегчающих работу с PostgreSQL, несмотря на всю мощность функционала. Сейчас довольно легко установить эту СУБД используя стандартные менеджеры пакетов операционных систем.

 

Достоинства PostgreSQL

· Открытое ПО соответствующее стандарту SQL – PostgreSQL – бесплатное ПО с открытым исходным кодом. Эта СУБД является очень мощной системой;

· Большое сообщество – существует довольно большое сообщество в котором можно запросто найдёте ответы на свои вопросы;

· Большое количество дополнений – несмотря на огромное количество встроенных функций, существует очень много дополнений, позволяющих разрабатывать данные для этой СУБД и управлять ими;

· Расширения – существует возможность расширения функционала за счет сохранения своих процедур;

· Объектность – PostrgreSQL это не только реляционная СУБД, но также и объектно-ориентированная с поддержкой наследования.

 

Недостатки PostgreSQL

· Производительность – при простых операциях чтения PostgreSQL может значительно замедлить сервер и быть медленнее своих конкурентов, таких как MySQL;

· Популярность – по своей природе, популярностью эта СУБД похвастаться не может, хотя и присутствует довольно большое сообщество;

· Хостинг – в силу выше перечисленных факторов иногда довольно сложно найти хостинг с поддержкой этой СУБД.

 

Когда использовать PostgreSQL

· Целостность данных – когда надежность и целостность данных - основные требования, PostgreSQL будет лучшим выбором;

· Сложные пользовательские процедуры – если необходимо использовать пользовательские процедуры, то PostgreSQL имеет встроенную поддержку для них;

· Интеграция – если в будущем планируется переход на платные СУБД, например Oracle, то сделать это с PostgreSQL будет довольно просто по сравнению с другими бесплатными СУБД;

· Сложная структура данных – по сравнению с другими открытыми СУБД PostgreSQL предоставляет больше возможностей для создания сложных структур данных без необходимости жертвовать какими либо аспектами.

 

Поэтому я выбрал PostgreSQL в качестве сервера базы данных.

 

Разработка

Разработка базовых запросов

Для работы с таблицами базы данных разработано ряд функций, которые делятся на те, которые:

- добавляют записи (add_). Возвращает id новой записи;

- читают таблицы (read_). Возвращает результат запроса в виде таблицы;

- изменяют запись в таблице (upd_). Возвращает id изменной записи;

- удаляет запись из таблицы (del_record). Возвращает id удаленной записи.

 

Функция add_animals – добавляет новую запись в таблицу Animals. Входящий параметр – название животного. Возвращает id новой записи или 0, если добавление не получилось. Функция проверяет, есть ли в таблице такое название и если нету, то только тогда выполняется добавление новой записи.

 

CREATE OR REPLACE FUNCTION add_animals(new_name varchar)

RETURNS integer AS

$BODY$

DECLARE

ret_id integer;

BEGIN

ret_id=0;

IF (SELECT COUNT(*)

FROM "Animals" WHERE UPPER(TRIM(name))=UPPER(TRIM(new_name)))=0

THEN

INSERT INTO "Animals" (name) VALUES (new_name);

ret_id = (SELECT MAX(id) FROM "Animals");

END IF;

RETURN ret_id;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE COST 100;

 

Функция add_AnimToWork – добавляет новую запись в таблицу AnimToWork. Входящие параметры – id зоопарка, id животного. Возвращает id рабочего, которому было добавлено новое животное. Функция ищет рабочего, у которого животных наименьшее количество и тогда ему (рабочему) добавляется данное животное.

 

CREATE OR REPLACE FUNCTION public.add_AnimToWork(idZoo integer, idAnimal integer)

RETURNS integer AS

$BODY$

DECLARE

idWorker integer;

BEGIN

idWorker = (SELECT id FROM (SELECT "Worker".id, COUNT("AnimToWork".*) AS kol

FROM "Worker" LEFT JOIN "AnimToWork" ON "AnimToWork".id_worker="Worker".id

WHERE "Worker".id_zoo=idZoo

GROUP BY "Worker".id

ORDER BY kol

LIMIT 1) AS aaa);

INSERT INTO "AnimToWork" (id_worker, id_animal) VALUES (idWorker, idAnimal);

RETURN idWorker;

END;

$BODY$

LANGUAGE plpgsql VOLATILE COST 100;

 

Функция add_city – добавляет новую запись в таблицу City. Входящий параметр – название города. Возвращает id новой записи или 0, если добавление не получилось. Функция проверяет, есть ли в таблице такое название и если нету, то только тогда выполняется добавление новой записи.

 

CREATE OR REPLACE FUNCTION add_city(new_name varchar)

RETURNS integer AS

$BODY$

DECLARE

ret_id integer;

BEGIN

ret_id=0;

IF (SELECT COUNT(*) FROM "City"

WHERE UPPER(TRIM(name))=UPPER(TRIM(new_name)))=0

THEN

INSERT INTO "City" (name) VALUES (new_name);

ret_id = (SELECT MAX(id) FROM "City");

END IF;

RETURN ret_id;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE COST 100;

 

Функция add_servis – добавляет новую запись в таблицу Servis. Входящий параметр – название услуги. Возвращает id новой записи или 0, если добавление не получилось. Функция проверяет, есть ли в таблице такое название и если нету, то только тогда выполняется добавление новой записи.

 

CREATE OR REPLACE FUNCTION add_servis(new_name varchar)

RETURNS integer AS

$BODY$

DECLARE

ret_id integer;

BEGIN

ret_id=0;

IF (SELECT COUNT(*) FROM "Servis"

WHERE UPPER(TRIM(name))=UPPER(TRIM(new_name)))=0

THEN

INSERT INTO "Servis" (name) VALUES (new_name);

ret_id = (SELECT MAX(id) FROM "Servis");

END IF;

RETURN ret_id;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE COST 100;

 

Функция add_worker – добавляет новую запись в таблицу Worker. Входящие параметры – фамилия, имя и отчество нового рабочего, id зоопарка, в который добавляется рабочий, id услуги, которую выполняет рабочий. Возвращает id новой записи или 0, если добавление не получилось. Функция проверяет, есть ли в таблице такие фамилия, имя и отчество и если нету, то только тогда выполняется добавление новой записи.

 

CREATE OR REPLACE FUNCTION add_worker(new_name varchar, idZoo integer, idServis integer)

RETURNS integer AS

$BODY$

DECLARE

ret_id integer;

BEGIN

ret_id=0;

IF (SELECT COUNT(*) FROM "Worker"

WHERE UPPER(TRIM(name))=UPPER(TRIM(new_name))

AND id_zoo=idZoo)=0

THEN

INSERT INTO "Worker" (name, id_zoo, id_servis)

VALUES (new_name, idZoo, idServis);

ret_id = (SELECT MAX(id) FROM "Worker");

END IF;

RETURN ret_id;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE COST 100;

 

Функция add_zoo – добавляет новую запись в таблицу Zoo. Входящие параметры – название зоопарка, id города, в который добавляется зоопарк. Возвращает id новой записи или 0, если добавление не получилось. Функция проверяет, есть ли в таблице такое название и если нету, то только тогда выполняется добавление новой записи.

 

CREATE OR REPLACE FUNCTION add_zoo(new_name varchar, idCity integer)

RETURNS integer AS

$BODY$

DECLARE

ret_id integer;

BEGIN

ret_id=0;

IF (SELECT COUNT(*) FROM "Zoo"

WHERE UPPER(TRIM(name))=UPPER(TRIM(new_name))

AND id_city=idCity)=0

THEN

INSERT INTO "Zoo" (name, id_city) VALUES (new_name, idCity);

ret_id = (SELECT MAX(id) FROM "Zoo");

END IF;

RETURN ret_id;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE COST 100;

 

Функция del_record – удаляет запись из таблицы. Входящие параметры – название таблицы, из которой нужно удалить запись, id записи, которую необходимо удалить. Возвращает id удаленной записи или 0, если удаление не получилось. Функция проверяет, есть ли в таблице такая запись и если есть, то только тогда выполняется удаление.

 

CREATE OR REPLACE FUNCTION del_record(tab_name varchar, old_id integer)

RETURNS integer AS

$BODY$

DECLARE

ret_id integer;

BEGIN

ret_id=0;

IF (tab_name='Animals') AND (SELECT COUNT(*) FROM "Animals" WHERE id=old_id)>0

THEN

DELETE FROM "Animals" WHERE id=old_id;

ret_id = old_id;

END IF;

 

IF tab_name='City' AND (SELECT COUNT(*) FROM "City" WHERE id=old_id)>0

THEN

DELETE FROM "City" WHERE id=old_id;

ret_id = old_id;

END IF;

 

IF tab_name='Servis' AND (SELECT COUNT(*) FROM "Servis" WHERE id=old_id)>0

THEN

DELETE FROM "Servis" WHERE id=old_id;

ret_id = old_id;

END IF;

 

IF tab_name='Worker' AND (SELECT COUNT(*) FROM "Worker" WHERE id=old_id)>0

THEN

DELETE FROM "Worker" WHERE id=old_id;

ret_id = old_id;

END IF;

 

IF tab_name='Zoo' AND (SELECT COUNT(*) FROM "Zoo" WHERE id=old_id)>0

THEN

DELETE FROM "Zoo" WHERE id=old_id;

ret_id = old_id;

END IF;

 

IF tab_name='AnimToWork' AND (SELECT COUNT(*) FROM "AnimToWork" WHERE id=old_id)>0

THEN

DELETE FROM "AnimToWork" WHERE id=old_id;

ret_id = old_id;

END IF;

 

RETURN ret_id;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE COST 100;

 

Функция read_animals – возвращает таблицу Animals. Входящие параметры – нету.

 

CREATE OR REPLACE FUNCTION public.read_animals()

RETURNS TABLE(id integer, name character) AS

$BODY$

DECLARE

rec RECORD;

BEGIN

FOR rec IN EXECUTE 'select * from "Animals"'

LOOP

id = rec.id;

name = rec.name;

RETURN next;

END LOOP;

END;

$BODY$

LANGUAGE plpgsql VOLATILE COST 100

 

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

 

CREATE OR REPLACE FUNCTION public.read_animtowork(IN idWorker integer)

RETURNS TABLE(id integer, name character) AS

$BODY$

DECLARE

rec RECORD;

cur_work CURSOR FOR

SELECT "AnimToWork".id,"Animals".name

FROM "AnimToWork", "Animals"

WHERE "AnimToWork".id_worker=idWorker

AND "AnimToWork".id_animal="Animals".id;

BEGIN

FOR rec IN cur_work

LOOP

id = rec.id;

name = rec.name;

RETURN next;

END LOOP;

END;

$BODY$

LANGUAGE plpgsql VOLATILE COST 100;

 

Функция read_city – возвращает таблицу City. Входящие параметры – нету.

 

CREATE OR REPLACE FUNCTION read_city()

RETURNS table(id integer, name character(15)) AS

$BODY$

DECLARE

rec RECORD;

BEGIN

FOR rec IN EXECUTE 'select * from "City"'

LOOP

id = rec.id;

name = rec.name;

RETURN next;

END LOOP;

END;

$BODY$

LANGUAGE plpgsql VOLATILE COST 100;

 

Функция read_servis – возвращает таблицу Servis. Входящие параметры – нету.

 

CREATE OR REPLACE FUNCTION read_servis()

RETURNS table(id integer, name character(15)) AS

$BODY$

DECLARE

rec RECORD;

BEGIN

FOR rec IN EXECUTE 'select * from "Servis"'

LOOP

id = rec.id;

name = rec.name;

RETURN next;

END LOOP;

END;

$BODY$

LANGUAGE plpgsql VOLATILE COST 100;

 

Функция read_worker – возвращает таблицу рабочих, которые работают в конкретном зоопарке. Входящий параметр – id зоопарка, чьи рабочие нужно получить.

 

CREATE OR REPLACE FUNCTION read_worker(idZoo integer)

RETURNS table(id integer, name character(30), id_servis integer) AS

$BODY$

DECLARE

rec RECORD;

cur_work CURSOR FOR select * from "Worker" where id_zoo=idZoo;

BEGIN

FOR rec IN cur_work

LOOP

id = rec.id;

name = rec.name;

id_servis = rec.id_servis;

RETURN next;

END LOOP;

END;

$BODY$

LANGUAGE plpgsql VOLATILE COST 100;

 

Функция read_zoo – возвращает таблицу зоопарков, которые находятся в конкретном городе. Входящий параметр – id города, чьи зоопарки нужно получить.

 

CREATE OR REPLACE FUNCTION read_zoo(idCity integer)

RETURNS table(id integer, name character(20)) AS

$BODY$

DECLARE

rec RECORD;

cur_zoo CURSOR FOR select * from "Zoo" where id_city=idCity;

BEGIN

FOR rec IN cur_zoo

LOOP

id = rec.id;

name = rec.name;

RETURN next;

END LOOP;

END;

$BODY$

LANGUAGE plpgsql VOLATILE COST 100;

 

Функция upd_animals – изменяет название животного. Входящие параметры – id животного, новое название животного. Возвращает id животного или 0, если замена не удалась.

 

CREATE OR REPLACE FUNCTION upd_animals(old_id integer, new_name varchar)

RETURNS integer AS

$BODY$

DECLARE

ret_id integer;

BEGIN

ret_id=0;

IF (SELECT COUNT(*) FROM "Animals"

WHERE UPPER(TRIM(name))=UPPER(TRIM(new_name)))=0

THEN

UPDATE "Animals" SET name=new_name WHERE id=old_id;

ret_id = old_id;

END IF;

RETURN ret_id;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE COST 100;

 

Функция upd_AnimToWork – изменяет животного, которое обслуживается у конкретного рабочего. Входящие параметры – id записи, новое id животного. Возвращает id измененной записи.

 

CREATE OR REPLACE FUNCTION public.upd_AnimToWork(old_id integer, idAnimal integer)

RETURNS integer AS

$BODY$

BEGIN

UPDATE "AnimToWork" SET id_animal=idAnimal WHERE id=old_id;

RETURN old_id;

END;

$BODY$

LANGUAGE plpgsql VOLATILE COST 100;

 

Функция upd_city – изменяет название города. Входящие параметры – id города, новое название города. Возвращает id города или 0, если замена не удалась.

 

CREATE OR REPLACE FUNCTION upd_city(old_id integer, new_name varchar)

RETURNS integer AS

$BODY$

DECLARE

ret_id integer;

BEGIN

ret_id=0;

IF (SELECT COUNT(*) FROM "City" WHERE UPPER(TRIM(name))=UPPER(TRIM(new_name)))=0

THEN

UPDATE "City" SET name=new_name WHERE id=old_id;

ret_id = old_id;

END IF;

RETURN ret_id;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE COST 100;

 

Функция upd_servis – изменяет название услуги. Входящие параметры – id услуги, новое название услуги. Возвращает id услуги или 0, если замена не удалась.

 

CREATE OR REPLACE FUNCTION upd_servis(old_id integer, new_name varchar)

RETURNS integer AS

$BODY$

DECLARE

ret_id integer;

BEGIN

ret_id=0;

IF (SELECT COUNT(*) FROM "Servis"

WHERE UPPER(TRIM(name))=UPPER(TRIM(new_name)))=0

THEN

UPDATE "Servis" SET name=new_name WHERE id=old_id;

ret_id = old_id;

END IF;

RETURN ret_id;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE COST 100;

 

Функция upd_worker – изменяет фамилию, имя и отчество рабочего, а также услугу, которую этот рабочий предоставляет. Входящие параметры – id рабочего, новые фамилия, имя и отчество, id услуги. Возвращает id рабочего или 0, если замена не удалась.

 

CREATE OR REPLACE FUNCTION public.upd_worker(old_id integer, new_name varchar, idZoo integer, idServis integer)

RETURNS integer AS

$BODY$

DECLARE

ret_id integer;

BEGIN

ret_id=0;

IF (SELECT COUNT(*) FROM "Worker"

WHERE UPPER(TRIM(name))=UPPER(TRIM(new_name))

AND id_zoo=idZoo AND id_servis=idServis)=0

THEN

UPDATE "Worker" SET name=new_name, id_servis=idServis WHERE id=old_id;

ret_id = old_id;

END IF;

RETURN ret_id;

END;

$BODY$

LANGUAGE plpgsql VOLATILE COST 100;

 

Функция upd_zoo – изменяет название зоопарка. Входящие параметры – id зоопарка, новое название зоопарка. Возвращает id зоопарка или 0, если замена не удалась.

 

CREATE OR REPLACE FUNCTION upd_zoo(old_id integer, new_name varchar, idCity integer)

RETURNS integer AS

$BODY$

DECLARE

ret_id integer;

BEGIN

ret_id=0;

IF (SELECT COUNT(*) FROM "Zoo"

WHERE UPPER(TRIM(name))=UPPER(TRIM(new_name))

AND id_city=idCity)=0

THEN

UPDATE "Zoo" SET name=new_name WHERE id=old_id;

ret_id = old_id;

END IF;

RETURN ret_id;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE COST 100;

 

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

 

CREATE OR REPLACE FUNCTION public.Top10()

RETURNS TABLE(id integer, workname character, zooname character,

cityname character, kol integer) AS

$BODY$

DECLARE

rec RECORD;

cur_work CURSOR FOR

SELECT "Worker".id, "Worker".name AS workname,

"Zoo".name AS zooname, "City".name AS cityname,

COUNT("AnimToWork".*) AS kol

FROM "Worker", "Zoo", "City", "AnimToWork"

WHERE "Worker".id_zoo="Zoo".id AND "Zoo".id_city="City".id

AND "AnimToWork".id_worker="Worker".id

GROUP BY "Worker".id, "Zoo".name, "City".name

ORDER BY kol DESC LIMIT 10;

BEGIN

FOR rec IN cur_work

LOOP

id = rec.id;

workname = rec.workname;

zooname = rec.zooname;

cityname = rec.cityname;

kol = rec.kol;

RETURN next;

END LOOP;

END;

$BODY$

LANGUAGE plpgsql VOLATILE COST 100

 

 

Разработка модулей системы

База данных организована таким образом, что все изменения – добавления, изменения, удаления выполняются функциями сервера. Эти функции возвращают приложению-клиенту только код выполненной операции. Если код равен нулю, то операция не удалась, если другое число, то оно означает id записи, над которой было выполнено действие. Отдельной группой на сервере стоят функции, которые читают таблицу или ее часть, или результирующую таблицу состоящую из полей разных таблиц, т.е. результат выборки (SELECT… FROM… WHERE…) и передают в приложение-клиент таблицу.

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

В данной реализации приложение-клиент выполнено в среде Microsoft Visual FoxPro 9.

Для того, чтобы VFP мог работать с сервером базы данных PostgreSQL необходимо установить драйвер ODBC для PostgreSQL.

 

Выводы

В результате выполнения работы я получил полностью функциональную систему. На сервере PostgreSQL с нуля была создана база данных – созданы таблицы, установлены связи между ними и обеспечена целостность. Были написаны, испытаны, опробованы и отлажены функции по отображению данных, а также по изменению (добавлению, исправлению и удалению) данных.

Из среды Visual FoxPro была установлена связь с базой данных PostgreSQL. Были отлажены классы для работы с данными и написан понятный и дружественный интерфейс для пользователя.

Когда программа уже написана, вижу, что ее можно было бы усовершенствовать несколько изменив всю структуру. Так, в данной реализации каждое животное имеет только одного рабочего, который его обслуживает. Логичнее было бы каждому животному назначить по нескольку рабочих с разными видами услуг – кто-то кормит, кто-то чистит, а кто-то расчесывает. Но это уже не важно.

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

 

ПРИЛОЖЕНИЯ

 

 

Обозначение Наименование Примечание
  Документация  
  Информационно-справочная  
  система «База данных о сетях зоопарка»  
  Текст программы  
     
  Информационно-справочная  
  система «База данных о сетях зоопарка»  
  Руководство пользователя  
     
  Комплексы  
  Microsoft Visual FoxPro 9 SP2  
  OC Windows 7  
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

 

 

 

 

Класс oCad

Для подключения к таблицам создан класс oCad на основе встроенного класса CursorAdapter. Его свойства:

DataSourceType=’ADO’

FetchSize=-1

SendUpdates=.F.

Процедура Init:

this.datasource = CREATEOBJECT('ADODB.RecordSet')

this.datasource.cursorlocation = 3

this.datasource.locktype = 3

this.datasource.activeconnection = loconn

 

Дополнительные процедуры

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

 

· Add_record – добавляет новую запись в таблицу

LPARAMETERS tabname, objLst, objCursor

&& параметры - имя таблицы, объект-список, объект-курсор

 

&& Вызвать форму запроса нового имени и возврат его в переменную cName

DO FORM zapros_name WITH tabname, '' TO cName

IF EMPTY(cName) && Если запрос отменен

RETURN && Возврат

ENDIF

 

oTemp=CREATEOBJECT('ocad') && создать объект для временного курсора

oTemp.Alias='Temp' && имя временного курсора

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

oTemp.SelectCmd='SELECT * FROM add_'+tabname+'(?cName) as ret'

oTemp.CursorSchema='ret I' && структура курсора

IF oTemp.CursorFill(.T.,.F., 1, loCmd)=.F. && если заполнение курсора не получилось

LOCAL laerror(1) && объявление массива

= AERROR(laerror) && чтение ошибки в массив

MESSAGEBOX('Temp '+STR(laerror(1))+' '+laerror(2)) && выдать сообщение об ошибке

RETURN.F. && возврат с ошибкой

ENDIF

 

IF temp.ret>0 && если сервер БД вернул код > 0

IF USED('City') && если открыт курсор City

idCity=City.id && запомнить его id (он может использоваться в параметре функции на сервере БД

ENDIF

IF USED('Zoo') && если открыт курсор Zoo

idZoo=Zoo.id && запомнить его id (он может использоваться в параметре функции на сервере БД

ENDIF

objCursor.CursorRefresh() && обновить курсор

objLst.Requery && перезалить список

=SEEK(temp.ret, tabname, 'id') && найти новую запись в списке

ENDIF

 

· Upd_record – изменяет запись в таблице

LPARAMETERS tabname, nId, objLst, objCursor

&& параметры - имя таблицы, id изменяемой записи, объект-список, объект-курсор

 

SELECT (tabname) && переключиться на курсор

&& Вызвать форму запроса нового имени и возврат его в переменную cName

DO FORM zapros_name WITH tabname, ALLTRIM(name) TO cName

IF EMPTY(cName) && Если запрос отменен

RETURN && Возврат

ENDIF

 

nId=id && запомнить id в переменной для использования в параметре функции

oTemp=CREATEOBJECT('ocad') && создать объект для временного курсора

oTemp.Alias='Temp' && имя временного курсора

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

oTemp.SelectCmd='SELECT * FROM upd_'+tabname+'(?nId,?cName) as ret'

oTemp.CursorSchema='ret I' && структура курсора

IF oTemp.CursorFill(.T.,.F., 1, loCmd)=.F. && если заполнение курсора не получилось

LOCAL laerror(1) && объявление массива

= AERROR(laerror) && чтение ошибки в массив

MESSAGEBOX('Temp '+STR(laerror(1))+' '+laerror(2)) && выдать сообщение об ошибке

RETURN.F. && возврат с ошибкой

ENDIF

 

IF temp.ret>0 && если сервер БД вернул код > 0

objCursor.CursorRefresh() && обновить курсор

objLst.Requery && перезалить список

=SEEK(temp.ret, tabname, 'id') && найти новую запись в списке

ENDIF

 

· Del_record – удаляет запись из таблицы

LPARAMETERS tabname, nId, objLst, objCursor

&& параметры - имя таблицы, id удаляемой записи, объект-список, объект-курсор

 

&& запрос подтверждения удаления

ret_val=MESSAGEBOX('Действительно удалить эту запись?',4+32,'Удаление')

IF ret_val<>6 && если выбрано не "Да"

RETURN && вернуться

ENDIF

 

SELECT (tabname) && переключиться на курсор

old_name=name && сохранить удаляемое имя

oTemp=CREATEOBJECT('ocad') && создать объект для временного курсора

oTemp.Alias='Temp' && имя временного курсора

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

oTemp.SelectCmd='SELECT * FROM del_record(?tabname,?nId) as ret'

 

oTemp.CursorSchema='ret I' && структура курсора

IF oTemp.CursorFill(.T.,.F., 1, loCmd)=.F. && если заполнение курсора не получилось

LOCAL laerror(1) && объявление массива

= AERROR(laerror) && чтение ошибки в массив

MESSAGEBOX('Temp '+STR(laerror(1))+' '+laerror(2)) && выдать сообщение об ошибке

RETURN.F. && возврат с ошибкой

ENDIF

 

IF temp.ret>0 && если сервер БД вернул код > 0

IF USED('City') && если открыт курсор City

idCity=City.id && запомнить его id (он может использоваться в параметре функции на сервере БД

ENDIF

IF USED('Zoo') && если открыт курсор Zoo

idZoo=Zoo.id && запомнить его id (он может использоваться в параметре функции на сервере БД

ENDIF

IF USED('Worker') && если открыт курсор Worker

idWorker=Worker.id && запомнить его id (он может использоваться в параметре функции на сервере БД

ENDIF

objCursor.CursorRefresh() && обновить курсор

SELECT (tabname) && переключиться на курсор

objLst.Requery && перезалить список

=SEEK(old_name, tabname, 'name') && выполнить поиск близлежащего названия к старому

IF EOF() && если вышли за конец курсора

GO BOTTOM && перейти в его конец

ENDIF

ENDIF

 

Реферат

Курсовой проект, 53 с., 7 рис., 1 табл., 19 источников, приложения.

 

В работе описан процесс и результаты проектирования и разработки (реализации) информационно-справочной системы “База данных о сетях зоопарков”.

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

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

Информационно-справочная система “База данных о сетях зоопарков” выполняет следующие основные функции:

- добавление элементов для каждого уровня иерархии структуры;

- удаление элемента для каждого уровня иерархии структуры;

- сохранение и загрузка структуры из файла;

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

Данная информационно-справочная система разработана в среде Microsoft Visual FoxPro 9 SP2.

с привлечением справочной информации.

Работа информационно-справочной системы возможна в операционной системе WINDOWS на компьютерах.

Дальнейшее развитие работы возможно в сторону

- наращивания уровней структуры;

- улучшения алгоритмов обработки данных;

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

- улучшение графического интерфейса.

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

 

ПРОГРАММИРОВАНИЕ, Microsoft Visual FoxPro, ФАЙЛ, УКАЗАТЕЛЬ, СПИСОК, ОКНО, ВВОД.

 

 

РЕФЕРАТ

Курсовий проект, 53 с., 7 рис., 1 табл., 19 джерел, додатки.

 

У роботі описаний процес і результати проектування та розробки (реалізації) інформаційно-довідкової системи “База даних мереж зоопарків”.

Результат проектування представлений у вигляді пояснювальної записки до курсового проекту.

Результат розробки представлений у вигляді сукупності програмних документів, що приводяться в додатку до курсового проекту.

Інформаційно-довідкова система “База даних мереж зоопарків ” виконує такі основні функції:

- додавання елементів для кожного рівня ієрархії структури;

- видалення елемента для кожного рівня ієрархії структури;



Поделиться:


Последнее изменение этой страницы: 2017-01-25; просмотров: 237; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.68.14 (0.492 с.)