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

📄 cai2.c

📁 嵌入式点菜系嵌入式点菜系统源码供参考c51c51统源码供参考嵌入式点菜系统源码供参考c51c51c51c51
💻 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 + -