📄 dian.c
字号:
moveto(11,4);
putstr_h("异常 ");
bell(5);
k=key(0);
if(k==0x82) /* 若按下的是清除键则清除该记录数据,重新输入 */
{
clslib(r);
goto cb_2;
}
disp2(bzs,r); /* 显示抄表状态编码表,将所选的编码放在bzs */
if(!(bzs[0]=='1'&&bzs[1]==0))
{ /* 选的是已抄的各种状态 */
libset(r,CBBZ);
libwrite(bzs);
}
else /* 选的是未抄 */
{
clslib(r);
goto cb_2;
}
disp1(r);
}
}
do
{
k=key(0);
}while(k!=0x88&&k!=0x82&&k!=0x89&&k!=0x8e&&k!=0x8f&&k!=0x8d);
if(k==0x8d) /* 若按下[确认]键,也把它当作向下箭头键来使用 */
k=0x8f;
if(k==0x88) /* 若按下的是F1则查询抄表*/
{
r=cxcb(); /*查询抄表*/
goto cb_0;
}
if(k==0x82) /* 若按下的是清除键,清除该记录数据,重新输入 */
{
clslib(r);
goto cb_2;
}
return(k); /* 若按下的是其它键,返回 */
}
/* 计算本月底度(by)-上月底度(sy),l为上月底度的位数,结果放在sy */
/* 若by<sy,则by-sy+10*l */
void cscal(xdata uchar *by,xdata uchar *sy,xdata uchar l)
{
xdata uchar gg[11],i;
strsub(by,sy,10);
if(sy[0]=='-')
{
gg[0]='1';
for(i=1;i<=l;i++)
gg[i]='0';
gg[i]=0;
stradd(gg,sy,10);
}
}
/* 清除数据库中所写入的数据 */
void clslib(xdata int r)
{
xdata uchar s[2];
s[0]='0';
s[1]=0;
libset(r,BYXD);
libwrite(s);
libset(r,BYDL);
libwrite(s);
s[0]='1';
s[1]=0;
libset(r,CBBZ);
libwrite(s);
s[0]=0;
libset(r,RQ);
libwrite(s);
}
/* 显示记录号为r的记录信息 */
void disp1(xdata int r)
{
xdata uchar kdata[31],l,bz[3];
xdata int n;
cls();
moveto(15,14);
putstr(" ");
moveto(1,1);
putstr("电表号");
libset(r,DBH);
libread(kdata);
putstr_h(kdata);
moveto(3,1);
putstr("抄表号");
libset(r,CBH);
libread(kdata);
putstr_h(kdata);
moveto(5,1);
libset(r,HM);
libread(kdata);
putn_h(16,kdata);
moveto(7,1);
libset(r,YDDZ);
libread(kdata);
putstr_h(kdata);
moveto(13,1);
putstr("上");
libset(r,SYXD);
libread(kdata);
putn_h(6,kdata);
moveto(13,9);
putstr("本") ;
libset(r,BYXD);
libread(kdata);
putn_h(6,kdata);
moveto(15,1);
putstr("电量: ");
libset(r,CBBZ);
libread(bz);
if(!(bz[0]=='1'&&bz[1]==0)) /* 抄表状态为0时不显示电量 */
{
libset(r,BYDL);
libread(kdata);
putn_h(10,kdata);
}
moveto(11,1);
libset(r,BL);
libread(kdata);
putstr_h(kdata);
moveto(11,4);
libset(r,CBBZ);
l=libread(kdata);
n=stoi(l,kdata);
th(n);
moveto(11,13);
libset(r,DJH);
libread(kdata);
/*n=stoi(l,kdata);*/
switch(kdata[0])
{
case '1': putstr("住宅"); break;
case '2': putstr("商业"); break;
case '3': putstr("工业"); break;
case '4': putstr("非工"); break;
case '5': putstr("机关"); break;
case '6': putstr("职工"); break;
case '7': putstr("集资"); break;
default:return;
}
}
/* 根据n显示相应的抄表状态 */
void th(xdata uchar n)
{
switch(n)
{
case 1: putstr("未抄电表"); break;
case 2: putstr("新换电表"); break;
case 3: putstr("电表倒行"); break;
case 4: putstr("电表烧坏"); break;
case 5: putstr("违章用电"); break;
case 6: putstr("电表丢失"); break;
case 7: putstr("已抄电表"); break;
case 8: putstr("多抄电表"); break;
case 9: putstr("更换电表"); break;
case 10: putstr("更换表箱"); break;
case 11: putstr("回零处理"); break;
case 12: putstr("已剪线户"); break;
}
}
/* 显示抄表状态编码表,选择编码并放在bzs,r为当前记录号 */
void disp2(xdata uchar *s,xdata int r)
{
xdata uchar n,f,one[4],thirteen[5];
cls();
moveto(15,14);
putstr(" ");
moveto(1,1);
putstr_h("1.不抄 7.正常");
moveto(3,1);
putstr_h("2.新换 8.多抄");
moveto(5,1);
putstr_h("3.倒行 9.换表");
moveto(7,1);
putstr_h("4.烧坏 10.换箱");
moveto(9,1);
putstr_h("5.违章 11.回零");
moveto(11,1);
putstr_h("6.丢失 12.剪线");
moveto(15,1);
putstr("请选择: ");
d2_1: do
{
moveto(15,9);
putstr_h(" ");
moveto(15,9);
f=ksh(s,0,2,0); /* 等待输入一串字符,只允许是数字,最多2位 */
if(f==0)
{
if(s[0]==0&&s[1]==0x89) /* 该记录原为未抄时,按F2可以退出 */
{
libset(r,CBBZ);
libread(s);
if(!(s[0]=='1'&&s[1]==0))
return;
}
moveto(13,1);
putstr_h("输入错误!");
bell(5);
clsn(13,2);
}
}while(!f);
if(s[0]=='0') /* 以下判断输入数值是否在1-12范围内 */
{
s[0]=s[1];
s[1]=0;
}
one[0]='1';
one[1]=0;
thirteen[0]='1';
thirteen[1]='3';
thirteen[2]=0;
strsub(s,one,3);
strsub(s,thirteen,4);
if(one[0]=='-'||thirteen[0]!='-')
{
moveto(13,1);
putstr_h("选项超出范围!");
bell(5);
clsn(13,2);
goto d2_1;
}
}
/* 从键盘接收一串全高数字字符,带回显,存放在cdata */
/* 入口: n1为欲显示的原cdata中数据的长度,n2为最多允许接收的数据长度,reg为0时只可接收数字,为1时可接收字母,运算符等 */
/* 出口: 返回接收字符串的长度,字符串为空时返回0(若按下数值键后再按功能键,则把功能键值存放在cdata[2],若首先就按下功能键,则把该键值存放在cdata[1] */
uchar ksh(xdata uchar *cdata,xdata uchar n1,xdata uchar n2,xdata uchar reg)
{
xdata uchar x1,x2,y1,y2,k,i1,i2,f,end=0;
i1=n1;
x1=getx();
y1=gety();
if(n1!=0)
putn_h(n1,cdata);
do
{
if(i1!=n2)
{
putch_h('_');
x2=getx();
y2=gety()-1;
}
else
{
x2=getx();
y2=gety();
}
moveto(x2,y2);
ksh_1: k=key(0);
if(reg==0)
{
if(i1==n2&&k>=0x30&&k<=0x39)
goto ksh_1;
if(k<0x30||k>0x39&&k!=0x82)
end=1;
}
if(reg==1)
{
if(k==0x80)
goto ksh_1;
if(i1==n2&&!(k==0x8d||k==0x87||k==0x88||k==0x89||k==0x8e||k==0x8f||k==0x82))
goto ksh_1;
if(k==0x8d||k==0x87||k==0x88||k==0x89||k==0x8e||k==0x8f)
end=1;
}
cdata[i1]=k;
if(end)
{
f=0;
if(i1==0)
{
cdata[0]=0;
cdata[1]=k;
moveto(x1,y1);
putch_h(' ');
moveto(x1,y1);
}
else
{
if(k==0x8d)
{
cdata[i1]=0;
if(i1!=n2)
putch_h(' ');
f=i1;
}
else
{
cdata[0]=0;
cdata[1]=0;
cdata[2]=k;
moveto(x1,y1);
for(i2=0;i2<=y2-y1;i2++)
putch_h(' ');
}
}
return(f);
}
if(k==0x82)
{
if(i1!=0)
{
putch_h(' ');
i1=i1-1;
y2=y2-1;
moveto(x2,y2);
}
}
else
{
putch_h(cdata[i1]);
i1=i1+1;
}
}while(1);
}
/* 用于判断本月电量是否在正常波动范围内 */
/* 出口: s1*0.1<=s2<s1*20时返回1,否则返回0 */
/* 注: 可改变min及max的值,一般情况为min=0.5,max=1.5 */
uchar pd(xdata uchar *s1,xdata uchar *s2)
{
xdata uchar f,min[16],max[16];
min[0]='0';
min[1]='.';
min[2]='1';
min[3]=0;
max[0]='2';
max[1]='0';
max[2]=0;
strmul(s1,min,15);
strmul(s1,max,15);
strsub(s2,min,15);
strsub(s2,max,15);
if(min[0]=='-'||max[0]!='-')
f=0;
else
f=1;
return(f);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -