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

📄 exam.c

📁 嵌入式点菜系嵌入式点菜系统源码供参考c51c51统源码供参考嵌入式点菜系统源码供参考c51c51c51c51
💻 C
字号:
#include "hncc.h"

xdata char mm,nn;
void drawblock(xdata char,xdata char,xdata char,xdata char);
void ver(xdata char);
void xf(void);
void cx(void);

void readcard(void);
void clock(void);
void calculate(void);
void database(void);
void transmit(void);

void main(void)
{
 xdata char k;

 do{
   cls();
   drawblock(3,3,30,124);
   moveto(2,2);
   putstr("手持机编程示例");
   moveto(5,1);
   putstr("[1].读卡显示\n[2].时钟显示\n[3].计算器\n[4].数据库\n[5].通讯");
   moveto(15,1);
   putstr("[ENTER].退出");
   do{
     k=key(0);
   }while((k<'1')||(k>'5')&&(k!=0x8D));
   if(k==0x8D) break;
   switch(k){
        case '1':
          readcard();
          break;
        case '2':
          clock();
          break;
        case '3':
          calculate();
          break;
        case '4':
          database();
          break;
        case '5':
          transmit();
          break;
   }
 }while(1);
}

void readcard(void)
{
 xdata char x=1,y=1,a,b,k,l,i,o[256];

 do{
   cls();
   moveto(2,1);putstr("SIE4418/28/32/42\n  读卡程序V1.0");
   moveto(8,1);putstr("1.SIM4418/4428卡\n2.SIM4432/4442卡\n3.ATMEL    16k卡");
   moveto(15,1);putstr("[ENTER].退出");
   do{
        k=key(0);
   }while((k<'1')||(k>'3')&&(k!=0x8D));
   if(k=='1') cardtype(0);
   else if(k=='2') cardtype(1);
   else if(k=='3') cardtype(2);
   else break;
   cls();
   moveto(1,1);putstr("请输入页号:");
   moveto(4,1);putstr("4418/28卡(0--3)");
   moveto(7,1);putstr("4432/42卡(0)");
   moveto(10,1);putstr("atm 16k卡(0--7)");
   moveto(13,1);putstr("8:上一次读卡内容");
   do{
     k=key(0);
   }while((k<'0')||(k>'8'));
   if(k!='8')
   {
        cls();
        moveto(3,5);putstr("请插卡!");
        while(cardtest());
        poweron();
        cls();
        moveto(3,3);putstr("正在读卡...");
        l=k-0x30;
        cardread(l,0,256,o);
   }
   i=0;
   do{
        cls();
        for(b=0;b<16;b++)
        {
          ver(i);
          moveto(x,y);
          putch(mm);putch(nn);putch('H');
          y+=4;
          for(a=0;a<4;a++)
          {
            moveto(x,y);
            ver(o[i]);
            putch(' ');putch(mm);putch(nn);
            i++;
            y+=3;
          }
          x++;y=1;
        }
        do{
          k=key(0);
        }while((k!=0x8e)&&(k!=0x8f)&&(k!=0x8d));
        if(k==0x8e)
          i-=0x80;
        x=1;y=1;
   }while(k!=0x8d);
 }while(1);
 poweroff();
}

void clock(void)
{
 xdata char i,s[8];

 cls();
 moveto(2,1);putstr("你好!现在是:\n\n 19  年  月  日");
 moveto(8,3);putstr("午  时  分  秒");
 moveto(15,1);putstr("请按[确认]键退出");

 getdate(s);
 moveto(7,4);putch(s[0]);putch(s[1]);
 moveto(7,8);putch(s[3]);putch(s[4]);
 moveto(7,12);putch(s[6]);putch(s[7]);
 moveto(8,1);gettime(s);
 if(s[0]>'2') putstr("下");
 else
   putstr("上");
 do{
   gettime(s);
   if(s[0]>'2') s[0]-=8;
   moveto(9,5);
   putch(s[0]);putch(s[1]);
   moveto(9,9);
   putch(s[3]);putch(s[4]);
   moveto(9,13);
   putch(s[6]);putch(s[7]);
   i=keygo();
 }while(!i);
}

void calculate(void)
{
 xdata char c,k,m,n,f,s1[16],s2[16],ls[16];

 user:cls();
 moveto(1,2);
 putstr("┌─────┐");
 moveto(3,2);
 putstr("│          │");
 moveto(5,2);
 putstr("└─────┘");
 moveto(8,1);
 putstr("[↑]:+    [↓]:-");
 moveto(10,1);
 putstr("[F1]:*    [F2]:/");
 moveto(12,1);
 putstr("[清除]   [确认]=");
 moveto(14,1);
 putstr("[运行]quit");

 m=0;
 n=0;
 f=0;

 do{
        do{
                moveto(3,m+4);
                k=key(0);
        }while(((k<'.')||(k>'9'))&&(k!=0x8e)&&(k!=0x8f)&&(k!=0x87)&&(k!=0x88)&&(k!=0x89)&&(k!=0x8d)&&(k!=0x82));
        if((k>='.')&&(k<='9'))
        {
                moveto(3,m+4);
                putch(k);
                ls[m]=k;
                m++;
        }
        else if(k==0x82)
                goto user;
        else if(k==0x87)
                break;
        else
        {
                if(k==0x8d)
                  k=f;
                if(m==0)
                  f=k;
                else if(n==0)
                {
                        ls[m]=0;
                        strncpy(s1,ls,12);
                        n=1;
                        f=k;
                        moveto(3,4);putstr("     ");
                        moveto(4,4);putstr(s1);
                }
                else
                {
                        ls[m]=0;
                        strncpy(s2,ls,12);
                        switch(f){
                                case 0x8e:
                                  stradd(s1,s2,12);
                                  break;
                                case 0x8f:
                                  strsub(s1,s2,12);
                                  break;
                                case 0x88:
                                  strmul(s1,s2,12);
                                  break;
                                case 0x89:
                                  strdiv(s1,s2,12);
                                  break;
                        }
                        f=k;
                        moveto(3,4);putstr("     ");
                        moveto(4,4);putn(10,s2);strncpy(s1,s2,12);
                }
                moveto(3,16);
                switch(k){
                        case 0x8e:
                          k='+';
                          break;
                        case 0x8f:
                          k='-';
                          break;
                        case 0x88:
                          k='*';
                          break;
                        case 0x89:
                          k='/';
                          break;
                }
                putch(k);
                m=0;
        }
 }while(1);
}

void transmit(void)
{
 xdata char k,c,k1=0;

 do{
        cls();
        moveto(1,1);
        putstr("1.按键发送\n2.接收按键\n3.退出\n\n与该程序配合的上位机通讯程序是: tx.exe");
        k=key(0);
        if(k=='1')
        {
                cls();
                moveto(1,1);putstr("请按键:\n\n\n\n\n按[确认]键退出!");
                moveto(4,1);
                do{
                        k1=key(0);putch(k1);
                        comini(BAND96,0);comwrit(k1);
                }while(k1!=0x8D);
        }
        else if(k=='2')
        {
                cls();
                moveto(1,1);putstr("正在接收:");
                moveto(4,1);
                comini(BAND96,0);
                do{
                        comread(&c);
                        putch(c);
                }while(c!=0x1b);
        }
 }while(k!='3');
}

void database(void)
{
 xdata char k;

 do{
   cls();
   screen(1);
   moveto(1,1);putstr("1.数据库内容查询\n2.数据库内容修改\n[F2].退出");
   moveto(8,1);
   putstr("运行该程序前请将LIB.DBF文件作为第一数据库下装手持机.");
   do{
      k=key(0);
   }while((k!='1')&&(k!='2')&&(k!=0x89));
   switch(k){
      case '1':
        cx();
        break;
      case '2':
        xf();
        break;
   }
 }while(k!=0x89);
}

