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

📄 cet4word.c

📁 dos 下的背单词程序
💻 C
字号:
#include<stdio.h>
#include<graphics.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
int win();
void number();
int key();

unsigned long address[98],letter[26];
FILE *hzk_p,*fr;
char big=1,bigbak=1,lit,work=1;
char bigch[3]={0},litch[3]={0};
int group=1;

struct  {         char english[25];
		  char sound[25];
		  char chinese[50];
		  }cet[100];

int cetread(int a)
{
   int i;
   unsigned long addr;
   char c;
   addr=address[a-1];
   rewind(fr);
   fseek(fr,addr,SEEK_SET);
   for(i=0;i<100;i++)
   {
	fread(&a,1,1,fr);
	if(a==0)             break;
	cet[i].english[a]=0;
	fread(cet[i].english,a,1,fr);
	fread(&a,1,1,fr);
	cet[i].sound[a]=0;
	fread(cet[i].sound,a,1,fr);
	fread(&a,1,1,fr);
	cet[i].chinese[a]=0;
	fread(cet[i].chinese,a,1,fr);
    }
    return i;

}


void dishz();

void showchinese(int x,int y,unsigned char *s)
{
    char sa[10]={0},i;
    while(*s!=NULL)
       {  if(0<*s&&*s<0xa0)
	     { for(i=0;0<*s&&*s<0xa0;i++)
		    sa[i]=*s++;
	       sa[i]=0;
	       outtextxy(x,y-5,sa);
	       if(*s==0)  break;
	       x=i*10+x;
	      }
	   dishz(x,y,s);
	   x+=20;
	   s+=2;

       }
}

void get_hz(char incode[],char bytes[])
{
      unsigned char qh,wh;
      unsigned long offset;
      qh=incode[0]-0xa0;
      wh=incode[1]-0xa0;
      offset=(94*(qh-1)+(wh-1))*32L;
      fseek(hzk_p,offset,SEEK_SET);
      fread(bytes,32,1,hzk_p);
}

void dishz(int x0,int y0,char code[])
{
    unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
    register int i,j,x,y,pos;
    char mat[32];
    get_hz(code,mat);
    y=y0;
    for(i=0;i<16;++i)
       {
	    x=x0;
	    pos=2*i;
	    for(j=0;j<16;++j)
	      {
		  if((mask[j%8]&mat[pos+j/8])!=NULL)
			putpixel(x,y,WHITE);
		   ++x;
	       }
	       ++y;
	}
}
void topwin()
{    setviewport(20+3,10+3,620-2,41,1);      /* top window */
     clearviewport();
     showchinese(400,7,"第   大组第   小组");
     if(work==1)
	{
	  showchinese(5,7,"浏览单词");
	/*  showchinese(400,7,"第   大组第   小组");   */
	}
     else if(work==2)
	{    showchinese(5,7,"词意识别"); }

     else if(work==3)
	    showchinese(5,7,"单词查找");
     if(big>9)
	{   bigch[0]=big/10+48;
	    bigch[1]=big%10+48;
	}
     else { bigch[0]=big+48;  bigch[1]=0;  }
     if(lit>9)
	{  litch[0]=lit/10+48;
	   litch[1]=lit%10+48;
	}
     else  { litch[0]=lit+48;  litch[1]=0 ;  }
     outtextxy(425,3,bigch);
     outtextxy(510,3,litch);
}

int look()
{
     int showy=10,i,j;               int res;
while(1)
  {  settextstyle(2,0,7);
     topwin();
     setviewport(20+3,45,620-2,390,1);     /* middle window */
     clearviewport();
     cetread(big);
     for(;(lit-1)<10;)
	 {   showy=10;
	     i=(lit-1);
	     topwin();
	     setviewport(20+3,45,620-2,390,1);
	     for(j=0;j<10;j++)
	       {
		 outtextxy(10,showy+j*30,cet[i*10+j].english);
		 outtextxy(180,showy+j*30,cet[i*10+j].sound);
		 showchinese(370,showy+j*30+5,cet[i*10+j].chinese);
		}
	 lit++;
	 while((res=key())!=1)
	 {
	     switch(res)
	      {
		 case 'g':
		 case 'G':    if(win(1)!=2)  goto next;  break;
		 case 'l':
		 case 'L':    if(win(2)!=3)    goto next;  break;
		 case  4 :    if(lit==2&&big>1)
				  {   big--; lit=10 ;
				      cetread(big);   bigbak=big;
				  }
			      else  if(lit>2 )     lit-=2;
			      goto next;
		 case  3 :    work++; lit--;  return 1;
		 case  2 :    if(win(3)==0)   return 0;
	      }
	  }
      next:  if(lit==11)      { big++;lit=1 ;}
	     if(lit<1||lit>10)    lit=1;
	     if(big>group) { big=1; lit=1;}
	     if(bigbak!=big)
		{   cetread(big);  j=0;  lit=1;  bigbak=big; }
	     clearviewport();
	  }

     big++;  bigbak=big;  lit=1;
   }
}

