Курсовая: Алгоритмизация и программирование процессов на Fox
Государственный Университет Управления Институт заочного обучения Специальность Ц менеджмент Объяснительная записка к курсовому проекту по дисциплине лКомпьютерная подготовка по теме: лАлгоритмизация и программирование процессов обработки данных в среде СУБД типа Fox Выполнил студент Студенческий билет № Группа №УП4-1-98/2 Вариант №2 Адрес: Москва, 1999 г. Содержание. 1. Введение_______________________________________________ 3 2. Задание на курсовой проект______________________________ 4 3. Анализ и постановка задачи_____________________________ 4 4. Формализация задачи___________________________________ 5 5. Алгоритмы____________________________________________ 6 5.1. Создание двухуровневого светового меню____________________________ 6 5.2. Создание файла данных____________________________________________ 7 5.3. Чтение файла данных______________________________________________ 8 5.4. Добавление данных в файл данных___________________________________ 9 5.5. Печать сведений о суммарной стоимости продукции заданного вида по каждому предприятию и о среднем выпуске этой продукции одним предприятием.____________________ 10 5.6. Печать сведений о суммарной стоимости и суммарном выпуске каждой продукции. 11 5.7. Печать упорядоченного по суммарной стоимости списка продукции пяти видов 12 6. Программы___________________________________________ 13 6.1. Создание двухуровневого светового меню___________________________ 13 6.2. Создание файла данных___________________________________________ 15 6.3. Чтение файла данных_____________________________________________ 16 6.4. Добавление данных в файл данных__________________________________ 17 6.5. Печать сведений о суммарной стоимости продукции заданного вида по каждому предприятию и о среднем выпуске этой продукции одним предприятием.____________________ 18 6.6. Печать сведений о суммарной стоимости и суммарном выпуске каждой продукции. 20 6.7. Печать упорядоченного по суммарной стоимости списка продукции пяти видов 21 7. Результаты решений___________________________________ 22 8. Заключение___________________________________________ 29 9. Список литературы____________________________________ 301. Введение
Реляционные системы управления базами данных (СУБД), такие как FoxBase, FoxBase plus, FoxPro, Visual FoxPro относятся к новому поколению СУБД реляционного типа из семейства dBase Ц подобных СУБД. Пакеты этого семейства получили широкое распространение, и многие из них были русифицированы. СУБД типа Fox сохраняет преемственность по отношению к более ранним представителям dBase Ц подобных СУБД, в отношении структуры баз данных, команд создания и обработки данных, основных типов данных. В тоже время каждая последующая СУБД обладает большими возможностями по сравнению с предыдущими. Так, например, Visual FoxPro по сравнению с FoxPro обладает более значительными изобразительными возможностями. Данная работа использует язык команд СУБД семейства Fox. Используемые команды, в основном, применимы во всех СУБД этого типа, но отладка велась на русифицированной СУБД FoxPro для Windows версии 2.5b.2. Задание на курсовой проект
Структура ЗАПИСИ исходного ДОКУМЕНТА:
Код предприятия | Вид продукции | Объем выпуска | Цена единицы продукции |
3. Анализ и постановка задачи
Исходные данные задачи представляют собой записи заданной структуры, которые должны вводиться с клавиатуры, а затем выводиться в файл данных на магнитный диск. Следовательно, одной из подзадач должна быть задача создания файла данных на магнитном диске. Созданный файл данных необходимо просмотреть на экране или вывести на печать в виде таблицы с печатью заголовка и шапки этой таблицы. Для этого следующей подзадачей должна являться задача просмотра файла данных. Также должна быть возможность добавления записей в созданный файл данных. Затем необходимы еще три подзадачи, решение которых позволяет выполнить три пункта курсовой работы: 1. Выдача сведений о суммарной стоимости продукции заданного вида по каждому предприятию и о среднем выпуске этой продукции одним предприятием. 2. Выдача сведений о суммарной стоимости и суммарном выпуске каждой продукции. 3. Выдача на печать продукции пяти видов в порядке возрастания ее суммарной стоимости. Кроме того, для диалога пользователя с системой необходимо создать так называемое, лМеню.4. Формализация задачи
В среде СУБД типа Fox каждая подзадача может оформляться в виде отдельного командного файла с расширением .prg и заканчиваться оператором возврата в вызывающий командный файл. В данном случае основным командным файлом является файл MainMenu.prg, который формирует полное экранное меню и осуществляет вызов других командных файлов, в зависимости от выбранного пункта меню:CreateFd.prg | Ц создание файла данных; |
ReadFd.prg | Ц чтение созданного файла данных; |
AddFd.prg | Ц добавление данных в созданный файл данных; |
Zad1.prg | Ц выдача сведений о суммарной стоимости продукции заданного вида по каждому предприятию и о среднем выпуске этой продукции одним предприятием; |
Zad2.prg | Ц выдача сведений о суммарной стоимости и суммарном выпуске каждой продукции; |
Zad3.prg | Ц выдача на печать продукции пяти видов в порядке возрастания ее суммарной стоимости. |
5. Алгоритмы
5.1. Создание двухуровневого светового меню
5.2. Создание файла данных
5.3. Чтение файла данных
5.4. Добавление данных в файл данных
6. Программы
6.1. Создание двухуровневого светового меню
* Командный файл иерархического меню MainMenu set Talk off set Color to n/W* && Выбор цвета экрана Clear * Описание массивов данных меню Declare GenMenu(3,2), menuFile(3), menuZad(3), menuExit(2) * Задание значений элементов массивов GenMenu(1,1)=" Файл данных " GenMenu(1,2)="Работа с файлом данных" GenMenu(2,1)=" Задание " GenMenu(2,2)="Задания на курсовой проект" GenMenu(3,1)=" Выход " GenMenu(3,2)="Выход из программы" menuFile(1)="Создание" menuFile(2)="Чтение" menuFile(3)="Добавление" menuZad(1)="Задание №1" menuZad(2)="Задание №2" menuZad(3)="Задание №3" menuExit(1)="Выход в Fox" menuExit(2)="Выход из Fox" * Формировние главного меню Do While .T. set Color to gr+/g, gr+/b && Установка цвета меню Menu Bar GenMenu, 3 Read Menu Bar to L1, L2 && Вывод главного меню на экран Do While L1 > 0 && открыть подменю, если выбран && любой пункт главного меню * Формирование подменю set Color to gr+/g, gr+/b && Установка цвета подменю Menu 1, menuFile, 3,3 Menu 2, menuZad, 3,3 Menu 3, menuExit, 2,2 Read Menu Bar to L1, L2 && Вывод меню на экран set Color to n/W* && Возврат к цвету экрана * Обработка выбранного пункта меню Do Case Case L1=0 Exit && Выход в панель главного меню Case L1=1 Do Case Case L2=1 && Выбрано действие 'Создание нового ФД' Do CreateFd Case L2=2 && Выбрано действие 'Чтение данных' Do ReadFd Case L2=3 && Выбрано действие 'Добавление новых данных' Do AddFd EndCase Case L1=2 Do Case Case L2=1 && Выбрано задание №1 из курсового проекта Do Zad1 Case L2=2 && Выбрано задание №2 из курсового проекта Do Zad2 Case L2=3 && Выбрано задание №3 из курсового проекта Do Zad3 EndCase Case L1=3 Do Case Case L2=1 && Выбран пункт 'Выход в Fox' Return Case L2=2 && Выбран пункт 'Выход из Fox' Quit EndCase EndCase EndDo EndDo6.2. Создание файла данных
* Командный файл CreateFd - создание нового файла данных set Talk off 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 Return6.3. Чтение файла данных
* Командный файл 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 Return6.4. Добавление данных в файл данных
* Командный файл 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 6.5. Печать сведений о суммарной стоимости продукции заданного вида по каждому предприятию и о среднем выпуске этой продукции одним предприятием. * Командный файл 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 6.6. Печать сведений о суммарной стоимости и суммарном выпуске каждой продукции. * Командный файл 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 6.7. Печать упорядоченного по суммарной стоимости списка продукции пяти видов * Командный файл 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 Return7. Результаты решений
Выбор создания файла данных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 |
6 | Ластик | 600 | 1,55 |
6 | Чернила | 800 | 3,10 |
6 | Карандаш | 1000 | 1,55 |