笔者的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 8) [ -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,28);printf "%s"," 回车键继续,'q'退出 ";v_color(1);v_xy(7,38);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位, 以简化帐号的输入 工作. :em35:
|
|