- 论坛徽章:
- 0
|
笔者的c语言基础还好,最近又狠补了一下bsh,觉得将c的良好界面、模块化设计思想同sh的强大处理能力及不需编译即可执行的特点相结合,那将是一件很有趣的事情。用命令:
file bin/qtyj bin/yjfunc bin/yjprog即可看到“c program text”。该程序设计前还有几个难点:
1。终端立即响应方式(即每键入一个字符,程序都能响应并处理)。
2。二维或多维数组在sh中实现的方式、操作的办法。
3。特殊显示方式(如反显)。
4。字符串的定位、定长输入和显示。
5。开辟指定区域的滚动区、记录的增、删、改、定位技术。
6。系统的控制字符的处理。
经过一段时间的摸索,上述问题都已妥善解决。接下来的便是考虑程序的模块化、易读性、易维护性。最后附上源码:
/***主程序:qtyj***/
trap '' 0 1 2 3 5
DL=_
. $HOME/bin/yjfunc
. $HOME/bin/yjprog
fxbar()
{
if [ $3 -eq 0 ]
then
if [ $4 -eq 1 ]
then
v_color 1
eval v_xy $"itemx$1" $"itemy$1"
eval echo $"itemcont$1"
v_color 0
else
eval v_xy $"itemx$1" $"itemy$1"
eval echo $"itemcont$1"
fi
else
if [ $4 -eq 1 ]
then
v_color 1
eval v_xy $"barx$1$DL$2" $"bary$1$DL$2"
eval echo $"barcont$1$DL$2"
v_color 0
else
eval v_xy $"barx$1$DL$2" $"bary$1$DL$2"
eval echo $"barcont$1$DL$2"
fi
v_cln 21
v_xy 21 2
eval echo $"barts$1$DL$2"
fi
}
dispbar()
{
eval tj=$"MAXBAR$i"
[ X$tj = X ]&&return
visual=1
j=1
while [ $j -le $tj ]
do
eval v_xy $"barx$i$DL$j" $"bary$i$DL$j"
eval echo $"barcont$i$DL$j"
j=`expr $j + 1`
done
eval j=$"dqj$i"
fxbar $i $j $visual 1
}
xtcsh()
{
clear
v_box 1 1 24 80
v_xy 2 35
echo "前台应急系统"
v_line 3 2 3 79
v_line 22 2 22 79
[ "$1" = "1" ]&&{
eval `grep -v "^#" $HOME/bin/yjmenu|awk 'BEGIN{FS="|"}
{
printf "itemcont%d=%s;itemx%d=%d;itemy%d=%d\n",$1,$2,$1,$3,$1,$4
}
END{printf "MAXITM=%d\n",NR}'`
eval `grep -v "^#" $HOME/bin/yjbar|awk 'BEGIN{FS="|";getline
i=$1;j=$2;maxln=$4;printf "dqj%d=1\n",$1
printf "barcont%d_%d=%s;barx%d_%d=%d;bary%d_%d=%d;barts%d_%d=%s;barprog%d_%d=\"%s\"\n",i,j,$3,i,j,$4,i,j,$5,i,j,$6,i,j,$7
}
{
if($1!=i)
printf "MAXBAR%d=%d;dqj%d=1\n",i,j,$1
if($4>maxln)
maxln=$4
i=$1;j=$2
printf "barcont%d_%d=%s;barx%d_%d=%d;bary%d_%d=%d;barts%d_%d=%s;barprog%d_%d=\"%s\"\n",i,j,$3,i,j,$4,i,j,$5,i,j,$6,i,j,$7
}
END{printf "MAXBAR%d=%d;MAXLN=%d\n",i,j,maxln}'`
}
x=1
while [ $x -le $MAXITM ]
do
eval v_xy $"itemx$x" $"itemy$x"
eval echo $"itemcont$x"
x=`expr $x + 1`
done
v_line 5 2 5 79
v_xy 23 10
echo "请用光标键、空格键和数字键选择,回车确认,h帮助,r清屏,Esc键退出\c"
}
#main()
hfxjc $0||exit
cd $HOME
xtcsh 1
i=1;j=0;visual=0
t_mode 1
fxbar $i $j $visual 1
while true
do
v_xy 23 73;i_chr ch
case $ch in
QT)[ $visual -eq 0 ]&&break;visual=0;v_cbk 6 $MAXLN;v_cln 21;;
SP)fxbar $i $j $visual 0
if [ $visual -eq 0 ]
then
if [ $i -ge $MAXITM ]
then
i=1
else
i=`expr $i + 1`
fi
fxbar $i $j $visual 1
else
j=`expr $j + 1`
eval [ $j -gt $"MAXBAR$i" ]&&j=1
eval dqj$i=$j
fxbar $i $j $visual 1
fi;;
DW)
if [ $visual -eq 0 ]
then
continue
else
fxbar $i $j $visual 0
j=`expr $j + 1`
eval [ $j -gt $"MAXBAR$i" ]&&j=1
eval dqj$i=$j
fxbar $i $j $visual 1
fi;;
UP)
if [ $visual -eq 0 ]
then
continue
else
fxbar $i $j $visual 0
j=`expr $j - 1`
[ $j -lt 1 ]&&eval j=$"MAXBAR$i"
eval dqj$i=$j
fxbar $i $j $visual 1
fi;;
LF)
if [ $visual -eq 0 ]
then
fxbar $i $j $visual 0
if [ $i -le 1 ]
then
i=$MAXITM
else
i=`expr $i - 1`
fi
fxbar $i $j $visual 1
else
v_cbk 6 $MAXLN
fxbar $i $j 0 0
if [ $i -le 1 ]
then
i=$MAXITM
else
i=`expr $i - 1`
fi
fxbar $i $j 0 1
dispbar
fi;;
RG)
if [ $visual -eq 0 ]
then
fxbar $i $j $visual 0
if [ $i -ge $MAXITM ]
then
i=1
else
i=`expr $i + 1`
fi
fxbar $i $j $visual 1
else
v_cbk 6 $MAXLN
fxbar $i $j 0 0
if [ $i -ge $MAXITM ]
then
i=1
else
i=`expr $i + 1`
fi
fxbar $i $j 0 1
dispbar
fi;;
[1-9])
if [ $visual -eq 0 ]
then
[ $ch -eq $i -o $ch -gt $MAXITM ]&&continue
fxbar $i $j $visual 0;i=$ch;fxbar $i $j $visual 1
else
eval [ $ch -eq $j -o $ch -gt $"MAXBAR$i" ]&&continue
fxbar $i $j $visual 0;j=$ch
eval dqj$i=$j;fxbar $i $j $visual 1
fi;;
ET)
if [ $visual -eq 1 ]
then
eval tmpprog=$"barprog$i$DL$j"
[ "$tmpprog" = "" ]&&continue
eval $tmpprog 2>/dev/null
case $tmpprog in
help*|plbk)dispbar;;
esac
else
dispbar
fi;;
h|H)help;[ $visual -eq 1 ]&&dispbar;;
r|R)t_mode 0;xtcsh;fxbar $i $j 0 1;[ $visual -eq 1 ]&&dispbar;t_mode 1;;
esac
done
t_mode 0
clear
/***公用子函数:yjfunc***/
TTY=`tty`
v_color()
{
case $1 in
1)echo "\033[7m\c";; #字符反显
0)echo "\033[m\c";; #正常显示
esac
}
v_graph()
{
case $1 in
1)echo "\033(0\c";; #图形模式
0)echo "\033(B\c";; #字符模式
esac
}
t_mode()
{
case $1 in
1)stty raw -echo;; #立即响应方式,必须和getc配合使用
0)stty sane;; #正常响应方式
esac
}
getc() #从终端得到一个字符
{
eval $1='`dd if=$TTY bs=1 count=1 2>/dev/null`'
}
v_xy() #定位光标
{
echo "\033[$1;$2H\c"
}
v_line() #画一直线,横线、竖线皆可
{
echo "$1 $2 $3 $4"|awk 'function v_xy(x,y)
{
printf "%c[%d;%dH",27,x,y
}
function v_graph(v)
{
if(v==1)printf "%c(0",27
else if(v==0)printf "%c(B",27
}
BEGIN{v_graph(1)}
$1==$3||$2==$4{x1=$1;y1=$2;x2=$3;y2=$4
if(x1==y1&&x1==x2&&x1==y2)exit(0)
if(x1==x2&&y1<y2)
{
v_xy(x1,y1)
for(i=y1;i<=y2;i++)printf "q"
}
else
{
for(i=x1;i<=x2;i++)
{
v_xy(i,y1)
printf "x"
}
}
}
END{v_graph(0)}'
}
v_box() #画一方框
{
echo "$1 $2 $3 $4"|awk 'function v_xy(x,y)
{
printf "%c[%d;%dH",27,x,y
}
function v_graph(v)
{
if(v==1)printf "%c(0",27
else if(v==0)printf "%c(B",27
}
BEGIN{v_graph(1)}
$1<$3&&$2<$4{x1=$1;y1=$2;x2=$3;y2=$4
v_xy(x1,y1);printf "l";i=y1+1
while(i<y2)
{printf "q";i++}
printf "k";i=x1+1
while(i<x2)
{v_xy(i,y1);printf "x";v_xy(i,y2);printf "x";i++}
v_xy(x2,y1);printf "m";i=y1+1
while(i<y2)
{printf "q";i++}
printf "j"
}
END{v_graph(0)}'
}
v_cbk() #清除line1到line2之间的屏幕区域
{
echo "$1 $2"|awk 'function v_xy(x,y)
{
printf "%c[%d;%dH",27,x,y
}
$1<=$2{x1=$1;x2=$2
while(x1<=x2)
{
v_xy(x1,2);printf "%78s"," ";x1++
}
}'
}
v_cln() #清除指定的行
{
v_xy $1 2
echo " \c"
}
i_chr() #从终端得到一个字符,若是控制字符则将其转换
{
getc ch
case $ch in
^H)eval $1=BS;; #回退符,在vi中键入Ctrl+v再键入回退键
\ )eval $1=SP;; #空格
^M)eval $1=ET;; #回车键,在vi中键入Ctrl+v再键入回车键
^[)stty min 0 time 2;getc ch;stty min 1 time 1 #Esc键,加入方法同上
if [ "$ch" = "[" ]
then
getc ch
case $ch in
A)eval $1=UP;; #上光标键
B)eval $1=DW;; #下光标键
C)eval $1=RG;; #右光标键
D)eval $1=LF;; #左光标键
*)eval $1=NL;; #空操作
esac
else
[ "$ch" = "^[" -o "$ch" = "" ]&&{
eval $1=QT;return #最后判定为Esc键
};getc ch;eval $1=NL
fi;;
esac
}
i_str() #定位、定长输入和显示字符,须和v_cfl配合使用,用法:
# i_str 横坐标 纵坐标 变量名 长度 返回值
{
k=0;val=;first=1
v_color 1
v_xy $1 $2
while true
do
i_chr ch
case $ch in
QT)ret=q;break;;
BS)[ $k -eq 0 ]&&continue;echo "\b \b\c";k=`expr $k - 1`
case "$val" in
?)val=;;
*)val=`expr substr "$val" 1 $k`;;
esac;;
ET)ret=0;break;;
UP|LF)ret=-1;break;;
DW|RG)ret=1;break;;
SP|NL)continue;;
*)[ $k -eq $4 ]&&continue
[ $first -eq 1 ]&&{
eval [ X$"$3" = X ]||v_cfl $xm;first=0
[ "$ch" = "." -a $xm -eq 4 ]&&{
echo "$JG\c";val="$val$JG"
k=`expr $k + 11`;continue
}
}
echo "$ch\c";val="$val$ch";k=`expr $k + 1`;;
esac
done
v_color 0
[ "$val" != "" -o $first -eq 0 ]&&{
eval $3="$val"
v_xy $1 $2;v_cfl $xm;echo "$val\c"
}
eval $5=$ret
}
test_int() #测试字符串是否为整数,“return 0”表示是整数
{
ret=`echo $1|awk '$1~/^[0-9]+$/{print 1}'`
[ "$ret" != "1" ]&&return 1
return 0
}
readyn()
{
v_xy 20 35
echo "确认吗(y/n)?\c"
i_chr ch
v_cln 20
[ "$ch" = "y" -o "$ch" = "Y" ]&&return 0
return 1
}
/***处理子程序:yjprog***/
hfxjc()
{
[ "$1" = "qtyj" ]||return 1
for ch in `echo $PATH|sed 's/:/ /g'`
do
[ -x $ch/$1 -a "$ch/$1" = "$HOME/bin/$1" ]&&return 0
done
return 1
}
cxbf()
{
dbaccess workdb <<! 1>/dev/null 2>&1
unload to putxtcs.bf select * from putxtcs;
unload to putdyj.bf select * from putdyj;
unload to putdw.bf select * from putdw;
unload to putdj.bf select * from putdj;
unload to satkdj.bf select * from satkdj;
unload to wbtxtcs.bf select * from wbtxtcs;
!
}
cxhf()
{
dbaccess workdb <<! 1>/dev/null 2>&1
delete from putxtcs;
delete from putdyj;
delete from putlsz;
delete from putdw;
delete from putdj;
delete from sathc;
delete from satkdj;
delete from wbtxtcs;
load from putxtcs.bf insert into putxtcs;
load from putdyj.bf insert into putdyj;
load from putdw.bf insert into putdw;
load from putdj.bf insert into putdj;
load from satkdj.bf insert into satkdj;
load from wbtxtcs.bf insert into wbtxtcs;
!
}
sjbf()
{
other=" "
[ -d $HOME/ylbx ]&&other=" ylbx/jgbmb ylbx/dwdzb ylbx/djdzb*"
[ -d $HOME/qydg ]&&other="$other qydg/dwdzb qydg/djdzb*"
if [ $1 -eq 1 ]
then
readyn||return
v_xy 20 35
echo "正在处理...\c"
cxbf
tar cf YJBF putxtcs.bf putdyj.bf putdw.bf putdj.bf satkdj.bf wbtxtcs.bf $other 1>/dev/null 2>&1
echo "成功!\007\c"
else
v_xy 20 22
echo "请插入软盘(DOS格式),'q'退出,其它键继续...\c"
i_chr ch
[ "$ch" = "q" -o "$ch" = "Q" ]&&{
v_cln 20;return
}
v_cln 20
v_xy 20 35
echo "正在处理...\c"
cxbf
tar cf YJBF putxtcs.bf putdyj.bf putdw.bf putdj.bf satkdj.bf wbtxtcs.bf $other 1>/dev/null 2>&1
doscp YJBF a: 2>/dev/null ||{
echo "失败!请查明原因并排除故障后再做!\007\c"
i_chr ch
v_cln 20
return
}
echo "成功!\007\c"
fi
i_chr ch;v_cln 20
}
sjhf()
{
if [ $1 -eq 2 ]
then
readyn||return
[ -s YJBF ]||{
v_xy 20 33
echo "备份数据不存在!\007\c"
i_chr ch
v_cln 20
return
}
v_xy 20 35
echo "正在处理...\c"
tar xf YJBF 1>/dev/null 2>&1
cxhf
echo "成功!\007\c"
else
v_xy 20 22
echo "请插入软盘(DOS格式),'q'退出,其它键继续...\c"
i_chr ch
[ "$ch" = "q" -o "$ch" = "Q" ]&&{
v_cln 20;return
}
v_cln 20
v_xy 20 35
echo "正在处理...\c"
doscp a:YJBF /tmp/YJBF 2>/dev/null ||{
echo "失败!请查明原因并排除故障后再做!\007\c"
i_chr ch
v_cln 20
return
}
tar xf /tmp/YJBF 1>/dev/null 2>&1
cxhf
echo "成功!\007\c"
fi
i_chr ch;v_cln 20
}
jlcf()
{
readyn||return
v_xy 20 35
echo "正在处理...\c"
dbaccess workdb <<! 1>/dev/null 2>&1
update putxtcs set lsh=lsh+2000;
!
echo "成功!\007\c"
i_chr ch
v_cln 20
v_xy 20 15
echo "若记帐过程中再次出现\"记录重复\"的错误,请重新做这一步!\007\c"
i_chr ch;v_cln 20
}
bbzld()
{
readyn||return
[ -s $HOME/print/sadpzzld?????? -a -s $HOME/print/sadzhyybb?????? ]||{
v_xy 20 20
echo "需要的文件不存在或为空!请重新做\"申请下传\"!\007\c"
i_chr ch
v_cln 20
return
}
[ -s $HOME/print/sadtctd?????? ]&&{
file $HOME/print/sadtctd?????? |grep "compress" >/dev/null &&{
v_xy 20 18
echo "通兑文件格式不正确(未解压),请联系技术员解决!\007\c"
i_chr ch
v_cln 20
return
}
}
v_xy 20 35
echo "正在处理...\c"
cd $HOME/print
ls *sad*[0-9][0-9][0-9][0-9][0-9][0-9]|while read fn
do
case $fn in
*tctd*)continue;;
sad1pzzld*|sad1zhyybb*)rm $fn 2>/dev/null;;
*)rm $fn.??? 2>/dev/null;;
esac
file $fn|grep "compress" >/dev/null&&{
mv $fn $fn.Z
uncompress $fn.Z 2>/dev/null
}
done
tmp1=`ls sadpzzld??????`
tmp2=`expr $tmp1 : '...\(.*\)'`
cp $tmp1 sad1$tmp2 2>/dev/null
tmp1=`ls sadzhyybb??????`
tmp2=`expr $tmp1 : '...\(.*\)'`
cp $tmp1 sad1$tmp2 2>/dev/null
cd $HOME
echo "成功!\007\c"
i_chr ch
v_cln 20
v_xy 20 21
echo "请直接打印所需帐簿,不必做\"申请下传\"!\007\c"
i_chr ch;v_cln 20
}
grhk()
{
readyn||return
v_xy 20 35
echo "正在处理...\c"
dbaccess workdb <<! 1>/dev/null 2>&1
select * from putlsz;
!
[ $? -eq 0 ]||{
echo "流水帐表遭破坏!请联系技术员解决!\007\c"
i_chr ch
v_cln 20
return
}
tmp1=`date +%y%m%d`
if [ -f putlsz.$tmp1 -a -f sathc.$tmp1 ]
then
dbaccess workdb <<! 1>/dev/null 2>&1
delete from putlsz;
delete from sathc;
!
else
dbaccess workdb <<! 1>/dev/null 2>&1
unload to putlsz.$tmp1 select * from putlsz;
unload to sathc.$tmp1 select * from sathc;
delete from putlsz;
delete from sathc;
!
fi
echo "成功!\007\c"
i_chr ch;v_cln 20
}
xlzl()
{
readyn||return
v_xy 20 35
echo "正在处理...\c"
[ "$HOST" = "" ]&&HOST=`tail -1 /etc/hosts|awk '{print $2}'`
ping -c 20 $HOST >cxyj.ping 2>&1
tmp1=`grep "% packet" cxyj.ping`
tmp2=`expr "$tmp1" : '.*,\(.*\)%.*'`
tmp2=`expr 100 - $tmp2`
echo "线路质量 {tmp2}%\007\c"
i_chr ch;v_cln 20
}
help()
{
[ $visual -eq 1 ]&&v_cln 21
t_mode 0
if [ X$1 = X ]
then
[ -s $HOME/bin/cxyj_help ]||{
v_xy 20 30
echo "帮助文件不存在或为空!\007\c"
read ch;v_cln 20
t_mode 1;return
}
tmp1="$HOME/bin/cxyj_help"
else
case $1 in

[ -s $HOME/bin/qydfgz_help ]||{
v_xy 22 30
echo "帮助文件不存在或为空!\007\c"
i_chr ch;return
}
tmp1="$HOME/bin/qydfgz_help";;
#9)
#v_xy 20 28
#echo "请输入代工单位编号:\c"
#read ch
#[ X$ch != X -a -s $HOME/print/savdgdk*$ch.err ]||{
#v_xy 20 28
#echo "出错提示文件不存在或为空!\007\c"
#read ch;v_cln 20
#t_mode 1;return
#}
#tmp1="$HOME/print/savdgdk*$ch.err";;
#10)
#[ -s $HOME/print/savplbk* ]||{
#v_xy 20 28
#echo "出错提示文件不存在或为空!\007\c"
#read ch;v_cln 20
#t_mode 1;return
#}
#tmp1="$HOME/print/savplbk*";;
11)
tmp1="qtyj.tmp";;
f)
v_xy 20 36
echo "请稍侯...\c"
tmp1=`basename $TTY`
dosdir a: 1>/tmp/fdxx.$tmp1 2>&1
tmp1="/tmp/fdxx.$tmp1";;
esac
fi
echo $TTY $tmp1|awk 'function v_xy(x,y)
{
printf "%c[%d;%dH",27,x,y
}
function v_color(v)
{
if(v==1)printf "%c[7m",27
else if(v==0)printf "%c[m",27
}
function v_cbk(x)
{
printf "%c[%d;%dH",27,x,2
printf "%78s"," "
}
BEGIN{getline;tty=$1;help=$2;v_cbk(6);v_cbk(7)}
END{i=0;v_xy(20,2 ;printf "%s"," 回车键继续,'q'退出 ";v_color(1);v_xy(7,3 ;printf "%s","帮 助"
while((getline str < help)>0)
{
v_cbk((8+i));v_xy((8+i),2);printf "%s",str
i++
if(i==12)
{
i=0;v_xy(20,50);getline yn < tty
if(yn=="q"||yn=="Q" break
}
}
while(i>0&&i<12)
{
v_cbk((8+i));i++
}
if(i!=0&&yn!="q"&&yn!="Q"
{
v_xy(20,50);getline yn < tty
}
v_color(0);for(i=7;i<21;i++)v_cbk(i)
}'
t_mode 1
}
plbk()
{
t_mode 0
while true
do
v_xy 20 20
echo "请输入单位编号(1-4位数,q退出): \b\b\b\b\b\b\c"
read dwbh
[ "$dwbh" = "q" -o "$dwbh" = "Q" ]&&{
t_mode 1
v_cln 20
return
}
case $dwbh in
[0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9])break;;
esac
done
dwbh=`expr $dwbh + 0`
t_mode 1
v_cln 20
v_xy 20 35
echo "正在处理...\c"
dbaccess workdb <<! 1>/dev/null 2>&1
unload to qtyj.dwbh select * from putdw where dwbh=$dwbh;
!
[ -s qtyj.dwbh ]||{
echo "该单位不存在!\007\c"
i_chr ch
v_cln 20
return
}
dbaccess workdb <<! 1>/dev/null 2>&1
unload to putdj.$dwbh select * from putdj where dwbh=$dwbh;
!
rm ${dwbh}?? 2>/dev/null
split -200 putdj.$dwbh $dwbh
set `ls ${dwbh}??`
[ $# -eq 1 ]&&{
echo "ok!请在线路空闲时申办卡!\007\c"
i_chr ch
v_cln 20
return
}
case $dwbh in
?|??|???)dwh=$dwbh"0";;
*)dwh=$dwbh;;
esac
while true
do
tmp1=`expr $dwh + 1`
tmp2=`expr $dwh + $#`
dbaccess workdb <<! 1>/dev/null 2>&1
unload to putdj.$dwbh select count(*) from putdw where dwbh >= $tmp1 and dwbh <= $tmp2;
!
tmp1=`cut -d\| -f1 putdj.$dwbh`
[ $tmp1 -gt 0 ]&&{
case $dwh in
????)
echo "分割单位出错!请联系技术员解决!\007\c"
i_chr ch
v_cln 20
return;;
*)dwh=$dwh"0";continue;;
esac
}
break
done
tmp1=1;>putdj.$dwbh
while [ $tmp1 -le $# ]
do
tmp2=`expr $dwh + $tmp1`
sed "s/^$dwbh|/$tmp2|/" qtyj.dwbh >>putdj.$dwbh
tmp1=`expr $tmp1 + 1`
done
dbaccess workdb <<! 1>/dev/null 2>&1
load from putdj.$dwbh insert into putdw;
!
>putdj.$dwbh
echo "该单位(编号为 {dwbh})已被分割成${#}个单位,编号如下:" >qtyj.tmp
for tmp1
do
dwh=`expr $dwh + 1`
echo "$dwh" >>qtyj.tmp
sed "s/^$dwbh|/$dwh|/" $1 >>putdj.$dwbh
shift
done
dbaccess workdb <<! 1>/dev/null 2>&1
load from putdj.$dwbh insert into putdj;
!
echo "请在批量办卡中针对上述单位分别做编辑和申请!" >>qtyj.tmp
help 11
}
v_cfl()
{
case $1 in
1)echo " \b\b\b\b\c";;
2)echo " \b\b\b\b\b\b\b\b\b\b\c";;
3)echo " \b\b\b\b\b\b\b\b\c";;
4)echo " \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\c";;
esac
}
v_xln()
{
v_graph 1
v_xy $1 1;echo "x\c"
v_xy $1 80;echo "x\c"
v_graph 0
}
cshjg()
{
[ -d $HOME/qydg ]||mkdir $HOME/qydg
cd $HOME/qydg
if [ ! -s jgbmb ]
then
xm=3;v_xy 20 10
echo "请输入本网点的城市编码和网点编码(6位数):\c"
while true
do
i_str 20 50 wdbm 6 flag
case $wdbm in
[0-9][0-9][0-9][0-9][0-9][0-9])break;;
*)continue;;
esac
done
echo $wdbm>jgbmb
JG="$wdbm"01092
v_cln 20
else
JG=`cat jgbmb`;JG="$JG"01092
fi
}
xgdj()
{
dbaccess workdb <<! 1>/dev/null 2>&1
delete from putdj where dwbh=$1;
load from $2 insert into putdj;
!
}
link_data()
{
v_xy 20 33
echo "请稍候...\c"
ti=0;flist="|"
for str in `cat dwdzb`
do
ti=`expr $ti + 1`
x=`expr $str : '\(.*\)|.*|.*|'`
flist="$flist $x"
eval var1$ti=$x
eval var2$ti=`expr $str : '.*|\(.*\)|.*|'`
eval var3$ti=`expr $str : '.*|.*|\(.*\)|'`
done
flist="$flist |"
MAXREC=$ti
}
disp_current()
{
eval x0=$"varbz$2"
eval x1=$"var1$2"
eval x2=$"var2$2"
eval x3=$"var3$2"
v_xy $1 22;echo " \b$x0\c"
case $3 in
1)
v_color 1
v_xy $1 24;echo " \b\b\b\b$x1\c"
v_xy $1 40;echo " \b\b\b\b\b\b\b\b\b\b$x2\c"
v_xy $1 54
case $x3 in
0)echo " \b\b\b\b空格\c";;
1)echo " \b\b\b\b逗号\c";;
2)echo " \b\b\b\b竖线\c";;
esac
v_color 0;;
0)
v_xy $1 24;echo " \b\b\b\b$x1\c"
v_xy $1 40;echo " \b\b\b\b\b\b\b\b\b\b$x2\c"
v_xy $1 54
case $x3 in
0)echo " \b\b\b\b空格\c";;
1)echo " \b\b\b\b逗号\c";;
2)echo " \b\b\b\b竖线\c";;
esac;;
esac
}
disp_data()
{
v_xy 9 20
echo "储蓄单位编号<==>磁盘文件名<======>字段分隔符"
ti=10;tj=1
while [ $tj -le $MAXREC -a $ti -lt 20 ]
do
disp_current $ti $tj 0
ti=`expr $ti + 1`;tj=`expr $tj + 1`
done
v_xy 21 2
echo "光标键和空格键移动,n后翻,p前翻,i定位,a增加,u修改,d删除,Esc键退出\c"
v_xy 8 25
echo "当前记录号: 共 条记录\c"
}
disp_infrec()
{
v_xy 8 36;echo " \b\b\b\b$tj\c"
v_xy 8 44;echo " \b\b\b\b$MAXREC\c"
}
test_duplist()
{
for x in `echo $flist`
do
[ X$x = X$1 ]&&return 0
done
return 1
}
dwdzgl()
{
[ -d $HOME/qydg ]||mkdir $HOME/qydg
cd $HOME/qydg
[ -s dwdzb ]||>dwdzb
grep "^#" dwdzb>/dev/null&&{
v_xy 20 22
echo "有单位正在编辑中!请稍候再做!\007\c"
i_chr ch;v_cln 20;cd $HOME;return
}
v_cbk 6 $MAXLN
x0=;x1=;x2=
link_data
disp_data
v_cln 20
echo "\033[10;19r\c"
[ $MAXREC -gt 0 ]&&disp_current 10 1 1
ti=10;tj=1;xgbz=0
while true
do
disp_infrec;v_xy $ti 20
i_chr ch
case $ch in
QT)v_xy 20 32;echo "确认退出吗(y/n)?\c"
i_chr ch;v_xy 20 32;echo " \c"
[ "$ch" = "y" -o "$ch" = "Y" ]&&break;;
UP)[ $tj -eq 1 ]&&continue;disp_current $ti $tj 0;tj=`expr $tj - 1`
ti=`expr $ti - 1`;[ $ti -eq 9 ]&&{
ti=10;echo "\033[1L\c";v_xln 10
};disp_current $ti $tj 1;;
DW|SP)[ $tj -ge $MAXREC ]&&continue;disp_current $ti $tj 0;tj=`expr $tj + 1`
ti=`expr $ti + 1`;[ $ti -eq 20 ]&&{
ti=19;echo "\033E\c";v_xln 19
};disp_current $ti $tj 1;;
n|N)m=`expr 19 - $ti`;tj=`expr $tj + 1`
[ $tj -gt $MAXREC ]&&{
tj=`expr $tj - 1`;continue
}
while [ $tj -le $MAXREC -a $m -gt 0 ]
do
tj=`expr $tj + 1`;m=`expr $m - 1`
done
tj=`expr $tj - 1`;ti=10;m=$tj
while [ $tj -le $MAXREC -a $ti -lt 20 ]
do
disp_current $ti $tj 0
tj=`expr $tj + 1`;ti=`expr $ti + 1`
done
while [ $ti -lt 20 ]
do
v_xy $ti 20;echo " \c"
ti=`expr $ti + 1`
done
tj=$m;ti=10;disp_current $ti $tj 1;;
p|P)m=`expr $ti - 1`;tj=`expr $tj - 1`
[ $tj -le 0 ]&&{
tj=`expr $tj + 1`;continue
}
while [ $tj -gt 0 -a $m -gt 0 ]
do
tj=`expr $tj - 1`;m=`expr $m - 1`
done
tj=`expr $tj + 1`;ti=10;m=$tj
while [ $tj -le $MAXREC -a $ti -lt 20 ]
do
disp_current $ti $tj 0
tj=`expr $tj + 1`;ti=`expr $ti + 1`
done
while [ $ti -lt 20 ]
do
v_xy $ti 20;echo " \c"
ti=`expr $ti + 1`
done
tj=$m;ti=10;disp_current $ti $tj 1;;
i|I)v_xy 20 36;echo "记录号:\c";x=;xm=2
i_str 20 43 x 4 flag
v_xy 20 36;echo " \c"
[ "$flag" = "q" ]&&continue
test_int $x||continue
[ $x -lt 1 -o $x -gt $MAXREC ]&&continue
ti=10;tj=$x
while [ $ti -lt 20 -a $tj -le $MAXREC ]
do
disp_current $ti $tj 0
ti=`expr $ti + 1`;tj=`expr $tj + 1`
done
while [ $ti -lt 20 ]
do
v_xy $ti 20;echo " \c"
ti=`expr $ti + 1`
done
ti=10;tj=$x;disp_current $ti $tj 1;;
u|U)[ "$x0" = "d" ]&&continue;disp_current $ti $tj 0
cxdwbh=;fdfn=;deli=0;[ "$x1" = "" ]||{
cxdwbh=$x1;fdfn=$x2;deli=$x3
};xm=1
while true
do
if [ $xm -eq 1 ]
then
i_str $ti 24 cxdwbh 4 flag
[ "$flag" = "q" ]&&break
test_int $cxdwbh||continue
xm=2
fi
if [ $xm -eq 2 ]
then
i_str $ti 40 fdfn 10 flag
[ "$flag" = "q" ]&&break
[ "$fdfn" = "" ]&&continue
fi
flag=
while true
do
v_xy $ti 58;i_chr ch
case $ch in
QT)flag=q;break;;
ET)break;;
SP)case $deli in
0)deli=1;v_xy $ti 54;echo "逗号\c";;
1)deli=2;v_xy $ti 54;echo "竖线\c";;
2)deli=0;v_xy $ti 54;echo "空格\c";;
esac;;
esac
done
break
done
[ "$flag" = "q" ]&&{
[ $MAXREC -eq 0 ]&&{
v_xy $ti 20;echo " \c"
}
[ $MAXREC -eq 0 ]||disp_current $ti $tj 1;continue
}
[ "$cxdwbh" != "$x1" ]&&{
test_duplist $cxdwbh&&{
v_xy 20 36;echo "记录重复!\007\c"
i_chr ch;v_xy 20 36;echo " \c"
disp_current $ti $tj 1;continue
}
}
eval varbz$tj=u;eval var1$tj=$cxdwbh;eval var2$tj=$fdfn;eval var3$tj=$deli
if [ $MAXREC -gt 0 ]
then
flist=`echo $flist|sed "s/ $x1 / $cxdwbh /"`
else
MAXREC=1
flist="| $cxdwbh |"
fi
xgbz=1;disp_current $ti $tj 1;;
d|D)[ $MAXREC -eq 0 ]&&continue
if [ "$x0" = "d" ]
then
test_duplist $x1&&{
v_xy 20 36;echo "记录重复!\007\c"
i_chr ch;v_xy 20 36;echo " \c"
disp_current $ti $tj 1;continue
}
eval varbz$tj=a;flist=`echo $flist|sed "s/|$/$x1 |/"`
else
eval varbz$tj=d
flist=`echo $flist|sed "s/ $x1 / /"`
fi;xgbz=1;disp_current $ti $tj 1;;
a|A)disp_current $ti $tj 0
if [ $tj -eq $MAXREC ]
then
ti=`expr $ti + 1`
[ $ti -eq 20 ]&&{
echo "\033E\c";ti=19;v_xln 19
}
else
if [ $tj -lt $MAXREC ]
then
ti=10
while [ $ti -lt 20 ]
do
v_xy $ti 20;echo " \c"
ti=`expr $ti + 1`
done
ti=10;tj=$MAXREC
disp_current $ti $tj 0;ti=11
fi
fi
cxdwbh=;fdfn=;deli=0;xm=1
while true
do
if [ $xm -eq 1 ]
then
i_str $ti 24 cxdwbh 4 flag
[ "$flag" = "q" ]&&break
test_int $cxdwbh||continue
xm=2
fi
if [ $xm -eq 2 ]
then
i_str $ti 40 fdfn 10 flag
[ "$flag" = "q" ]&&break
[ "$fdfn" = "" ]&&continue
fi
flag=;v_xy $ti 54;echo "空格\c"
while true
do
v_xy $ti 58;i_chr ch
case $ch in
QT)flag=q;break;;
ET)break;;
SP)case $deli in
0)deli=1;v_xy $ti 54;echo "逗号\c";;
1)deli=2;v_xy $ti 54;echo "竖线\c";;
2)deli=0;v_xy $ti 54;echo "空格\c";;
esac;;
esac
done
break
done
[ "$flag" = "q" ]&&{
v_xy $ti 20;echo " \c"
ti=`expr $ti - 1`;[ $ti -lt 10 ]&&ti=10
[ $MAXREC -gt 0 ]&&disp_current $ti $tj 1;continue
}
test_duplist $cxdwbh&&{
v_xy 20 36;echo "记录重复!\007\c"
i_chr ch;v_xy 20 36;echo " \c"
v_xy $ti 20;echo " \c"
ti=`expr $ti - 1`;disp_current $ti $tj 1;continue
}
[ $MAXREC -gt 0 ]&&tj=`expr $tj + 1`;MAXREC=$tj
eval varbz$tj=a;eval var1$tj=$cxdwbh;eval var2$tj=$fdfn;eval var3$tj=$deli
flist=`echo $flist|sed "s/|$/$cxdwbh |/"`
xgbz=1;disp_current $ti $tj 1;;
*);;
esac
done
echo "\033[;r\c"
v_cln 20
v_xy 20 33
echo "请稍候...\c"
tj=1;[ $xgbz -eq 1 ]&&>dwdzb
while [ $tj -le $MAXREC ]
do
[ $xgbz -eq 1 ]&&{
eval x0=$"varbz$tj";eval x1=$"var1$tj";eval x2=$"var2$tj";eval x3=$"var3$tj"
[ "$x0" != "d" ]&&echo "$x1|$x2|$x3|">>dwdzb
}
eval unset varbz$tj var1$tj var2$tj var3$tj
tj=`expr $tj + 1`
done
unset flist
v_cbk 8 20;cd $HOME;dispbar
}
link_data1()
{
v_xy 20 33
echo "请稍候...\c"
[ -s djdzb$cxdwbh ]||>djdzb$cxdwbh
eval `awk 'BEGIN{FS="|"}NR>0{printf("var1%d=%s;var2%d=%s\n",NR,$1,NR,$2)}END{printf("MAXREC=%d\n",NR)}' djdzb$cxdwbh`
cut -d\| -f1 djdzb$cxdwbh>flist$cxdwbh
}
disp_current1()
{
eval x0=$"varbz$2"
eval x1=$"var1$2"
eval x2=$"var2$2"
v_xy $1 22;echo " \b$x0\c"
case $3 in
1)
v_color 1
v_xy $1 24;echo " \b\b\b\b\b\b\b\b$x1\c"
v_xy $1 40
echo " \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b$x2\c"
v_color 0;;
0)
v_xy $1 24;echo " \b\b\b\b\b\b\b\b$x1\c"
v_xy $1 40
echo " \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b$x2\c";;
esac
}
disp_data1()
{
v_xy 9 20
echo "企业人员编号<======>储蓄帐号"
ti=10;tj=1
while [ $tj -le $MAXREC -a $ti -lt 20 ]
do
disp_current1 $ti $tj 0
ti=`expr $ti + 1`;tj=`expr $tj + 1`
done
v_xy 21 2
echo "光标键和空格键移动,n后翻,p前翻,i定位,a增加,u修改,d删除,Esc键退出\c"
v_xy 8 25
echo "当前记录号: 共 条记录\c"
}
test_dupdj()
{
grep "^$1$" flist$cxdwbh>/dev/null&&return 0
return 1
}
djdzgl()
{
cshjg
xm=1;cxdwbh=
v_xy 20 2;echo "储蓄单位编号(Esc键退出):\c"
while true
do
i_str 20 26 cxdwbh 4 flag
[ "$flag" = "q" ]&&{
v_cln 20;cd $HOME;return
}
test_int $cxdwbh&&break
done
grep "^$cxdwbh|" dwdzb>/dev/null||{
v_cln 20
if grep "^#$cxdwbh|" dwdzb>/dev/null
then
v_xy 20 22
echo "该单位正在编辑中并已加锁!请稍候再做!\007\c"
else
v_xy 20 10
echo "该储蓄单位编号不存在!请输入正确或先建立单位对照!\007\c"
fi
i_chr ch;v_cln 20;cd $HOME;return
}
sed "/^$cxdwbh|/s/^/#/" dwdzb>dwdzb$cxdwbh;mv dwdzb$cxdwbh dwdzb
x0=;x1=;x2=
v_cbk 6 $MAXLN
link_data1
disp_data1
v_cln 20
echo "\033[10;19r\c"
[ $MAXREC -gt 0 ]&&disp_current1 10 1 1
ti=10;tj=1;xgbz=0
while true
do
disp_infrec;v_xy $ti 20
i_chr ch
case $ch in
QT)v_xy 20 32;echo "确认退出吗(y/n)?\c"
i_chr ch;v_xy 20 32;echo " \c"
[ "$ch" = "y" -o "$ch" = "Y" ]&&break;;
UP)[ $tj -eq 1 ]&&continue;disp_current1 $ti $tj 0;tj=`expr $tj - 1`
ti=`expr $ti - 1`;[ $ti -eq 9 ]&&{
ti=10;echo "\033[1L\c";v_xln 10
};disp_current1 $ti $tj 1;;
DW|SP)[ $tj -ge $MAXREC ]&&continue;disp_current1 $ti $tj 0;tj=`expr $tj + 1`
ti=`expr $ti + 1`;[ $ti -eq 20 ]&&{
ti=19;echo "\033E\c";v_xln 19
};disp_current1 $ti $tj 1;;
n|N)m=`expr 19 - $ti`;tj=`expr $tj + 1`
[ $tj -gt $MAXREC ]&&{
tj=`expr $tj - 1`;continue
}
while [ $tj -le $MAXREC -a $m -gt 0 ]
do
tj=`expr $tj + 1`;m=`expr $m - 1`
done
tj=`expr $tj - 1`;ti=10;m=$tj
while [ $tj -le $MAXREC -a $ti -lt 20 ]
do
disp_current1 $ti $tj 0
tj=`expr $tj + 1`;ti=`expr $ti + 1`
done
while [ $ti -lt 20 ]
do
v_xy $ti 22
echo " \c"
ti=`expr $ti + 1`
done
tj=$m;ti=10;disp_current1 $ti $tj 1;;
p|P)m=`expr $ti - 1`;tj=`expr $tj - 1`
[ $tj -le 0 ]&&{
tj=`expr $tj + 1`;continue
}
while [ $tj -gt 0 -a $m -gt 0 ]
do
tj=`expr $tj - 1`;m=`expr $m - 1`
done
tj=`expr $tj + 1`;ti=10;m=$tj
while [ $tj -le $MAXREC -a $ti -lt 20 ]
do
disp_current1 $ti $tj 0
tj=`expr $tj + 1`;ti=`expr $ti + 1`
done
while [ $ti -lt 20 ]
do
v_xy $ti 22
echo " \c"
ti=`expr $ti + 1`
done
tj=$m;ti=10;disp_current1 $ti $tj 1;;
i|I)v_xy 20 36;echo "记录号:\c";x=;xm=2
i_str 20 43 x 4 flag
v_xy 20 36;echo " \c"
[ "$flag" = "q" ]&&continue
test_int $x||continue
[ $x -lt 1 -o $x -gt $MAXREC ]&&continue
ti=10;tj=$x
while [ $ti -lt 20 -a $tj -le $MAXREC ]
do
disp_current1 $ti $tj 0
ti=`expr $ti + 1`;tj=`expr $tj + 1`
done
while [ $ti -lt 20 ]
do
v_xy $ti 22
echo " \c"
ti=`expr $ti + 1`
done
ti=10;tj=$x;disp_current1 $ti $tj 1;;
u|U)[ "$x0" = "d" ]&&continue;disp_current1 $ti $tj 0
qyrybh=;cxzh=;[ "$x1" = "" ]||{
qyrybh=$x1;cxzh=$x2
};xm=3
while true
do
if [ $xm -eq 3 ]
then
i_str $ti 24 qyrybh 8 flag
[ "$flag" = "q" ]&&break
test_int $qyrybh||continue
xm=4
fi
if [ $xm -eq 4 ]
then
i_str $ti 40 cxzh 20 flag
[ "$flag" = "q" ]&&break
test_int $cxzh&&break
fi
done
[ "$flag" = "q" ]&&{
[ $MAXREC -eq 0 ]&&{
v_xy $ti 22;echo " \c"
}
[ $MAXREC -gt 0 ]&&disp_current1 $ti $tj 1;continue
}
[ "$qyrybh" != "$x1" ]&&{
test_dupdj $qyrybh&&{
v_xy 20 36;echo "记录重复!\007\c"
i_chr ch;v_xy 20 36;echo " \c"
disp_current1 $ti $tj 1;continue
}
}
eval varbz$tj=u;eval var1$tj=$qyrybh;eval var2$tj=$cxzh
if [ $MAXREC -gt 0 ]
then
sed "/^$x1$/s/.*/$qyrybh/" flist$cxdwbh>flist$cxdwbh.tmp
mv flist$cxdwbh.tmp flist$cxdwbh
else
MAXREC=1
echo "$qyrybh">>flist$cxdwbh
fi
xgbz=1;disp_current1 $ti $tj 1;;
d|D)[ $MAXREC -eq 0 ]&&continue
if [ "$x0" = "d" ]
then
test_dupdj $x1&&{
v_xy 20 36;echo "记录重复!\007\c"
i_chr ch;v_xy 20 36;echo " \c"
disp_current1 $ti $tj 1;continue
}
eval varbz$tj=a;echo "$x1">>flist$cxdwbh
else
eval varbz$tj=d
sed "/^$x1$/d" flist$cxdwbh>flist$cxdwbh.tmp
mv flist$cxdwbh.tmp flist$cxdwbh
fi;xgbz=1;disp_current1 $ti $tj 1;;
a|A)disp_current1 $ti $tj 0
if [ $tj -eq $MAXREC ]
then
ti=`expr $ti + 1`
[ $ti -eq 20 ]&&{
echo "\033E\c";ti=19;v_xln 19
}
else
if [ $tj -lt $MAXREC ]
then
ti=10
while [ $ti -lt 20 ]
do
v_xy $ti 22
echo " \c"
ti=`expr $ti + 1`
done
ti=10;tj=$MAXREC
disp_current1 $ti $tj 0;ti=11
fi
fi
qyrybh=;cxzh=;xm=3
while true
do
if [ $xm -eq 3 ]
then
i_str $ti 24 qyrybh 8 flag
[ "$flag" = "q" ]&&break
test_int $qyrybh||continue
xm=4
fi
if [ $xm -eq 4 ]
then
i_str $ti 40 cxzh 20 flag
[ "$flag" = "q" ]&&break
test_int $cxzh&&break
fi
done
[ "$flag" = "q" ]&&{
v_xy $ti 22;echo " \c"
ti=`expr $ti - 1`;[ $ti -lt 10 ]&&ti=10
[ $MAXREC -gt 0 ]&&disp_current1 $ti $tj 1;continue
}
test_dupdj $qyrybh&&{
v_xy 20 36;echo "记录重复!\007\c"
i_chr ch;v_xy 20 36;echo " \c"
v_xy $ti 22;echo " \c"
ti=`expr $ti - 1`;disp_current1 $ti $tj 1;continue
}
[ $MAXREC -gt 0 ]&&tj=`expr $tj + 1`;MAXREC=$tj
eval varbz$tj=a;eval var1$tj=$qyrybh;eval var2$tj=$cxzh
echo "$qyrybh">>flist$cxdwbh
xgbz=1;disp_current1 $ti $tj 1;;
*);;
esac
done
echo "\033[;r\c"
v_cln 20
v_xy 20 33
echo "请稍候...\c"
if [ $xgbz -eq 0 ]
then
eval `echo $MAXREC|awk '{count=$1}END{for(i=1;i<=count;i++)printf("unset varbz%d var1%d var2%d\n",i,i,i)}'`
else
>djdzb$cxdwbh
eval `echo $MAXREC djdzb$cxdwbh|awk '{count=$1;file=$2}END{for(i=1;i<=count;i++)printf("[ \"$varbz%d\" != \"d\" ]&&echo \"$var1%d|$var2%d|\">>%s;\nunset varbz%d var1%d var2%d;\n",i,i,i,file,i,i,i)}'`
fi
rm flist$cxdwbh 2>/dev/null
sed "/^#$cxdwbh|/s/^#//" dwdzb>dwdzb$cxdwbh;mv dwdzb$cxdwbh dwdzb
[ -s djdzb$cxdwbh ]&&{
v_cln 20
v_xy 20 28
echo "是否打印人员对照表(y/n)?\007\c"
i_chr ch
[ "$ch" = "y" -o "$ch" = "Y" ]&&{
v_cln 20
v_xy 20 34
echo "正在处理...\c"
rm ${cxdwbh}[a-z][a-z] 2>/dev/null
sort -n djdzb$cxdwbh|awk 'BEGIN{FS="|"}{printf("%16s%6s%s\n",$1," ",$2)}' >djdzb$cxdwbh.tmp
split -50 djdzb$cxdwbh.tmp $cxdwbh
echo "\033[5i">djdzb$cxdwbh.tmp
for x in `ls ${cxdwbh}[a-z][a-z]`
do
echo "\n 储蓄单位编号 cxdwbh">>djdzb$cxdwbh.tmp
echo " 企业人员编号<==>储蓄帐号">>djdzb$cxdwbh.tmp
cat $x>>djdzb$cxdwbh.tmp
echo "\014">>djdzb$cxdwbh.tmp
done
echo "\033[4i">>djdzb$cxdwbh.tmp
v_cln 20
v_xy 20 24
echo "请准备好打印机和纸,任意键继续...\c"
i_chr ch
t_mode 0
cat djdzb$cxdwbh.tmp
rm ${cxdwbh}[a-z][a-z] djdzb$cxdwbh.tmp 2>/dev/null
t_mode 1
}
}
v_cbk 8 20
cd $HOME;dispbar
}
cpdisk()
{
[ -d $HOME/qydg ]||mkdir $HOME/qydg
cd $HOME/qydg
xm=1;cxdwbh=
v_xy 20 2
echo "请插入软盘,输入储蓄单位编号(Esc键退出):\c"
while true
do
i_str 20 41 cxdwbh 4 flag
[ "$flag" = "q" ]&&break
test_int $cxdwbh||continue
str=`grep "^$cxdwbh|" dwdzb 2>/dev/null`||{
str=`grep "^#$cxdwbh|" dwdzb 2>/dev/null`||{
v_cln 20
v_xy 20 16
echo "该储蓄单位编号不存在!请输入正确或先建立单位对照!\007\c"
i_chr ch;v_cln 20;cd $HOME;return
}
}
break
done
[ "$flag" = "q" ]&&{
v_cln 20;cd $HOME;return
}
v_cln 20
v_xy 20 34
echo "正在处理...\c"
fdfn=`expr $str : '.*|\(.*\)|.*|'`
doscp a fdfn . 1>/dev/null 2>&1||{
echo "拷盘出错!请查明原因再做!\007\c"
i_chr ch;v_cln 20;cd $HOME;return
}
deli=`expr $str : '.*|.*|\(.*\)|'`
(echo $deli;sed 's/"//g' $fdfn)|awk 'BEGIN{num=0;getline
if($0==1)FS="[ \t]*[,][ \t]*"
else if($0==2)FS="[ \t]*[|][ \t]*"}
$1~/^[ ]*[0-9]+$/&&$2~/^[0-9]+$/&&$5~/^[0-9]+[.]?[0-9]+[ ]*$/{num++;printf "%s|%s|%s|%s|%s|\n",$1,$2,$3,$4,$5}
END{if(num==0)exit 1;exit 0}' >$fdfn.txt
if [ $? -eq 1 ]
then
rm $fdfn.txt 2>/dev/null;echo "文件格式错误!\007\c"
else
x=`awk 'BEGIN{FS="|";sum=0}{sum=sum+$5}END{printf "%d|%.2lf|",NR,sum}' $fdfn.txt`
x1=`expr $x : '\(.*\)|.*|'`
x2=`expr $x : '.*|\(.*\)|'`
v_xy 20 26;echo "成功!总人数 {x1}总金额 {x2}\007\c"
fi
i_chr ch;v_cln 20;cd $HOME
}
dwcl()
{
[ -d $HOME/qydg ]||mkdir $HOME/qydg
cd $HOME/qydg
xm=1;cxdwbh=
v_xy 20 6
echo "储蓄单位编号(Esc键退出):"
while true
do
i_str 20 30 cxdwbh 4 flag
[ "$flag" = "q" ]&&break
test_int $cxdwbh||continue
dglx=1
v_xy 20 40
echo "代工类型:"
v_color 1
v_xy 20 50
echo "代工"
while true
do
v_xy 20 54;i_chr ch
case $ch in
QT)v_color 0;v_cln 20;cd $HOME;return;;
ET)break;;
SP)case $dglx in
1)dglx=2;v_xy 20 50;echo "代扣";;
2)dglx=1;v_xy 20 50;echo "代工";;
esac;;
esac
done
v_color 0
v_cln 20
v_xy 20 34
echo "正在处理...\c"
str=`grep "^$cxdwbh|" dwdzb 2>/dev/null`||{
if grep "^#$cxdwbh|" dwdzb>/dev/null
then
v_xy 20 22
echo "该单位正在编辑中!请稍候再做!\007\c"
else
v_xy 20 16
echo "该储蓄单位编号不存在!请输入正确或先建立单位对照!\007\c"
fi
i_chr ch;v_cln 20;cd $HOME;return
}
fdfn=`expr $str : '.*|\(.*\)|.*|'`
[ -s $fdfn.txt ]||{
v_xy 20 32;echo "请先做磁盘拷入!\007\c"
i_chr ch;v_cln 20;cd $HOME;return
}
case $cxdwbh in
?)file="gz000$cxdwbh.txt";;
??)file="gz00$cxdwbh.txt";;
???)file="gz0$cxdwbh.txt";;
*)file="gz$cxdwbh.txt";;
esac
>$file;xh=0
for str in `sed 's/ //g' $fdfn.txt`
do
bh=`expr $str : '.*|\(.*\)|.*|.*|.*|'`
mc=`expr $str : '.*|.*|\(.*\)|.*|.*|'`
hm=`expr $str : '.*|.*|.*|\(.*\)|.*|'`
zh=`grep "^$bh|" djdzb$cxdwbh 2>/dev/null`||{
v_xy 20 6
echo "找不到企业人员编号 {bh}(姓名 hm 部门 mc)对应的帐号!\007\c"
i_chr ch;v_cln 20;cd $HOME;return
}
zh=`expr $zh : '.*|\(.*\)|'`
xh=`expr $xh + 1`
dffse=`expr $str : '.*|.*|.*|.*|\(.*\)|'`
if [ "$dglx" = "1" ]
then
echo "$cxdwbh|$zh|$xh|$hm|0|$dffse|9|||" >>$file
else
echo "$cxdwbh|$zh|$xh|$hm|$dffse|0|9|||" >>$file
fi
v_xy 20 45;echo "$xh\c"
done
xgdj $cxdwbh $file||{
v_xy 20 22
echo "修改代工人员表出错!请联系技术员解决!\007\c"
i_chr ch;v_cln 20;cd $HOME;return
}
x=`awk 'BEGIN{FS="|";zje=0.0}{zje=zje+$6}END{printf("%d|%.2lf|",NR,zje)}' $file`
x1=`expr $x : '\(.*\)|.*|'`
x2=`expr $x : '.*|\(.*\)|'`
rm $fdfn.txt 2>/dev/null
v_xy 20 10
echo "成功!总人数 {x1}总金额:${x2},请在代发工资中做人员编辑!\007\c"
i_chr ch;break
done
v_cln 20;cd $HOME
}
/***水平菜单文件:yjmenu***/
# 水平菜单编号|名称|横坐标|纵坐标|
1|1.个人业务|4|9|
2|2.企业代工|4|27|
3|3.其它业务|4|45|
4|4.系统服务|4|63|
/***下拉菜单文件:yjbar***/
#1|1.个人业务|4|9|
#2|2.企业代工|4|27|
#3|3.其它业务|4|45|
#4|4.系统服务|4|63|
# 水平菜单编号|下拉菜单编号|名称|横坐标|纵坐标|提示信息|处理子程序|
1|1|1.记录重复|6|9|解决记帐过程中出现\"记录重复\"的错误|jlcf|
1|2|2.日始打印出现错误|7|9|解决日始打印出现乱码或打不出报表和整理单的错误|bbzld|
1|3|3.解决批量办卡错误|8|9|解决批量办卡出现\"上传成功,下传失败!\"的错误|plbk|
1|4|4.电子汇款出错|9|9|解决办理电子汇款时出现的错误|grhk|
2|1|1.查看企业代工说明|6|27|查看企业代工说明|help 8|
2|2|2.单位对照管理|7|27|单位对照管理|dwdzgl|
2|3|3.人员对照管理|8|27|人员对照管理|djdzgl|
2|4|4.磁盘拷入|9|27|磁盘拷入|cpdisk|
2|5|5.单位处理|10|27|单位处理|dwcl|
2|6|6.查看磁盘|11|27|查看DOS格式的软盘内容|help f|
3|1|1.待定|6|45|待定||
4|1|1.硬盘备份|6|63|在本机备份重要数据|sjbf 1|
4|2|2.硬盘恢复|7|63|从本机恢复重要数据|sjhf 2|
4|3|3.软盘备份|8|63|在软盘上备份重要数据|sjbf 3|
4|4|4.软盘恢复|9|63|从软盘上恢复重要数据|sjhf 4|
4|5|5.测试线路质量|10|63|测试线路质量|xlzl|
/***帮助文件:cxyj_help***/
1.各网点应养成良好习惯,在每天的日始,在"中间业务"中"查看通知",
以了解科技处下发的通知并做相应处理.
2.网点在办理批量办卡业务时,应遵循下列流程:
代工代扣的人员编辑-->记帐(成功后)-->批量办卡的编辑-->记帐
3.补登存折出错:
在原开户所换折即可.这是由于后台数据库控制字段出错引起的.
4.前台应急系统中的"软盘备份"和"软盘恢复"主要用于备份本网点的
重要数据(如代工代扣的人员信息等等),以便计算机出现无法修复的
故障时作恢复之用,应定期做"软盘备份"工作.
/***代工帮助文件:qydfgz_help***/
企业代发工资操作说明
代工单位提供的工资记录是以磁盘文件的形式下发到每个储蓄网点的,文件内容
包括:序号、人员编号、部门名称、人员姓名、工资额.其中,磁盘文件名和储蓄网点
的代工单位编号对应,人员编号与储蓄网点的个人帐号一一对应.因此,通过建立这种
一一对应关系,以及程序的处理, 可以简化企业代发工资的操作.
在"jzcx>"提示符下,输入qtyj并回车,选"企业代工"并回车,即可进入储蓄前台代
发工资预处理系统.系统包括六大功能,具体内容如下:
一. 查看企业代工说明
二.单位对照管理
建立代工单位编号和代工单位磁盘文件名的对应关系.包括增加、修改、删除等
功能.
三.人员对照管理
建立企业人员编号和储蓄帐号的对应关系.包括增加、修改、删除等功能.
四.磁盘拷入
将代工单位提供的包含工资记录的磁盘文件拷入本网点的计算机中.
五.单位处理
将代工单位的工资信息做相应的处理,转换为储蓄前台代工代扣业务能接收的数
据格式,并导入代工人员信息表.
六. 查看磁盘
查看DOS格式软盘的内容.
操作流程如下:
首次进入本系统时,应先建立单位对照和人员对照.每次代发工资时,每个代工单位
只需做正确一次磁盘拷入,然后针对这个代工单位做正确一次单位处理.
在操作过程中,有各种提示.可根据提示做相应处理.
小技巧:
在储蓄帐号的第一位,输入字符'.'时,会显示帐号的前11位, 以简化帐号的输入
工作.
|
|