- •Інститут менеджменту та економіки
- •Методичні вказівки до виконання курсового проекту
- •1. Загальні вимоги
- •2. Завдання на курсове проектування
- •3. Приклад виконання розділів курсового проекту
- •3.1. Область застосування, постановка задачі
- •3.2. Структура таблиць бази даних та зв’язків
- •3.3. Структурна схема програмного комплексу, опис основних функцій
- •3.4. Текст програми з поясненнями щодо призначення основних блоків (модулів)
- •3.5. Опис функціонування програмного комплексу
- •3.6. Висновки
3.3. Структурна схема програмного комплексу, опис основних функцій
Вхідні дані, на основі яких функціонує програмний комплекс, знаходяться в таблицях бази даних, файли: plat_kol.dbf, plat_dor.dbf, dov_org.dbf, ruh_oz.dbf.
Рис.3.1 – Структура програмного комплексу “Платежі”
При реалізація програмного коду використано наступні функції:
Очистка екранної області (clear);
Закрити усі робочі вікна (close аО);
Встановлення часу (set clock off),
Встановлення типу дати (set date british, set century on);
Дня формування робочого вікна з назвою “Платіжне доручення” створюється горизонтальне меню, рис.3.2 за допомогою наступних команд:
DEFINE PAD dor OF _msysmenu PROMPT "Доручення"
DEFINE PAD bas OF _msysmenu PROMPT "Довідники"
DEFINE PAD servis OF _msysmenu PROMPT "Сервіс"
DEFINE PAD kinec OF _msysmenu PROMPT "Вихід"
Рис.3.2 – Створення горизонтальне меню
Оголошення пунктів меню "Довідники" відбувається за допомогою наступних команд формування
- вертикального меню:
ON PAD bas OF _msysmenu ACTIVATE POPUP dovidn
- горизонтальне меню:
DEFINE BAR 1 OF dovidn PROMPT "Організації" SKIP
FOR kod_menu
DEFINE BAR 2 OF dovidn PROMPT "Реквізити" SKIP
FOR kod_menu
DEFINE BAR 3 OF dovidn PROMPT "Банки" SKIP
FOR kod_menu
DEFINE BAR 3 OF dovidn PROMPT "Цифри" SKIP
FOR kod_menu
Реакція на вибір окремого рядка меню здійснюється наступним чином:
ON SELECTION BAR 1 OF dovidn DO org
ON SELECTION BAR 2 OF dovidn DO rekv
ON SELECTION BAR 3 OF dovidn DO bank
Аналогічно відбувається означення інших пунктів меню, а також їх опис та реакція на вибір окремого рядка.
Останнім кроком є опис процедури, яка забезпечує вихід з меню (PRXEDUHE nierify висновок).
3.4. Текст програми з поясненнями щодо призначення основних блоків (модулів)
*---------------------------------- ORDER.PRG ----------------------------
CLOSE ALL
CLEAR WIND
kod_menu=.t.
PUBLIC mis(12)
mis(1) = 'сiчня'
mis(2) = 'лютого'
mis(3) = 'беpезня'
mis(4) = 'квiтня'
mis(5) = 'тpавня'
mis(6) = 'чеpвня'
mis(7) = 'липня'
mis(8) = 'сеpпня'
mis(9) = 'веpесня'
mis(10)= 'жовтня'
mis(11)= 'листопада'
mis(12)= 'гpудня'
m.anystrng = space(0)
fname = "plat.plat"
DEFINE POPUP org FROM 6,36 PROMPT FIELD dovorg.name_org;
MESSAGE 'Виберіть організацію';
SCROLL MARGIN SHADOW
ON SELECTION POPUP org DEACTIVATE POPUP
ON KEY LABEL F1 DO hlp_pl
ON KEY LABEL CTRL+L DO locstrng WITH fname && пошук
ON KEY LABEL CTRL+D DO cont && продовжити пошук
ON KEY LABEL F3 DO scat_fld
ON KEY LABEL F4 DO gat_fld
ON KEY LABEL F5 DO rekv_org
ON KEY LABEL F8 DO pck
ON KEY LABEL F9 DO view_pl
ON KEY LABEL F10 DO prnt_pl
ON KEY LABEL CTRL+N DO ctrln
SELECT 0
USE &BPR\gryvna
SELECT 0
USE &BPR\dovorg
INDEX ON name_org TO &BPR\name_org
SELECT 0
USE &BPR\rekviz
SELECT 0
USE &BPR\plat
GO BOTTOM
DEFINE WINDOW vikno FROM 10,0 TO 38,100;
TITLE "Платіжні доручення F1-допомога ^W-вихід";
FLOAT ZOOM CLOSE GROW SYSTEM
MOVE WINDOW vikno CENTER
BROWSE WINDOW vikno;
FIELDS nom :h='Hомеp',;
date :h='Дата',;
plat :h='Одеpжувач':r:35,;
zkpo :h='ЗКПО':r,;
credit :h='Кpедит':r,;
bank :h='Банк':r:35,;
mfo :h='МФО':r,;
sum :h='Сума деб.':p='@KJ999999999.99' :v=sumvalid(),;
sum1 :h='Сума пpоп.':35,;
doc :h='Документ';
RELEASE mis
CLOSE ALL
ERASE &BPR\name_org.idx
CLEAR WIND
ON KEY
kod_menu = .f.
KEYBOARD('{F10}')
*------------------------------------ mov ---------------------------------------
FUNCTION mov
SHOW WINDOW 'Платіжні' REFRESH SAME
PROC scat_fld
PUBLIC zm_pole,tip_pole
tip_pole=TYPE(VARREAD())
zm_pole=EVALUATE(VARREAD())
PROC gat_fld
IF tip_pole=TYPE(VARREAD())
REPLACE (VARREAD()) WITH zm_pole
=mov()
ELSE
WAIT "Помилка! Різні поля!!! " WINDOW NOWAIT
ENDIF
PROC hlp_pl
PUSH KEY CLEAR
DO hlp_pl.spr
POP KEY
PROC ctrln
APPEND BLANK
REPLACE plat.date WITH date()
PROC view_pl
PUSH KEY CLEAR
IF empty(sum) OR empty(nom) OR empty(date) OR;
empty(plat) OR empty(zkpo) OR empty(credit)OR;
empty(bank) OR empty(mfo) OR empty(doc)
WAIT 'He введено реквізити' WINDOW
POP KEY
RETURN
ENDIF
IF FILE('ORDER.FRX') AND FILE('ORDER.FRT')
REPORT FORMAT order NEXT 1 PREVIEW
ELSE
WAIT 'Файл "Order.frx" не знайдено' WINDOW
ENDIF
POP KEY
PROC prnt_pl
PUSH KEY CLEAR
IF empty(sum) OR empty(nom) OR empty(date) OR;
empty(plat) OR empty(zkpo) OR empty(credit)OR;
empty(bank) OR empty(mfo) OR empty(doc)
WAIT 'He введено реквізити' WINDOW
POP KEY
RETURN
ENDIF
IF PRINTSTATUS()
IF FILE('ORDER.FRX') AND FILE('ORDER.FRT')
REPORT FORMAT order NEXT 1 NOEJECT ;
ENVIRONMENT PDSETUP NOCONSOLE TO PRINTER
ELSE
WAIT 'Файл "Order.frx" не знайдено' WINDOW
ENDIF
ELSE
WAIT"Пpiнтеp не готовий !" WINDOW NOWAIT
ENDIF
POP KEY
PROC pck
PUSH KEY CLEAR
yn=2
zap="Видалити записи?"
DO yesno.spr
IF yn=1
PACK
ENDIF
POP KEY
PROC rekv_org
PUSH KEY CLEAR
ACTIVATE POPUP org
IF LASTKEY()#27
REPLACE plat.plat WITH ALLTRIM(dovorg.name_org)
REPLACE plat.zkpo WITH dovorg.zkpo
REPLACE plat.credit WITH ALLTRIM(STR(dovorg.nrs,15))
REPLACE plat.bank WITH ALLTRIM(dovorg.bank)
REPLACE plat.mfo WITH ALLTRIM(STR(dovorg.mfo,6))
ENDIF
=mov()
POP KEY
PROC sumvalid
IF EMPTY(plat.sum)
REPLACE sum1 WITH ''
RETURN
ENDIF
IF (plat.sum<0)
REPLACE sum WITH 0
REPLACE sum1 WITH ''
WAIT 'Не коректне число!' WINDOW;
TIMEOUT 3
RETURN
ENDIF
summ=INT(plat.sum)
IF summ#0
ost=MOD(plat.sum,summ)*100
ELSE
ost=plat.sum*100
ENDIF
*----------------------- формування числа прописом --------------------
IF ll#0
GO ll IN gryvna
DO CASE
CASE INLIST(i,9,6,3)
q=q+ALLTRIM(gryvna.r3)
CASE INLIST(i,8,5,2) AND (ll#1 OR (ll=1 AND gryvna(i-1)=0))
q=q+ALLTRIM(gryvna.r2)
CASE INLIST(i,8,5,2) AND ll=1 AND gryvna(i-1)#0
GO gryvna(i-1) IN gryvna
q=q+ALLTRIM(gryvna.r0)
i=i-1
CASE INLIST(i,7,1)
q=q+ALLTRIM(gryvna.r1)
CASE i=4 AND ll#1 AND ll#2
q=q+ALLTRIM(gryvna.r1)
CASE i=4 AND ll=1
q=q+'Одна'
CASE i=4 AND ll=2
q=q+'Дві'
ENDCASE
ENDIF
IF RIGHT(q,1)#' '
q=q+' '
ENDIF
*---------------------формування одиниць обчислення в сумі----------
DO CASE
CASE i=7 && мільйони
DO CASE
CASE gryvna(7)=1 AND (lx>7 AND gryvna(8)#1 OR lx=7)
q=q+'мільйон'
CASE BETWEE(gryvna(7),2,4) AND (lx>7 AND gryvna(8)#1 OR lx=7)
q=q+'мільйона'
OTHERWISE
q=q+'мільйонів'
ENDCASE
CASE i=4 && тисячі
DO CASE
CASE gryvna(4)+IIF (lx>4, gryvna(5),0)+ IIF(lx>5, gryvna(6),0)=0
CASE gryvna(4)=1 AND (lx>4 AND gryvna(5)#1 OR lx=4)
q=q+'тисяча'
CASE BETWEE(gryvna(4),2,4) AND (lx>4 AND gryvna(5)#1 OR lx=4)
q=q+'тисячі'
OTHERWISE
q=q+' '+'тисяч'
ENDCASE
CASE i=1 && гривні
DO CASE
CASE gryvna(1)=1 AND (lx>1 AND gryvna(2)#1 OR lx=1)
q=q+'грн.'
CASE BETWEEN(gryvna(1),2,4)
q=q+'грн.'
OTHERWISE
q=q+'грн.'
ENDCASE
ENDCASE
IF RIGHT(q,1)#' '
q=q+' '
ENDIF
ENDFOR
lit=SUBSTR(q,1,1)
q=STUFF(q,1,1,PROPER(lit))
ost=ALLTRIM(STR(ost,2))
osti=len(ost)
IF osti=1
ost='0'+ost
ENDIF
q=q+ost+ ' коп.'
REPLACE plat.sum1 WITH q
=mov()
