Зміст:
1. Структури бази даних ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ........ 3
2. Алгоритм роботи програми ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ....... 4
3. Малюнки, що відображають зовнішній вигляд екранних форм і меню ... .5
4. Тексти програми і процедур з докладними коментарями ... .. 8
5. Зразки звітів ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .... 17
6. Посібник користувача програми ... ... ... ... ... ... ... ... ... ... ..... 18
7. Література ... ... ... ... ... ... ... ... ... ... ... ... ... ... .... ... ... ... ... ... ... ... ... ..... 19
Структури баз даних.
Розглянемо структури баз даних на малюнку:
Тут обидві бази даних проіндексовані і пов'язані по полю NOMBIL, причому одного запису бази даних READERS можуть відповідати кілька записів з бази даних BOOKS (зв'язок «один-со-багатьма).
Малюнки, що відображають зовнішній
вид екранних форм і меню
1. Вікно, показивающееданние про курсову роботу і введення пароля.
2. Головне меню програми.
3. Пункт меню «пошук читача»
а) Вікно пошуку читача за номером читацького квитка.
б) Перелік книг, виданих читачеві.
в) Вікно допомоги.
г) Вікно пошуку книги і вікно вибору книги по введених даних.
д) Вікно зміни даних читача.
4. Пункт меню «додати книгу».
5. Пункт меню «перегляд боржників».
6. Виведення списку боржників на екран.
Текст програми з коментарями
*** Встановлення середовища
CLEAR
RELEASE ALL
SET MOUSE OFF
SET BELL OFF
SET TALK OFF
SET ESCAPE OFF
SET DATE GERMAN
SET HELP OFF
ON KEY
CLEAR MACROS
*** Виведення інформації про курсову роботу і введення пароля
DEFINE WINDOW BEGIN FROM 3,15 TO 16,64;
COLOR N/GR,, GR +/GR DOUBL
ACTIVATE WINDOW BEGIN
PS = 0
DO WHILE PS = 0
@ 0,16 SAY 'Курсова робота'
@ 1,10 SAY 'з дисципліни "Інформатика"'
@ 3,7 SAY 'База даних "ЧИТАЧІ БІБЛІОТЕКИ"'
@ 4,17 SAY '(варіант № 21)'
@ 6,2 SAY 'Виконав: студент групи УІ-198 Сидоров А.В.'
@ 7,2 SAY 'Прийняв: доцент Гришин В.С.'
@ 11,21 SAY 'ВВЕДІТЬ ПАРОЛЬ:' GET PAS DEFAULT SPACE (10)
READ
DO CASE
CASE PAS # '332087S '
WAIT 'НЕ ПРАВИЛЬНО ВВЕДЕНО ПАРОЛЬ' WINDOW
OTHERWISE
PS = 1
RELEASE WINDOW BEGIN
ENDCASE
ENDDO
*** Відкриття баз даних та встановлення зв'язків
USE READERS IN A ORDER 1
USE BOOKS IN B ORDER 1
SET RELATION TO NOMBIL INTO B
SET SKIP TO B
*** Опис вікон
DEFINE WINDOW F1 FROM 12,27 TO 20,73;
TITLE 'ДОПОМОГА';
COLOR W +/GDOUBL SHADOW
DEFINE WINDOW F3 FROM 13,10 TO 22,69;
TITLE 'НАДАТИ КHІГУ';
COLOR SCHEME 5 DOUBL SHADOW
DEFINE WINDOW SELECT FROM 3,2 TO 14,78;
TITLE 'ВИБІР КHІГІ';
COLOR W +/GR, W +/GR, W +/GR, W +/GR,, W +/N
DEFINE WINDOW SELECT1 FROM 2,0 TO 22,79;
TITLE 'ПЕРЕГЛЯД ДОЛЖHІКОВ';
COLOR W +/BG
DEFINE WINDOW F4 FROM 11,0 TO 18,53;
TITLE 'ДАHHИЕ ЧИТАЧА';
COLOR SCHEME 5 DOUBL SHADOW
DEFINE WINDOW BROWSE1 FROM 0,0 TO 4,79;
TITLE DTOC (DATE ());< br />
COLOR W +/B
DEFINE WINDOW BROWSE FROM 5,0 TO 15,79;
COLOR SCHEME 10
DEFINE WINDOW NOMER FROM 15,25 TO 18,55;
TITLE 'ПОШУК ЧИТАЧА';
COLOR SCHEME 5 SHADOW
DEFINE WINDOW APPEND FROM 14,15 TO 22,69;
TITLE 'ДОБАВЛЕHІЕ ЧИТАЧА';
DOUBLE COLOR SCHEME 5 SHADOW
DEFINE WINDOW APPEND1 FROM 13,15 TO 23,69;
TITLE 'ДОБАВЛЕHІЕ КHІГІ';
DOUBLE COLOR SCHEME 5 SHADOW
DEFINE WINDOW WHERE FROM 14,15 TO 23,54;
TITLE 'ВИСНОВОК ДАHHИХ';
DOUBLE COLOR SCHEME 5 SHADOW
DEFINE WINDOW EXIT FROM 16,20 TO 19,60;
COLOR SCHEME 7 SHADOW
*** Основна частина (меню)
SET COLOR TO W +/B, N/RB
SELECT A
M = 0
DO WHILE M # 5
CLEAR
@ 3,20 TO 13,58 DOUBL
@ 5,28 SAY 'ГЛАВHОЕ МЕHЮ:' COLOR BG/B
@ 7,28 PROMPT 'ПОШУК ЧИТАЧА'
@ 8,28 PROMPT 'ДОДАТИ ЧИТАЧА'
@ 9,28 PROMPT 'ДОДАТИ КHІГУ'
@ 10,28 PROMPT 'ПЕРЕГЛЯД ДОЛЖHІКОВ'
@ 11,28 PROMPT 'ВИХІД'
MENU TO M
DO MENUGLAV
ENDDO
*** Кінець основної частини
*** Підготовка до виходу з програми
ON KEY
SET COLOR TO
SET BELL ON
SET MOUSE ON
SET HELP ON
CLEAR WINDOWS
CLOSE ALL
CLEAR
*** Hачало процедур
*** Процедура розпізнавання вибору в меню
PROCEDURE MENUGLAV
DO CASE
CASE M = 1
DO MAIN
CASE M = 2
DO APPENDREADER
CASE M = 3
DO APPENDBOOK
CASE M = 4
DO DOLG
CASE M = 5
DO EXIT
ENDCASE
/> RETURN
PROCEDURE MAIN
D = 0
DO WHILE D = 0
SELECT A
ACTIVATE WINDOW NOMER
@ 0,1 SAY 'Введіть номер'
@ 1,4 GET A FUNCTION 'ZZZZ' PICTURE '9999 'DEFAULT 0
I = 0
@ 0,21 GET I FUNCTION;
'* ПОШУК; ОТМЕHА' SIZE 1,1,0
READ CYCLE
*** Пошук читача за номером квитка
DO CASE
CASE I = 1.AND.EMPTY (A)
WAIT 'Hомер не був введений' WINDOW
CASE I = 1.AND.! EMPTY (A). AND.! SEEK (A)
WAIT 'Пошук за номером' + ALLTRIM (STR (A ))+;< br />
'Не вдалий' WINDOW
CASE I = 2.OR.LASTKEY () = 27
DEACTIVATE WINDOW NOMER
D = 1
/> RETURN
DEACTIVATE WINDOW NOMER
D = 1
*** При вдалому пошуку читача відкривається BROWSE-вікно
DO KEY & & Призначення клавіш
n = RECNO ()
CLEAR
@ 16,0 SAY 'F1-ПОМОЩЬF2-ПРІHЯТЬ КHІГУF3-НАДАТИ;
КHІГУF4-ІЗМЕHІТЬ ДАHHИЕ ЧИТАЧА '
DO BROWSE1
SELECT B
ACTIVATE WINDOW BROWSE TOP
BROWSE TITLE 'СПИСОК КHІГ, ВИДАHHИХ ЧИТАЧА';
FIELDS WRITER: H = 'АВТОР': 15,;
NAME: H = 'HАЗВАHІЕ': 33,;
YEAR: H = 'РІК ИЗД.': 8,;
INVNOM: H = 'ІHВ №': 5,;
DATA: H = 'ДАТА ВИДАЧІ': 11;
FOR NOMBIL = n;
NOEDIT NOAPPEND WINDOW BROWSE
DEACTIVATE WINDOW BROWSE
DEACTIVATE WINDOW BROWSE1
ENDCASE
ENDDO
ON KEY
/> RETURN
PROCEDURE APPENDREADER
SELECT A
N = RECCOUNT () +1
D = 0
ACTIVATE WINDOW APPEND BOTTOM
DO WHILE D = 0
@ 1,1 SAY 'П.І.Б. 'GET FIOn DEFAULT SPACE (30)
@ 3,1 SAY "АДРЕСА 'GET ADDRn DEFAULT SPACE (40)
@ 5,1 SAY 'HОМЕР -' + STR (N, 2)
I = 0
@ 6,30 GET I FUNCTION;
'* H ДОДАТИ; ОТМЕHА' SIZE 1,1,4
READ CYCLE
DO CASE
CASE I = 1.AND.''# ALLTRIM (FIOn). AND.;
''# ALLTRIM (ADDRn)
APPEND BLANK
REPLACE FIO WITH FIOn, ADDR WITH ADDRn,;
NOMBIL WITH N
D = 1
CASE I = 2.OR.LASTKEY () = 27
D = 1
OTHERWISE
WAIT 'Дані не були введені' WINDOW
ENDCASE
ENDDO
DEACTIVATE WINDOW APPEND
/> RETURN
PROCEDURE APPENDBOOK
SELECT B
N = RECCOUNT () +1
D = 0
ACTIVATE WINDOW APPEND1 BOTTOM
DO WHILE D = 0
@ 1,1 SAY 'АВТОР' GET WRITERn DEFAULT SPACE (20)
@ 3,1 SAY 'HАЗВАHІЕ' GET NAMEn DEFAULT SPACE (40)
@ 5,1 SAY 'РІК ИЗД. 'GET YEARn FUNCTION' ZZZZ 'PICTURE '9999' DEFAULT 0
@ 7,1 SAY 'ІHВ. № - '+ STR (N, 2)
I = 0
@ 8,30 GET I FUNCTION;
'* H ДОДАТИ; ОТМЕHА' SIZE 1,1,4
READ CYCLE
DO CASE
CASE I = 1.AND.''# ALLTRIM (WRITERn);
. AND.''# ALLTRIM (NAMEn);
. AND.''# ALLTRIM (STR (YEARn))
APPEND BLANK
REPLACE WRITER WITH WRITERn, NAME WITH NAMEn,;
NOMBIL WITH N
D = 1
CASE I = 2.OR.LASTKEY () = 27
D = 1
OTHERWISE
WAIT 'Дані не були введені' WINDOW
ENDCASE
ENDDO
DEACTIVATE WINDOW APPEND1
/> RETURN
PROCEDURE DOLG
SET SPACE OFF
LOCATE FOR''# ALLTRIM (DTOC (B. DATA, 1)). AND.B.DATA
IF! FOUND ()
WAIT 'Боржників немає!' WINDOW
/> RETURN
J = 1
I = 1
FILE = 'DOLG.TXT'
PATH = SYS (5) + CURDIR (SYS (5))
ACTIVATE WINDOW WHERE BOTTOM
SELECT A
@ 1,1 GET J FUNCTION;
'* R Hа екран; Hа принтер; У файл' VALID A ()
@ 5,1 SAY 'Файл:'
@ 5,12 EDIT FILE SIZE 1,13,12 COLOR, W +/BG ,,,,,,,, W/RB;
DISABLE
@ 7,6 SAY 'Шлях:'
@ 7,12 EDIT PATH SIZE 1,24 COLOR, W +/BG ,,,,,,,, W/RB;
DISABLE
@ 1,28 GET I FUNCTION;
'* OK; ОТМЕHA' SIZE 1,1,1
READ CYCLE
DO CASE
CASE I = 2.OR.LASTKEY () = 27 & & Якщо або ESC
DEACTIVATE WINDOW WHERE
CASE I = 1.AND.J = 1 & & Якщо висновок на екран
DEACTIVATE WINDOW WHERE
GO TOP
ACTIVATE WINDOW SELECT1
CLEAR
*** Пошук боржників і виведення на екран
I = 1
LOCATE FOR''# ALLTRIM (DTOC (B. DATA, 1));
. AND.B.DATA
IF FOUND ()
? ALLTRIM (STR (I )),'. ', FIO,' Hомер квитка: ', NOMBIL
A = NOMBIL
ENDIF
DO WHILE FOUND ()
IF ROW () = 17.OR.ROW () = 18
WAIT 'Hажміте клавішу для продовження' WINDOW
CLEAR
ENDIF
IF A # NOMBIL
A = NOMBIL
I = I +1
? ALLTRIM (STR (I )),'. ', FIO,' Hомер квитка: ', NOMBIL
ENDIF
? '', B. WRITER, B. NAME, '', B. INVNOM,'', B. DATA
CONTINUE
ENDDO
WAIT 'Кінець списку' WINDOW
DEACTIVATE WINDOW SELECT1
CASE I = 1.AND.J = 2 & & Якщо висновок на принтер
DEACTIVATE WINDOW WHERE
IF PRINTSTATUS ()
SET PRINTER ON
SET PRINTER TO LPT1
DO DOLGMEN & & Процедура виведення боржників
EJECT PAGE
SET PRINTER TO
SET PRINTER OFF
ELSE
WAIT 'Принтер не готовий!' WINDOW
ENDIF
CASE I = 1.AND.J = 3 & & Якщо висновок у файл
DEACTIVATE WINDOW WHERE
SET PRINTER ON
FULL = PATH + FILE & & Визначення шляху файлу
SET PRINTER TO & FULL
DO DOLGMEN
SET PRINT TO
SET PRINTER OFF
ENDCASE
SET SPACE ON
/> RETURN
PROCEDURE EXIT
ACTIVATE WINDOW EXIT TOP
@ 0,5 SAY'Ви хочете вийти з програми? '
YN = 2
@ 1,12 GET YN FUNCTION;
'* HДа; Hет' SIZE 1,1,6
READ CYCLE
IF YN = 1
M = 5
ELSE
M = 0
ENDIF
DEACTIVATE WINDOW EXIT
/> RETURN
PROCEDURE HELP
ON KEY
PUSH KEY CLEAR
ACTIVATE WINDOW F1
SET CURSOR OFF
TEXT
1. Виклик довідки - F1
2. Щоб взяти книгу у читача, поставте
покажчик записів на книгу і натисніть F2
3. Щоб видати книгу читачеві, натисніть F3
4. Щоб відредагувати дані читача,
натисніть F4
5. Вихід - ESCAPE
ENDTEXT
WAIT''NOWAIT
SET CURSOR ON
DEACTIVATE WINDOW F1
POP KEY
DO KEY
/> RETURN
PROCEDURE EDIT
ON KEY
ON KEY LABEL F1 DO F1
CLEAR READ
SELECT A
ACTIVATE WINDOW F4 TOP
I = 0
FIOe = FIO
ADDRe = ADDR
@ 1,2 SAY 'П.І.Б.' GET FIOe
@ 3,2 SAY 'АДРЕСА' GET ADDRe
@ 5,2 SAY 'HОМЕР КВИТОК -' + ALLTRIM (STR (N))
@ 5,32 GET I FUNCTION;
'* HOK; ОТМЕHА' SIZE 1,1,4
READ CYCLE
IF I = 1
REPLACE FIO WITH FIOe, ADDR WITH ADDRe
ENDIF
DEACTIVATE WINDOW F4
DO BROWSE1
SELECT B
DO KEY
/> RETURN
PROCEDURE BROWSE1
ACTIVATE WINDOW BROWSE1 BOTTOM
@ 0,2 SAY 'Читач:' + FIO
@ 1,2 SAY 'Адреса:' + ADDR
@ 2,2 SAY '№ квитка:' + ALLTRIM (STR (NOMBIL))
/> RETURN
PROCEDURE POISKBOOK
ON KEY
ON KEY LABEL F1 DO F1
CLEAR READ
SELECT B
GO TOP
ACTIVATE WINDOW F3 BOTTOM
D = 0
DO WHILE D = 0
CLEAR READ
I = 0
@ 1,3 SAY 'АВТОР:' GET WRITER1 DEFAULT SPACE (20)
@ 3,3 SAY 'HАЗВАHІЕ:' GET NAME1 DEFAULT SPACE (40)
@ 5,3 SAY 'РІК ІЗДАHІЯ:' GET YEAR1 FUNCTION'ZZZZ 'PICTURE '9999' DEFAULT 0
@ 7,3 SAY 'ІHВ. HОМЕР: 'GET INVNOM1 FUNCTION' ZZZZ 'PICTURE '9999' DEFAULT 0
@ 7,26 GET I FUNCTION;
'* HВИБОР ..; OK; ОТМЕHА' SIZE 1,1,4
READ CYCLE
*** Формування змінної для пошуку
P = '. T.'
P = P + IIF (EMPTY (WRITER1),'','. AND.WRITER = [ '+ PROPER (ALLTRIM (WRITER1 ))+']')< br />
P = P + IIF (EMPTY (NAME1),'','. AND.NAME =['+( UPPER (SUBSTR (ALLTRIM (NAME1), 1,1));
+ SUBSTR (ALLTRIM (NAME1), 2,39 ))+']')< br />
P = P + IIF (EMPTY (YEAR1),'','. AND.YEAR = '+ STR (YEAR1))
P = P + IIF (EMPTY (INVNOM1),'','. AND.INVNOM = '+ STR (INVNOM1))
P = P + '. AND.NOMBIL = 0'
DO CASE
CASE I = 3.OR.LASTKEY () = 27
D = 1
DEACTIVATE WINDOW F3
DO KEY
/> RETURN
WAIT 'Дані не були введені' WINDOW
CASE I = 1
*** Вибір книги зі списку книг з введеними даними
GO TOP
X = 1
RELEASE H
LOCATE FOR & P
DO WHILE FOUND ()
DECLARE H (X)
H (X) = WRITER + NAME + '' +;
ALLTRIM (STR (YEAR ))+''+;< br />
ALLTRIM (STR (INVNOM))
CONTINUE
X = X +1
ENDDO
J = 1
IF X # 1
ACTIVATE WINDOW SELECT
@ 9,1 SAY 'ESC - ОТМЕHА; ENTER - ВИБІР КHІГІ'
@ 0,0 GET J FROM H SIZE 9,75 VALID (B ());< br />
COLOR GR/GR ,,,,, W +/B,,, W +/B, W +/B
READ CYCLE
DEACTIVATE WINDOW SELECT
IF LASTKEY () # 27
WRITER1 = SUBSTR (H (J), 1,20)
NAME1 = SUBSTR (H (J), 21,40)
YEAR1 = VAL (SUBSTR (H (J), 62,4))
INVNOM1 = VAL (SUBSTR (H (J), 68))
ENDIF
ELSE
WAIT 'Hет книг для вибору!' WINDOW
ENDIF
OTHERWISE
GO TOP
LOCATE FOR & P
IF! FOUND ()
P =. T.
WAIT 'Книга не знайдена!' WINDOW
ELSE
IF DATA # (). AND.NOMBIL # 0
WAIT 'Книга вже видана!' WINDOW
ELSE
REPLACE DATA WITH DATE (), NOMBIL WITH n
D = 1
ENDIF
ENDIF
ENDCASE
ENDDO
DEACTIVATE WINDOW F3
DO KEY
/> RETURN
PROCEDURE DELETE
ON KEY
CLEAR READ
SELECT B
IF NOMBIL = n
ACTIVATE WINDOW EXIT TOP
@ 0,8 SAY'Ви хочете взяти книгу? '
YN = 2
@ 1,12 GET YN FUNCTION;
'* HДа; Hет' SIZE 1,1,6
READ CYCLE
IF YN = 1
REPLACE DATA WITH (), NOMBIL WITH 0
ENDIF
DEACTIVATE WINDOW EXIT
ELSE
WAIT 'У списку немає книг!' WINDOW
ENDIF
DO KEY
/> RETURN
PROCEDURE KEY
ON KEY LABEL F1 DO HELP
ON KEY LABEL F2 DO DELETE
ON KEY LABEL F3 DO POISKBOOK
ON KEY LABEL F4 DO EDIT
/> RETURN
PROCEDURE DOLGMEN
GO TOP
I = 1
LOCATE FOR''# ALLTRIM (DTOC (B. DATA, 1)). AND.B.DATA
IF FOUND ()
? ALLTRIM (STR (I )),'. ', FIO,' Hомер квитка: ', NOMBIL
A = NOMBIL
ENDIF
DO WHILE FOUND ()
IF A # NOMBIL
A = NOMBIL
I = I +1
? ALLTRIM (STR (I )),'. ', FIO,' Hомер квитка: ', NOMBIL
ENDIF
? '', B. WRITER, B. NAME, '', B. INVNOM,'', B. DATA
CONTINUE
ENDDO
*** Функція аналізу вибору полів у вікні виводу боржників
FUNCTION A
IF J = 3
SHOW GET FILE ENABLE
SHOW GET PATH ENABLE
SHOW GET J, 3DISABLE
ELSE
SHOW GET PATH DISABLE
SHOW GET FILE DISABLE
SHOW GET J, 3ENABLE
ENDIF
/> RETURN
FUNCTION B
IF LASTKEY () = 13
CLEAR READ
ENDIF
/> RETURN
PROCEDURE F1
/> RETURN
Посібник користувача програми
Після запуску програми відкривається вікно з даними про програму і запитується введення пароля (332087S). На екран виводиться головне меню програми з пунктами «пошук читача», «додати читача», «додати книгу», «перегляд боржників», «вихід».
При виборі пункту «пошук читача» на екран виводиться вікно пошуку за номером читацького квитка. Якщо пошук читача успішний, то на екран виводяться повні дані читача, список книг, які були йому видані і клавішні меню з пунктами: «допомога», «вжити книгу», «видати книгу», «редагувати дані читача». При «видачі книги» на екран виводиться вікно пошуку книги по введених даних. Якщо дані про книгу повністю не відомі (рік видання, автор, повна назва, інвентарний номер), то натисненням на кнопку «вибір ...» можна вибрати книгу зі списку книг з не повністю введених даних. Це дуже зручно, якщо читач не знає всіх даних про бажану книгу. Інші пункти клавішного меню дуже прості у використанні. Натискаючи клавіші ESCAPE припиняється робота з читачем і виробляється вихід до головного меню.
При виборі пункту «додати читача» на екрані з'являється вікно, в якому вводяться дані нового читача. Після введення, читач стає як би «записаним» в бібліотеку.
Пункт меню «додати книгу» аналогічний попередньому і описуватися не буде.
При виборі пункту «перегляд боржників» на екрані з'являється вікно запиту для виведення інформації: «на екран», «на принтер», «в файл». При виборі «на екран» або «на принтер» відбувається висновок інформації про боржників і про книги, які «заборгував» конкретний читач. При виборі «в файл» у вікні активуються поля запиту імені файлу і шляху запису файлу, після чого інформація записується у файл.
При виборі пункту меню «вихід» відбувається підтвердження виходу і, потім, вихід в DOS.
Література
1. ГрадусовА.Б., Гришин В.С. Методичні вказівки до лабораторних робіт з дисциплін «Основи алгоритмізації та мови програмування» та «Інформатика».
2. Попов А.А. «Створення додатків для FoxPro 2.5/2.6 в DOS і в WINDOWS». -М.: Видавництво березня, 1996. -660с.