📄 cai2.c
字号:
/* 注意:在此样板程序之后有一些函数功能模块, */
/* 大家可以直接调用或作少许修改后调用. */
#include "hncc.h"
#define uchar unsigned char
#define RBAK ((int *)0x10900) /* 用于存放所显示的记录号 */
#define TYPE 0 /* N1 */
#define ID 1 /* C3 */
#define NAME 2 /* C8 */
#define PRICE 3 /* N3 */
#define NUMBER 4 /* N2 */
#define TYPE_LEN 1
#define ID_LEN 3
#define NAME_LEN 8
#define PRICE_LEN 3
#define NUMBER_LEN 2
#define F1 0x88
#define F2 0x89
#define ENTER 0x8D
#define UP 0x8E
#define DOWN 0x8F
#define DBH 0 /* 电表号 C10 */
#define HM 1 /* 户名 C20 */
#define DJH 2 /* 电价号 C3 */
#define SYXD 3 /* 上月底度 N10 */
#define BYXD 4 /* 本月底度 N10 */
#define CBBZ 5 /* 抄表标志 N2 */
#define RQ 6 /* 抄表日期 D8 */
#define YDDZ 7 /* 用电地址 C30 */
#define BL 8 /* 倍率 N3 */
#define CBH 9 /* 抄表号 N4 */
#define SYDL 10 /* 上月电量 N10 */
#define BYDL 11 /* 本月电量 N10 */
#define XCBH 12 /* 新抄表号N4 */
void select(xdata uchar type);
void disp_select();
int select_cai(xdata int record);
void writetocard();
void finish();
void change();
void dateup(xdata uchar *d);
uchar ksh(xdata uchar *cdata,xdata uchar n1,xdata uchar n2,xdata uchar reg);
xdata int total; /* 全局变量,用于存放总记录数 */
xdata int first[4], last[4];
no_init int xhao;
void main(void)
{
xdata uchar k,s[9],s1[11], type[TYPE_LEN], id[ID_LEN + 1];
xdata int i, j;
screen(1); /* 设定为汉字显示状态 */
libopen(0); /* 打开第一数据库 */
total=libsumr(); /* 计算第一数据库的总记录数 */
if(RBAK[0]>total||RBAK[0]<0)
/* 对刚下装的数据库,RBAK中的值(记录号)可能会超出其范围,若超出,置其为0(即第一记录) */
RBAK[0]=0;
for(i = 0; i < 4; i++) {
first[i] = -1;
last[i] = -1;
}
for(i = 0; i < total; i++) {
libset(i, NUMBER);
libwrite("0");
libset(i, TYPE);
libread(type);
j = type[0] - '1';
if (first[j] == -1)
{
first[j] = i;
}
last[j] = i;
}
disp_select();
}
void disp_select()
{
xdata uchar type[TYPE+1], id[ID_LEN+1], name[NAME_LEN+1], number[NUMBER_LEN+1], price[PRICE+1];
xdata uchar cdata[9], money[9], f;
xdata int num, total_num[4], position[50];
xdata int total_select, end_flag;
xdata int i, j, curr_record, len;
xdata int start, end;
total_select = 0;
cls();
moveto(1,4);
clsn(1,16);
do {
moveto(7,1);
putstr("请输入数量: ");
moveto(7,13);
putstr_h(" ");
moveto(7,13);
f=ksh(cdata,0,2,0); /* 等待输入一串字符,只允许是数字,最多2位 */
if(f==0) { /* 输入不是数字加确认键 */
if (cdata[1] == 0) /* 若输入是数值加其它功能键 */
{
bell(5);
continue;
} else { /* 否则所按第一个键即为功能键 */
if (cdata[1] == F1 ) {
}
if (cdata[1] == F2 ) {
return;
}
moveto(15,1);
putstr_h("输入错误!");
bell(5);
clsn(15,2);
}
}
} while(!f);
if((cdata[0] == '0') && (cdata[1] >= 0x30 && cdata[1] <= 0x39)) {
cdata[0] = cdata[1];
cdata[1] = '\0';
}
clsn(9,2);
moveto(9,1);
putstr("输入数量为: ");
putstr_h(cdata);
curr_record = 1;
libset(curr_record, NUMBER);
libwrite(cdata);
for(i = 0; i < total; i++) {
libset(i, NUMBER);
libread(number);
if (strlen(number) == 0)
{
num = 0;
}
else {
num = stoi(strlen(number), number);
}
if (num != 0)
{
moveto(11,1);
putstr_h("数据库中数量为:");
putstr_h(number);
total_select++;
break;
}
}
key(0);
if (total_select == 0)
{
clsn(1, 16);
moveto(3,1);
putstr_h("总数为零!Enter退出");
do
{
f = key(0);
}
while (f != ENTER);
}
else {
len=itos(total_select, cdata);
cdata[len] = '\0';
clsn(1,16);
putstr_h("总数为:");
putstr_h(cdata);
}
key(0);
}
uchar ksh(xdata uchar *cdata,xdata uchar n1,xdata uchar n2,xdata uchar reg)
{
xdata uchar x1,x2,y1,y2,k,i1,i2,f,end=0;
i1=n1;
x1=getx();
y1=gety();
if(n1!=0)
putn_h(n1,cdata);
do
{
if(i1!=n2)
{
putch_h('_');
x2=getx();
y2=gety()-1;
}
else
{
x2=getx();
y2=gety();
}
moveto(x2,y2);
ksh_1: k=key(0);
if(reg==0)
{
if(i1==n2&&k>=0x30&&k<=0x39)
goto ksh_1;
if(k<0x30||k>0x39&&k!=0x82)
end=1;
}
if(reg==1)
{
if(k==0x80)
goto ksh_1;
if(i1==n2&&!(k==0x8d||k==0x87||k==0x88||k==0x89||k==0x8e||k==0x8f||k==0x82))
goto ksh_1;
if(k==0x8d||k==0x87||k==0x88||k==0x89||k==0x8e||k==0x8f)
end=1;
}
cdata[i1]=k;
if(end)
{
f=0;
if(i1==0)
{
cdata[0]=0;
cdata[1]=k;
moveto(x1,y1);
putch_h(' ');
moveto(x1,y1);
}
else
{
if(k==0x8d)
{
cdata[i1]=0;
if(i1!=n2)
putch_h(' ');
f=i1;
}
else
{
cdata[0]=0;
cdata[1]=0;
cdata[2]=k;
moveto(x1,y1);
for(i2=0;i2<=y2-y1;i2++)
putch_h(' ');
}
}
return(f);
}
if(k==0x82)
{
if(i1!=0)
{
putch_h(' ');
i1=i1-1;
y2=y2-1;
moveto(x2,y2);
}
}
else
{
putch_h(cdata[i1]);
i1=i1+1;
}
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -