📄 样板抄表程序.c
字号:
{
cls();
draw_border(2,6,15,11);
moveto(4,8);
putstr(" 前无未抄 ");
bell(10);
delay(DELAY_TIME);
temp=rt;
}
return temp;
}
}//if(flag==NO_MSG)
else /*(flag==CONTI||flag==QUERY||Ordinal)如果是续上次抄或查询抄表或从第一户开始抄*/
{
if(direction==DOWN||direction==ENTER)//如果是DOWN或ENTER往下翻页
{
Number++;
if(Number>=reccount)
{
cls();
draw_border(2,6,15,11);
moveto(4,8);
putstr(" 已到尾部 ");
bell(7);
delay(DELAY_TIME);
Number--;
}
return Number;
}
else/*direction==UP*///如果是UP往上翻页
{
Number--;
if((int) Number<0)
{
cls();
draw_border(2,6,15,11);
moveto(4,8);
putstr(" 已到头部 ");
bell(7);
delay(DELAY_TIME);
Number++;
}
return Number;
}
}
}
//查询函数,未找到返回MSG_ESC
int Query_Handle()
{
U8 str[50],str1[50];
unsigned int i,l;
QQ1:;
cls();
moveto(14,15);
putstr(" ");
drawrect(0,0,127,127);
moveto(1,1);
putstr_x(" ",1);
moveto(1,2);
putstr_x(" 查 询 ",1);
drawline(0,24,127,24);
moveto(2,7);
putstr("输入户号或表号");
drawline(16,88,111,88);
moveto(2,14);
putstr("[退出]放弃查询");
moveto(3,10);
keysn(str,10);
if(*((P_U8)sys_keyreturn)==ESC)//按ESC退出
return MSG_ESC;
else if(*((P_U8)sys_keyreturn)!=ENTER||!strlen(str))//如果按ENTER,但是没有输入数值,则无
{
moveto(3,10);
putstr(" ");
goto QQ1;
}
else
{
cls();
moveto(2,7);
putstr("正在搜索户号...");
libset(0,YHBH);
if(liblocate(str,1)==1) i=currn;
else
{
moveto(2,7);
putstr("正在搜索表号...");
libset(0,DBBH);
if(liblocate(str,1)==1) i=currn;
else
{
cls();
draw_border(2,8,14,13);
moveto(4,10);
putstr("未找到记录");
bell(15);
delay(DELAY_TIME);
return MSG_ESC;
}
}
return i;
}
}
//清除已输入的数据
void ClearRecord(unsigned int Number)
{
U8 str[2];
str[0]='0';
str[1]=0;
libset(Number,BYDS);
libwrit(str);
libset(Number,BYDL);
libwrit(str);
libset(Number,CBBZ);
libwrit(str);
libset(Number,YCBZ);
libwrit(str);
libset(Number,CBRQ);
libwrit(str);
}
//计算电量,第一个参数,当前的记录号,第二个参数,当前的电度
void CountDl(int Number,char *str)
{
int i,l;
double dS,dB;
long dd=1;
libset(Number,SYDS);
libread(str);
dS=atof(str);
libset(Number,BYDS);
libread(str);
dB=atof(str);
dB-=dS;
if(dB<0)//回零
{
do
{
dd=dd*10;
}while(dS>=dd);
dB+=dd;
}
libset(Number,BL);
libread(str);
dS=atol(str);
dB*=dS;
sprintf(str,"%.1f",dB);//把电量转换成字符串,返回显示电量
}
//显示电表异常状态
int Abnormity(unsigned int Number)
{
char str[50];
int i;
cls();
moveto(14,15);
putstr(" ");
drawrect(0,0,127,127);
moveto(1,1);
putstr_x(" ",1);
moveto(1,2);
putstr_x(" 异常状态 ",1);
drawline(0,24,127,24);
moveto(2,4);
putstr(" 0.不抄 5.倒行");
moveto(2,6);
putstr(" 1.正常 6.新换");
moveto(2,8);
putstr(" 2.回零 7.丢失");
moveto(2,10);
putstr(" 3.烧坏 8.异常");
moveto(2,12);
putstr(" 4.违章 ");
moveto(2,14);
putstr("请选择:");
while(1)
{
moveto(9,14);
putstr(" ");
moveto(9,14);
keysn(str,1);
if(*(P_U8)sys_keyreturn==ESC)//如果按ESC,则退出
return MSG_ESC;
else if(*(P_U8)sys_keyreturn!=ENTER||!strlen(str))//如果输入为空,则无反应
continue;
else//数字键,且用户按下了确认键
{
i=atoi(str);
if(i<0||i>8)//如果输入值小于0或大于8,则不在异常标志选择的范围
continue;
else
{
if(i!=0) //i!=0记录异常标志,抄表标志和抄表日期
{
libset(Number,YCBZ);
libwrit(str);
libset(Number,CBBZ);
libwrit("1");
Get_Date(str);
libset(Number,CBRQ);
libwrit(str);
return 1;
}
else//i==0清除先前的输入再返回
{
ClearRecord(Number);
return MSG_ESC;
}
return;
}
}
}//while
}
//判断本月电量是否异常的函数,第一个参数,当前的记录号,第二个参数,当前的电量
//偏大返回2,偏小返回1,否则返回FALSE
BOOL IsAbnormal(int Number,char *str)
{
char des[50];
long sy,by;
libset(Number,SYDL);
libread(des);
sy=atol(des);
by=atol(str);
if(by*2-sy<0) //by*2-sy<0则表示本月电量小于上月的0。5倍,本月电量偏小,返回1
return 1;
else if(by*0.5-sy>0) //by*0.5-sy>0则表示本月电量大于上月的2倍,本月电量偏大,返回2
return 2;
else
return FALSE; //正常,返回FALSE,即0
}
//处理正常情况下的抄表
int HandleNormal(int Number)
{
char str[50],des[50];
int k;
while(1)
{
moveto(7,12);
putstr(" ");
moveto(7,12);
keysnh(str,8);
if(nohand_fun)//如果在未抄前按功能键选择异常标志,可以再输入数值,但如果没有输入而
{
if(*(P_U8)sys_keyreturn==DOWN||*(P_U8)sys_keyreturn==ENTER||*(P_U8)sys_keyreturn==ESC||*(P_U8)sys_keyreturn==UP||*(P_U8)sys_keyreturn==QUERY)
{
libset(Number,CBBZ);
libwrit("1");
libset(Number,BYDS);
libwrit("0");
libset(Number,BYDL);
libwrit("0");
nohand_fun=FALSE;
if(*(P_U8)sys_keyreturn==ENTER)
{
if(strlen(str))
{
libset(Number,BYDS);
libwrit(str);
CountDl(Number,str);//计算电量并显示之
libset(Number,BYDL);
libwrit(str);
return MSG_OK;
}
else
return MSG_DOWN;
}
else if(*(P_U8)sys_keyreturn==DOWN)
return MSG_DOWN;
else if(*(P_U8)sys_keyreturn==ESC)
return MSG_ESC;
else if(*(P_U8)sys_keyreturn==UP)
return MSG_UP;
else if(*(P_U8)sys_keyreturn==QUERY)
return MSG_QUERY;
}
}//if(nohand_fun)
if(*(P_U8)sys_keyreturn==ESC)
return MSG_ESC;
else if(*(P_U8)sys_keyreturn==FUNCTION)
return MSG_FUNCTION_NO;//如果未抄而按功能键,返回MSG_FUNCTION_NO
else if(*(P_U8)sys_keyreturn==UP)
return MSG_UP;
else if(*(P_U8)sys_keyreturn==DOWN)
return MSG_DOWN;
else if(*(P_U8)sys_keyreturn==QUERY)
return MSG_QUERY;
else if(*(P_U8)sys_keyreturn==0x81)
return MSG_OPEN;
else if(*(P_U8)sys_keyreturn!=ENTER||!strlen(str))
continue;
else
{
libset(Number,BYDS);
libwrit(str);
CountDl(Number,str);//计算电量并显示之
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -