Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД_Курсов (КН)_з_прикладом!.doc
Скачиваний:
7
Добавлен:
20.11.2019
Размер:
7.21 Mб
Скачать

Сервісні функції додатка

При роботі з додатком виконується контроль і обмеження вхідних даних. Цей контроль виконується як засобами Interbase-сервера так і за допомогою компонентів Delphi.

Виклик довідників виконується за допомогою стандартних кнопок, розташованих на головній формі додатку. У кожнім довіднику для швидкого пошуку його елементів можна накладати фільтр. Завдання фільтра вибору даних здійснюється за допомогою клавіш CTRL+F.

За допомогою меню «Виборки» користувач може одержати різноманітні дані про хід роботи приймальної комісії.

За допомогою меню «Отчеты» формуються і друкуються основні звіти для керівників приймальної комісії.

За допомогою меню «Очистка» можна швидко і просто підготувати систему до нового сезону прийому абітурієнтів.

Меню «Помощь» дозволяє одержати додаткову інформацію про програму.

4 Організація запуску додатка

Перед запуском додатка необхідно настроїти BDE. Для цього варто запустити додаток “BDE Administrator” або “Real SQLExplorer”. Потім створимо аліас ABITYRIENT і вкажемо наступні параметри:

Database Driver Name Interbase

SERVER NAME Шлях до файлу бази даних

4.1 Інсталяція додатка

Для інсталяції додатка необхідно скопіювати файл Abityrient.exe з дискети на твердий диск і створити ярлик на робочому столі на цей файл, для зручного і швидкого запуску додатка.

4.2 Запуск і закриття встановленого додатка

Запуск додатка здійснюється за допомогою ярлика на робочому столі.

Для виходу з додатка варто натиснути ALT+F4 чи мишею натиснути на хрестик у правому верхньому куті головного вікна програми.

Висновки

Розроблена система одержала зручний інтерфейс, що дозволяє швидко і легко виконувати необхідні користувачу дії. Система дозволяє роздруковувати звіти і вибірки, вести повний електронний облік роботи приймальної комісії.

Скрипт – файл створення бази даних та ії об’єктів

CREATE DATABASE "D:\Abit\ABITYRIENT.GDB"

USER 'SYSDBA' PASSWORD 'masterkey'

PAGE_SIZE 1024 DEFAULT CHARACTER SET WIN1251;

CREATE TABLE FACULT(

PRKEY INTEGER NOT NULL,

SNAM VARCHAR(10) CHARACTER SET WIN1251,

LNAM VARCHAR(50) CHARACTER SET WIN1251,

CONSTRAINT FACULT_PK1 PRIMARY KEY (PRKEY));

CREATE TABLE SPECIALIT(

PRKEY INTEGER NOT NULL,

LFACULT INTEGER,

TEACHFORMD INTEGER,

TEACHFORMW INTEGER,

CIPHER VARCHAR(10) CHARACTER SET WIN1251,

LNAM VARCHAR(50) CHARACTER SET WIN1251,

PLANGOV INTEGER,

PLANEC INTEGER,

CONSTRAINT SPECIALIT_PK1 PRIMARY KEY (PRKEY));

CREATE TABLE TOWN(

PRKEY INTEGER NOT NULL,

LNAM VARCHAR(20) CHARACTER SET WIN1251,

CONSTRAINT TOWN_PK1 PRIMARY KEY (PRKEY));

CREATE TABLE FORLANG(

PRKEY INTEGER NOT NULL,

LNAM VARCHAR(20) CHARACTER SET WIN1251,

CONSTRAINT FORLANG_PK1 PRIMARY KEY (PRKEY));

CREATE TABLE EDINST(

PRKEY INTEGER NOT NULL,

LNAM VARCHAR(20) CHARACTER SET WIN1251,

CONSTRAINT EDINST_PK1 PRIMARY KEY (PRKEY));

CREATE TABLE PRIVIL(

PRKEY INTEGER NOT NULL,

LNAM VARCHAR(20) CHARACTER SET WIN1251,

CONSTRAINT PRIVIL_PK1 PRIMARY KEY (PRKEY));

CREATE TABLE ENTRANT(

PRKEY INTEGER NOT NULL,

REGID INTEGER,

FIO VARCHAR(50) CHARACTER SET WIN1251,

LSPECIALIT INTEGER,

TEACHFORM INTEGER,

BIRTHDAT DATE,

SEX INTEGER,

LTOWN INTEGER,

ADDRESS VARCHAR(50) CHARACTER SET WIN1251,

PHONE VARCHAR(15) CHARACTER SET WIN1251,

ITN VARCHAR(15) CHARACTER SET WIN1251,

JOINDAT DATE,

GOTMONEY INTEGER,

ENTERED INTEGER,

PAYED INTEGER,

MUSTPAY INTEGER,

WANTFREE INTEGER,

MARK1 INTEGER,

MARK2 INTEGER,

MARK3 INTEGER,

MARKT INTEGER,

LEDINST INTEGER,

EDINSTNAM VARCHAR(50) CHARACTER SET WIN1251,

EDINSTFINDAT DATE,

AVRMRK NUMERIC(15,1),

LFORLANG INTEGER,

CAT INTEGER,

ADDDATA BLOB SUB_TYPE 0 SEGMENT SIZE 80,

CONSTRAINT ENTRANT_PK1 PRIMARY KEY (PRKEY));

CREATE TABLE FACULTREGID(

PRKEY INTEGER NOT NULL,

LFACULT INTEGER,

REGID INTEGER,

CONSTRAINT FACULTREGID_PK1 PRIMARY KEY (PRKEY));

CREATE TABLE ENTRANTPRIVIL(

PRKEY INTEGER NOT NULL,

LENTRANT INTEGER,

LPRIVIL INTEGER,

CONSTRAINT ENTRANTPRIVIL_PK1 PRIMARY KEY (PRKEY));

CREATE GENERATOR FACULT_PRKEY_GEN;

SET GENERATOR FACULT_PRKEY_GEN TO 10000;

CREATE GENERATOR SPECIALIT_PRKEY_GEN;

SET GENERATOR SPECIALIT_PRKEY_GEN TO 10000;

CREATE GENERATOR TOWN_PRKEY_GEN;

SET GENERATOR TOWN_PRKEY_GEN TO 10000;

CREATE GENERATOR FORLANG_PRKEY_GEN;

SET GENERATOR FORLANG_PRKEY_GEN TO 10000;

CREATE GENERATOR EDINST_PRKEY_GEN;

SET GENERATOR EDINST_PRKEY_GEN TO 10000;

CREATE GENERATOR ENTRANT_PRKEY_GEN;

SET GENERATOR ENTRANT_PRKEY_GEN TO 10000;

CREATE GENERATOR FACULTREGID_PRKEY_GEN;

SET GENERATOR FACULTREGID_PRKEY_GEN TO 10000;

CREATE GENERATOR PRIVIL_PRKEY_GEN;

SET GENERATOR PRIVIL_PRKEY_GEN TO 10000;

CREATE GENERATOR ENTRANTPRIVIL_PRKEY_GEN;

SET GENERATOR ENTRANTPRIVIL_PRKEY_GEN TO 10000;

CREATE INDEX SPECIALIT_I_LFACULT ON SPECIALIT(LFACULT);

CREATE INDEX ENTRANT_I_LSPECIALIT ON ENTRANT(LSPECIALIT);

CREATE INDEX ENTRANT_I_LTOWN ON ENTRANT(LTOWN);

CREATE INDEX ENTRANT_I_LEDINST ON ENTRANT(LEDINST);

CREATE INDEX FACULTREGID_I_LFACULTREGID ON FACULTREGID(LFACULT,REGID);

CREATE INDEX ENTRANTPRIVIL_I_LEP ON ENTRANTPRIVIL(LENTRANT,LPRIVIL);

/* Exceptions */

CREATE EXCEPTION HASLINKS "На элемент существуют ссылки! Удаление

элемента невозможно!";

COMMIT WORK;

SET AUTODDL OFF;

SET TERM ^ ;

/* Stored procedures */

CREATE PROCEDURE NAME_CONTAINING AS BEGIN EXIT; END ^

CREATE PROCEDURE FACULTREGID_GET_ID AS BEGIN EXIT; END ^

CREATE PROCEDURE FACULTREGID_FREE_ID AS BEGIN EXIT; END ^

CREATE PROCEDURE ENTRANTREPORT_SELECT AS BEGIN EXIT; END ^

CREATE PROCEDURE ENTRANTREPORT2_SELECT AS BEGIN EXIT; END ^

ALTER PROCEDURE NAME_CONTAINING (

IN_LNAM VARCHAR(255),

MASK VARCHAR(255)

) RETURNS (

OUT_LNAM VARCHAR(255)

) AS

BEGIN

IF ((IN_LNAM COLLATE PXW_CYRL) CONTAINING MASK) THEN OUT_LNAM=IN_LNAM;

ELSE OUT_LNAM='ERROR';

SUSPEND;

END

^

ALTER PROCEDURE FACULTREGID_GET_ID(

ILFACULT INTEGER

)RETURNS(

OREGID INTEGER

)AS

DECLARE VARIABLE LCNT INTEGER;

DECLARE VARIABLE LREGID INTEGER;

BEGIN

SELECT MIN(F.REGID)

FROM FACULTREGID F

WHERE F.LFACULT=:ILFACULT

INTO :OREGID;

IF(OREGID IS NULL)THEN

BEGIN

OREGID=1;

INSERT INTO FACULTREGID(PRKEY,LFACULT,REGID)

VALUES(GEN_ID(FACULTREGID_PRKEY_GEN,1),:ILFACULT,2);

END

ELSE

BEGIN

DELETE FROM FACULTREGID F

WHERE F.LFACULT=:ILFACULT AND F.REGID=:OREGID;

SELECT COUNT(F.PRKEY)

FROM FACULTREGID F

WHERE F.LFACULT=:ILFACULT AND F.REGID<>:OREGID

INTO :LCNT;

IF((LCNT=0)OR(LCNT IS NULL))THEN

BEGIN

LREGID=OREGID+1;

INSERT INTO FACULTREGID(PRKEY,LFACULT,REGID)

VALUES(GEN_ID(FACULTREGID_PRKEY_GEN,1),:ILFACULT,:LREGID);

END

END

SUSPEND;

END

^

ALTER PROCEDURE FACULTREGID_FREE_ID(

ILFACULT INTEGER,

IREGID INTEGER

)AS

BEGIN

INSERT INTO FACULTREGID(PRKEY,LFACULT,REGID)

VALUES(GEN_ID(FACULTREGID_PRKEY_GEN,1),:ILFACULT,:IREGID);

END

^

ALTER PROCEDURE ENTRANTREPORT_SELECT

RETURNS(

ORT INTEGER,

OFPRKEY INTEGER,

OFNAM VARCHAR(50),

OSPRKEY INTEGER,

OSNAM VARCHAR(50),

OPLAN INTEGER,

OJOINED INTEGER,

OPAYED INTEGER,

OENTERED INTEGER

)AS

DECLARE VARIABLE LPLANGOV INTEGER;

DECLARE VARIABLE LPLANEC INTEGER;

DECLARE VARIABLE LPLAN INTEGER;

DECLARE VARIABLE LJOINED INTEGER;

DECLARE VARIABLE LPAYED INTEGER;

DECLARE VARIABLE LENTERED INTEGER;

BEGIN

FOR SELECT F.PRKEY,F.LNAM

FROM FACULT F

ORDER BY F.LNAM

INTO :OFPRKEY,:OFNAM

DO

BEGIN

ORT=1;

OPLAN=NULL;

OJOINED=NULL;

OPAYED=NULL;

OENTERED=NULL;

SUSPEND;

LPLAN=0;

LJOINED=0;

LPAYED=0;

LENTERED=0;

ORT=2;

FOR SELECT S.PRKEY,S.LNAM,S.PLANGOV,S.PLANEC

