Программное обеспечение пункта обмена валюты банка
связаны со скелетом человека, обусловлены длительными статическими
нагрузками, вызванными плохой организацией рабочего места пользователя:
неудобной или неподходящей по размерам мебелью, неудобным взаимным
расположением компонентов системы персонального компьютера или отсутствием
достаточного для свободных движений и смены позы места. Неудачная
организация клавиатуры, либо неудобная конструкция мыши способны вызвать
“накапливание” заболеваний сухожилий, мышц и нервных окончаний. Кроме того,
возникновение болезней спины, шеи и рук специалисты объясняют тем, что при
работе с клавиатурой компьютера пользователи с высокой скоростью повторяют
одни и те же движения (типа быстрых нажатий клавиш, перемещения мыши,
наклонов и поворотов головы и т.п.). Каждое нажатие на клавишу,
естественно, сопряжено с множественным сокращением мышц, перемещением
сухожилий вдоль костей и соприкосновениями их с внутренними тканями. В
итоге из-за чрезмерной напряженности работы или увлеченности ею могут
развиваться болезненные и воспалительные процессы.
Кожные заболевания (лица) связаны в основном с тем, что
наэлектризованный экран дисплея притягивает частицы взвешенной в воздухе
пыли, так что вблизи него “качество” воздуха ухудшается и оператор вынужден
работать в более запыленной атмосфере.
На основе сказанного можно сформулировать определенные рекомендации для
пользователей персональных компьютеров с точки зрения охраны их труда. В
принципе, основной подход к решению проблем такого рода сводится к
установлению строгого контроля за соответствием аппаратных и программных
средств, а также условий их эксплуатации эргономическим требованиям.
Приведем некоторые из них:
. соблюдение ограничений по медицинским показаниям;
. внимательное отношение к характеристикам дисплеев;
. правильная организация рабочего места оператора;
. правильная организация рабочего времени оператора.
Рассматривая подробно каждую из них, можно привести рекомендации
частного характера:
. необходимо соблюдать ограничения на работу с персональными
компьютерами для служащих, страдающих заболеваниями опорно-
двигательного аппарата, глаз, кожи, а также для беременных женщин;
. предпочтительнее использовать дисплеи с высокой разрешающей
способностью и размером экрана не менее 14” (Hi-Resolution, Non-
Interlaced, Low-Radiation);
. лучше выбирать видеоадаптеры с высоким разрешением и частотой
кадровой развертки не менее 70-72Гц;
. обязательно ставить на дисплеи экранные фильтры с антистатическим
покрытием, в несколько раз снижающие утомляемость глаз и
концентрацию пылевых частиц в близи экрана монитора;
. сидеть не ближе 70 см от дисплея;
. экран дисплея должен быть ориентирован таким образом, чтобы
исключить блики от источников света;
. не следует располагать дисплей непосредственно под источником
освещения или вплотную с ним;
. желательно, чтобы освещенность рабочего места оператора не
превышала 2/3 нормальной освещенности помещения;
. стена позади дисплея должна быть освещена примерно так же, как его
экран;
. при размещении в одной комнате нескольких персональных компьютеров
расстояние от рабочего места каждого оператора до задних и боковых
стенок соседних персональных компьютеров должно составлять не менее
1.2м;
. рабочее место должно быть оборудовано так, чтобы исключить
неудобные позы и длительные статические напряжения тела;
. общее время работы с дисплеем не должно превышать 50% всего
рабочего времени оператора;
. не следует превышать темп работы порядка 10 тысяч нажатий клавиш в
час (примерно 1500 слов);
. при обычной работе с компьютером необходимо делать 15-минутные
перерывы через каждые 2 часа, а при интенсивной работе ( через
каждый час.
Помимо безопасности пользователя, необходимо сказать несколько слов и о
безопасности компьютера и, что особенно важно, безопасности данных,
хранящихся в нем. ПК, используемые для хранения особо важной информации
необходимо оборудовать устройствами бесперебойного питания, поддерживающими
питающее напряжение в течение некоторого времени при аварийных ситуациях в
электрической сети.
Нельзя загораживать заднюю стенку системного блока или ставить
персональный компьютер вплотную к стене ( это приводит к “тяжелому” режиму
охлаждения системного блока и его перегреву. То же самое относится к
дисплею ( нельзя класть на него бумаги, книги и вообще все, что может
закрыть его вентиляционные отверстия. Пыль и электроника плохо совместимы
друг с другом, поэтому необходимо поддерживать в помещении приемлемый
пылевой режим.
Заключение
В процессе работы над дипломным проектом был создан комплекс программных
средств для обеспечения работы пункта обмена валюты банка. Кроме того была
разработана концепция проектирования информационно - справочных систем с
применением функций экранного интерфейса, разработанных в рамках дипломного
проекта. Применение специализированных функций позволило сократить время
разработки основного модуля программы и обеспечило высвобождение времени на
создание процедур обработки данных. В дипломном проекте представлен один
из множества подходов к проектированию программного обеспечения
информационного плана, дающий возможность на ранних этапах разработки
учесть все нюансы будущей программы, необходимый набор функций, состав и
структуру баз данных, что в дальнейшем исключает необходимость переработки
уже написанных компонентов программы.
Кроме того в процессе работы были подготовлены рекомендации по
оборудованию рабочего места оператора ЭВМ, соблюдению норм и правил ТБ при
работе на персональных ЭВМ, подсчитаны экономические характеристики
разработки.
Данное программное обеспечение находится в стадии внедрения в
технологический процесс работы одного из финансовых учреждений города.
Приложение
Интерфейсные функции
Функция вывода окна
Параметры:
координаты левого верхнего и правого нижнего угла окна,
[строка символов обрамления]
Function _OPEN_T
parameters Y1,X1,Y2,X2,SBOX
private XT1,XT2,XK2,SBOX
SBOX=iif(empty(SBOX).and.SBOX<>space(9),"(((((((( ",SBOX)
XT1=iif(X1+2>79,79,X1+2)
XT2=iif(X2+2>79,79,X2+2)
XK2=iif(X2+1>79,79,X2+1)
@ Y1,X1,Y2,X2 BOX SBOX
shadow(Y2+1,XT1,Y2+1,XT2,0)
shadow(Y1+1,XK2,Y2+1,XT2,0)
return 0
Функция вывода окна с эффектом раскрытия
Параметры:
координаты левого верхнего и правого нижнего угла окна,
[строка символов обрамления],[строка установки цвета]
Function _OPEN_N
parameters Y1,X1,Y2,X2,S1,COLOR
local CL,XT,YT,XC,YC
if pcount()=4
COLOR=setcolor()
S1=""
elseif pcount()=5
COLOR=setcolor()
endif
YC=Y1+int((Y2-Y1)/2)
XC=X1+int((X2-X1)/2)
CL=setcolor()
if Y2-Y1 >= 2
YC1=YC
YC2=YC
XT=XC
setcolor(COLOR)
do while .T.
_open_t(YC1,XT,YC2,2*XC-XT,S1)
YC1=iif(YC1-2Y2,Y2,YC2+2)
if XT=X1
exit
endif
XT=iif(XT-3Y1
YT=YC1
do while .T.
_open_t(YT,X1,2*YC-YT,X2,S1)
if YT=Y1
exit
endif
YT=iif(YT-20.or.STAT<>0
exit
endif
enddo
L_hidecurs()
restore screen
csetall(STATS)
setcolor(CLR)
return 0
elseif empty(M3).and..not.empty(M2)
declare MM1[2],MM2[2]
MM1[1]=M1
MM1[2]=M2
XX=X1+int((X2-X1-len(M1+M2)-1)/2)
MM2[1]=XX
MM2[2]=XX+len(M1)+1
do while .T.
MM=1
MM=selopt(MM,MM1,MM2,"",Y2-2,.F.,.F.,At_E_S,At_E_U,At_E_F)
if MM<>0
restore screen
csetall(STATS)
setcolor(CLR)
return MM
endif
enddo
elseif .not.empty(M1).and..not.empty(M2).and..not.empty(M3)
declare MM1[3],MM2[3]
MM1[1]=M1
MM1[2]=M2
MM1[3]=M3
XX=X1+int((X2-X1-len(M1+M2+M3)-2)/2)
MM2[1]=XX
MM2[2]=XX+len(M1)+1
MM2[3]=XX+len(M1+M2)+2
do while .T.
MM=1
MM=selopt(MM,MM1,MM2,"",Y2-2,.F.,.F.,At_E_S,At_E_U,At_E_F)
if MM<>0
restore screen
csetall(STATS)
setcolor(CLR)
return MM
endif
enddo
endif
csetall(STATS)
setcolor(CLR)
return 0
Функция вывода линейного индикатора процесса
Function _LIN
parameters YCOR,XCOR,LENG,LMAX,LUSE
private YCOR,XCOR,LENG,LMAX,LUSE,STATS,RW,CL
STATS=csetall()
RW=row()
CL=col()
LMAX=iif(LMAX0
setcolor(COLORN)
@ iif(ORIENT,MC[IN],COLROW),iif(ORIENT,COLROW+POS-1,MC[IN]+POS-1);
SAY substr(MO[IN],POS+1,1)
setcolor(CL)
endif
if SHD
setcolor (CSD)
@ iif(ORIENT,MC[IN]+1,COLROW+1),iif(ORIENT,COLROW+1,MC[IN]+1);
SAY repl("-",len(strtran(MO[IN],"~","")))
@ iif(ORIENT,MC[IN],COLROW),iif(ORIENT,COLROW+;
len(strtran(MO[IN],"~","")),MC[IN]+;
len(strtran(MO[IN],"~",""))) SAY "-"
setcolor(CL)
endif
NEXT
COLMO=L_getxposn()/8
ROWMO=L_getyposn()/8
setcolor(CLRS)
L_hidecurs()
@ iif(ORIENT,MC[NOPT],COLROW),iif(ORIENT,COLROW,MC[NOPT]);
SAY strtran(MO[NOPT],"~","")
if (POS:=at("~",MO[NOPT]))>0
CL= setcolor(COLORS)
@ iif(ORIENT,MC[NOPT],COLROW),iif(ORIENT,COLROW+POS-1,MC[NOPT]+POS-1)
;
SAY substr(MO[NOPT],POS+1,1)
setcolor(CL)
endif
if SAYHELP
setcolor(At_M0_N)
@ 24,(80-len(ME[INDN]))/2 SAY ME[INDN]
endif
L_showcurs()
KEYPRESSED=.F.
do while .T.
COLMN=L_getxposn()/8
ROWMN=L_getyposn()/8
STAT=L_getmstat()
KL=inkey()
if KL>0
KEYPRESSED=.T.
else
KEYPRESSED=.F.
endif
if KL=13
L_hidecurs()
return INDN
endif
if STAT=2.or.KL=27
if KL<>27
for TT=1 to COUN
if iif(ORIENT,COLMN>=COLROW.and.COLMN0,;
ROWMN=COLROW.and.COLMN>=MC[TT].and.COLMN=COLROW.AND.COLMNROWMO).or.KEYPRESSED,(ROWMN=COLROW.AND.;
COLMN<>COLMO).or.KEYPRESSED)
T1=.F.
if ORIENT.and.KL=0
TEST=ascan(MC,ROWMN)
if TEST<>0
T1=.T.
endif
elseif .not.ORIENT.and.KL=0
TEST=INDO
for TT=1 to COUN
if
COLMN>=MC[TT].and.COLMN0
T1=.T.
endif
if T1
do case
case KL=5.or.KL=19
INDN=iif(INDN=1,COUN,INDN-1)
case KL=24.or.KL=4
INDN=iif(INDN=COUN,1,INDN+1)
case KL>=32.and.KL0
INDN=II
keyboard chr(13)
exit
endif
next
otherwise
INDN=TEST
endcase
setcolor(CLRN)
L_hidecurs()
@ iif(ORIENT,MC[INDO],COLROW),iif(ORIENT,COLROW,MC[INDO]);
SAY strtran(MO[INDO],"~","")
if (POS:=at("~",MO[INDO]))>0
CL=setcolor(COLORN)
@ iif(ORIENT,MC[INDO],COLROW),iif(ORIENT,COLROW+POS-
1,MC[INDO]+;
POS-1) SAY substr(MO[INDO],POS+1,1)
setcolor(CL)
endif
if SAYHELP
setcolor(At_M0_N)
@ 24,(80-len(ME[INDN]))/2 SAY ME[INDN]
endif
setcolor(CLRS)
@ iif(ORIENT,MC[INDN],COLROW),iif(ORIENT,COLROW,MC[INDN]);
SAY strtran(MO[INDN],"~","")
if (POS:=at("~",MO[INDN]))>0
setcolor(COLORS)
@ iif(ORIENT,MC[INDN],COLROW),iif(ORIENT,COLROW+POS-
1,MC[INDN]+POS-1)
SAY substr(MO[INDN],POS+1,1)
endif
L_showcurs()
INDO=INDN
ROWMO=ROWMN
COLMO=COLMN
if STAT=0
loop
endif
endif
elseif COLMN>=COLROW
do case
case STAT=1
for TT=1 to COUN
if iif(ORIENT,COLMN>=COLROW.and.COLMN0,;
ROWMN=COLROW.and.COLMN>=MC[TT].and.COLMN=COLROW.and.COLMN0,;
ROWMN=COLROW.and.COLMN>=MC[TT].and.COLMN0
CUR_STYLE=iif(FINSERT,2,1)
setcursor(CUR_STYLE)
endif
clear type
return 0
Функция перевода строки в верхний регистр
Function UpperR(String)
local
SRC:={"а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р
","с","т","у","ф","х","ц","ч","ш","щ","ь","ы","ъ","э","ю","я"," "},;
DST:={"А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р
","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ь","Ы","Ъ","Э","Ю","Я"," "},;
STR:="",KEY:="",INDEXKEY,I
for I=1 to len(STRING)
KEY=substr(STRING,I,1)
if (INDEXKEY:=ascan(SRC,KEY))<>0
STR=STR+DST[INDEXKEY]
else
STR=STR+KEY
endif
next
return STR
Функция контроля выхода
Function DOORS
private CLR,ME
CLR=setcolor()
clear type
ME=1
ME=_err(07,02,"Вы желаете завершить работу ?","","",;
" ~Y~es "," ~N~o ","")
if ME=1.or.ME=-1
close databases
set color to
clear
set printer to
setcursor(1)
showtime()
keyboard chr(0)
L_showcurs()
return .T.
else
setcolor(CLR)
return .F.
endif
return .T.
Функция перевода числовой величины в строку «Сумма прописью»
Function NUMSTRING
parameters NUM1,CODE_CUR
local MR:={.T.,.T.,.F.,.T.},CL,;
MG:={{"" ,"" ,"" ,"" },;
{"миллиард" ,"миллион" ,"тысяча","" },;
{"миллиарда" ,"миллиона" ,"тысячи","" },;
{"миллиардов","миллионов","тысяч" ,"" }},;
SO:=0,DE:=0,ED:=0,TX,NUM,OBL
OBL=select()
if pcount()1.and.ED4.and.DE*10+ED0
STRING=STRING+UNITS[SOT+28]+" "
endif
if DES>1
STRING=STRING+UNITS[DES+19]+" "
elseif DES=1
STRING=STRING+UNITS[DES*10+EDN+1]+" "
SCAN_ED=.F.
endif
if SCAN_ED
STRING=STRING+UNITS[EDN+1]
endif
return STRING
Функция получения псевдонима валюты
Function GetShort_Name(CODE)
local OBL,MR,ST:=" "
OBL=select()
select CUR
MR=recno()
seek CODE
if found()
ST=SHORT_NAME
endif
goto MR
select(OBL)
return ST
Основные функции и процедуры
Головной модуль программы
Function MAIN
#Include "Box.ch"
setcursor(0)
if .not.file("V.mem").or..not.file("C.mem")
set curs on
return 0 // Аварийный выход при отсутствии файлов глобальных
переменных
else
// Объявление глобальных переменных и считывание их из файла
public AT_M0_F,AT_M0_N,AT_M0_S,AT_M0_U,AT_M1_F,AT_M1_N,AT_M1_S
public AT_M1_U,AT_M2_F,AT_M2_N,AT_M2_S,AT_M2_U,AT_E_F,AT_E_N,AT_E_S
public AT_E_U,AT_G_F,AT_G_N,AT_G_S,AT_G_U,AT_S_F,AT_S_N,AT_S_S,AT_S_U
public AT_N_I,AT_N_S
CLFON="N"
clear
restore from c.mem addi
endif
// Глобальные установки
setcursor(0)
set date german
set century on
set wrap on
set dele off
set bell off
set confirm on
set scoreboard off
set message to 24 center
restore from v.mem addi
public PAROL,DATROAD,USERDSK,PAGELEN,ETLF,UKZGL,UKTXT,ARCROAD
public ZEROPRINT,FPREOBR,PAGESIZ,DUBLDSK,KEYCR,C_H
public FM,FINSERT,CUR_STYLE,M__EN,MDATE,SETNUM
restore from D addi
store 0 to CROW,CCOL
KEYCR="#4_Ж;V*"
PAROL = uncrpt(KEYCR,P__AROL)
DATROAD = D__ATROAD
ARCROAD = A__RCROAD
DUBLDSK = D__UBLDSK
USERDSK = U__SERDSK
PAGELEN = P__AGELEN
PAGESIZ = P__AGESIZ
ETLF = E__TLF
UKZGL = U__KZGL
UKTXT = U__KTXT
SETNUM = S__ETNUM
FPREOBR = .F.
release P__AROL,D__ATROAD,U__SERDSK,S__ETNUM,;
P__AGELEN,P__AGESIZ,E__TLF,U__KZGL,U__KTXT,D__UBLDSK,A__RCROAD
MEN=1
MEN1=1
FINSERT=.F.
CUR_STYLE=1
set key 22 to fins()
Страницы: 1, 2, 3, 4, 5, 6
|