КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Контрольное задание N 2. (отбор данных, их обработка и запись в базу данных)(отбор данных, их обработка и запись в базу данных) Цель работы: закрепление знаний по созданию базы данных, практическое освоение методов создания форматных файлов ввода данных, отбор данных из базы, их обработка и запись обработанных данных в базу. Создание форматного файла ввода данных Форматный файл создается под любым удобным именем с расширением FMT. Перед использованием форматный файл открывается командой: SET FORMAT TO [<имя форматного файла>] В форматном файле используются команды @... GET/SAY, CLEAR и READ. Любая команда редактирования вида EDIT/CHANGE, READ, INSERT, APPEND будет предъявлять данные на редактирование только в указанном формате. Отмена действия форматного файла осуществляется командой SET FORMAT TO без параметра. Если этого своевременно не сделать, далее все команды READ и другие команды редактирования будут пытаться к нему обращаться. Использование любой из перечисленных команд редактирования в форматном файле сохраняет возможность перемещения внутри базы данных. Клавиши дополнения (Ctrl+N) и пометки для удаления (Сtrl+T) здесь не действуют внутри базы данных. Клавиши дополнения (Ctrl+N) и пометки для удаления (Сtrl+T) здесь не действуют. Форматный файл KADRZ. FMT используемый в примере N 3 * Форматный файл kadrz.fmt @ 4, 30 say 'данные о сотруднике' @ 5, 9 to 15, 70 double @ 5, 51 say 'сегодня' + dtoc (date () ) + ' ' @ 6, 18 say 'фамилия, инициалы: 'get fam; message 'ввод фамилии прописными буквами' @ 7, 20 say 'Оклад: 'GET OKLAD @ 8, 33 say 'Количество нерабочих дней: ' GET KND @ 9, 42 say 'количество детей: 'GET DET @ 11, 10 to 11, 69 @ 12, 12 say 'выход с сохранением изменений-ctrl-end, без-esc'
Обмен данными с базой данных Команда: SCATTER TO <массив> последовательно переносит значения полей только из текущей записи активного файла базы данных в последовательные элементы одномерного массива. Все такие переменные (или элементы массива) получат те же типы и размеры, что и поля базы данных. Таким образом, в FoxPro массив может содержать разнородные данные. Если массив ранее не был описан или его длина недостаточна, он будет создан командой SCATTER TO <массив>. Если переменные ранее не существовали, они будут созданы с тем же именем, что и соответствующие поля. Команда: GASER FROM <массив> FIELDS<список полей> переписывает в <поля> текущей записи активного файла базы данных элементы <массива>. Типы соответствующих полей и элементов массива должны совпадать. Если отсутствует слово FIELDS, элементы переносятся в последовательные поля, начиная с первой. Если число элементов массива и полей не совпадает лишние игнорируются. Команда: COPY TO ARRAY <массив> FIELDS последовательно пересылает поля записи (или записей) текущей базы данных в последовательные элементы строк <массива>. Команда COPY TO позволяет переслать в массив несколько записей, а SCATTER – только одну. Команда: APPEND FROM ARRAY<массив> FIELDS<поля> по своему действию обратная действию команды COPY TO ARRAY и добавляет к базе данных записи из <массива> так, что каждая строка массива становиться записью базы. Организация циклов Средства организации программных циклов FoxPro подразделяются на циклы с условием (итерационные циклы) и циклы с параметром (арифметические циклы). Цикл с условием DO WHILE <условие> <команды> ENDDO Команды заключенные между DO WHILE и ENDDO, будут выполнятся до тех пор, пока <условие> истинно. Цикл с параметром FOR <переменная> = <вырN1> TO <вырN2> [STEP <вырN3>] <команды> ENDFOR Цикл будет выполнятся столько раз, сколько нужно, чтобы <переменная> от значения равного <вырN1> достигла <вырN2> с шагом <вырN3> (N3 по умолчанию равно 1). Если <вырN3> отрицательно, переменная в каждом цикле будет уменьшаться. Описание примера N3 В качестве примера приведена программа расчета зарплаты для учреждения, в котором зарплата начисляется исходя из некоторой базовой суммы (оклада). В начале производится корректировка данных при помощи стандартного файла ввода данных KADRZ.FMT. Этот файл необходимо создать на любом этапе разработки базы данных, но до запуска программы. Затем необходимая для расчета заработной платы информация считывается из базы данных и выполняется расчет для десяти сотрудников. После выполнения результаты расчета зарплаты записываются в базу данных. Для вывода результатов расчета на экран организовано POPUP-меню KADR, которое кроме поля FAM содержит признак уже сделанного выбора – знак '+' (если выбор был произведен). Этот символ присутствует в меню только в случае, если в массиве А имеется элемент, содержащий номер записи, на которой находится курсор меню (это проверяется командой IIF(ASCAN(a,RECNO()#0,'+',''))). Клавиши выбора ENTER и SPACE обрабатываются в процедуре OTBOR. В нашем случае за клавишей ENTER оставлены обычные функции выбора, а клавиша SPACE будет завершать процесс отбора. Если нажата клавиша ENTER (LASTKEY()=13), в массиве А ищется элемент со значением, совпадающим с номером отобранной записи (ASCAN(a, RECNO())). Если такой элемент находится, значит, еще ранее эта запись была выбрана. Этот факт расценивается программой как желание пользователя отменить свой выбор (такой элемент получает значение 0, что влечет удаление символа '+' из меню). В противном случае ведется поиск первого свободного элемента в массиве А (ASCAN(a,0)), в который и заносится номер отобранной записи. Если такой элемент не найден, значит, весь массив уже заполнен, О чем выдается сообщение, и выполнение процедуры завершается. Использовав массив А, можно очень быстро отобрать нужные записи в базе, не прибегая к ее сплошному перебору. Так, при нажатии клавиши SPACE (LASTKEY()=32) просматриваются все элементы массива. Если очередной элемент не пуст, указатель записей устанавливается на запись БД с номером, содержащимся в переменной A(i), и из нее на экран выводятся фамилии, сумма зарплаты, отчисления в пенсионный фонд и подоходный налог и сумма на руки. Чтобы база данных просматривалась в одном направлении. массив А предварительно сортируется (=ASORT(a)).
|