Смекни!
smekni.com

Алгоритмизация и программирование процессов на Fox (стр. 2 из 3)

set Status off

set Escape off

Clear

Zag='Процесс создания нового файла данных'

@ 4,22 to 4,58 Color u/w*

@ 3,22 Say Zag Color u/w*

@ 12,0

Accept ' Укажите имя создаваемого файла данных: ' to NameFd

If Len(NameFd) > 0 && Если имя файла не ввели, то делать нечего

* Изменение заголовка

Zag=Zag + ': ' + NameFd + '.dbf'

LenZag=Int(Len(Zag))

@ 4,Int((80-lenZag)/2) to 4,Int((80-lenZag)/2)+LenZag Color u/w*

@ 3,Int((80-LenZag)/2) Say Zag Color u/w*

@ 14,0

Text

Хотите автоматически создать пустую структуру

с указанным именем, по заданию курсового проекта (Д/Н)?

EndText

* Ответ на поставленный вопрос

Do While .T.

@ 16,57

Wait '' to ABC && Ожидание нажатия клавиши

If ABC='н' Or ABC='д'

ABC=Chr(Asc(ABC)-32) && Смена регистра

EndIf

If ABC='Н' Or ABC='Д'

Exit

EndIf

EndDo

* Создание ФД

If ABC='Д' && Автоматическое создание ФД

Create Table &NameFd ;

(KodOrg N(3,0), VidProd C(20), Volum N(4,0), Price N(6,2))

@ 8,0

set Talk on

Display Structure && Вывод созданной структуры

set Talk off

Else && Создание ФД с возможностью заполнения полей

Create &NameFd

EndIf

EndIf

* Конец работы

@ 24,0

Wait 'Для возврата в меню нажмите любую клавишу ...'

@ 24,0 Clear

Return

1.7. Чтение файла данных

* Командный файл ReadFd - чтение файла данных

set Talk off

set Status off

set Escape off

Clear

@ 4,27 to 4,54 Color u/w*

@ 3,27 Say 'Процесс чтения файла данных' Color u/w*

@ 12,0

Accept ' Введите имя считываемого файла данных: ' to NameFd

If Len(NameFd) >0 && Если имя файла не ввели, то делать нечего

* Изменение заголовка

@ 3,0 Clear to 5,79

Zag='Содержимое файла данных: ' + NameFd + '.dbf'

LenZag=Int(Len(Zag))

@ 4,Int((80-lenZag)/2) to 4,Int((80-lenZag)/2)+LenZag Color u/w*

@ 3,Int((80-LenZag)/2) Say Zag Color u/w*

* Вывод содержимого файла

Use &NameFd

Do While .Not.EOF() && Цикл вывода порций записей ФД

&& В определенную область экрана

@ 7,0

Display Next 15

If EOF()=.F. && В последнем цикле не нужно переводить

&& указатель и держать паузу

Skip && Перевод указателя, чтобы новый экран не начинался

&& с последней записи предыдущего экрана

@ 24,0

Wait 'Нажмите любую клавишу для просмотра следующих 15 записей ...'

EndIf

EndDo

Close DataBases && Закрытие ФД

EndIf

* Конец работы

@ 24,0

Wait 'Для возврата в меню нажмите любую клавишу ...'

@ 24,0 Clear

Return

1.8. Добавление данных в файл данных

* Командный файл AddFd - добавление файла данных

set Talk off

set Status off

set Escape off

Clear

@ 4,25 to 4,56 Color u/w*

@ 3,25 Say 'Процесс добавления файла данных' Color u/w*

@ 12,0

Accept ' Введите имя файла данных для добавления данных: ' to NameFd

If Len(NameFd) >0 && Если имя файла не ввели, то делать нечего

* Изменение заголовка

@ 3,0 Clear

Zag='Добавление данных в файл данных: ' + NameFd + '.dbf'

LenZag=Int(Len(Zag))

@ 4,Int((80-lenZag)/2) to 4,Int((80-lenZag)/2)+LenZag Color u/w*

@ 3,Int((80-LenZag)/2) Say Zag Color u/w*

* Добавление данных в ФД

Use &NameFd

Append

Close DataBases && Закрытие ФД

EndIf

* Конец работы

@ 24,0

Wait 'Для возврата в меню нажмите любую клавишу ...'

@ 24,0 Clear

Return

1.9. Печать сведений о суммарной стоимости продукции заданного вида по каждому предприятию и о среднем выпуске этой продукции одним предприятием.

* Командный файл Zad1 - печать сведений о заданной продукции

set Talk off

set Status off

set Escape off

Clear

@ 4,18 to 4,62 Color u/w*

@ 3,18 Say 'Процесс печати сведений о заданной продукции' Color u/w*

@ 12,0

Accept ' Введите имя файла данных: ' to NameFd

@ 12,0 Clear

@ 12,0

Accept ' Введите вид продукции: ' to TypeProd

If Len(NameFd) >0 And Len(TypeProd) > 0 && Если имя файла или

&& вид продукции не ввели,

&& то делать нечего

* Изменение заголовка

@ 3,0 Clear

Zag='Сведения о продукции: ' + TypeProd

LenZag=Int(Len(Zag))

@ 4,Int((80-lenZag)/2) to 4,Int((80-lenZag)/2)+LenZag Color u/w*

@ 3,Int((80-LenZag)/2) Say Zag Color u/w*

Use &NameFd

* Формирование шапки

L='+-----------------+---------------+--------+-----------+'

@ 7,12 Say L

@ 8,12 Say '| Код предприятия | Объем выпуска | Цена | Стоимость |'

@ 9,12 Say L

Row=10 && Текущий номер строки для вывода данных

Do While .Not.EOF()

If VidProd=TypeProd

* Формирование строки

@ Row,12 Say '|'

@ Row,20 Say KodOrg

@ Row,30 Say '|'

@ Row,36 Say Volum Picture '# ###'

@ Row,46 Say '|'

@ Row,48 Say Price Picture '###.##'

@ Row,55 Say '|'

@ Row,57 Say Volum*Price Picture '## ###.##'

@ Row,67 Say '|'

Row=Row+1

EndIf

Skip

EndDo

* Формирование итоговой части таблицы

@ Row,12 Say L

Row=Row+1

* Расчет суммарной стоимости

Sum Volum*Price For VidProd=TypeProd to AllPrice

* Расчет среднего выпуска

Average Volum For VidProd=TypeProd to AvVol

@ Row,29 Say 'Общая суммарная стоимость:'

@ Row,56 Say AllPrice Picture '### ###.##'

@ Row+1,21 Say 'Средний выпуск одним предприятием:'

@ Row+1,58 Say AvVol Picture '# ###'

Close DataBases && Закрытие ФД

EndIf

* Конец работы

@ 24,0

Wait 'Для возврата в меню нажмите любую клавишу ...'

@ 24,0 Clear

Return

1.10. Печать сведений о суммарной стоимости и суммарном выпуске каждой продукции.

* Командный файл Zad2 - печать сведений об объемах и стоимости продукции

set Talk off

set Status off

set Escape off

Clear

@ 4,15 to 4,64 Color u/w*

@ 3,15 Say 'Процесс печати сведений об объемах всей продукции' Color u/w*

@ 12,0

Accept ' Введите имя файла данных: ' to NameFd

@ 12,0 Clear

If Len(NameFd) >0 && Если имя файла не ввели, то печатать нечего

Use &NameFd

* Формирование шапки таблицы

L='+---------------------+---------------+---------------------+'

@ 7,10 Say L

@ 8,10 Say '| Вид продукции | Общий объем | Суммарная стоимость |'

@ 9,10 Say L

* Сортировка данных по виду продукции

Index On VidProd to &NameFd && Создание индексного файла

Use &NameFd Index &NameFd

* Формирование строк таблицы

Row=10 && Текущий номер строки для вывода данных

Do While .Not.EOF()

VP=VidProd

RNom=RecNo() && Запомнить номер текущей записи

Sum Volum For VidProd=VP to AllVol && Общий объем

Sum Volum*Price For VidProd=VP to AllPrice && Суммарная стоимость

GoTo RNom && Вернуться на текущую запись

@ Row,10 Say '|'

@ Row,12 Say VidProd

@ Row,32 Say '|'

@ Row,37 Say AllVol Picture '### ###'

@ Row,48 Say '|'

@ Row,55 Say AllPrice Picture '### ###.##'

@ Row,70 Say '|'

* Пропуск записей с отработанным видом продукции

Do While VidProd = VP And .Not.EOF()

Skip

EndDo

Row=Row+1

EndDo

* Формирование итоговой части таблицы

@ Row,10 Say L

Close DataBases && Закрытие ФД

Delete File NameFd + '.idx' && Удаление индексного файла

EndIf

* Конец работы

@ 24,0

Wait 'Для возврата в меню нажмите любую клавишу ...'

@ 24,0 Clear

Return

1.11. Печать упорядоченного по суммарной стоимости списка продукции пяти видов

* Командный файл Zad3 - печать упорядоченных сведений о стоимости продукции

set Talk off

set Status off

set Escape off

Clear

@ 4,9 to 4,71 Color u/w*

@ 3,9 Say 'Печать сведений о суммарной стоимости продукции по возрастанию' Color u/w*

@ 12,0

Accept ' Введите имя файла данных: ' to NameFd

@ 12,0 Clear

If Len(NameFd) >0 && Если имя файла не ввели, то печатать нечего

Use &NameFd

* Формирование шапки таблицы

L='+---------------------+---------------------+'

@ 7,17 Say L

@ 8,17 Say '| Вид продукции | Суммарная стоимость |'

@ 9,17 Say L

* Поиск продукции с наименьшим значением стоимости

Store 0 to MinAP, LastAP

For I=1 to 5 && Цикл для пяти видов продукции

Do While .Not.EOF() && Цикл поиска нового минимума

VP=VidProd && Текущий вид продукции

RNom=RecNo() && Текущая запись

Sum Volum*Price For VidProd=VP to AllPrice

If AllPrice > LastAP

If AllPrice < MinAP Or MinAP=0

MinAP=AllPrice

MinVP=VP

EndIf

EndIf

If RNom < RecCount()

GoTo RNom+1 && Переход на следующую запись

EndIf

EndDo

* Формирование строки таблицы

@ 9+I,17 Say '|'

@ 9+I,19 Say MinVP

@ 9+I,39 Say '|'

@ 9+I,46 Say MinAP Picture '### ###.##'

@ 9+I,61 Say '|'

LastAP=MinAP && Предыдущее минимальное значение

&& (нижняя граница минимальных значений)

MinAP=0

GoTo Top && Возобновить просмотр с первой строки

Next

* Формирование итоговой части таблицы

@ 15,17 Say L

Close DataBases && Закрытие ФД

EndIf

* Конец работы

@ 24,0

Wait 'Для возврата в меню нажмите любую клавишу ...'

@ 24,0 Clear

Return

7. Результаты решений

Выбор создания файла данных


1

Ручка

1000

2,00

1

Карандаш

500

1,50

1

Фломастер

1000

4,70

1

Чернила

500

3,00

2

Ручка

1200

1,85

2

Фломастер

750

5,00

2

Ластик

5000

1,20

2

Карандаш

1500

1,35

3

Чернила

400

3,20

3

Ручка

800

1,90

3

Карандаш

1200

1,40

3

Фломастер

2000

4,50

4

Ручка

900

1,85

4

Ластик

200

2,00

4

Фломастер

1400

4,70

4

Чернила

500

3,05

5

Карандаш

700

1,45

5

Чернила

1100

2,60

5

Ластик

1400

1,65

5

Фломастер

500

5,30


Выбор чтения файла данных