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

📄 样板抄表程序.c

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