Примечание | от автора: в блок-схемах есть пара ошибок (стрелочки не туда смотрят), исправлять лень |
Загрузить архив: | |
Файл: ref-21875.zip (99kb [zip], Скачиваний: 37) скачать |
Министерство образования и науки Российской Федерации
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение
высшего профессионального образования
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ УПРАВЛЕНИЯ
Кафедра компьютерных технологий
ПО ДИСЦИПЛИНЕ: КОМПЬЮТЕРНАЯ ПОДГОТОВКА
по теме: «Алгоритмизация и программирование процессов
обработки данных в среде СУБД типа Fox»
Выполнил
заочной формы обучения
специальности:
специализации:
_____курса, группы
№ студенческого билета
Проверил преподаватель
Несмеянов И.А.
Москва - 2006
Содержание
TOC o "1-3" Введение_______________________________________________ PAGEREF _Toc104107324 h
2. Задание на курсовой проект______________________________ PAGEREF _Toc104107325 h
3. Анализ и постановка задачи_____________________________ PAGEREF _Toc104107326 h
4. Формализация задачи___________________________________ PAGEREF _Toc104107327 h
5. Алгоритмы____________________________________________ PAGEREF _Toc104107328 h
5.1. Создание двухуровневого светового меню____________________________ PAGEREF _Toc104107329 h
5.2. Создание файла данных____________________________________________ PAGEREF _Toc104107330 h
5.3. Чтение файла данных______________________________________________ PAGEREF _Toc104107331 h
5.4. Добавление данных в файл данных___________________________________ PAGEREF _Toc104107332 h
5.5. Выдача сведений о количестве работников каждого из пяти цехов заданного разряда. PAGEREF _Toc104107333 h
5.6. Выдача сведений о количестве работников каждой профессии по заданному разряду заданного цеха. PAGEREF _Toc104107334 h
5.7. Выдача упорядоченного по алфавиту списка работников каждой профессии. PAGEREF _Toc104107335 h
6. Программы___________________________________________ PAGEREF _Toc104107336 h
6.1. Создание двухуровневого светового меню___________________________ PAGEREF _Toc104107337 h
6.2. Создание файла данных___________________________________________ PAGEREF _Toc104107338 h
6.3. Чтение файла данных_____________________________________________ PAGEREF _Toc104107339 h
6.4. Добавление данных в файл данных__________________________________ PAGEREF _Toc104107340 h
6.5. Печать сведений о количестве работников каждого из пяти цехов заданного разряда. PAGEREF _Toc104107341 h
6.6. Печать сведений о количестве работников каждой профессии по заданному разряду заданного цеха. PAGEREF _Toc104107342 h
6.7. Печать упорядоченного по алфавиту списка работников каждой профессии. PAGEREF _Toc104107343 h
7. Результаты решений___________________________________ PAGEREF _Toc104107344 h
8. Заключение___________________________________________ PAGEREF _Toc104107345 h
9. Список литературы____________________________________ PAGEREF _Toc104107346 h
Реляционные системы управления базами данных (СУБД), такие как FoxBase, FoxBaseplus, FoxPro, VisualFoxPro относятся к новому поколению СУБД реляционного типа из семейства dBase – подобных СУБД. Пакеты этого семейства получили широкое распространение, и многие из них были русифицированы.
СУБД типа Fox сохраняет преемственность по отношению к более ранним представителям dBase – подобных СУБД, в отношении структуры баз данных, команд создания и обработки данных, основных типов данных. В тоже время каждая последующая СУБД обладает большими возможностями по сравнению с предыдущими. Так, например, VisualFoxProпо сравнению с FoxPro обладает более значительными изобразительными возможностями.
Данная работа использует язык команд СУБД семейства Fox. Используемые команды, в основном, применимы во всех СУБД этого типа, но работа производилась на русифицированной СУБД MicrosoftFoxProдля Windows версии 2.5b.
Структура ЗАПИСИ исходного ДОКУМЕНТА:
Номер цеха |
Табельный номер |
Фамилия |
Профессия |
Разряд |
НЕОБХОДИМО:
1. Датьсведения о количестве работников каждого из пяти цехов заданного разряда.
2. Подсчитатьи напечатать количество работников каждой профессии по заданному разряду заданного цеха.
3. Распечатать списки работников каждой профессии, упорядочив их по алфавиту.
Исходные данные задачи представляют собой записи заданной структуры, которые должны вводиться с клавиатуры, а затем выводиться в файл данных на магнитный диск. Следовательно, одной из подзадач должна быть задача создания файла данных на магнитном диске.
Созданный файл данных необходимо просмотреть на экране или вывести на печать в виде таблицы с печатью заголовка и шапки этой таблицы. Для этого следующей подзадачей должна являться задача просмотра файла данных. Также должна быть возможность добавления записей в созданный файл данных.
Затем необходимы еще три подзадачи, решение которых позволяет выполнить три пункта курсовой работы:
1.Выдача сведений о количестве работников каждого из пяти цехов заданного разряда.
2.Подсчет и выдача на печать сведений о количестве работников каждой профессии по заданному разряду заданного цеха.
3.Выдача на печать упорядоченных по алфавиту списков работников каждой профессии.
Кроме того, для диалога пользователя с системой необходимо создать так называемое «Меню».
В среде СУБД типа Fox каждая подзадача может оформляться в виде отдельного командного файла с расширением .prg и заканчиваться оператором возврата в вызывающий командный файл.
В данном случае основным командным файлом является файл MainMenu.prg, который формирует полное экранное меню и осуществляет вызов других командных файлов, в зависимости от выбранного пункта меню:
CreateFd.prg |
– создание файла данных; |
ReadFd.prg |
– чтение созданного файла данных; |
AddFd.prg |
– добавление данных в созданный файл данных; |
Zad1.prg |
–выдача сведений о количестве работников каждого из пяти цехов заданного разряда; |
Zad2.prg |
–подсчет и выдача на печать сведений о количестве работников каждой профессии по заданному разряду заданного цеха; |
Zad3.prg |
–выдача на печать упорядоченных по алфавиту списков работников каждой профессии. |
Кроме того, необходимо предоставить пользователю возможность облегчить процесс создания файла данных, т.е. предусмотреть создание файла данных со структурой заданной в программе, а не выбираемой самим пользователем, что полностью исключит возможные ошибки пользователя в задании имен полей файла данных, что, в свою очередь, может сказаться на корректной работе всей программы.
Конец |
L1=0 |
Exit |
L1=1 |
L1=2 |
Case |
L2=1 |
L2=2 |
L2=3 |
Zad1 |
Zad2 |
Zad3 |
Case |
L2=1 |
L2=2 |
L2=3 |
CreateFd |
ReadFd |
AddFd |
L1=3 |
Case |
L2=1 |
L2=2 |
Return |
Quit |
Запрет реакции команд Задание цвета экрана |
Формирование главного меню |
Выбор пункта главного меню |
Формирование подменю |
Выбор пункта подменю |
Case |
Do While .T. |
Начало |
Очистка экрана |
Do While .T. |
True |
Начало |
Len(NameFd) >0 |
Очистка экрана |
Формирование заголовка |
Изменение заголовка |
Вывод вопроса |
Ввод ответа (Д/Н) toABC |
ABC=’Д’ |
Ввод имени файла, NameFd |
Запрет вывода реакции команд Запрет изменения строки состояния Запрет прерывания выполнения программы |
Create Table &NameFd(<список полей>) |
Create &NameFd |
True |
False |
Wait |
Return |
False |
True |
Начало |
Len(NameFd) >0 |
Очистка экрана |
Формирование заголовка |
Изменение заголовка |
Чтение 15 записей из ФД |
Ввод имени ФД, NameFd |
Запрет вывода реакции команд Запрет изменения строки состояния Запрет прерывания выполнения программы |
Wait |
Return |
False |
Do While .Not.EOF() |
Wait |
True |
Начало |
Len(NameFd) >0 |
Очистка экрана |
Формирование заголовка |
Изменение заголовка |
Append |
Ввод имени ФД, NameFd |
Запрет вывода реакции команд Запрет изменения строки состояния Запрет прерывания выполнения программы |
Return |
False |
Wait |
Начало |
Очистка экрана |
Запрет вывода реакции команд |
Формирование заголовка |
Ввод имени файла данных, NameFd |
Ввод номера разряда, RazrNom |
Открытие файла данных |
Вывод шапки таблицы |
store 1 to Kk store 0 to Kol |
do while (Kk<=5) |
scan |
If RAZR=RazrNom |
store 0 to Kol store Kk+1 to Kk |
wait |
return |
3 |
3 |
2 |
2 |
If NOMCEX=Kk |
store kol+1 to kol |
1 |
Вывод строки таблицы |
1 |
kol+1 to kol |
Начало |
Очистка экрана |
Запрет вывода реакции команд |
Формирование заголовка |
Ввод имени файла данных, NameFd |
Ввод разряда работника, RazrNom |
Открытие файла данных |
Вывод шапки таблицы |
store 0 to Kol store 1 to N, Nm |
scan |
If ASCAN R,PROF)=0 |
Store Kol+1 to Kol |
store 0 to Kol store Nm+1 to Nm |
wait |
return |
1 |
Count to Col Dimension PR (col) |
Store PROF to PR (N) Store N+1 to N |
1 |
Dowhile Nm < N |
Scan for RAZR=RazrNom And NOMCEX = CexNom And PROF = PR (Nm) |
Вывод строки таблицы |
Начало |
Очистка экрана |
Запрет вывода реакции команд |
Формирование заголовка |
Ввод имени файла данных, NameFd |
Index on PROF+FAM to Name FD |
store 0 to Kol store 1 to N, Nm |
scan |
If ASCAN R,PROF)=0 |
Вывод строки таблицы |
store Nm+1 to Nm |
Удаление индексного файла |
return |
1 |
Count to Col Dimension PR (col) |
Store PROF to PR (N) Store N+1 to N |
1 |
Dowhile Nm < N |
Scan for PROF = PR (Nm) |
Открытие ФД с использованием индексного файла |
Вывод шапка таблицы |
wait |
* Командный файл иерархического меню 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
Do Zad1
Case L2=2
Do Zad2
Case L2=3
Do Zad3
EndCase
Case L1=3
Do Case
Case L2=1
Return
Case L2=2
Quit
EndCase
EndCase
EndDo
EndDo
* Командный файл CreateFd - создание нового файла данных
setTalkoff
setStatusoff
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 ;
(NomCex N(1,0), TabNom N(4,0), Fam C(20), Prof C(20), Razr N(1,0))
@ 8,0
set Talk on
Display Structure
set Talk off
Else
Create &NameFd
EndIf
EndIf
@ 24,0
Wait 'Для возврата в меню нажмите любую клавишу ...'
@ 24,0 Clear
Return
* Командный файл 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
* Командный файл 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
* командный файл печати сведений о работниках заданного разрядаZad1
clear
set talk off
@ 5,25 say ' Командный файл печати сведений о работниках заданного разряда Zad1'
accept 'Введите имя файла данных: ' to NameFd
use &NameFd
input 'Введите номер разряда: ' to RazrNom
clear
@ 5,10 say 'Сведения о работниках цеха, имеющих разряд '+STR(RazrNom,1)
@ 6,5 say '------------------------------------------------------'
@ 7,15 say 'Цех'
@ 7,40 say 'Количество'
@ 8,5 say '------------------------------------------------------'
store 1 to Kk
store 5 to Nn
store 0 to Kol
store 9 to Ss
do while (Kk<=Nn)
Scan
if Razr=RazrNom
if NomCex=Kk
store Kol+1 to Kol
endif
endif
EndScan
@ Ss,7 say Kk
@ Ss,35 say Kol
store 0 to Kol
store Kk+1 to Kk
store Ss+1 to Ss
enddo
@ Ss+1,5 say'------------------------------------------------------'
wait 'Для возврата в меню нажмите любую клавишу ...'
return
* командный файл печати сведений о работниках заданного разрядаZad2
clear
set talk off
@ 5,25 say ' Командный файл печати сведений о работниках заданного разряда Zad2'
accept 'Введите имя файла данных: ' to NameFd
Use &NameFd
input 'Введите номер разряда: ' to RazrNom
input 'Введите номер цеха: ' to CexNom
clear
@ 5,10 say 'Количество работников цеха № '+STR(CexNom,1)+', имеющих '+STR(RazrNom,1)+' разряд'
@ 6,5 say '------------------------------------------------------'
@ 7,15 say 'Профессия'
@ 7,40 say 'Количество'
@ 8,5 say '------------------------------------------------------'
store 9 to Row
store 0 to Kol
store 1 to N,Nm
count to col
dimension PR(col)
scan
if ASCAN(PR,PROF)=0
store PROF to PR(N)
store N+1 to N
endif
endscan
do while
Nm scan for RAZR=RazrNom and NOMCEX=CexNom and
PROF=PR(Nm) store Kol+1 to Kol endscan @ Row,10 say PR(Nm) @ Row,35 say Kol store 0 to Kol store Row+1 to Row store Nm+1 to Nm enddo @ Row+1,5 say
'------------------------------------------------------' wait 'Для возврата в меню нажмите любую клавишу ...' return * командный файл печати упорядоченного списка работников
каждой про-фессии Zad3 clear set talk off @ 5,5 say 'Командный файл печати упорядоченно списка
работников каждой профессии Zad3' accept 'Введите имя файла данных: ' to NameFd clear use
&NameFd index On
PROF+FAM to &NameFd use
&NameFd Index &NameFd store 1
to Row store 0
to Kol store 1
to N,Nm count to
col dimension
PR(col) scan if
ASCAN(PR,PROF)=0 store PROF to PR(N) store N+1 to N endif endscan do while
Nm @ Row,12 say 'Список работников професcии ' + PR(Nm) @ Row+1,5 say
'-----------------------------------------------------------' @ Row+2,7 say 'Номер цеха Таб.номер Фамилия Разряд' @
Row+3,5 say '-----------------------------------------------------------' scan for
PROF=PR(Nm) @ Row+4,11 say NOMCEX @ Row+4,25 say TABNOM @ Row+4,40 say FAM @ Row+4,58 say RAZR store Row+1 to Row endscan @ Row+4,5 say
'-----------------------------------------------------------' store Nm+1 to Nm store Row+6 to Row ifRow>=40 Row=1 wait 'Нажмите
любую клавишу для вывода ннформации о работниках следующих профессий' clear endif enddo Close DataBases Delete File NameFd + '.idx' wait 'Для возврата в меню нажмите любую клавишу ...' return Выбор создания файла данных
Номер цеха Табельный номер Фамилия Профессия Разряд 1 1001 Белов Механик 4 1 1002 Маслов Шумоизоляторщик 5 1 1003 Ситников Перегонщик 3 1 1004 Чернов Помощник механика 2 2 1005 Сорокин Автослесарь 4 2 1006 Хохлов Сигнализаторщик 5 2 1007 Сиротин Шиномонтажник 4 2 1008 Смирнов Слесарь 4 3 1009 Колосов Механик по тюнингу 5 3 1010 Бобров Механик 4 3 1011 Никулин Шумоизоляторщик 5 3 1012 Малышев Механик 4 4 1013 Брусков Помощник механика 2 4 1014 Воробьев Автослесарь 4 4 1015 Леонов Сигнализаторщик 5 4 1016 Сиднев Механик 4 5 1017 Ильин Автослесарь 3 5 1018 Фадеев Шиномонтажник 4 5 1019 Астахов Слесарь 4 5 1020 Рублев Механик по тюнингу 5
6.7.Печать упорядоченного
по алфавиту списка работников каждой профессии.
7.Результаты решений
Выбор чтения файла данных
Выбор добавления данных
в файл данных
Номер цеха |
Табельный номер |
Фамилия |
Профессия |
Разряд |
1 |
1021 |
Волков |
Шиномонтажник |
3 |
2 |
1022 |
Новиков |
Слесарь |
4 |
3 |
1023 |
Григорьев |
Механик |
5 |
4 |
1024 |
Журавлев |
Помощник механика |
2 |
5 |
1025 |
Дианов |
Автослесарь |
5 |
Выбор выполнения Задания №1
Выбор выполнения Задания №2
Выбор выполнения Задания №3
Выход из СУБД
Реляционные СУБД, такие как FoxProдействительно являются мощным средством управления большим объемом данных. СУБД этого типа позволяют производить быструю сортировку большого массива данных, осуществлять быстрый переход по записям в произвольном порядке, производить быструю выборку большого количества данных из всего массива данных по заданным критериям. В таких реляционных СУБД каждый файл данных рассматривается как двумерная таблица, столбцы которой соответствуют полям записей, а строки соответствуют отдельным записям файла и обращение к данным идет через указание номера записи имени поля. При этом работа с отдельным полем таблицы данных напоминает работу с переменными – обращение к данным максимально упрощено, и пользователю не нужно знать всю иерархическую структуру данных.
Язык команд СУБД семейства Foxсодержит широкий набор команд, выполняющих действия сложных конструкций, например, сортировка записей файла сводится только к двум командам. Помимо этого в СУБД предусмотрены команды создания светового меню для организации прямого диалога с пользователем. Все это максимально упрощают написание программ и подтверждает, что реляционные СУБД семейства Foxдействительно являются мощным инструментом для создания и обработки баз данных большого объема.
|
2.Компьютерный практикум. Программирование в среде Турбо-Паскаль и СУБД типа Fox. Методические указания к выполнению курсового проекта. /Сост.: О.Н.Леонова, И.А.Несмеянов; ГАУ, М.,1998.