📄 样板抄表程序.c
字号:
/*****************************************************\
**
** 抄表机应用程序例程源代码(仅供参考)
**
** ModuleName:样板抄表程序.c
**
** writted by Huang LanQing
**
** Guangzhou Tianxiang Technology Co.,Ltd.
**
\*****************************************************/
#include "header.h" //调用头文件header.h
//主函数
void main(void)
{
U8 MenuChoice;
const P_U8 MainMenu[]={//菜单显示格式
"[1]续上次抄",
"[2]抄漏抄表",
"[3]按顺序抄",
"[4]查询抄表",
"[5]抄表统计",
};
U8 szKeyChoice[]={"12345 "};
szKeyChoice[5]=QUERY;
strcpy(dbfname,"chaobiao.dbf");
use(""); //关闭数据库
if(use(dbfname)!=OK)//打开数据库,与use("")一起调用,如果不等于ok,即1,则显示错误如下
{
cls();
moveto(1,1); putstr("错误:");
moveto(1,3); putstr("类型:数据库打开错误");
moveto(1,5); putstr("原因:1,数据库未下装");
moveto(1,7); putstr(" 2,数据库名不正确");
moveto(1,15);putstr("按任意键退出");
key(0);
return;
}
if(reccount<0||reccount==0)//如果数据库记录数为0或小于0,数据库是空库,显示以下错误并返回
{
cls();
moveto(1,1); putstr("错误:");
moveto(1,5); putstr("原因:数据库为空库");
moveto(1,15);putstr("按任意键退出");
key(0);
return;
}
while(1)
{
cls();
moveto(14,15);
putstr(" ");
moveto(1,1);
putstr(" 某某电力公司");
Show_Date();
drawrect(15,16,110,110);
MenuChoice=popup(3,4,15,13,MainMenu,szKeyChoice,5,5,0);//显示菜单函数
//MenuChoice=cpopup(MainMenu,szKeyChoice,5,5,0);//显示菜单函数
switch(MenuChoice)
{
case 0:
Input_Record(Continue_MSG);break;//续上次抄表
case 1:
Input_Record(No_MSG);break; //抄漏抄表
case 2:
Input_Record(Ordinal_MSG);break;//从第一户开始抄表
case 3:
case 5:
Input_Record(Query_MSG);break; //查询
case 4:
Statistic_MSG();break; //统计
case 255:
return;
}
}
}
//显示系统日期
void Show_Date()
{
int i;
U8 nian[5],yue[5],ri[5],date[10];
getdate(date); //取系统日期,存放在date串中,格式为yyyy/mm/dd
for(i=0;i<4;i++) //分别从date串中取年、月、日,存放在nian、yue、ri串中
nian[i]=date[i];
for(i=0;i<2;i++)
yue[i]=date[i+5];
for(i=0;i<2;i++)
ri[i]=date[i+8];
nian[4]=0;
yue[2]=0;
ri[2]=0;
moveto(2,15);
putstr(nian);
putstr("年");
putstr(yue);
putstr("月");
putstr(ri);
putstr("日");
}
//将系统日期由格式yyyy/mm/dd转换为yyyymmdd
void Get_Date(char *date)
{
int i;
getdate(date); //取系统日期,存放在date串中,格式为yyyy/mm/dd
date[4]=date[5];
date[5]=date[6];
date[6]=date[8];
date[7]=date[9];
date[8]=0;
}
int Open_Archives(int Number)//提档
{
U8 str[50];
cls();
moveto(14,15);
putstr(" ");
moveto(1,1);
putstr("户号:");
libset(Number,YHBH);
libread(str);
putn(10,str);
moveto(1,3);
putstr("表号:");
libset(Number,DBBH);
libread(str);
putn(10,str);
moveto(1,5);
putstr("户名:");
libset(Number,HM);
libread(str);
putstr(str);
moveto(1,7);
putstr("地址:");
libset(Number,YDDZ);
libread(str);
putstr(str);
moveto(1,13);
putstr("电话:");
libset(Number,DHHM);
libread(str);
putstr(str);
moveto(1,15);
putstr("性质:");
libset(Number,YDXZ);
libread(str);
switch(str[0])//根据数据库中YDXZ字段的数据,如为1表示用电性质为居民,2为工业,3为商业,4为
{
case '1':
putstr("居民");break;
case '2':
putstr("工业");break;
case '3':
putstr("商业");break;
case '4':
putstr("农业");break;
}//switch
key(0);
return MSG_ESC;
}
//此函数显示基本的信息,包括户号、表号等等
//bzsign返回是否已抄,已抄:1,未抄:0
char Base_Show(unsigned int Number)
{
U8 str[70],bz,bzSign=0,l;//bzSign用来记录表是否已抄,已抄:1,未抄:0
cls();
moveto(14,15);
putstr(" ");
drawrect(0,0,127,127);
moveto(2,2);
putstr("户号:");
libset(Number,YHBH);
libread(str);
putn(10,str);
drawline(0,24,127,24);
moveto(2,5);
putstr("户名:");
libset(Number,HM);
libread(str);
putn(9,str);
drawline(0,48,127,48);
moveto(2,8);
putstr("倍率:");
libset(Number,BL);
libread(str);
putstr(str);
moveto(2,10);
putstr("上月:");
libset(Number,SYDS);
libread(str);
putstr(str);
moveto(2,12);
putstr("本月:");
moveto(2,14);
putstr("电量:");
libset(Number,YCBZ);
libread(str);
bz=atoi(str);
moveto(12,8);
switch(bz)//根据数据库中YCBZ字段的数据,如为1表示异常标志为已抄,即正常,2为回零,3为烧表
{
case 0:
putstr("未抄");break;
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;
default:
putstr("未抄");break;
}
libset(Number,CBBZ);
libread(str);
bz=atoi(str);
if(bz==1)//如果CBBZ为1表示已抄,则显示本月读数以及本月电量
{
bzSign=1;
moveto(7,12);
libset(Number,BYDS);
libread(str);
putstr(str);
moveto(7,14);
libset(Number,BYDL);
libread(str);
putstr(str);
}
return bzSign;
}
//处理翻页键,根据flag的不同翻页,返回记录号
unsigned int PageUpDown(unsigned int Number,unsigned int direction,unsigned int flag)
{
unsigned int temp,rt;
U8 str[5];
if(flag==No_MSG)//flag==No_MSG表示是抄漏抄户
{
if(direction==DOWN||direction==ENTER)//DOWN或ENTER向下翻页
{
rt=Number;
Number++;
str[0]='0';str[1]=0;
libset(Number,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);
temp=rt;
}
if(Number>=reccount)
{
cls();
draw_border(2,6,15,11);
moveto(4,8);
putstr(" 后无未抄 ");
bell(10);
delay(DELAY_TIME);
temp=rt;
}
return temp;
}
else/*否则k=KEY_PAGEUP向前翻页*/
{
rt=Number;
Number--;
str[0]='0';str[1]=0;
libset(Number,CBBZ);
if(liblocate(str,10)==1) temp=currn;
else
{
cls();
draw_border(2,6,15,11);
moveto(4,8);
putstr(" 前无未抄 ");
bell(10);
delay(DELAY_TIME);
temp=rt;
}
if((int)Number<0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -