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

📄 cai30.c

📁 嵌入式点菜系嵌入式点菜系统源码供参考c51c51统源码供参考嵌入式点菜系统源码供参考c51c51c51c51
💻 C
📖 第 1 页 / 共 2 页
字号:
        for(i = 0; i < 3; i++) {
            while (curr_record <= end)
            {
                libset(curr_record, NUMBER);
                libread(number);
                
                if (strlen(number) == 0)
                {
                    num = 0;
                }
                else
                    num = stoi(strlen(number), number);

                if (num != 0) {
                    break;
                }
                curr_record++;
            }
            if (curr_record > end)
                break;
            moveto(i*4+1,1);
            libset(curr_record, ID);
            libread(id);
            putstr_h(id);
            putstr_h(" ");
            libset(curr_record, NAME);
            libread(name);
            putstr_h(name);
            moveto(i*4+3,5);
            libset(curr_record, PRICE);
            libread(price);
            putstr_h(price);
            putstr_h("元×");
            putstr_h(number);
            curr_record++;
        }
        do
        {
         sel_2:
            end_flag = 0;
            clsn(13,4);
            if ( curr_record >= end)
            {
                end_flag = 1;
                clsn(13,4);
                moveto(13,1);
                putstr_h("F1修改,F2写卡\nENTER退出");
            }
            else {
                clsn(13,4);
                moveto(15,1);
                putstr_h("F1修改,ENTER继续");
            }
            f = key(0);
            if ((end_flag && f == DOWN)||(!end_flag && f == F2))
            {
                bell(5);
                goto sel_2;
            }
        }
        while (f!= F1 && f!=F2 && f!=ENTER && f!= UP && f != DOWN);
        if (!end_flag && f == ENTER)
        {
            f = DOWN;
        }
        switch (f) {
            case F1 :
                change();
                goto sel_1;        
                break;
            case F2 :
                clsn(13,4);
                moveto(13,1);
                putstr_h("你确定要写卡吗?\nF1取消,F2写卡");
                do
                {
                    f = key(0);
                }
                while (f != F1 && f != F2);
                if (f == F2)
                {
                    writetocard();
                    return;
                }
                break;
            case ENTER :
                return;
                break;
            case UP :
                j -= 3;
                if (j < 1)
                {
                    bell(5);
                    j = 1;
                    goto sel_2;
                }
                break;
            case DOWN :
                j += 3;
                break;
        }
            
    } while (1);
    
	return;
}

/* 结束点菜 */
void finish()
{
    clsn(1,16);
    moveto(3,1);
    putstr_h("你确认要退出吗?\nF2确认退出,其它键返回");
    
    if (F2 == key(0))
    {
        exit(0);
    }
    return;
}

/* 将取出的当天日期格式由yy.mm.dd转换为yyyymmdd */
void dateup(xdata uchar *d)
       {
        xdata char d1[9];
        getdate(d1);   
        if(d1[0]=='9')
           {
            d[0]='1';
            d[1]='9';
           }
        else
           {
            d[0]='2';
            d[1]='0';
           }
        d[2]=d1[0];
        d[3]=d1[1];
        d[4]=d1[3];
        d[5]=d1[4];
        d[6]=d1[6];
        d[7]=d1[7];
        d[8]=0;
       }

/* 从键盘接收一串全高数字字符,带回显,存放在cdata */
/* 入口: n1为欲显示的原cdata中数据的长度,n2为最多允许接收的数据长度,reg为0时只可接收数字,为1时可接收字母,运算符等 */
/* 出口: 返回接收字符串的长度,字符串为空时返回0(若按下数值键后再按功能键,则把功能键值存放在cdata[2],若首先就按下功能键,则把该键值存放在cdata[1] */
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);
     }            

void writetocard()
{
    xdata uchar id[ID_LEN+1], number[NUMBER_LEN+1], cdata[3];
    xdata uchar f, addr, staff_no[3];
    xdata int i, j, len, num, table_num;

    cardtype(1);

    clsn(1,16);
    do {
sel_1:
        moveto(3,1);
        putstr("请输入工号: ");
		moveto(3,13);
		putstr_h("  ");
		moveto(3,13);
		f=ksh(cdata,0,2,0); /* 等待输入一串字符,只允许是数字,最多2位 */
		if(f==0) {      /* 输入不是数字加确认键 */
			if (cdata[1] == 0) /* 若输入是数值加其它功能键 */
			{
                bell(5);
                continue;
			} else { /* 否则所按第一个键即为功能键 */
                moveto(15,1);
                putstr_h("输入错误!");
                bell(5);
                clsn(15,2);
			}
		}    
    } while(!f);
    if ((cdata[0] == '0') && (cdata[1] == '0'))
    {
            moveto(15,1);
            putstr_h("输入错误!");
            bell(5);
            clsn(15,2);
            goto sel_1;
    }
    if (cdata[1] == 0)
    {
        if (cdata[0] == '0')
        {
            moveto(15,1);
            putstr_h("输入错误!");
            bell(5);
            clsn(15,2);
            goto sel_1;
        }
        cdata[1] = cdata[0];
        cdata[0] = '0';
    }
    
    staff_no[0] = cdata[0];
    staff_no[1] = cdata[1];
    staff_no[2] = 0;

    do {
sel_2:
        moveto(5,1);
        putstr("请输入桌号: ");
		moveto(5,13);
		putstr_h("  ");
		moveto(5,13);
		f=ksh(cdata,0,2,0); /* 等待输入一串字符,只允许是数字,最多2位 */
		if(f==0) {      /* 输入不是数字加确认键 */
			if (cdata[1] == 0) /* 若输入是数值加其它功能键 */
			{
                bell(5);
                continue;
			} else { /* 否则所按第一个键即为功能键 */
                moveto(15,1);
                putstr_h("输入错误!");
                bell(5);
                clsn(15,2);
			}
		}    
    } while(!f);
    cdata[2] = 0;
    if (strlen(cdata) == 0)
    {
        table_num = 0;
    }
    else
        table_num = stoi(strlen(cdata), cdata);

    if (table_num == 0)
    {
            moveto(15,1);
            putstr_h("输入错误!");
            bell(5);
            clsn(15,2);
            goto sel_2;
    }

    moveto(9, 1);
    putstr_h("F1重新输入,F2写卡退出");
    do
    {
        f = key(0);
    }
    while (f != F1 && f != F2);
    if (f == F1)
    {
        clsn(1,16);
        goto sel_1;
    }

    clsn(1,16);
    moveto(3,5);
    putstr_h("请插卡!");
    while(cardtest());
    poweron();
    if (cardcomp(6, "FFFFFF"))
    {
        cls();
        moveto(3,5);
        putstr_h("密码错误!");
        key(0);
        return;
    }
    clsn(1,16);
    moveto(3,3);
    putstr_h("正在写卡...");
    j = 0;
    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)
        {
            libset(i, ID);
            libread(id);
            addr = (uchar)(0x24 + j * (ID_LEN + 1));
            cardwrit(0, addr, ID_LEN, id);
            
            len = strlen(number);
            stoi(len, number);
            cdata[0] = stoi(len, number);
            cardwrit(0, addr+3, 1, cdata);
            j++;
        }
    }

    cdata[0] = j;
    addr = 0x20;
    cardwrit(0, addr, 1, cdata);
    addr = 0x21;
    cardwrit(0, addr, 2, staff_no);
    addr = 0x23;
    cdata[0] = table_num;
    cardwrit(0, addr, 1, cdata);
    
    poweroff();
    clsn(1,16);
    moveto(3,3);
    putstr_h("写卡完成!\n按任意键退出...");
    key(0);
    exit(0);
}

void change()
{
    xdata int num, j, curr_record;
	xdata uchar id[ID_LEN+1], number[NUMBER_LEN+1];
    xdata uchar f, cdata[7];

    do {
sel_1:
        clsn(13,4);
        moveto(15,1);
		putstr("输入编号:");
		moveto(15,10);
		putstr_h("  ");
		moveto(15,10);
		f=ksh(cdata,0,3,0); /* 等待输入一串字符,只允许是数字,最多2位 */
		if(f==0) {      /* 输入不是数字加确认键 */
			if (cdata[1] == 0) /* 若输入是数值加其它功能键 */
			{
                bell(5);
				continue;
			} else { /* 否则所按第一个键即为功能键 */
				    if (cdata[1] == ENTER)
				    {
                        return;    /* 退回上层菜单 */
				    }
                moveto(15,1);
                putstr_h("输入错误!");
                bell(5);
                clsn(15,2);
			}
        }
    } while(!f);
        
    for (j = 0; j < total; j++)
    {
	    libset(j, ID);
	    libread(id);
        if (!strncmp(cdata, id, 3)) 
        {
                break;
        }
    }
    if (j >= total)
    {
        moveto(15,1);
        putstr_h("未找到该菜!");
        bell(5);
        goto sel_1;
    }
    libset(j, NUMBER);
    libread(number);
    if (strlen(number) == 0)
    {   
        num = 0;
    }
    else
        num = stoi(strlen(number), number);
    if (num == 0)
    {
        clsn(13,4);
        moveto(13,1);
        putstr_h("你未点该菜,F1点该菜,ENTER退出");
        do
        {
            f = key(0);
        }
        while (f != F1 && f != ENTER);
        if (f == ENTER)
        {
            return;
        }
    }
    select_cai(j);
    return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -