Наименование
товара
|
Мера
|
Кол-во
|
Заявитель
|
Поставщик
|
Наличие
|
Цена
|
Майонез
"Три желания", 250 г.
|
шт.
|
200
|
Магазин
"Коктем"
|
АО
"Алматинский маргариновый завод"
|
Т
|
50
|
Маргарин
"Три желания", 200 г.
|
шт.
|
100
|
Кондитерская
"Али Баба"
|
АО
"Алматинский маргариновый завод"
|
F
|
30
|
Кетчуп
"Три желания", 250 г.
|
шт.
|
250
|
АО "Алматинский
маргариновый завод"
|
Т
|
60
|
Горчица
"Три желания", 130 г.
|
шт.
|
170
|
Магазин
"Салтанат"
|
АО
"Алматинский маргариновый завод"
|
Т
|
19
|
Минеральная
вода "Свежесть", 1.5 л
|
шт.
|
300
|
Магазин
"Грифон"
|
КокшетауМинВоды
|
Т
|
34
|
Минеральная
вода "Кулагер", 1.5 л
|
шт.
|
400
|
Магазин
"Достык"
|
КокшетауМинВоды
|
F
|
34
|
Томатная паста,
1000 г.
|
шт.
|
20
|
Столовая
"Наурыз"
|
Компания
"Маслодел"
|
Т
|
118
|
Консервированный
горошек, 300 г.
|
шт.
|
35
|
Кафе
"Радуга"
|
ООО
"Промконсервы"
|
Т
|
25
|
Консервированная
кукуруза, 400 г.
|
шт
|
50
|
Ресторан
"Огни Кокшетау"
|
АО
"Бондюэль"
|
Т
|
100
|
Подсолнечное
масло "Иртыш", 1 л
|
шт
|
40
|
Кафе
"Апельсин"
|
АО "Vita"
|
Т
|
147
|
После того, как создана таблица и заполнена необходимыми
данными, создадим форму для работы с базой данных.
4. Создание
формы
Любая форма в Visual FoxPro состоит из объектов формы, которые имеют
характерные для них свойства. Для каждого объекта можно определить действия,
выполняемые при наступлении определенных событий. Процесс создания формы
состоит в размещении объектов на форме и определении для них свойств, связанных
с ними событий и выполняемых действий.
Для создания формы откроем существующий проект Wholesale, который уже содержит
созданную ранее таблицу Opt_base. Перейдя на вкладку Documents, выберем опцию Form и нажмем кнопку New (рис. 6). Появится окно New Form, в котором следует
нажать кнопку New File (для создания формы с помощью
конструктора).
Рис. 6 Диалоговые окна создания формы.
После описанных выше шагов появится конструктор форм (рис. 7a) с панелью инструментов Form Control (рис. 7b) и окном для задания
свойств объектов Properties (рис. 7c).
Рис. 7a Диалоговое окно Form Designer (конструктор форм).
b) c)
Рис.7b, c Диалоговые окна Form Control и Properties
Итак, для данного курсового проекта создадим три формы:
1. tit. scx - титульный лист. Данная
форма - оформлением, и, в принципе является не обязательной, так как не
выполняет никаких конкретных действий направленных на работу с базой данных.
2. optbase. scx - основная форма, в которой
производятся все операции над базой данных (просмотр, редактирование,
дополнение, удаление, поиск).
3. poisk. scx - форма для поиска.
4.1 Форма
tit. scx
Как уже было сказано ранее, эта форма является оформлением
курсового проекта и не выполняет никаких событий для базы данных.
Форма tit. scx имеет необычный фон,
который можно изменить в окне для задания свойств Properties. Для этого нужно выбрать
вкладку Layout, и затем пункт Picture, нажав на кнопку , указать путь к папке,
где хранится рисунок, который используется как фон данной формы.
Также, на этой форме расположены три кнопки, для которых в
пункте Style (вкладка Layout) выбрано свойство 1-Invisible. Рисунок фона содержит
три надписи: Курсовой проект, "Оптовая база" и г. Кокшетау, 2005.
Кнопки Command1, Command2 и Command3 расположены на этих
надписях соответственно. Так как мы установили стиль кнопок Invisible, при запуске формы они
невидимы (рис.8). Таким образом, при щелчке на определенную надпись, происходит
то или иное действие.
Рис 8. Вид формы tit. scx в окне конструктора форм.
При щелчке на надпись Курсовой проект появляется
сообщение вида:
Рис. 9 Щелчок на надписи Курсовой проект.
Под этой надписью скрывается кнопка Command1. Код для данной кнопки
(процедура Click):
messagebox ('Курсовой проект по
дисциплине "Базы данных", разработала Ключникова О.С., КГУ им.Ш.
Уалиханова', 0+0+256, 'Курсовой проект')
При щелчке на надпись "Оптовая база" открывается
основная форма optbase. scx (создание которой мы
рассмотрим немного позже).
Код для процедуры обработки события Click (Command2):
Do form optbase. scx
Код для Command3:
if messagebox ("Вы действительно
хотите выйти из формы?", 4+32+256, "ВЫХОД") =6
_screen. ActiveForm. Release ()
_screen. ActiveForm. Refresh ()
endif
При щелчке на надпись "г. Кокшетау, 2005" появляется
сообщение о выходе вида:
Рис. 10 Щелчок на надписи г. Кокшетау, 2005
При запуске (команда Run) форма выглядит
следующим образом:
Рис. 11 Форма tit. scx после запуска.
4.2 Форма
optbase. scx
Форма optbase. scx является основной формой. С помощью
этой формы можно выполнять такие операции над базой данных как просмотр,
корректировка, добавление на одну запись, удаление записи, поиск по конкретному
полю.
Для того чтобы можно было проделать все эти операции с
помощью формы, в ней необходимо разместить объекты, которые можно найти на
панели инструментов Form Controls.
Рис. 12 Форма optbase. scx в окне конструктора.
Итак, разместим на форме optbase. scx такие объекты:
а) Label - текстовый объект,
который чаще всего служит для какого-либо пояснения или в качестве надписи;
б) Text Box - поле ввода, этот объект
динамически связан с файлом данных, то есть, изменение в базе приведет к
изменению значения Text (и наоборот). С помощью этого поля можно
просмотреть текущую запись и при необходимости произвести изменения;
в) Command Button и Command Group - кнопка и группа кнопок,
эти объекты предназначены для вызова какого-либо события (например, процедура Click вызывает определенное
событие связанное с этой кнопкой при ее нажатии);
г) Combo Box - поле ввода со списком,
этот объект также как и Text Box динамически связан с
базой, отличается лишь тем, что имеет выпадающий список значений поля, с
которым он связан;
д) Option Group - переключатель;
е) Check Box - флажок;
ж) Select Object - не является каким-то
определенным объектом, это указатель выделения, он присутствует в каждой форме
по умолчанию.
Это все объекты, размещенные в нашей форме, но в Visual FoxPro существуют и другие
объекты на панели инструментов Form Control: View Classes - выбирает класс для
создания объектов в форме; Edit Box - поле редактирования; Grid - таблица; List Box - список; Spinner - поле ввода значения; Line - линия; Shape - контур; Container - контейнер; Image - рисунок; Timer - таймер; Page Frame - страница; OLE Bound Control - отображает содержимое OLE-объекта, хранящегося в
поле типа General; OLE Container Control - создает OLE-объект; Separator - создает
разделитель-объект, формирующий промежутки между элементами управления на
панели инструментов; Builder Lock - закрепляет выбор
построителя; Button Lock - закрепляет выбранную кнопку на панели
инструментов.
Рассмотрим подробнее все объекты, размещенные на форме optbase.
scx.
ü Объект Label. Форма содержит такие
текстовые объекты как: "Наименование товара", "Заявитель",
"Поставщик" и другие надписи, указывающие с каким полем связан другой
объект, или какую команду необходимо выполнить;
ü Объект Text Box. В поле объекта Text Box отображается текущая
запись (как уже было сказано выше, объект Text Box динамически связан с
таблицей opt_base. dbf).
Связку можно осуществить двумя способами:
. Щелкнуть правой кнопкой манипулятора
"мышь" на объекте, который необходимо связать, в появившемся меню
выбрать пункт Builder. Появится окно Text Box Builder, в этом окне перейти на
вкладку Value, щелкнуть на кнопку , в появившемся окне
открытия таблицы Open выбрать таблицу (выбираем opt_base. dbf), и в появившемся списке
Field Name выбрать необходимое поле.
2. Выделить связываемый объект, в окне свойств Properties перейти на вкладку Data, щелкнуть пункт ControlSource и выбрать необходимое
поле.
На форме optbase. scx объекты Text Box отображают следующие
поля таблицы opt_base. dbf:
Text1 - Наименование товара (optbase. title);
Text2 - Цена товара (optbase. price);
Text3 - Мера измерения (optbase.
measure);
Text4 - Количество (optbase. quantity);
Text5 - Поставщик (optbase.
supplier);
Text6 - Заявитель (optbase. applier).
ü Объекты Command Button и Command Group. На форме optbase. scx
размещены один объект Command Button и один объект Command Group, который содержит восемь
объектов Command Button.
Рассмотрим все эти объекты и их коды (процедуры, которые
выполняются при щелчке на эти объекты-кнопки, точнее при отпускании кнопки
"мыши").
Command1 - при щелчке на эту
кнопку осуществляется выход из формы. На этой кнопке нет надписи, но есть
опознавательная картинка (дверь) (рис.13a). Чтобы установить
картинку на объект, необходимо в окне свойств Properties на вкладке Layout в пункте Picture указать путь к папке, в
которой находиться необходимая картинка.
Код для процедуры обработки события Click (Command1):
_Screen. ActiveForm. Release ()
При выполнении данной процедуры не появляется запрос о
выходе, форма просто закрывается и активной становится форма tit. scx, при
выходе из которой такой запрос появляется (об этом было подробно указано в
пункте "Форма tit. scx").
a) b)
Рис.13 Объекты Command1 и Commandgroup1
Group - здесь кнопки
объединены в один объект, но в работе каждая выполняет свою определенную
функцию не зависящую от других кнопок в этом объекте (рис.13b).
Кнопки Commandgroup1.command1 - Commandgroup1.command4 выполняют переход по
записям (они, также как и кнопка "Выход", не содержат надписей, а
имеют картинки-указатели). Картинки на этих кнопках можно установить, либо как
было описано в случае кнопки "Выход", либо, щелкнув правой кнопкой
"мыши" на объекте Commandgroup1. В появившемся меню выбрать Builder и в окне Command Group Builder на вкладке Buttons в поле Graphics указать путь к картинке,
или, если необходимо, в поле Caption название кнопки (рис.13b).
Код для Commandgroup1.command1 - кнопка "Первая":
if! bof ()
go top
endif
_screen. ActiveForm. refresh ()
При щелчке на эту кнопку в полях объектов Text Box отображается первая
запись файла данных.
Код для объекта Commandgroup1.command2 - кнопка
"Следующая":
if! bof ()
skip
_screen. ActiveForm. refresh ()
При щелчке на эту кнопку в полях объектов Text Box отображается следующая
за текущей запись файла данных.
Код для объекта Commandgroup1.command3 - кнопка
"Предыдущая":
if! bof ()
skip - 1
endif
_screen. ActiveForm. refresh ()
При щелчке на эту кнопку в полях объектов Text Box отображается запись
предшествующая текущей записи файла данных.
Код для объекта Commandgroup1.command4 - кнопка
"Последняя":
if! bof ()
go bottom
endif
_screen. ActiveForm. refresh ()
При щелчке на эту кнопку в полях объектов Text Box отображается последняя
запись файла данных.
Commandgroup1.command5 - кнопка
"Просмотр". Позволяет просмотреть файл данных в виде таблицы.
Код для этой кнопки:
Browse
_screen. ActiveForm. refresh ()
Commandgroup1.command6 - кнопка "Добавить". Добавляет на одну запись.
Код для нее:
Append blank
_screen. ActiveForm. refresh ()
Commandgroup1.command7 - кнопка
"Удалить". Удаляет текущую запись. Код:
if messagebox ("Вы действительно
хотите удалить эту запись?", 4+32+256,"Удаление") =6
delete record (recno ())
endif
_screen. ActiveForm. Refresh ()
Commandgroup1.command8 - кнопка "Найти". Находит указанную запись (о
поиске подробнее будет сказано ниже). Код для этой кнопки:
_screen. ActiveForm. Refresh ()
ü Объект Combo Box. Также, как и объект Text Box, динамически связывается
с файлом данных, связывание производится аналогичным способом. Отличием
является то, что в поле объекта Text Box отображается лишь одна
(текущая) запись, а в поле объекта Combo Box отображается все
связанное с ним поле. Причем, если в поле объекта Combo Box выбрать какое-либо
значение, то в поле объекта Text Box, также появится эта
запись (станет текущей).
На форме optbase. scx расположены два объекта Combo Box: Combo1 и Combo2, которые связаны с
полями opt_base. applier ("Заявитель") и opt_base. supplier ("Поставщик") соответственно.
Изначально, у этих объектов в окне свойств Properties на вкладке Layout изменено свойство Visible (Видимость) на. F. (False), то есть при запуске
формы объектов Combo1 и Combo2 не видно, свойству Visible присваивается значение.
T. (True) (т.е. объекты становятся видимыми), лишь в
случае выбора опции "Поиск" (об этом подробно будет описано в пункте Объект
Option Group). Кода для этих объектов
не предусмотрено.
ü Объект Option Group - переключает
установленные режимы. На форме два таких объекта: Optiongroup1 является основным
переключателем режимов просмотра, редактирования и поиска, и Optiongroup2 - появляется при выборе
режима поиска.
Optiongroup1 включает в себя три
пункта (опции): Option1, Option2 и Option3 (рис.14a).
Option1. Режим просмотра. Если
выбрана эта опция, то пользователь сможет только просмотреть все записи (в окне
формы и в табличном виде), но не сможет редактировать, добавлять, удалять
записи или использовать систему поиска.
Код для процедуры обработки события Click:
thisform. text1. readonly=. t.. text2.
readonly=. t.. text3. readonly=. t.. text4. readonly=. t.. text5. readonly=.
t.. text6. readonly=. t.. check1. enabled=. f.. label8. visible=. f.. label9.
visible=. f.. label10. visible=. f..combo1. visible=. f..combo2. visible=.
f..commandgroup1.command6. enabled=. f..commandgroup1.command7. enabled=.
f..commandgroup1.command8. enabled=. f.. optiongroup2. visible=. f.
_screen. activeForm. refresh ()
Как видно из этих команд, при выборе опции "Поиск"
объекты Text1, Text2, Text3, Text4, Text5,Text6 и Check1 становятся доступны
только для чтения (свойство Readonly), а Label8, Label9, Label10, combo1, combo2 и optiongroup2 - не видимы, также
блокируются кнопки "Добавить", "Удалить" и
"Найти" (то есть воспользоваться ими в таком режиме невозможно).
Option2. Режим редактирования.
При таком выборе помимо просмотра можно добавлять и удалять записи, а также их
редактировать.
Код процедуры:
thisform. text1. readonly=. f.. text2.
readonly=. f.. text3. readonly=. f.. text4. readonly=. f.. text5. readonly=.
f.. text6. readonly=. f.. check1. enabled=. t.. label8. visible=. f.. label9.
visible=. f.. label10. visible=. f..combo1. visible=. f..combo2. visible=.
f..commandgroup1.command6. enabled=. t..commandgroup1.command7. enabled=.
t..commandgroup1.command8. enabled=. f.. optiongroup2. visible=. f.
_screen. activeForm. refresh ()
Доступные только для чтения в предыдущем коде объекты Text1-Text6, Check1 в этой процедуре уже
могут изменять свое значение в зависимости от выбора пользователя. Также можно
заметить, что объекты Label8-10, Combo1,2 и Optiongroup2 остались невидимы и
кнопкой "Найти" также нельзя воспользоваться. Это говорит о том, что
в режиме редактирования (также как и в режиме просмотра) поиск записей
невозможен.
Option3. Режим поиска. При
выборе опции "Поиск" появляется еще одна группа опций, в которой
можно выбрать ту систему поиска, которой вам необходимо воспользоваться. Выбрав
поиск по заявителю или поставщику, появляется еще одна форма с запросом вида:
"Введите заявителя (поставщика)" (рис.15a,b). После того как введен
заявитель (или поставщик) требуется нажать "пробел" и затем кнопку
"Найти" (которая теперь уже активна). После этого в окне формы optbase. scx отображается та запись,
которую вы указывали в запросе поиска.
Выбрав "Быстрый поиск" появляются объекты Combo Box. Здесь в выпадающем
списке из предложенных вариантов можно выбрать, тот который вам требуется.
Затем также как и в первом поиске нажать кнопку "Найти" и текущей
установится искомая запись.
Код для процедуры обработки события Click:
thisform. text1. readonly=. t.. text2.
readonly=. t.. text3. readonly=. t.. text4. readonly=. t.. text5. readonly=.
t.. text6. readonly=. t.. check1. enabled=. f.. label8. visible=. f.. label9.
visible=. f.. label10. visible=. f..combo1. visible=. f..combo2. visible=. f..
optiongroup2. visible=. t..commandgroup1.command6. enabled=.
f..commandgroup1.command7. enabled=. f..commandgroup1.command8. enabled=. t.
В этом режиме редактирование невозможно (возможен только
просмотр): кнопки "Удалить" и "Добавить" неактивны. Но
здесь становится активной кнопка "Найти". При выборе этого режима
объекту Optiongroup2 в свойстве Visible присваивается значение.
t. (true), то есть объект становится видимым.
a) b)
Рис.14 Объекты Optiongroup1
и Optiongroup2
2 также как и Optiongroup1 содержит три опции. Этот
объект является, так называемой, системой поиска (рис.14b).
Option1 "Поиск по
заявителю". При выборе данной опции появляется форма poisk. scx с запросом о вводе
заявителя (рис.15a). После ввода заявителя и нажатия кнопки "Найти" в
основной форме отображается искомая запись (об этом уже было сказано выше).
Код для данной процедуры:
do form "poisk. scx"
goto topdecimals to 0talk off' Введите заявителя ' to t
loca for applier=t
if recno () =reccount () +1
?
? t,' Данный заявитель отсутствует '
endif
?='1'while s! =' '' Для поиска нажмите
пробел, а затем кнопку "Найти"' to s
enddo
_screen. ActiveForm. releasetalk on
Из этой программы видно, что при выборе опции "Поиск по
заявителю" активизируется форма poisk. scx, в поле которой
высвечивается запрос "Введите заявителя". Если введенный заявитель
отсутствует, то появляется сообщение "Данный заявитель отсутствует".
Если же заявитель введен верно, вам предлагается нажать "пробел",
после чего форма poisk. scx закрывается, затем щелкнуть по кнопке
"Найти" и искомый заявитель отобразится в поле формы optbase. scx.
Рис. 15a Форма poisk. scx "Поиск по
заявителю" при запуске
Option2 "Поиск по
поставщику". Данная опция практически полностью аналогична опции
"Поиск по заявителю". Отличием является лишь то, что в форме poisk. scx появляется запрос о
поиске поставщика (рис. 15b).
Код этой процедуры также схож с предыдущей процедурой, за
исключением некоторых отличий (здесь поиск осуществляется по поставщику):
do form "poisk. scx"topdecimals
to 0talk off' Введите поставщика ' to t
loca for supplier=t
?
? t,' Данный поставщик отсутствует '
endif
?='1'while s! =' '' Для поиска нажмите
пробел, а затем кнопку "Найти"' to s
enddo
_screen. ActiveForm. releasetalk on
Рис. 15b Форма poisk. scx "Поиск по
поставщику" при запуске
Option3 "Быстрый
поиск". После выбора этой опции появляется предложение выбрать заявителя
или поставщика и, собственно, объекты Combo1 и Combo2, в списке которых можно
выбрать необходимого поставщика или заявителя (об этом поиске уже было сказано
выше) (рис.15c).
Код процедуры:
thisform. label8. visible=. t.. label9.
visible=. t.. label10. visible=. t..combo1. visible=. t..combo2. visible=. t..
optiongroup2. visible=. f.
Здесь понятно, что становятся видимыми объекты Label8, Label9, label10, Combo1 и Combo2, а объект optiongroup2 - невидимым.
Рис. 15c "Быстрый
поиск" - объекты Combo Box
ü Объект Check Box - "флажок". На форме
отображает значение поля opt_base. available, то есть этот объект
динамически связан с полем "Наличие". Значения ранее рассмотренных полей
отображались поле объекта Text Box, но в данном случае не
обязательно устанавливать объект Text Box, так как атрибуту available (наличие) присваивается
лишь два значения: либо товар есть - значение true, либо его нет - значение
false (рис. 16)
Рис. 16 Объект Check Box (поле "Наличие")
Рис. 17 Вид формы optbase. scx при запуске.
4.3 Форма
poisk. scx
Форма poisk. scx является вспомогательной формой. Она появляется
лишь при поиске и сама по себе не содержит никаких объектов и процедур.
Единственное, что здесь можно отметить, так это то, что в свойстве Caption в окне Properties на вкладке Layout установлено
"Поиск" - это слово отображается в заголовке окна формы (рис.17).
Надо заметить, что в предыдущих формах это свойство также
изменено: у формы tit. scx - "Курсовой проект
"Оптовая база"", а у формы optbase. scx - "Оптовая
база".
Рис. 18 Форма poisk. scx
5. Заключение
Цель данного курсового проекта состояла в том, чтобы изучить
основы работы с СУБД Visual FoxPro, а именно: научиться работать с таблицами,
базами данных, разрабатывать проекты, формы и т.п.
Конкретной задачей курсового проекта было разработать
информационную базу данных.
Я разработала информационную систему "Оптовая
база". Данная система содержит форму, которая облегчает работу с базой
данных. С помощью этой формы можно просматривать, редактировать, добавлять и
удалять записи. Также форма снабжена системой поиска, с помощью которой можно
найти необходимую информацию о конкретном заявителе, поставщике или товаре на
основе введенных извне данных.
Форма проста в обращении и с ней может работать практически
каждый пользователь, даже тот, который не имеет навыков работы с системами управления
базами данных (в частности с СУБД Visual FoxPro). Это является
немаловажным преимуществом системы, т.к. она не требует больших затрат на
обучение рабочего персонала.
Таким образом, Visual FoxPro является мощной системой управления базами
данных, с помощью которой можно создавать и более сложные проекты, направленные
на решение проблем хранения, сбора и обработки данных на крупных предприятиях,
в которых на современном этапе развития экономики информационные системы играют
немаловажную роль и являются неотъемлемым атрибутом для прогрессивного
развития.
Список
литературы
1. В.Н.
Кирнос - "Основы работы с базами данных в СУБД Visual FoxPro. Часть 1. Элементы программирования", Кокшетау,
2003
2. В.Н.
Кирнос - "Основы работы с базами данных в СУБД Visual FoxPro. Часть 2. Формы, запросы, отчеты …", Кокшетау,
2003
. В.Н.
Кирнос - "Основы использования языка сируктурированных запросов SQL", Кокшетау, 2003