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

1.3 Отчеты с помощью FastReport 5.0

В Delphi 7 не предусмотрены компоненты для создания отчетов, вывода их на печать и сохранения в отдельный файл. Все эти и многие другие функции может выполнять генератор отчетов FastReport 5.0. При установке FastReport 5.0 он автоматически встраивается в Delphi 7, что очень удобно для данного проекта.

2 Разработка программы

2.1 Схема данных

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

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

Схема базы данных (от англ. Database schema) — её структура, описанная на формальном языке, поддерживаемом СУБД. В реляционных базах данных схема определяет таблицы, поля в каждой таблице (обычно с указанием их названия, типа, обязательности), и ограничения целостности (первичный, потенциальные и внешние ключи и другие ограничения).

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

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

2.2 Описание таблиц бд

Всего имеется одиннадцать таблиц: «Список товаров(TOVARY)», «Материнские платы(MATPLAT)», «Звуковые карты(MEDIACARD)», «ОЗУ(OZY)», «Процессоры(PROCESSORS)», «Видеокарты(VIDEOCARD)», «Винчестеры(VINCHESTERS)», «Расход(RASHOD)», «Приход(PRIHOD)», «Покупатели(POKYPATELY)», «Поставщики(POSTAVSHIKI)».

2.3 Создание бд

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

Таблица POSTAVSHIKI

CREATE TABLE "POSTAVSHIKI"

(

"N_POS" INTEGER NOT NULL,

"NAME" VARCHAR(70) CHARACTER SET WIN1251,

"GOROD" VARCHAR(30) CHARACTER SET WIN1251,

"TELEPHON" VARCHAR(20) CHARACTER SET WIN1251,

CONSTRAINT "PK_POSTAVSHIKI" PRIMARY KEY ("N_POS")

);

Таблица POKYPATELY

CREATE TABLE "POKYPATELY"

(

"N_POK" INTEGER NOT NULL,

"NAME" VARCHAR(70) CHARACTER SET WIN1251,

"GOROD" VARCHAR(30) CHARACTER SET WIN1251,

"TELEPHON" VARCHAR(20) CHARACTER SET WIN1251,

CONSTRAINT "PK_POKYPATELY" PRIMARY KEY ("N_POK")

);

Таблица MATPLAT

CREATE TABLE "MATPLAT"

(

"PODPROC" VARCHAR(20) CHARACTER SET WIN1251,

"TOVAR" VARCHAR(250) CHARACTER SET WIN1251 NOT NULL,

"KOLVO" INTEGER,

"ID" INTEGER NOT NULL,

CONSTRAINT "PK_MATPLAT" PRIMARY KEY ("ID")

);

Таблица MEDIACARD

CREATE TABLE "MEDIACARD"

(

"ID" INTEGER NOT NULL,

"TOVAR" VARCHAR(250) CHARACTER SET WIN1251,

"KOLVO" INTEGER,

CONSTRAINT "PK_MEDIACARD" PRIMARY KEY ("ID")

);

ALTER TABLE "MEDIACARD" ADD CONSTRAINT "FK_MEDIACARD_1" FOREIGN KEY ("TOVAR") REFERENCES TOVARY ("TOVAR");

Таблица OZY

CREATE TABLE "OZY"

(

"ID" INTEGER NOT NULL,

"OBEM" VARCHAR(20) CHARACTER SET WIN1251,

"TIP" VARCHAR(20) CHARACTER SET WIN1251,

"CHASTOTA" VARCHAR(20) CHARACTER SET WIN1251,

"TOVAR" VARCHAR(250) CHARACTER SET WIN1251,

"KOLVO" INTEGER,

CONSTRAINT "PK_OZY" PRIMARY KEY ("ID")

);

ALTER TABLE "OZY" ADD CONSTRAINT "FK_OZY_1" FOREIGN KEY ("TOVAR") REFERENCES TOVARY ("TOVAR");

Таблица PRIHOD

CREATE TABLE "PRIHOD"

(

"N_PRIH" INTEGER NOT NULL,

"DAT_PRIH" DATE,

"TOVAR" VARCHAR(250) CHARACTER SET WIN1251,

"KOLVO" INTEGER,

"N_POS" INTEGER,

CONSTRAINT "PK_PRIHOD" PRIMARY KEY ("N_PRIH")

);

ALTER TABLE "PRIHOD" ADD CONSTRAINT "FK_PRIHOD_1" FOREIGN KEY ("TOVAR") REFERENCES TOVARY ("TOVAR");

ALTER TABLE "PRIHOD" ADD CONSTRAINT "FK_PRIHOD_2" FOREIGN KEY ("N_POS") REFERENCES POSTAVSHIKI ("N_POS");