FROM SPECIALIT S

WHERE S.LFACULT=:OFPRKEY

ORDER BY S.LNAM

INTO :OSPRKEY,:OSNAM,:LPLANGOV,:LPLANEC

DO

BEGIN

OPLAN=0;

IF(LPLANGOV>0)THEN OPLAN=OPLAN+LPLANGOV;

IF(LPLANEC>0)THEN OPLAN=OPLAN+LPLANEC;

OJOINED=0;

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LSPECIALIT=:OSPRKEY AND E.GOTMONEY=0

INTO :OJOINED;

IF(OJOINED IS NULL)THEN OJOINED=0;

OPAYED=0;

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LSPECIALIT=:OSPRKEY AND E.PAYED=1

INTO :OPAYED;

IF(OPAYED IS NULL)THEN OPAYED=0;

OENTERED=0;

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LSPECIALIT=:OSPRKEY AND E.ENTERED=1

INTO :OENTERED;

IF(OENTERED IS NULL)THEN OENTERED=0;

LPLAN=LPLAN+OPLAN;

LJOINED=LJOINED+OJOINED;

LPAYED=LPAYED+OPAYED;

LENTERED=LENTERED+OENTERED;

SUSPEND;

END

ORT=3;

OPLAN=LPLAN;

OJOINED=LJOINED;

OPAYED=LPAYED;

OENTERED=LENTERED;

SUSPEND;

END

END

^

ALTER PROCEDURE ENTRANTREPORT2_SELECT

RETURNS(

ORT INTEGER,

OFPRKEY INTEGER,

OFNAM VARCHAR(50),

OSPRKEY INTEGER,

OSNAM VARCHAR(50),

OPLAN INTEGER,

OTEACHFORMD INTEGER,

OTEACHFORMW INTEGER,

OJOINED INTEGER,

OPAYED INTEGER,

OENTERED INTEGER

)AS

DECLARE VARIABLE LPLANGOV INTEGER;

DECLARE VARIABLE LPLANEC INTEGER;

DECLARE VARIABLE LPLAN INTEGER;

DECLARE VARIABLE LJOINED INTEGER;

DECLARE VARIABLE LPAYED INTEGER;

DECLARE VARIABLE LENTERED INTEGER;

DECLARE VARIABLE LTEACHFORMD INTEGER;

DECLARE VARIABLE LTEACHFORMW INTEGER;

BEGIN

FOR SELECT F.PRKEY,F.LNAM

FROM FACULT F

ORDER BY F.LNAM

INTO :OFPRKEY,:OFNAM

DO

BEGIN

ORT=1;

OPLAN=NULL;

OJOINED=NULL;

OPAYED=NULL;

OENTERED=NULL;

SUSPEND;

LPLAN=0;

LJOINED=0;

LPAYED=0;

LENTERED=0;

LTEACHFORMD=0;

LTEACHFORMW=0;

ORT=2;

FOR SELECT S.PRKEY,S.LNAM,S.PLANGOV,S.PLANEC

FROM SPECIALIT S

WHERE S.LFACULT=:OFPRKEY

ORDER BY S.LNAM

INTO :OSPRKEY,:OSNAM,:LPLANGOV,:LPLANEC

DO

BEGIN

OPLAN=0;

IF(LPLANGOV>0)THEN OPLAN=OPLAN+LPLANGOV;

IF(LPLANEC>0)THEN OPLAN=OPLAN+LPLANEC;

OJOINED=0;

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LSPECIALIT=:OSPRKEY AND E.GOTMONEY=0

INTO :OJOINED;

IF(OJOINED IS NULL)THEN OJOINED=0;

OPAYED=0;

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LSPECIALIT=:OSPRKEY AND E.PAYED=1

INTO :OPAYED;

IF(OPAYED IS NULL)THEN OPAYED=0;

OENTERED=0;

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LSPECIALIT=:OSPRKEY AND E.ENTERED=1

INTO :OENTERED;

IF(OENTERED IS NULL)THEN OENTERED=0;

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LSPECIALIT=:OSPRKEY AND E.TEACHFORM=1

INTO :OTEACHFORMD;

IF(OTEACHFORMD IS NULL)THEN OTEACHFORMD=0;

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LSPECIALIT=:OSPRKEY AND E.TEACHFORM=2

INTO :OTEACHFORMW;

IF(OTEACHFORMW IS NULL)THEN OTEACHFORMW=0;

LPLAN=LPLAN+OPLAN;

LJOINED=LJOINED+OJOINED;

LPAYED=LPAYED+OPAYED;

LENTERED=LENTERED+OENTERED;

LTEACHFORMD=LTEACHFORMD+OTEACHFORMD;

LTEACHFORMW=LTEACHFORMW+OTEACHFORMW;

SUSPEND;

END

ORT=3;

OPLAN=LPLAN;

OJOINED=LJOINED;

OPAYED=LPAYED;

OENTERED=LENTERED;

OTEACHFORMD=LTEACHFORMD;

OTEACHFORMW=LTEACHFORMW;

SUSPEND;

END

END

^

SET TERM ; ^

COMMIT WORK ;

SET AUTODDL ON;

SET TERM ^ ;

/* Triggers only will work for SQL triggers */

CREATE TRIGGER FACULT_BD_01 FOR FACULT ACTIVE BEFORE DELETE POSITION 1

AS

DECLARE VARIABLE LCNT INTEGER;

BEGIN

SELECT COUNT(S.PRKEY)

FROM SPECIALIT S

WHERE S.LFACULT=OLD.PRKEY

INTO :LCNT;

IF(LCNT>0)THEN EXCEPTION HASLINKS;

DELETE FROM FACULTREGID

WHERE LFACULT=OLD.PRKEY;

END

^

CREATE TRIGGER SPECIALIT_BD_01 FOR SPECIALIT ACTIVE BEFORE DELETE POSITION 1

AS

DECLARE VARIABLE LCNT INTEGER;

BEGIN

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LSPECIALIT=OLD.PRKEY

INTO :LCNT;

IF(LCNT>0)THEN EXCEPTION HASLINKS;

END

^

CREATE TRIGGER TOWN_BD_01 FOR TOWN ACTIVE BEFORE DELETE POSITION 1

AS

DECLARE VARIABLE LCNT INTEGER;

BEGIN

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LTOWN=OLD.PRKEY

INTO :LCNT;

IF(LCNT>0)THEN EXCEPTION HASLINKS;

END

^

CREATE TRIGGER EDINST_BD_01 FOR EDINST ACTIVE BEFORE DELETE POSITION 1

AS

DECLARE VARIABLE LCNT INTEGER;

BEGIN

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LEDINST=OLD.PRKEY

INTO :LCNT;

IF(LCNT>0)THEN EXCEPTION HASLINKS;

END

^

CREATE TRIGGER FORLANG_BD_01 FOR FORLANG ACTIVE BEFORE DELETE POSITION 1

AS

DECLARE VARIABLE LCNT INTEGER;

BEGIN

SELECT COUNT(E.PRKEY)

FROM ENTRANT E

WHERE E.LFORLANG=OLD.PRKEY

INTO :LCNT;

IF(LCNT>0)THEN EXCEPTION HASLINKS;

END

^

CREATE TRIGGER PRIVIL_BD_01 FOR PRIVIL ACTIVE BEFORE DELETE POSITION 1

AS

DECLARE VARIABLE LCNT INTEGER;

BEGIN

SELECT COUNT(E.PRKEY)

FROM ENTRANTPRIVIL E

WHERE E.LPRIVIL=OLD.PRKEY

INTO :LCNT;

IF(LCNT>0)THEN EXCEPTION HASLINKS;

END

^

CREATE TRIGGER ENTRANT_BD_01 FOR ENTRANT ACTIVE BEFORE DELETE POSITION 1

AS

BEGIN

DELETE FROM ENTRANTPRIVIL

WHERE LENTRANT=OLD.PRKEY;

END

^

COMMIT WORK ^

SET TERM ; ^