void set()
{
     setlinestyle(SOLID_LINE,0,THICK_WIDTH);
     line(20,10,620,10);
     line(20,470,620,470);
     line(20,43,620,43);
     line(20,10,20,470);
     line(620,10,620,470);
     line(20,400,620,400);
     setviewport(20+3,400+2,620-2,470-2,1);     /* down window */
     clearviewport();
     outtextxy(3,3,"HELP:");
     outtextxy(70,3,"TAB-");
     showchinese(120,3+5,"选择");
     outtextxy(230,3,"1 2 3 4-");
     showchinese(320,3+5,"答题");
     outtextxy(430,3,"ESC-");
     showchinese(480,3+5,"退出");
     outtextxy(70,30,"G-");
     showchinese(100,30+5,"输入大组号");
     outtextxy(230,30,"L-");
     showchinese(300,30+5,"输入小组号");
}

int key()
{   int a;  char c;
    a=bioskey(0);
    c=a;
    switch(a)
    {  case 0x4800: return 4;
       case 0x5000:
       case 0x4b00:
       case 0x4d00: return 1;
       case 0x011b: return 2;     /* ESC */
       case 0x0f09: return 3;     /* TAB */
    }
    if(c!=0)
      {   c=a&0x00ff;
	   return c;
      }

}

int win(int a)
{    int x0=100,x1=500,y0=100,y1=200,i=0,e,falg=0;
     char c[2]={0},d=0;
     void *buffer;
     setviewport(0,0,639,479,1);
     buffer=(void *)malloc(imagesize(x0-2,y0-2,x1+2,y1+2));
     if(buffer==NULL) {printf("ERROR!"); exit(0);    }
     getimage(x0-2,y0-2,x1+2,y1+2,buffer);
     rectangle(x0,y0,x1,y1);
     setviewport(x0+2,y0+2,x1-2,y1-2,1);
     clearviewport();
     if(a==1)
	{  showchinese(0,5,"请输入大组号:");
	   while((e=key())!=0x0d)
	     {
		if(e==2)   { falg=2; break;}           /* ESC */
		if(e>='0'&&e<='9')
		  {
		   c[0]=e;
		   big=d=(c[0]-'0')+d*10;
		   outtextxy(100+i*20,20,c);
		   i++;
		  }
	      }
	}
     if(a==2)
	 {    showchinese(0,5,"请输入小组号:");
	      while((e=key())!=0x0d)
		 {
		     if(e==2) { falg=3; break; }
		     if(e>='0'&&e<='9')
			{
			   c[0]=e;
			   lit=d=(c[0]-'0')+d*10;
			   outtextxy(100+i*20,20,c);
			   i++;
			 }
		  }
	   }
     if(a==3)
	  {   showchinese(50,25,"要退出本程序吗? [Y]/[N]");
	      e=getch();
	      if(e=='y'||e=='Y')
		   falg=1;
	   }
     setviewport(x0-2,y0-2,x1+2,y1+2,1);
     clearviewport();
     setviewport(0,0,639,479,1);
     putimage(x0-2,y0-2,buffer,1);
     free(buffer);
     setviewport(20+3,45,620-2,390,1);
     switch(falg)
     {  case 0:  return 1;
	case 1:  return 0;
	case 2:  return 2;
	case 3:  return 3;
     }
}

select()
{
     int i,j,k,error=0,right=0,a,showx=10,showy=70;
     unsigned char chuiji[4],s[30];
     topwin();
     cetread(big);
     setviewport(20+3,45,620-2,390,1);
     clearviewport();
     while(1)
       { if(big>group) {  big=1; lit=1; }
	 if(lit<1||lit>10) lit=1;
	 i=lit-1;
	 topwin();
	 if(lit>10) { cetread(++big);  lit=1;i=0 ; }
	 lit++;
	 for(j=0;j<9;j++)
	    {
		  setviewport(20+3,45,620-2,390,1);
		  clearviewport();
		  outtextxy(100,20,cet[i*10+j].english);
		  outtextxy(300,20,cet[i*10+j].sound);
		  number(chuiji,i*10+j);

		  outtextxy(showx,showy,"1.");
		  outtextxy(showx,showy+40,"2.");
		  outtextxy(showx,showy+80,"3.");
		  outtextxy(showx,showy+120,"4.");
		  showchinese(showx+400,showy+200+5,"答案[   ]");
		  for(k=0;k<4;k++)
		    {   if(k==chuiji[0])
			 showchinese(showx+20,showy+k*40+5,cet[i*10+j].chinese);
			else
			  showchinese(showx+20,showy+k*40+5,cet[chuiji[k]].chinese);
		    }
		  while(a=key())
		   {
		     setfillstyle(0,0);
		     bar(showx+450,showy+200,showx+480,showy+220);
		     bar(showx+480,showy+200+20,showx+550,showy+200+50);
		     switch(a)
		       {
			 case '1': outtextxy(showx+460,showy+200,"1"); break;
			 case '2': outtextxy(showx+460,showy+200,"2"); break;
			 case '3': outtextxy(showx+460,showy+200,"3"); break;
			 case '4': outtextxy(showx+460,showy+200,"4"); break;
			 case 'g':
			 case 'G': if(win(1)==2)   break;
				   cetread(big); lit=1;
				   goto  next;
			 case 'l':
			 case 'L': if(win(2)==3)   break;
				   goto next;
			 case  2 : if(win(3)==0)  return 0; break;
			 case  3 : work++; lit--; return 1;
			}
		       k=a-'1';
		       if(k==chuiji[0])
			 { showchinese(showx+480,showy+200+30,"<正确>");
			   right=1;
			   for(k=0;k<4;k++)
			     {  if(k!=chuiji[0])
				 { outtextxy(showx+250,showy+k*40,cet[chuiji[k]].english);
				   outtextxy(showx+400,showy+k*40,cet[chuiji[k]].sound);
				 }
			      }
			  }
		       else  if(0<=k&&k<=3)
			     { showchinese(showx+480,showy+200+30,"<错误>");
			       outtextxy(showx+250,showy+k*40,cet[chuiji[k]].english);
			       outtextxy(showx+400,showy+k*40,cet[chuiji[k]].sound);
			     }
		     if(right==1)
			 { while(getch()==a) delay(100);
			   clearviewport();right=0;  break;
			 }
		    }

	    }
	  next: ;
	}
}

void number( unsigned char *s,int a)
{
      int i;
      s[0]=rand()%4;       /* 0---3 four numbers */
      for(i=1;i<4;i++)
	  {   s[i]=rand()%100 ;   /*  0----99 */
	      if(a==s[i])
		   i--;
	  }
}



int find()
{

      char s[25],now,low,ch,show[2]={0}, not=0;
      int a,i=0;
      char english[25];
      char sound[25];
      char chinese[50];

      topwin();
      setviewport(23,45,620-2,390,1);
again:i=0;
      clearviewport();
      showchinese(30,30,"请输入一个完整单词:");
      while(a=key())
       {   switch(a)
		{  case 2: if(win(3)==0) return 0;  break;
		   case 3: work++; return 1;
		}
	   if((a>='a'&&a<='z')||(a>='A'&&a<='Z'))
		{  show[0]=s[i]=a;  now=s[0];
		   if(now<'a')    now=now+32;
		   outtextxy(50+12*i,50,show);  i++;
		}
	   if(a==0x0d)  {  s[i]='\0';
			   while(s[--i]==' ')
				   s[i]='\0';
			   break;
			 }
	   if(a==0x08)
		{  i--;
		   if(i<0)  i=0;
		   bar(50+12*i,50,62+12*i,70);
		}
       }
      fseek(fr,letter[now-'a'],SEEK_SET);
      while(1)
	 { fread(&ch,1,1,fr);
	   if(ch==0)       { not=1;    break;    }
	   fread(english,ch,1,fr);

	   english[ch]=0;
	   low=english[0];
	   if(low<'a')      low=low+32;
	   if(now!=low)   {  not=1;     break;  }
	   fread(&ch,1,1,fr);
	   fread(sound,ch,1,fr);
	   sound[ch]=0;
	   fread(&ch,1,1,fr);
	   fread(chinese,ch,1,fr);
	   chinese[ch]=0;
	   if(strcmp(s,english)==0)
	       {
		  outtextxy(20,90,english);
		  outtextxy(200,90,sound);
		  showchinese(340,90+5,chinese);
		  showchinese(100,150,"按任意键查下一个");
		  getch();
		  break;
	       }
      }
      if(not==1)  { not=0; showchinese(100,150,"找不到该词");  getch(); }
      goto again;

}



void main()
{
     int graphdriver=VGA;
     int graphmodel=VGAHI;
     int showx,showy,shu,i,j;
     char *s;
     unsigned long filelong;

     hzk_p=fopen("hzk16","rb");
	if(hzk_p==NULL)  { printf("can't not open file!");      getch();  }
     fr=fopen("short.dat","rb");
     if(fr==NULL)
	 printf("Can't open file!\n");
     fseek(fr,-2L,SEEK_END);
     fread(&group,2,1,fr);
     fseek(fr,-(2+group*4),SEEK_END);
     fread(address,4,group,fr);
     fseek(fr,-(2+4*group+4*26),SEEK_END);
     fread(letter,4,26,fr);



     initgraph(&graphdriver,&graphmodel,"");
     setbkcolor(BLACK);
     cleardevice();
     settextstyle(1,0,2);
     settextjustify(LEFT_TEXT,TOP_TEXT);
     set();
     big=lit=1;
     while(1)
     {
       switch(work)
	  {
	    case 1: if(look()==0)   goto back;
		     break;
	    case 2: if(select()==0)  goto back;
		     break;
	    case 3:  if(find()==0)   goto back;
		    break;
	  }
       if(work>3)   work=1;
     }

  back:
     fclose(fr);
     fclose(hzk_p);
     closegraph();

}



⌨️ 快捷键说明

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