Курсовая: Разработка СУБД FoxPro 2.0

     

Содержание:

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+/G DOUBL 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()); 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))+; ' не удачный' WINDOW CASE I=2.OR.LASTKEY()=27 DEACTIVATE WINDOW NOMER D=1 RETURN OTHERWISE 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 ***Пункт меню ДОБАВИТЬ КHИГУ 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 ***Пункт меню ПРОСМОТР ДОЛЖHИКОВ PROCEDURE DOLG SET SPACE OFF LOCATE FOR ''#ALLTRIM(DTOC(B.DATA,1)).AND.B.DATA<GOMONTH(DATE(),-6) IF !FOUND() WAIT 'Должников нет!' WINDOW RETURN ENDIF 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<GOMONTH(DATE(),-6) 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 ***Процедура нажатия клавиши F1 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 ***Процедура нажатия клавиши F4 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; '*H OK;ОТМЕ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 ***Процедура нажатия клавиши F3 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))+']') P=P+IIF(EMPTY(NAME1), '','.AND.NAME=['+(UPPER(SUBSTR(ALLTRIM(NAME1),1,1)); +SUBSTR(ALLTRIM(NAME1),2,39))+']') 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 CASE (I=1.OR.I=2).AND.P=='.T..AND.NOMBIL=0' 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))+' '+; 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()); 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 ***Процедура нажатия клавиши F2 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<GOMONTH(DATE(),-6) 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,3 DISABLE ELSE SHOW GET PATH DISABLE SHOW GET FILE DISABLE SHOW GET J,3 ENABLE ENDIF RETURN ***Функция распознавания выбора книги из списка книг по введенным данным FUNCTION B IF LASTKEY()=13 CLEAR READ ENDIF RETURN ***Процедура устранения лглюков при нажатии клавиши F1 PROCEDURE F1 RETURN Образцы отчетов Образец вывода списка должников в файл: 1. Марков Александр Борисович Hомер билета: 2 Стаут Р. Золотые пауки 4 12.07.97 Питерс Р. Война 2020 года 5 12.07.97 Слонимский А. Черниговцы 9 12.07.96 2. Анисимов Антон Павлович Hомер билета: 4 Купер Д.Ф. Последний из могикан 6 23.12.96 Черкасов А. Хмель 10 23.12.96 3. Деревященко Екатерина Олеговна Hомер билета: 12 Ильф И., Петров Е. Золотой теленок 13 31.01.95 Лем С. Магелланово облако 15 31.01.95 Чернин М. Ежик 17 31.01.95 Инструкция по эксплуатации программы После запуска программы открывается окно с данными о программе и запрашивается ввод пароля (332087S). На экран выводится главное меню программы с пунктами лпоиск читателя, лдобавить читателя, лдобавить книгу, лпросмотр должников, лвыход. При выборе пункта лпоиск читателя на экран выводится окно поиска по номеру читательского билета. Если поиск читателя успешный, то на экран выводятся полные данные читателя ,список книг, которые были ему выданы и клавишное меню с пунктами: лпомощь, лпринять книгу, лвыдать книгу, лредактировать данные читателя. При лвыдаче книги на экран выводиться окно поиска книги по введенным данным. Если данные о книге полностью не известны (год издания, автор, полное название, инвентарный номер), то нажатием на кнопку лвыбор. можно выбрать книгу из списка книг по не полностью введенным данным. Это очень удобно, если читатель не знает всех данных о желаемой книге. Остальные пункты клавишного меню очень просты в использовании. Нажатием клавиши ESCAPE прекращается работа с читателем и производится выход в главное меню. При выборе пункта лдобавить читателя на экране появляется окно, в котором вводятся данные нового читателя. После ввода, читатель становиться как бы лзаписанным в библиотеку. Пункт меню лдобавить книгу аналогичен предыдущему и описываться не будет. При выборе пункта лпросмотр должников на экране появляется окно запроса для вывода информации: лна экран, лна принтер, лв файл. При выборе лна экран или лна принтер происходит вывод информации о должниках и о книгах, которые лзадолжал конкретный читатель. При выборе лв файл в окне активируются поля запроса имени файла и пути записи файла, после чего информация записывается в файл. При выборе пункта меню лвыход происходит подтверждение выхода и , затем, выход в DOS. Литература 1. Градусов А.Б., Гришин В.С. Методические указания к лабораторным работам по дисциплинам лОсновы алгоритмизации и языки программирования и лИнформатика. 2. Попов А.А. лСоздание приложений для FoxPro 2.5/2.6 в DOS и в WINDOWS. ЦМ.: Издательство Март, 1996. Ц660с.