void xf(void)
{
 xdata char i,j,n,k;
 xdata char s[15],d[15],f[15],dat[10],bh[10];

 screen1:
 cls();
 moveto(1,1);
 putstr("请输入编号:");
 moveto(4,1);putch('_');moveto(4,1);
 keysn(s,8);
 libopen(0);
 n=libsumr();
 for(i=0;i<n;i++)
 {
   libset(i,0);
   j=libread(d);
   if(!strncmp(s,d,j)) break;
 }
 if(i==n)
 {
   cls();
   moveto(5,4);
   putstr("无此编号!");
   bell(6);
 }
 else{
   moveto(5,1);
   putstr("更改编号吗?\nF1.更改  F2.放弃");
   do{
     k=key(0);
   }while((k!=0x88)&&(k!=0x89));
   if(k==0x88)
   {
     cls();
     moveto(1,1);
     putstr("输入新编号:");
     moveto(4,1);putch('_');moveto(4,1);
     keysn(bh,8);
   }
   else{
     libset(i,0);
     libread(bh);
     moveto(5,1);putstr("        ");
     moveto(7,1);putstr("        ");
   }
   moveto(5,1);
   putstr("当前日期:");
   getdate(s);
   s[5]=s[4];s[4]=s[3];s[3]=s[1];s[2]=s[0];s[0]='1';s[1]='9';
   strncpy(dat,s,8);
   moveto(8,1);putn(8,s);
   moveto(10,1);
   putstr("请输入消费金额:");
   moveto(13,1);putch('_');moveto(13,1);
   keysn(s,10);
   libset(i,2);
   j=libread(d);
   memncpy(f,s,10);
   strsub(d,f,10);
   if(f[0]=='-')
   {
     cls();
     moveto(5,2);
     putstr("剩余金额不够!");
     bell(6);
   }
   else{
     cls();
     moveto(1,1);
     putstr("消费前剩余金额:\n\n消费金额:\n\n消费后剩余金额:\n\nF1.ok    F2.quit");
     moveto(3,1);putn(j,d);
     moveto(7,1);putn(10,s);
     moveto(11,1);putn(10,f);
     do{
       k=key(0);
     }while((k!=0x88)&&(k!=0x89));
     if(k==0x88)
     {
       libset(i,0);
       libwrite(bh);
       libset(i,2);
       libwrite(f);
       libset(i,3);
       libwrite(dat);
     }
   }
 }
 cls();
 moveto(5,1);
 putstr("继续消费吗?\n\n\nF1.继续  F2.退出");
 do{
   k=key(0);
 }while((k!=0x88)&&(k!=0x89));
 if(k==0x88)
   goto screen1;
}

void cx(void)
{
  xdata char k,n,i,j,m,cc,c[5],aa,a[5],s[15],d[15];

  screen(1);
  libopen(0);
  n=libsumr();
  i=0;
  cc=itos(n,c);
  do{
    cls();
    moveto(1,1);
    putstr("记录号:\n\n编号:\n姓名:\n余额:\n日期:");
    moveto(1,9);putn(cc,c);
    moveto(1,11);putstr("--");
    aa=itos(i+1,a);
    moveto(1,14);putn(aa,a);
    for(j=0;j<4;j++)
    {
      libset(i,j);
      m=libread(s);
      moveto(5+j*2,7);
      putn(m,s);
    }
    moveto(15,1);
    putstr("[↑]  [↓]  [F2]");
    do{
      k=key(0);
    }while((k!=0x8e)&&(k!=0x8f)&&(k!=0x89));
    switch(k){
      case 0x8e:
        if(i==0)
          i=n-1;
        else
          i--;
        break;
      case 0x8f:
        if(i==(n-1))
          i=0;
        else
          i++;
        break;
    }
  }while(k!=0x89);
  screen(0);
}

void ver(xdata char a)
{
 char i;
 i=a;
 a>>=4;
 a&=0x0f;
 if(a>9) a+=0x7;
 a+=0x30;
 mm=a;
 i&=0x0f;
 if(i>9) i+=0x7;
 i+=0x30;
 nn=i;
}

void drawblock(xdata char x1,xdata char y1,xdata char x2,xdata char y2)
{
 xdata char i;

 for(i=0;i<(y2-y1+1);i+=2)
   setdot(x1,y1+i);
 for(i=0;i<(y2-y1+1);i+=2)
   setdot(x2,y1+i);
 for(i=0;i<(x2-x1+1);i+=2)
   setdot(x1+i,y1);
 for(i=0;i<(x2-x1+1);i+=2)
   setdot(x1+i,y2);
}

⌨️ 快捷键说明

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