GeoSELECT.ru



Компьютеры / Реферат: Курсовая работа программирование на Pascal (Компьютеры)

Космонавтика
Уфология
Авиация
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Аудит
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника
Бухгалтерский учет
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Инвестиции
Иностранные языки
Информатика
Искусство и культура
Исторические личности
История
Кибернетика
Коммуникации и связь
Компьютеры
Косметология
Криминалистика
Криминология
Криптология
Кулинария
Культурология
Литература
Литература : зарубежная
Литература : русская
Логика
Логистика
Маркетинг
Масс-медиа и реклама
Математика
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Мифология
Москвоведение
Музыка
Муниципальное право
Налоги
Начертательная геометрия
Оккультизм
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование
Психология
Радиоэлектроника
Религия
Риторика
Сельское хозяйство
Социология
Спорт
Статистика
Страхование
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Физика
Физкультура
Философия
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
   

Реферат: Курсовая работа программирование на Pascal (Компьютеры)



Министерство образования Российской Федерации
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ
(ТУСУР)
Кафедра автоматизированных систем управления (АСУ)



Программирование

КУРСОВАЯ РАБОТА



Дата выполнения работы «15» сентября
2001 г.
Дата проверки «___»______________ 2001 г.
Оценка _________________________________
И.О.Фамилия преподавателя
________________________________________
Подпись преподавателя
________________________________________



г.Чита 2001 г.
СОДЕРЖАНИЕ

1. ВВЕДЕНИЕ 3
2. НАЗНАЧЕНИЕ РАБОТЫ И ОБЛАСТЬ ЕЕ ПРИМЕНЕНИЯ. Постановка задачи 4
3. ИСПОЛЬЗУЕМЫЕ МЕТОДЫ, ОПИСАНИЕ АЛГОРИТМА ПРОГРАММЫ С ОПИСАНИЕМ
ФУНКЦИЙ СОСТАВНЫХ ЧАСТЕЙ И СВЯЗИ МЕЖДУ НИМИ 5
4. ОПИСАНИЕ ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ 7
5. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ 7
6. ЗАКЛЮЧЕНИЕ 7
7. СПИСОК ЛИТЕРАТУРЫ 9
8. ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ 10
9. ПРИЛОЖЕНИЕ 2. РЕЗУЛЬТАТЫ РАБОТЫ 17


ВВЕДЕНИЕ

Язык программирования Pascal создан в 1973 году швейцарским ученым
Николасом Виртом и был назван в честь выдающегося французского физика,
математика и философа Блеза Паскаля (1623-1662), который являлся
автором первой в мире вычислительной (суммирующей) машины (1641). Язык
первоначально создавался для целей обучения программированию вообще.
По словам автора языка «… разработка языка Паскаль базировалась на
двух принципиальных концепциях. Первая состояла в том, чтобы изобрести
язык, приспособленный к обучению программированию как систематической
дисциплине, базирующейся на некоторых фундаментальных положениях, ясно
и естественно отраженных в языке. Вторая предполагала разработку
конкретных представлений этого языка, которые были бы надежны и
эффективны на современных ЭВМ.»[1] По мнению Вирта, «язык, на котором
студент учится выражать свои идеи, существенно влияет на его способ
мышления и изобретательность… беспорядок, сопутствующий существующим
языкам, непосредственно влияет на стиль программирования
студентов.»[2] Сейчас с уверенностью можно говорить о том, что Вирт
достиг поставленной перед собой цели. Язык Паскаль является не только
наилучшим языком обучения программированию, дает возможность
осуществить простую реализацию его на современных ПЭВМ, использовать
его как язык системного программирования, но и является базой для
создания более мощных языков.

НАЗНАЧЕНИЕ РАБОТЫ И ОБЛАСТЬ ЕЕ ПРИМЕНЕНИЯ.

Постановка задачи

Давно известно, что творческая и физическая активность человека не
остается постоянной, а циклически меняется, причем периодичность ее
изменения приблизительно согласуется с периодом вращения Луны вокруг Земли.
Существует теория, согласно которой физическая, эмоциональная и
интеллектуальная активность человека подчиняется соответствующим биоритмам.
Каждый биоритм представляет собой синусоиду со строго постоянным периодом,
причем для каждого биоритма существует свой период. В отдельные дни все три
биоритма человека могут достигнуть своего максимума и тогда человек
испытывает подъем творческих и физических сил, в такие дни у него все
спорится, от легко решает проблемы, которые в другое время ему решить
гораздо сложнее. Точно также существуют и «черные» дни, соответствующие
спаду всех трех биоритмов.
В программе запрашивается дата рождения человека и дата, для которой
требуется оценить его состояние. В процессе работы производится расчет и
выдача на экран ближайших к указанной дате дней пика и спада биоритмов.

