⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 样板抄表程序.c

📁 电力或水行业手持PDA应用样板程序
💻 C
📖 第 1 页 / 共 3 页
字号:
                        {
                                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 + -