📄 exam.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 + -