📄 样板抄表程序.c
字号:
moveto(7,14);
putstr(str);
libset(Number,BYDL);
libwrit(str);
k=IsAbnormal(Number,str);//判断是否异常,参数:当前记录号,本月电量
if(k) //如果是1或2,表示电量异常
{
bell(10);
moveto(12,8);
putstr(" ");
moveto(12,8);
putstr("已抄");
moveto(14,12);
if(k==1) //k==1,电量偏小
putstr("小");
else if(k==2) //k==2,电量偏大
putstr("大");
k=key(0);
if(k==CLEAR) //按删除键可以重抄
{
ClearRecord(Number);
moveto(7,12);
putstr(" ");
moveto(7,14);
putstr(" ");
moveto(12,8);
putstr("未抄");
continue;
}
else if(k==ENTER) //按确认键,默认为正常,翻到下一户
{
libset(Number,CBBZ);
libwrit("1");
libset(Number,YCBZ);
libwrit("1");
Get_Date(str);
libset(Number,CBRQ);
libwrit(str);
return MSG_DOWN;//按确认表示正常,同时翻到下一户
//return MSG_OK;//返回正常标志
}
else
return MSG_ABNORMITY;//否则返回异常标志
}
else //正常
{
libset(Number,CBBZ);
libwrit("1");
libset(Number,YCBZ);
libwrit("1");
Get_Date(str);
libset(Number,CBRQ);
libwrit(str);
return MSG_OK;//返回正常标志
}
}//else
}//while(1);
}
//统计函数
void Statistic_MSG()
{
U8 str[50],l;
unsigned int nHave=0,nAbnormal=0,i;
cls();
moveto(14,15);
putstr(" ");
draw_border(3,3,14,11);
moveto(4,5);
putstr(" 正在统计");
moveto(4,9);
putstr(" 第 条");
for(i=0;i<reccount;i++)
{
moveto(7,9);
printf("%d",i+1);
libset(i,CBBZ);
l=libread(str);
if(l)
l=atoi(str);
if(l==1)//抄表标志为1表已抄
{
nHave++; //已抄户数
libset(i,YCBZ);
libread(str);
l=atoi(str);
if(l!=1)//l!=1表示异常
nAbnormal++;//异常户数
}
}
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,5);
putstr("总数:");
printf("%d",reccount);
moveto(2,7);
putstr("未抄:");
printf("%d",reccount-nHave);//总数-已抄=未抄
moveto(2,9);
putstr("已抄:");
printf("%d",nHave);
moveto(2,11);
putstr("正常:");
printf("%d",nHave-nAbnormal);//已抄-异常=正常
moveto(2,13);
putstr("异常:");
printf("%d",nAbnormal);
key(0);
return;
}
int IsSameDBF()
{
unsigned char *scrq=(unsigned char *)0x21ffe0;//存放上一个数据库的生成日期
FILE *fp;
U8 buffer[10];
long filesize;
if((fp=fopen(dbfname,"r"))!=NULL)
{
filesize=filelength(fp);
fseek(fp,2,SEEK_SET);
fread(buffer,2,fp);
fclose(fp);
}
use("");
use(dbfname);
if((*scrq==buffer[0])&&(*(scrq+1)==buffer[1]))
return 1;
else
{
*scrq=buffer[0];
*(scrq+1)=buffer[1];
return 0;
}
}
//抄表函数体
void Input_Record(unsigned int flag)
{
U8 chHave,pass=1;
U8 k,t;
U8 str[50];
unsigned int Number,temp;
unsigned int * xsccb=(unsigned int *)0x21fff0;//存放最后一次退出时的记录号
temp=IsSameDBF();
if(temp!=1)
*xsccb=0;
else if(*xsccb>=reccount||*xsccb<0)//如果所存放的记录号不在数据库所有记录条数的范围,则始
*xsccb=0;
Number=*xsccb;
if(flag==No_MSG)//抄漏抄户
{
str[0]='0';str[1]=0;
libset(0,CBBZ);
if(liblocate(str,0)==1) temp=currn;
else
{
cls();
draw_border(2,6,15,11);
moveto(4,8);
putstr(" 已无未抄 ");
bell(10);
delay(DELAY_TIME);
//return MSG_ESC;
}
Number=temp;
}
if(flag==Query_MSG)//查询时进入查询目录
{
temp=Query_Handle();
if(temp==MSG_ESC)/*若查询时用户按退出,依然显示当前记录号*/
return;
else
Number=temp;
}
if(flag==Ordinal_MSG)//从第一户抄表
Number=0;
//////////////////////////////
do
{
LOOP: chHave=Base_Show(Number); //显示基本信息
*xsccb=Number;
if(chHave)//已抄
{
do
{
k=key(0);
}while(k!=CLEAR&&k!=ENTER&&k!=UP&&k!=DOWN&&k!=ESC&&k!=QUERY&&k!=FUNCTION&&k!=0x81);
switch(k)
{
case ENTER:
case DOWN:
case UP:
temp=PageUpDown(Number,k,flag);//翻页
if(temp==MSG_ESC)
return;
else
{
Number=temp;
break;
}
case ESC:
return;
case CLEAR:
ClearRecord(Number);
break;
case FUNCTION:
temp=Abnormity(Number);
break;
case QUERY:
temp=Query_Handle();
if(temp==MSG_ESC)/*若查询时用户按退出,依然显示当前记录号*/
break;
else
{
Number=temp;
break;
}
case 0x81:
temp=Open_Archives(Number);
if(temp==MSG_ESC) goto LOOP;
}//switch
}/*已抄*/
else//未抄
{
temp=HandleNormal(Number);
switch(temp)
{
case MSG_UP:
temp=PageUpDown(Number,UP,flag);//往前翻页
if(temp==MSG_ESC) //ESC退出
return;
else
{
Number=temp; //返回记录号
continue;
}
case MSG_DOWN:
temp=PageUpDown(Number,DOWN,flag);//往后翻页
if(temp==MSG_ESC) //ESC退出
return;
else
{
Number=temp; //返回记录号
continue;
}
case MSG_QUERY:
temp=Query_Handle(); //查询
if(temp==MSG_ESC) //ESC退出
continue;
else
{
Number=temp; //找到查询内容,返回记录号
continue;
}
case MSG_FUNCTION:
temp=Abnormity(Number);//显示异常信息
continue;
case MSG_FUNCTION_NO://如果未抄而按了功能键选择异常情况
temp=Abnormity(Number);
if(temp==MSG_ESC) //ESC退出
continue;
else
{
libset(Number,CBBZ);
libwrit("0");
nohand_fun=TRUE;//如果未抄而按了功能键选择异常,把nohand_fun=TRUE;
continue;
}
case MSG_ESC: //ESC退出
return;
case MSG_ABNORMITY://电量异常
temp=Abnormity(Number);
continue;
case MSG_OK: //电量正常
temp=PageUpDown(Number,DOWN,flag);
if(temp==MSG_ESC) //ESC退出
return;
else
{
Number=temp; //返回记录号
continue;
}
continue;
case MSG_OPEN:
temp=Open_Archives(Number);
if(temp==MSG_ESC) goto LOOP;
}//switch
}//未抄
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -