Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Алгоритм задачи и его описание ⇐ ПредыдущаяСтр 4 из 4 Для ручного ввода данных в таблицы rabochie.dbf,narjad1.dbf и narjad2.dbf используем программы: 1 vvod_rabochih.prg 2 narjad_1_storona.prg 3 narjad_2_storona.prg После выполнения вышеперечисленных программ мы имеем 2 таблицы на основании которых можем рассчитать сдельную заработную плату. Для этого нужно найти: повременную зарплату и коэффициент распределения. Для нахождения первого выполняем программу rashot_povr_zp.prg и заносим получившийся результат в таблицу povr_zp.dbf. Чтобы найти коэффициент распределения выполним программу raschot_zp.prg, эта программа заполняет таблицу koef_raspr.prg. После выполнения этих 2х программ можно приступить к расчёту сдельной заработной платы. Для этого выполним программу sdek_zp.prg и иммено эта прграмма до конца заполнит таблицу povr_zp.dbf которая будет содержать результат, т.е. сдельную заработную плату. Затем выполняем программу печати ведомости и печатаем таблицу povr_zp.dbf в текстовый файл. Программы и их описание: Программы ввода: 1 vvod_rabochih.prg 2 narjad_1_storona.prg 3 narjad_2_storona.prg Эти 3 программы имеют одинаковую структуру по этому я опишу 1 из них. Vvod_rabochih Текст: CLOSE DATABASES SET BELL OFF SET TALK OFF USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\rabochie.dbf'(выбор таблицы куда будут вноситься данные) DIMENSION st(6) (определение массива) STORE SPACE(20) to st(1) STORE ' ' to st(2) STORE SPACE(15) TO st(3) (определение переменных) STORE ' ' TO st(5) STORE ' ' TO st(4),st(6) STORE ' ' TO z DO WHILE z<>'*' (цикл с предусловием в этом цикле организовывается вво и контроль вводимых переменных) @ 3,3 say ' фио ' get st(1) READ @ 4,3 say 'табельный номер ' get st(2) READ IF st(2)<'00' OR st(2)>'16' DISPLAY 'Введен не правельный табельный номер' DISPLAY 'введите номер от 1го до 15ти' @4,3 say 'табельный номер' get st(2) endif read @ 5,3 say 'должность ' get st(3) READ @ 6,3 say 'Разряд ' get st(4) function 'm 1,2,3,4,5'(эта функция позволяет выбрать нажатием клавишей пробел нужное значение из списка предложенных) @ 7,3 say 'часовая тарифная ставка' get st(5) READ @ 8,3 say 'номер бригады' get st(6) function 'M 1,2,3' READ (считывание введенной информации) APPEND BLANK (добавление пустой строки в конец таблицы) GATHER FROM st STORE SPACE(20) to st(1) STORE ' ' to st(2) STORE SPACE(15) TO st(3) STORE ' ' TO st(4) STORE ' ' TO st(4),st(6) @ 13,3 say 'Конец_ввода? * ' get z (контроль на конец ввода) READ IF z='*' EXIT ENDIF ENDDO BROWSE PACK (удаление помеченных записей) CLEAR CLOSE DATABASES Программы расчёта: Программа расчёта повременной з/п raschot_povr_zp.prg: CLOSE all clear SET BELL off DELETE FILE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\narjad2.idx' DELETE FILE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\rabochie.idx'(удаление индексных файлов)
SELECT a USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\narjad2.dbf' INDEX on tab_nomer TO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\narjad2.idx'
SELECT b USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\rabochie.dbf' INDEX on tab_nomer TO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\rabochie.idx' (индексирование таблицы) SET RELATION TO tab_nomer INTO a (создание связи по табельному номеру между двумя таблицами) SET SKIP TO a (разрешение перехода на новую строчку когда это необходимо в рабочей области а)
SELECT c USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\povr_zp.dbf'(определение рабочих областей) SELECT c zap SELECT a DO while.not.eof() (цикл заполнения таблицы) SELECT c APPEND BLANK replace c.tab_nomer WITH a.tab_nomer, c.nomer_nar WITH a.nomer_nar, c.nomer_brig WITH b.nomer_brig, c.chasov_otr WITH a.chasov_otr, c.chas_zarp WITH b.chas_zarp, c.povr_zp WITH b.chas_zarp*a.chasov_otr (команда replace переносит данные из одного поля в другое (из правого в левое по отношению к слову with) также позволяет выполнять операции над значениями полей) SELECT b SKIP ENDDO
Программа расчёта коэффициента распределения Raschot_zp.prg: CLOSE all CLEAR DELETE FILE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\povr_zp.idx'(удаление индексных файлов) DELETE FILE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\rabochie.idx' STORE 1 TO I STORE 0 TO zp (определение переменных) STORE SPACE(8) TO j
SELECT b (определение рабочих областей) USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\narjad1.dbf' INDEX on nomer_nar TO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\narjad1.idx' (индексирование файла)
SELECT c USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\koef_raspr.dbf' SET RELATION TO nomer_nar INTO b (установка связи между таблицами) SET SKIP TO b (разрешение перехода на новую строчку в области b)
SELECT a USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\povr_zp.dbf' INDEX on nomer_nar TO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\povr_zp.idx'
SELECT c zap
SELECT a DO while.not.eof() (цикл обработки таблицы) SELECT a IF i=VAL(a.nomer_nar) (контроль на смену номера наряда) zp=zp+a.povr_zp (сумматор зароботной платы) SELECT a
ELSE SELECT a STORE VAL(a.nomer_nar) TO i (смена номера наряда(для суммирования зп по др наряду)) SKIP -1 (переход на предыдущую строку таблицы для того чтобы скопировать данные в другую таблицу) SELECT c APPEND BLANK (создание пустой строки)
replace c.nomer_nar WITH a.nomer_nar, c.povr_cymma WITH zp (заполнение пустой строки) STORE 0 TO zp (обнуление сумматора) ENDIF SELECT a SKIP IF EOF() (Контроль на конец файла) SELECT a SKIP -1 SELECT c APPEND BLANK replace c.nomer_nar WITH a.nomer_nar, c.povr_cymma WITH zp (заполнение последней строки таблицы области с) exit endif ENDDO SELECT c GO top SELECT c DO WHILE.not.eof() (цикл расчота коэффициента распределения) replace c.cymma WITH b.cymma, c.koef_raspr WITH c.cymma/c.povr_cymma SKIP ENDDO clear
Программа расчёта сдельной заработной платы sdel_zp.prg: CLOSE ALL CLOSE all CLEAR DELETE FILE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\povr_zp.idx'
SELECT a USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\povr_zp.dbf' INDEX on nomer_nar TO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\povr_zp.idx'
SELECT c USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\koef_raspr.dbf' INDEX on nomer_nar TO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\koef_raspr.idx' SET RELATION TO nomer_nar INTO a SET SKIP TO a
SELECT a GO top DO while.not.eof() (цикл в котором 2 поля 2х разных таблиц перемножаетются и результат записывается в одну из них) SELECT a replace a.sdel_zp with a.povr_zp*c.koef_raspr SKIP ENDDO SELECT a BROWSE pack
Программа расчёта сдельной з/п и формирования ведомости podchoty.prg: CLOSE ALL CLEAR DO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\paschot_povrem_zp.prg' DO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\raschot_zp.prg' DO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\sdel_zp.prg' (эти 3 функции выполняют все программы которые были описаны выше)
SET ALTERNATE TO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\vedom.txt' SET ALTERNATE on (печать в текстовый файл) SELECT a USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\povr_zp.dbf' (выбор таблицы) ?'------------------------Ведомость по зарплате--------------------------', ?'|tab N |N nar |Nom brg |Chas otr |Chas zp| Povr zp | Sdel zp |' ?'-----------------------------------------------------------------------' (шапка таблицы) DO while.NOT.eof() (цыкл заполнения таблицы) ?'|',tab_nomer,'|',nomer_nar,' ','|',nomer_brig,' ','|',chasov_otr,' ','|',chas_zarp,' ','|',Povr_zp,' ','|',Sdel_zp,'|' ?'-----------------------------------------------------------------------' SKIP ENDDO ?'Всего',RECCOUNT() (вывод количества записей) CLOSE DATABASES SET ALTERNATE off (закрытие альтернативного файла) CLOSE ALL TYPE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\vedom.txt' CLOSE ALL
Программа меню menu.prg: CLEAR ALL SET BELL off SET TALK OFF SET SYSMENU to SET SYSMENU automatic (определение меню) DEFINE PAD s OF _msysmenu PROMPT "Ввод" COLOR SCHEME 3 DEFINE PAD d OF _msysmenu PROMPT "Просмотр" COLOR SCHEME 3 DEFINE PAD p OF _msysmenu PROMPT "Отчетность" COLOR SCHEME 3 DEFINE PAD h OF _msysmenu PROMPT "Сервис" COLOR SCHEME 3 DEFINE PAD j OF _msysmenu PROMPT "Справка" COLOR SCHEME 3 DEFINE PAD e OF _msysmenu PROMPT "Выход" COLOR SCHEME 3
on PAD s OF _msysmenu activate POPUP ввод on PAD d OF _msysmenu activate popup Просмотр on PAD p OF _msysmenu activate popup Отчетность on PAD h OF _msysmenu activate popup Сервис on PAD j OF _msysmenu activate popup Справка oN PAD e OF _msysmenu ACTIVATE POPUP Выход
DEFINE POPUP ввод MARGIN RELATIVE shadow COLOR SCHEME 3(создание подменю) DEFINE BAR 1 OF ввод PROMPT "ввод в таблицу рабочие" DEFINE BAR 2 OF ввод PROMPT "ввод в таблицу наряд лицевая сторона" DEFINE BAR 3 OF ввод PROMPT "ввод в таблицу наряд оборотная сторона"
ON SELECTION BAR 1 OF ввод do 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\vvod_rabochih.prg' (функции выполняемые при нажатии кнопок подменю) ON SELECTION BAR 2 Of ввод do 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\narjad_1_storona.prg' ON SELECTION BAR 3 Of ввод do 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\narjad_2_storona.prg'
DEFINE POPUP Просмотр MARGIN RELATIVE shadow COLOR SCHEME 3 DEFINE BAR 1 OF Просмотр PROMPT "Данные о рабочих" DEFINE BAR 2 OF Просмотр PROMPT "Наряд лицевая сторона" DEFINE BAR 3 OF Просмотр PROMPT "Наряд оборотная сторона"
ON SELECTION BAR 1 Of Просмотр do proc1 ON SELECTION BAR 2 Of Просмотр do proc2 ON SELECTION BAR 3 Of Просмотр do proc3
DEFINE POPUP отчетность MARGIN RELATIVE shadow COLOR SCHEME 3 DEFINE BAR 1 OF отчетность PROMPT "Ведомость по зарплате" DEFINE BAR 2 OF отчетность PROMPT "Формирование ведеомости"
ON SELECTION BAR 1 Of отчетность modify file 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\vedom.txt' noedit ON SELECTION BAR 2 Of отчетность do 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\podchoty.prg'
DEFINE POPUP сервис MARGIN RELATIVE shadow COLOR SCHEME 3 DEFINE BAR 1 OF сервис PROMPT "Резервное копирование" DEFINE BAR 2 OF сервис PROMPT "Востановление данных" DEFINE BAR 3 OF сервис PROMPT "Очистка таблиц"
ON SELECTION BAR 1 Of сервис do proc4 ON SELECTION BAR 2 Of сервис do proc6 ON SELECTION BAR 3 OF сервис do proc7
DEFINE POPUP справка MARGIN RELATIVE shadow COLOR SCHEME 3 DEFINE BAR 1 OF справка PROMPT "Вызов справки"
ON SELECTION BAR 1 Of справка modify file 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\spravka.txt' noedit (открытие файла справки)
DEFINE POPUP выход MARGIN RELATIVE shadow COLOR SCHEME 3 DEFINE BAR 1 OF выход PROMPT "выход в vfp9" DEFINE BAR 2 OF выход PROMPT "выход в Windows" ON SELECTION BAR 1 OF выход do proc5 ON SELECTION BAR 2 OF выход quit
PROCEDURE proc1 (процедура просмотра таблицы без редактирования) USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\rabochie.dbf' BROWSE noedit CLOSE DATABASES RETURN
PROCEDURE proc2 USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\narjad1.dbf' BROWSE noedit CLOSE DATABASES RETURN
PROCEDURE proc3 USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\narjad2.dbf' BROWSE noedit CLOSE DATABASES RETURN
PROCEDURE proc4 (резервное копирование программы будут описаны ниже) DO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\reserv_copy1.prg' DO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\reserv_copy2.prg' DO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\reserv_copy3.prg' CLOSE DATABASES return
PROCEDURE proc5 (выход в фокспро) DEACTIVATE MENU (деактивация меню) DEACTIVATE POPUP SET SYSMENU TO default (установка стандартного меню) RETURN
PROCEDURE proc6 (резервное восстановление) DO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\reserv_vost1.prg' DO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\reserv_vost2.prg' DO 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\reserv_vost3.prg' CLOSE DATABASES RETURN
PROCEDURE proc7 (очистка таблиц с исходными данными) USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\rabochie.dbf' ZAP USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\narjad1.dbf' ZAP USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\narjad2.dbf' ZAP CLOSE DATABASES RETURN
Программы резервного восстановления: Reserve_vost1.prg, Reserve_vost2.prg, Reserve_vost2.prg однообразны по этому я опишу 1 из них: CLOSE ALL DELETE FILE 'Z:\programm\Microsoft_Visual_FoxPro 9\reserv\rabochie.idx'(удаление индексного файла)
SELECT a USE 'Z:\programm\Microsoft_Visual_FoxPro 9\reserv\rabochie.dbf' INDEX on tab_nomer TO 'Z:\programm\Microsoft_Visual_FoxPro 9\reserv\rabochie.idx'(определение рабой области и индексирование таблицы)
SELECT b USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\rabochie.dbf'
SELECT b (очистка таблицы которую восстанавливаем) ZAP
SELECT a
DO WHILE.not.eof() SELECT b APPEND BLANK (создаем пустую строчку в восстанавливаемой таблице) replace b.fio WITH a.fio, b.tab_nomer WITH a.tab_nomer, b.dolznost WITH a.dolznost, b.razr WITH a.razr, b.chas_zarp WITH a.chas_zarp, b.nomer_brig WITH a.nomer_brig (заполнение таблицы) SELECT a SKIP ENDDO SELECT b browse
Программы резервного копирования: Reserve_copy1.prg, Reserve_copy2.prg, Reserve_copy3.prg также как и программы восстановления однотипны по это опишу 1 из них: CLOSE all DELETE FILE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\rabochie.idx'(удаление индексного файла) SELECT a USE 'Z:\programm\Microsoft_Visual_FoxPro 9\bd_prakt\rabochie.dbf' INDEX on tab_nomer TO rabochie.idx (определение рабочей области и индексирование таблицы) SELECT a COPY STRUCTURE TO 'Z:\programm\Microsoft_Visual_FoxPro 9\reserv\rabochie.dbf'(копирование структуры таблицы в рабочей области а по указанному пути) SELECT b USE 'Z:\programm\Microsoft_Visual_FoxPro 9\reserv\rabochie.dbf'(определение 2й рабочей области) SELECT b zap
SELECT a GO top DO while.not.eof() (цикл копирования данных из области а в область b) SELECT b APPEND BLANK replace b.fio WITH a.fio, b.tab_nomer WITH a.tab_nomer, b.razr WITH a.razr, b.chas_zarp WITH a.chas_zarp, b.nomer_brig WITH a.nomer_brig
SELECT a skip
ENDDO SELECT b BROWSE noedit
Результатом работы программ является ведомость:
Выводы
|