ИСПОЛЬЗУЕМЫЕ МЕТОДЫ, ОПИСАНИЕ АЛГОРИТМА ПРОГРАММЫ С ОПИСАНИЕМ ФУНКЦИЙ
СОСТАВНЫХ ЧАСТЕЙ И СВЯЗИ МЕЖДУ НИМИ

Алгоритм программы можно укрупненно записать следующим образом:
|Ввести дату рождения и текущую дату |
|Проконтролировать их правильность и непротиворечивость |
|Вычислить количество дней между двумя датами, чтобы определить фазу синусоид |
|для текущей даты |
|Вычислить количество дней от текущей даты до даты ближайшего пика биоритмов и|
|даты ближайшего спада |
|Определить и напечатать обе даты |


Применяю методику нисходящего программирования.
Для упрощения подсчета количества дней, разделяющих дату рождения и
текущую дату использую массив Size_of_month – длина месяца и делаю его
глобальным для того, чтобы использовать его же и для определения даты
критических дней и проверки правильности вводимых дат. Таким образом
вышеуказанный массив будет использоваться в трех процедурах.
При расчете количества дней, разделяющих обе даты (рождения и
текущей), кроме контроля непротиворечивости введенных дат (минимально и
максимально возможные правильные даты 1900 и 2100 годы), следует
учитывать следующие обстоятельства:
. Месячный младенец (когда год и месяц обеих дат одинаков) –
тогда количество дней находится простым вычитанием двух чисел;
. Годовалый младенец (когда год обеих дат совпадает) – тогда
количество дней = (остаток дней в месяце рождения) +
(количество дней в текущем месяце) + (количество дней в
месяцах, разделяющих обе даты);
. Общий вариант (отличаются года) – тогда количество дней=
(количество дней от даты рождения до конца года) + (количество
дней в разделяющих даты годах) + (количество дней от начала
текущего года до текущей даты).
Все эти варианты учитываются в процедуре Get_numbers_of_days.
Процедуры Variant2 и Variant3 – вспомогательные. Они
используются для связи с основной программой через глобальные
переменные.
В процедуре Findmaxmin осуществляется поиск критических дней, то
есть ближайших к текущей дате дней, для которых все три биоритма
достигают своего максимума и минимума. Принимаю, что биоритмы
изменяются по синусоидальным зависимостям от количества прожитых дней
с периодами TF, TE и TI соответственно для физической, эмоциональной и
интеллектуальной активности человека, которые являются усредненными
для мужчин и женщин. Периоды принимаю следующие (в днях):
TF=23.6884 – период физической активности
TE=28.4261 – период эмоциональной активности
TI=33.1638 – период интеллектуальной активности
Поиск критических дней определяется для текущего дня и для
каждого из последующих дней до первого пика максимума или минимума в
заранее определенном интервале – в данном случае 30 дней.
С помощью процедуры WRITEDATES выводятся на экран результаты
работы программы. Так как расчет проводится дважды – для даты пика и
даты спада биоритмов, то целесообразно вынести его в отдельную
процедуру WRITEDATE.


ОПИСАНИЕ ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ


Ввод исходных данных (даты рождения человека и текущей даты)
осуществляется в формате ДД ММ ГГГГ с клавиатуры по запросу (тип
переменных, соответствующих этим значениям, Integer).
Для реализации вывода на экран расчетных данных для дат пика и спада
биоритмов – наиболее и наименее благоприятных дней использую тип Integer.
Для вывода данных о продолжительности жизни в часах минутах и секундах
использую Longint («длинный» целый), так как для типа Integer диапазон
возможных значений данных от –32768 до +32767. Если учесть, что средняя
продолжительность жизни человека около 70 лет, то есть 25550 дней, и
соответственно 36792000 часов, то приемлем только тип данных Longint с
диапазоном значений от –2147483648 до +2147483647.
Программное и аппаратное обеспечение для нормальной работы программы
стандартное – Turbo Pascal 7.0 – при отсутствии исполнимого файла.
Операционная система MS-DOS 6.0 или Windows95 и выше с режимом эмуляции
MS-DOS.

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ


Ввод исходных данных осуществляется с клавиатуры по запросу программы.

Данные необходимо вводить строго придерживаясь указанного формата:

ДД ММ ГГГГ – по два символа на день и месяц и четыре символа на ввод
года, разделять значения дня, месяца и года необходимо пробелом.
Окончание ввода строки данных подтвердить стандартно с помощью клавиши
ENTER.

ЗАКЛЮЧЕНИЕ

Программа служит для определения дней максимума и минимума
суммарных психо-физических параметров человеческого организма. Может
быть использована в повседневной жизни для планирования наиболее
важных для человека мероприятий, например: определения дней усиленных
тренировок для занимающихся активным спортом, проведения интервью,
публичных выступлений для политиков, заключения важных сделок и
ведения переговоров для бизнесменов и так далее.

СПИСОК ЛИТЕРАТУРЫ


1. Абрамов В.Г., Трифонов Н.П. Введение в язык Паскаль. – М. :Наука,
1988.-320 с.
2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. –
М.: Наука, 1987. – 112 с.
3. Бутомо И.Д., Самочадин А.В., Усанова Д.В. Программирование на
алгоритмическом языке Паскаль. – Л.: Издательство Ленинградского
университета, 1985. – 216 с.
4. Грэхем Р. Практический курс языка Паскаль. – М.: Радио и связь. 1986 –
200 с.
5. Йенсен К., Вирт Н. Руководство для пользователя и описание языка. –
М., 1982. 151 с.
6. Пильщиков В.Н. Сборник упражнений по языку Паскаль. – М.: Наука, 1989.
– 160 с.

ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ

Program bioritm;
{Программа для определения физической, эмоциональной и
интеллектуальной активности человека. Вводится дата рождения и
текущая дата.
Программа вычисляет и выводит на экран общее количество дней
часов, минут и секунд, разделяющих обе даты, а также прогнозирует
на месяц вперед даты, соответствующие максимуму и минимуму биоритмов}
CONST
SIZE_OF_MONTH: ARRAY [1..12] OF BYTE=
(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var
d0,d, {Дни рождения и месяцы}
m0,m, {Месяцы рождения и текущий}
y0,y, {Годы рождения и текущий}
dmin, {Наименее благоприятный день}
dmax, {Наиболее благоприятный день}
days: integer; {Количество дней от рождения}
{------------------------------------------------}
PROCEDURE InputDates (var d0,m0,y0,d,m,y: integer);
{Ввод даты рождения и текущей даты.
Контроль правильности дат и их непротиворечивости
(текущая дата должна быть позже даты рождения)}
var
correctly: boolean; {Признак правильности ввода}
{-----------------------------------------------}
PROCEDURE InpDate (text: string;
var d,m,y: integer);
{Выводит приглашение TEXT, вводит дату в формате
ДД ММ ГГГГ и проверяет ее правильность}
const
YMIN=1900; {Минимальный правильный год}
YMAX=2100; {Максимальный правильный год}
BEGIN {InpDate}
repeat
write (text);
readln(d,m,y);
correctly:=(y>=YMIN) and (y=1)
and (m0);
if correctly then
if (m=2) and (d=29) and (y mod 4=0) then
{ничего не делать: это 29 февраля високосного года}
else
correctly:=dy0; {ПРоверить непротиворечивость дат:}
if not correctly and (y=y0) then
begin
correctly:=m>m0;
if not correctly and (m=m0) then
correctly:=d>d0;
end;
until correctly;
END; {InputDates}
{----------------------------------------------------}
PROCEDURE Get_numbers_of_days (d0,m0,y0,d,m,y: integer;
var days: integer);
{Определение полного количества дней,
прошедших от одной даты до другой}
{----------------------------------------------------}
PROCEDURE Variant2;
{Подсчет количества дней в месяцах, разделяющих обе даты}
var
mm: integer;
BEGIN {Variant2}
mm:=m0;
while mm.

Команда формирует в заданных координатах рамку фон прямоугольника из
любых символов, которые включены в <вырC>. Это символьное выражение может
содержать до 9 символов (по 4 символа для углов и сторон прямоугольника,
начиная с левого верхнего угла по часовой стрелке).

@ TO [DOUBLE/PANEL/] –

команда формирует рамку с координатами X1, Y1 и X2, Y2.

@ SAY –

команда выводит текст, начиная с координат X,Y.

Для задания цвета во всех вышеприведенных командах используется опция
COLOR с указанием необходимой цветовой схемы. Причем при описании цвета
необходимо указать не только цвет элемента, которого мы хотим нарисовать,
но и цвет фона, на котором производится рисование (в нашем случае – белый).
В задании необходимо построить диаграмму количества товаров. Из-за
недостатка места выведены не названия, а номера товаров. При этом столбец,
относящийся к самому дорогому товару, нарисован красным цветом, а к самому
дешевому – зеленым, о чем сказано в легенде.
Полный текст программы приведен в приложении Г, а результат работы –
на рисунке 4.5.1.
[pic]
Рисунок 4.5.1 – Диаграмма количества товаров.

6. Использование модулей (подпрограмм)
В языке FoxPro могут использоваться внешние и внутренние процедуры.
Внешняя процедура – это совокупность команд, осуществляющих обычно
какие-то законченные действия по обработке данных и образующих отдельный
командный файл, т. е. отдельно программу (модуль).
Обращение к процедуре выполняется командой DO:

DO
[WITH ][IN ]

В процедуру могут быть переданы и из нее получены некоторые величины,
указанные в списке параметров после слова WITH. Этими величинами могут быть
не только переменные и константы, но любые разрешенные выражения. В таком
случае первой командой в вызываемой процедуре должна быть команда,
воспринимающая их:

PARAMETERS

Совокупность команд, составляющих внутреннюю процедуру, должна
начинаться командой

PROCEDURE

Для обозначения конца процедуры с возратом в вызывающий модуль может
использоваться команда RETURN, хотя она и не обязательна.
По заданию требуется, используя модули, вывести сведения о товарах,
поступивших позже 15.02.2001, а также вывести сведения о товарах, у которых
единица измерения – шт.
Полный текст программы приведен в приложении Д, а результат работы –
на рисунке 4.6.1.
[pic]
Рисунок 4.6.1 – Результаты работы программы.

7. Страховое копирование данных и реализация справки
Сбой/отключение компьютера в момент исполнения операций в прикладной
системе вызвать тяжёлые последствия для данных. Дабы избежать этого, можно
сделать страховое копирование всех или большинства данных в самом начале
работы в специальную директорию, а в самой программе предусмотреть
возможность их возврата в основную директорию.
Удобным представляется поддержка в программе специальной переменной (
например, с именем NORMZ), фиксирующей нормальное /ненормальное завершение
программы, а также переменной (NORMD) – даты текущего сеанса и сохранение
их в специальном МЕМ-файле (NORM.MEM). Переменная NORMZ должна иметь
значение `истина`, если последний сеанс работы завершился нормально, и
`ложь` в противном случае. Тогда первым шагом прикладной системы должны
быть считывание этого файла с диска и анализ переменной.
Фрагмент программы, реализующей страховое копирование данных,
приведен ниже.

* ----Использование страхового копирования данных
SET CLEAR OFF
SET SAFETY OFF
* Если файл NORM.MEM есть...
IF FILE('C:MY_WORKSTRANSF~1MYPROJ~1norm.mem')
* ...он загружается в память.
RESTORE FROM('C:MY_WORKSTRANSF~1MYPROJ~1norm.mem')
* Если переменная завершения истинна...
IF normz
* ...копируем все файлы таблиц в страховую директорию
!COPY C:MY_WORKSTRANSF~1MYPROJ~1*.dbf
C:MY_WORKSTRANSF~1MYPROJ~1Insure*.dbf>NUL
* иначе сообщение.
ELSE
WAIT normd+' было аварийное завершение .'+;
'Восстановить (ENTER) данные?' WINDOW
* В случае нажатия Enter, файлы восстанавливаются из страховой
директории.
IF LASTKEY()=13
!COPY C:MY_WORKSTRANSF~1MYPROJ~1Insure*.dbf
C:MY_WORKSTRANSF~1MYPROJ~1*.dbf>NUL
ENDIF
ENDIF
ENDIF
* Устанавливается переменная завершения, переменная текущей даты и
обе запоминаются в файл.
normz= .T.
normd=DTOC( DATE( ))
SAVE ALL LIKE norm? TO C:MY_WORKSTRANSF~1MYPROJ~1norm

Здесь сначала выясняется, есть ли файл NORM.MEM в текущей директории.
Если есть, файл загружается и выясняется значение переменной NORM. При
NORMZ=.T. все файлы таблиц копируются в страховую поддиректорию внутри
рабочей директории.

Поскольку файлов в системе обычно довольно много, проще использовать
не собственные команды копирования FoxPro, а выполнить (через знак !)
соответствующие команды DOS, для которых можно указать маску. Чтобы
системные сообщения команд не выводились на экран, они переадресованы на
пустое устройство ДОС - NUL. Если NORMZ=.F., значит, предыдущий сеанс
работы завершился аварийно. На экран выдаются сообщение и запрос о
необходимости восстановления данных из страховой директории (нажатием
клавиши Enter). Такой запрос нужен для того, чтобы отказаться от
копирования данных, если завершение программы было ненормальным, но данные,
как знает пользователь, не пострадали. После завершения анализа переменной
NORMZ она получает значение .F. и запоминается в файле NORM.MEM вместе с
переменной NORMD. Далее идет тело собственно прикладной системы. Если при
этом произойдет сбой, переменная NORMZ сохранит свое значение. При
нормальном завершении программы этой переменной присваивается значение .Т.
и она сохраняется в файле.

Кроме того, необходимо организовать систему контекстно-зависимой
справки, вызываемой по F1. Текст помощи предварительно заносится в файл
Table_Help.dbf, структура которого показана ниже.
[pic]
Рисунок 4.7.1 – Таблица данных для помощи.

Для вызова процедуры помощи применена команда ON KEY LABEL. В
процедуру Helper передается один параметр – имя поля исходной таблицы
товаров, которое требуется пояснить. Функция VARREAD() возвращает имя
переменной памяти, элемента массива или поля (прописными буквами),
использованного для создания текущего элемента управления.
В процедуре осуществляется поиск по этому полю, и, если таковое
найдено, соответствующее MEMO-поле выводится с помощью процедуры
MESSAGEBOX.
Полный текст программы приведен в приложении Е, а пример экрана
помощи, выдаваемого пользователю при нажатии клавиши F1 в тот момент, когда
курсор находится в поле “Дата поступления” исходной таблицы, приведен на
рисунке 4.7.2.

[pic]
Рисунок 4.7.2 – Пример экрана помощи.

8. Создание новых таблиц и арифметические действия
При копировании открытого файла DBF в новый файл, который этой
командой создаётся, используется команда

COPY TO
[] [FIELDS ]
[FOR < условие>] [WHILE ]
[TYPE ] [WITH CDX]

В новый файл могут копироваться как все поля базы данных, так и
только перечисленные в списке FIELDS. Копируемые поля могут находиться не
только в файле из рабочей активной области, но и в любом другом файле БД из
других рабочих областей. В этом случае имена полей – составные (имя базы и
имя поля).
Существует команда, выполняющая физическое упорядочение файла:

SORT TO
[ASCENDING/DESСENDING]
ON [/A] [/D] [/C] [, [/A] [/D] [/C]...]
[] [FOR ] [WHILE ]
[FIELDS ]

Команда создает из активной БД новый файл , в котором записи
расположены в возрастающем (/А) или убывающем (/D) порядке относительно
указанного поля /полей. Если параметр сортировки не указан, по умолчанию
подразумевается /А - возрастание. Ключ /С означает, что при сортировке
будет игнорироваться регистр букв (строчные /заглавные). Допускается
соединение ключа С с другими ключами, например /DC.
Для выполнения арифметических операций с базой данных можно
использовать следующие команды:


COUNT [][WHILE ]
[FOR ][TO ]

По команде COUNT подсчитывается число записей в заданных границах,
удовлетворяющих условиям, которое заносится в указанную .

SUM [][WHILE ]
[FOR ]
[ТО /ТО ARRAY <массив>]

По команде SUM суммируются значения перечисленных числовых полей
указанные или <массив>. В списке выражений разрешается
указывать не только имена числовых полей, но и функции от них и функции от
нескольких полей одновременно. Это значит, что можно воспользоваться
функцией STR() и просуммировать символьные поля с цифровыми данными. Можно
просуммировать квадратные корни величин и т.д. Если не было к
моменту исполнения команды, то они будут созданы, однако <массив> должен
уже существовать.

AVERAGE [][WHILE ]
[FOR ]
[TO /TO ARRAY <массив>]

По этой команде подсчитывается среднее арифметическое при тех же
допущениях, что и для предыдущей команды.
По условию требуется:
- Создать файл New_goods с полями Name_unit, Price_unit, Amount,
Unit_measure для всех товаров с ценой > 50;
- Создать файл Sort_goods с полями Name_unit, Price_unit, Amount,
Quality_goods. Файл отсортировать по полям: Price_unit – по
возрастанию, Name_unit – по алфавиту;
- Подсчитать число товаров на ’С…’, общую сумму всех товаров и
среднее арифметическое цены товаров.
Следует отметить, что сложная сортировка в данном задании отличается
от индексации во втором задании. При упорядочении первое указанное поле
является основным. В нашем случае это цена. Если же в таблице встретятся
несколько строк, в которых будет совпадать цена, то в силу вступает второй
параметр – а именно, товары с одинаковой ценой будут отсортированы по
алфавиту. В таблице Table_Goods записи с одинаковой ценой отсутствуют,
поэтому продемонстрировать сортировку по алфавиту одновременно с
сортировкой по цене не представляется возможным.
Полный текст программы приведен в приложении Ж, а результаты работы
программы – на рисунках 4.8.1 – 4.8.3.

[pic]
Рисунок 4.8.1 – Структура таблицы New_Goods.

[pic]
Рисунок 4.8.2 – Структура таблицы Sort_Goods.



[pic]
Рисунок 4.8.3 – Результаты работы программы.



ЗАКЛЮЧЕНИЕ

В курсовой работе были рассмотрены приемы проектирования и реализации
реляционных баз данных и таблиц в СУБД Visual FoxPro 6.0. Была
спроектирована структура реляционной таблицы, в нее были внесены данные с
помощью специальных запросов. Операции над данными таблицы были выполнены
программным путем с помощью создания автономных модулей *.prg, входящих в
состав проекта Visual FoxPro.



СПИСОК ЛИТЕРАТУРЫ


1. Попов А.А. Создание приложений для FoxPro 2.5/2.6 в DOS и
WINDOWS.– М .: Издательство ”Калашников и К”, 1997. – 660 с.:
илл.
2. FoxPro. Language Refrence. – Microsoft Corp., 1994.
3. Пинтер Лес. Разработка приложений в Microsoft FoxPro 2.5. – М.:
ТОО Эдель, 1995.
4. Дейт К. Руководство по реляционной СУБД DB2. – М.: Финансы и
статистика, 1988.



ПРИЛОЖЕНИЕ А
Текст программы фильтрации, индексации и поиска

* Очищаем экран
CLEAR
* Открываем таблицу из базы данных
USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods
* Выполняем фильтрацию по полю 'Поставщик'
SET FILTER to supplier='Россия'
BROWSE
* Выполняем индексирование по полю 'Количество' (только по
возрастанию)
INDEX on amount to C:MY_WORKSTRANSF~1MYPROJ~1indtab
* Выводим записи
LIST amount,name_unit,price_unit
* Выбираем из таблицы все записи о товарах низкого качества
BROWSE FOR quality_goods='низкое'
* Выбираем из таблицы первую запись о товаре в количестве 10
LOCATE FOR amount=10



ПРИЛОЖЕНИЕ Б
Текст программы поиска с помощью циклов WHILE и SCAN

* Очищаем экран
CLEAR
* Открываем таблицу из базы данных
USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods
* Ищем все товары, поставленные из России, с помощью цикла WHILE
?'Товары из России (цикл WHILE) :'
* Ищем первый товар
LOCATE FOR supplier='Россия'
* Если нашли...
IF FOUND()
* Печатаем название
?name_unit
ENDIF
* Продолжаем поиск до исчерпания записей
DO WHILE .NOT. EOF()
CONTINUE
IF FOUND()
?name_unit
ENDIF
ENDDO
* Ищем все товары из России с помощью SCAN-цикла
?'Товары из России (цикл SCAN) :'
SCAN FOR supplier='Россия'
* Выводим наименование, цену и количество товара
? name_unit+' '+STR(price_unit)+' '+STR(amount)
ENDSCAN
* С помощью WHILE находим общую цену товаров, поступивших
* в период с 15.01.2001 по 15.03.2001
* _SUM - переменная суммирования
_SUM=0
* Находим первую запись
LOCATE FOR date_recep>={^2001/01/15} .AND. date_recep={^2001/01/15} .AND. date_recep_Max_price
* то делаем текущую максимальной
_Max_price=price_unit
* и запоминаем ее номер
_Number_max_price=I
ENDIF
* Если текущая цена<минимальной...
IF price_unit_Max_col_height
* Ищем max количество товара
_Max_col_height=amount
ENDIF
ENDFOR
* ==============Построение диаграммы=============
* Рисуем оси
@3,20 TO 25,20
@25,20 TO 25,120
* Надписываем оси
@13,1 SAY 'Количество товара' COLOR B+/W*
@4,10 SAY _Max_col_height COLOR B+/W*
@28,60 SAY 'Номер товара'
* Рисуем легенду
@1,80 FILL TO 2,83 COLOR W/G*
@3,80 FILL TO 4,83 COLOR W/R*
@1,84 SAY 'Самый дешевый товар'
@3,84 SAY 'Самый дорогой товар'
* Расстояние между столбцами диаграммы
_Diagram_step_size=2
* Ширина одного столбца диаграммы
_Diagram_col_width=(100-
_Diagram_step_size*(_Number_records+1))/_Number_records
* Масштабный множитель
_Scale_factor=20/_Max_col_height
* Рисуем столбцы
FOR I=1 TO _Number_records
* Вычисляем координаты вершин для текущего столбца
_Y1=ROUND(25-_Amounts(I)*_Scale_factor,0)
_X1=ROUND(20+_Diagram_step_size*I+_Diagram_col_width*(I-1),0)
_Y2=25
_X2=ROUND(20+(_Diagram_step_size+_Diagram_col_width)*I,0)
* Если высота нулевая...(из-за округления)
IF _Y1=25
* то делаем высоту = 1
_Y1=24
ENDIF
* Если рисуем столбец, соответствующий самому дешевому товару...
IF I=_Number_min_price
* то закрашиваем его зеленым цветом
@_Y1,_X1 FILL TO _Y2,_X2 COLOR W/G*
* Иначе если рисуем столбец, соответствующий самому дорогому
товару...
ELSE
IF I=_Number_max_price
* то закрашиваем его красным цветом
@_Y1,_X1 FILL TO _Y2,_X2 COLOR W/R*
ELSE
* Иначе закрашиваем синим цветом
@_Y1,_X1 FILL TO _Y2,_X2 COLOR W/B*
ENDIF
ENDIF
* Ставим по оси X номера товаров
@26,_X1-ROUND(_Diagram_col_width/2,0) SAY I
ENDFOR

ПРИЛОЖЕНИЕ Д
Текст программы, использующей модули

* Очищаем экран
CLEAR
* Открываем таблицу из базы данных
USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods
* Вызов процедуры, выводящей сведения об искомых товарах
DO Show_units_for_date
?''
* Вызов процедуры, показывающей товары с единицей измерения 'шт.'
DO Show_units_for_measure
* Описание процедуры Show_units_for_date
PROCEDURE Show_units_for_date
?'Товары, поступившие позже 15.02.2001.'
?''
?'Наименование цена количество'
SCAN FOR date_recep>{^2001/02/15}
* Выводим наименование, цену и количество товара
? name_unit+' '+STR(price_unit)+' '+STR(amount)
ENDSCAN
ENDPROC
* Описание процедуры Show_units_for_measure
PROCEDURE Show_units_for_measure
?'Товары, у которых единица измерения - шт.'
?''
?'Наименование цена количество'
SCAN FOR unit_measure='Штука'
* Выводим наименование, цену и количество товара
? name_unit+' '+STR(price_unit)+' '+STR(amount)
ENDSCAN
ENDPROC



ПРИЛОЖЕНИЕ Е
Текст программы страхового копирования и контекстной справки

* ----Использование страхового копирования данных
SET CLEAR OFF
SET SAFETY OFF
* Если файл NORM.MEM есть...
IF FILE('C:MY_WORKSTRANSF~1MYPROJ~1norm.mem')
* ...он загружается в память.
RESTORE FROM('C:MY_WORKSTRANSF~1MYPROJ~1norm.mem')
* Если переменная завершения истинна...
IF normz
* ...копируем все файлы таблиц в страховую директорию
!COPY C:MY_WORKSTRANSF~1MYPROJ~1*.dbf
C:MY_WORKSTRANSF~1MYPROJ~1Insure*.dbf>NUL
* иначе сообщение.
ELSE
WAIT normd+' было аварийное завершение .'+;
'Восстановить (ENTER) данные?' WINDOW
* В случае нажатия Enter файлы восстанавливаются из страховой
директории.
IF LASTKEY()=13
!COPY C:MY_WORKSTRANSF~1MYPROJ~1Insure*.dbf
C:MY_WORKSTRANSF~1MYPROJ~1*.dbf>NUL
ENDIF
ENDIF
ENDIF
* Устанавливается переменная завершения, переменная текущей даты и
обе запоминаются в файл.
normz= .T.
normd=DTOC( DATE( ))
SAVE ALL LIKE norm? TO C:MY_WORKSTRANSF~1MYPROJ~1norm
*===============================================================
* ----Вызов контекстно-зависимой экранной подсказки по нажатию F1.
* ----Esc - выход из программы.
* ----Справка выдается по названию поля таблицы.
* Открываем таблицу из базы данных
USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods
* По нажатию F1 вызываем процедуру Helper
ON KEY LABEL F1 DO Helper WITH VARREAD()
* Бесконечный цикл BROWSE
DO WHILE .T.
USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods
* Отображаем таблицу
BROWSE
* Если нажата клавиша Esc...
IF LASTKEY()=27
* ... то на выход.
EXIT
ENDIF
ENDDO
* Описание процедуры Helper
PROCEDURE Helper
* Параметр процедуры - имя поля, которое требуется пояснить
PARAMETERS _Item
* Открываем базу помощи
USE C:MY_WORKSTRANSF~1MYPROJ~1Table_Help
* Ищем нужное поле
LOCATE FOR index_help=_Item
* Если нашли нужное поле (оно одно) - выводим
IF FOUND()
_Out_text=text_help
MESSAGEBOX(_Out_text)
ELSE
MESSAGEBOX('Справка по данному разделу не предусмотрена.
Извините.')
ENDIF
RETURN



ПРИЛОЖЕНИЕ Ж
Текст программы создания новых таблиц и арифметических действий

* Очищаем экран
CLEAR
* Открываем таблицу из базы данных
USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods
* Создаем новую таблицу, вкоторую входят все товары с ценой>50
COPY TO C:MY_WORKSTRANSF~1MYPROJ~1New_Goods FIELDS
name_unit,price_unit,amount,unit_measure FOR price_unit>50
* Обращаемся к новой таблице
USE C:MY_WORKSTRANSF~1MYPROJ~1New_Goods
* Просматриваем ее
BROWSE
* Создаем новый файл, отсортированный в соответствии с заданием
USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods
SORT TO C:MY_WORKSTRANSF~1MYPROJ~1Sort_Goods ON
price_unit/A,name_unit/A
USE C:MY_WORKSTRANSF~1MYPROJ~1Sort_Goods
* Выводим отсортированную таблицу
LIST OFF price_unit,name_unit
USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods
* Выводим количество товаров на букву 'С'
COUNT FOR (LEFT(name_unit,1)='С') TO _Count
?'В исходной таблице содержится'+STR(_Count)+' товара(-ов) на
букву `С`'
* Выводим общую стоимость всех товаров
?'Общая стоимость всех товаров равна'
SUM price_unit*amount
* Выводим среднее арифметическое цен всех товаров
?'Среднее арифметическое цен всех товаров равно'
AVERAGE price_unit
-----------------------
“Товары”

“Клавиатуры”

наименование

цена

количество

единица измерения

дата поступления

качество

поставщик






Новинки рефератов ::

Реферат: Сборник сочинений русской литературы с XIX века до 80-х годов XX века (Литература)


Реферат: Внедрение стратегии (Менеджмент)


Реферат: Банкiвська система Украiни (Банковское дело)


Реферат: Реакции a-литиированных циклических нитронов с электрофильными реагентами (Химия)


Реферат: Аристотель (Исторические личности)


Реферат: Бизнес-план ООО "Цветик-семицветик" (Менеджмент)


Реферат: Учет и аудит расчетов с подотчетными лицами и с персоналом по прочим операциям (Аудит)


Реферат: Банковская конкуренция (Банковское дело)


Реферат: Современные проблемы юрисдикционного иммунитета государства и его собственности в международном частном праве (Международное частное право)


Реферат: Гуманистическая педагогика Адольфа Дистервега (Педагогика)


Реферат: A/S Kaija (Страхование)


Реферат: Ответы на билеты по биологии 11 класс (Биология)


Реферат: Этапы развития страхования в СССР (Страхование)


Реферат: Дедуктивные умозаключения (Контрольная) (Право)


Реферат: Microsoft Word 97 (Программирование)


Реферат: Анализ фотографических свойств фотопленок (Фотография)


Реферат: Гражданское общество (Политология)


Реферат: Вспомогательные программы (утилиты) (Программирование)


Реферат: Казанская икона Божией Матери (Религия)


Реферат: Глобализационные процессы в современном мире (Философия)



Copyright © GeoRUS, Геологические сайты альтруист