Таблица PROCESSORS

CREATE TABLE "PROCESSORS"

(

"ID" INTEGER NOT NULL,

"FIRMA" VARCHAR(20) CHARACTER SET WIN1251,

"TOVAR" VARCHAR(250) CHARACTER SET WIN1251,

"KOLVO" INTEGER,

CONSTRAINT "PK_PROCESSORS" PRIMARY KEY ("ID")

);

ALTER TABLE "PROCESSORS" ADD CONSTRAINT "FK_PROCESSORS_1" FOREIGN KEY ("TOVAR") REFERENCES TOVARY ("TOVAR");

Таблица RASHOD

CREATE TABLE "RASHOD"

(

"N_RAS" INTEGER NOT NULL,

"DAT_RAS" DATE,

"TOVAR" VARCHAR(250) CHARACTER SET WIN1251,

"KOLVO" INTEGER,

"N_POK" INTEGER,

CONSTRAINT "PK_RASHOD" PRIMARY KEY ("N_RAS")

);

ALTER TABLE "RASHOD" ADD CONSTRAINT "FK_RASHOD_1" FOREIGN KEY ("TOVAR") REFERENCES TOVARY ("TOVAR");

ALTER TABLE "RASHOD" ADD CONSTRAINT "FK_RASHOD_2" FOREIGN KEY ("N_POK") REFERENCES POKYPATELY ("N_POK");

Таблица TOVARY

CREATE TABLE "TOVARY"

(

"CATEGORY" VARCHAR(57) CHARACTER SET WIN1251 NOT NULL,

"TOVAR" VARCHAR(250) CHARACTER SET WIN1251 NOT NULL,

CONSTRAINT "PK_TOVARY" PRIMARY KEY ("TOVAR")

);

Таблица VIDEOCARD

CREATE TABLE "VIDEOCARD"

(

"ID" INTEGER NOT NULL,

"FIRM" VARCHAR(20) CHARACTER SET WIN1251,

"OBEM" VARCHAR(20) CHARACTER SET WIN1251,

"TOVAR" VARCHAR(250) CHARACTER SET WIN1251,

"KOLVO" INTEGER,

CONSTRAINT "PK_VIDEOCARD" PRIMARY KEY ("ID")

);

ALTER TABLE "VIDEOCARD" ADD CONSTRAINT "FK_VIDEOCARD_1" FOREIGN KEY ("TOVAR") REFERENCES TOVARY ("TOVAR");

Таблица VINCHESTERS

CREATE TABLE "VINCHESTERS"

(

"ID" INTEGER NOT NULL,

"OBEM" VARCHAR(20) CHARACTER SET WIN1251,

"TIPE" VARCHAR(20) CHARACTER SET WIN1251,

"TOVAR" VARCHAR(250) CHARACTER SET WIN1251,

"KOLVO" INTEGER,

CONSTRAINT "PK_VINCHESTERS" PRIMARY KEY ("ID")

);

ALTER TABLE "VINCHESTERS" ADD CONSTRAINT "FK_VINCHESTERS_1" FOREIGN KEY ("TOVAR") REFERENCES TOVARY ("TOVAR");

Для упрощения удаления данных из связанный таблиц применялись триггеры(в количестве 2 штук). Ниже приведен пример триггера на удаление покупателя из таблицы «POKYPATELY» и всех расходов, связанных с этим покупателем из таблицы «RASHOD».

CREATE TRIGGER "DELETE_POKYPATELY" FOR "POKYPATELY"

ACTIVE AFTER DELETE POSITION 0

AS

begin

delete From RASHOD Where RASHOD.N_POK=pokypately.N_POK;

end

Для автоматического заполнения поля «ID» во таблицах кроме «TOVARY» были созданы генераторы и процедуры(по 3 штуки для каждой таблицы). Пример генератора и процедуры к таблице «MATPLAT».

CREATE GENERATOR "GEN_MATPLAT_ID";

CREATE PROCEDURE "SP_GEN_MATPLAT_ID"

RETURNS

(

"ID" INTEGER

)

AS

BEGIN EXIT; END ^

ALTER PROCEDURE "SP_GEN_MATPLAT_ID"

RETURNS

(

"ID" INTEGER

)

AS

begin

id = gen_id(gen_matplat_id, 1);

suspend;

end

CREATE TRIGGER "MATPLAT_BI" FOR "MATPLAT"

ACTIVE BEFORE INSERT POSITION 0

as

begin

if (new.id is null) then

new.id = gen_id(gen_matplat_id,1);

end