if(fwrite(&stu[i],sizeof(structstudent),1,fp)!
=1)写进指定文件中并进{printf("filewriteerror!
");行判断是否写入*/
exit(0);
}
fread(&stu_temp,sizeof(structstudent),1,fp);/*将文件中的指定内容调出*/
}
单词库存储在指定路径的指定文件中方便后文的查询和调出
单词库的建立利用结构体可以包含一词多义,并将汉译英和英译汉的词典库分开以便实现英汉互译(在中文dos环境下运行)
图例:
(未在中文dos环境下运行)
2.设计词典图形用户界面
参考文件进行图形驱动
voidinit()
{
intgdriver,gmode,i,j;
gdriver=DETECT;
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver,&gmode,"");
}
图例(未设置鼠标前)
上网查找相关资料调用鼠标
鼠标绘制函数
设置鼠标指针位置函数
设置函数得到鼠标左右键点击的不同状态
(设置鼠标后运行结果全屏无法截图)
在图形界面下设计用户界面并使用该鼠标设置相关区域的鼠标键点击后
得到不同的结果,进入英译汉或汉译英界面
3.查找单词及词典的重复使用(考虑一词多义)
利用文件指针和函数fseek,fread对结构体内的单词名称查找和该相关释义的调用同时考虑英汉互译
设置查找不到单词的页面和利用while语句使实现词典是否需要重复使用功能
图例:
三、实验结果及心得
根据题目描述基本达到题目要求。
在实验过程中对照老师给予的帮助程序和相关软件不断构思得到大致的框架,不断的调试不断的查询函数用法的同时加深对c语言的认识,也许只是简单的一句话也许只是简单的一个功能也是需要一个一个经过深思熟虑的代码敲打出来。
此次试验中了解图形用户界面,相关文件的存储和调用,鼠标的调用及使用等等平常没有接触到的c语言的知识。
深深感受到c语言博大精深,将为以后的软件方面知识的学习打下深刻的基础。
四、代码(dictionary)
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#defineSIZE2/*设置词典的词汇量*/
#defineNO_PRESSED0/*为读取鼠标的各个状态*/
#defineLEFT_PRESSED1
#defineRIGHT_PRESSED2
voidDrawMouse(floatx,floaty);
intsetMousePos(intx,inty);
intmouseStatus(int*x,int*y);
voidinit();
voidbox(intstartx,intstarty,inthigh,intwidth);
structword
{
charname[10];/*存储英译中词典单词名*/
charexp[3][20];/*存储英译中词典单词释义*/
charnamm[10];/*存储中译英词典单词名*/
charexx[3][20];/*存储英译中词典单词释义*/
};/*创建存放单词及其释义的结构体*/
charbuf[20*20*4];/*设置缓存区*/
main()
{
char*f[]={"Chinese-EnglishTranslation(中译英)","English-ChineseTranslation(英译中)"};
intkey,y,x;
charu;
intt=0,r;
into1[SIZE];
into2[SIZE];/*o1,o2数组用来储存单词的释义数目*/
charseek[10];/*存储查询功能时用户输入的单词*/
intlast_x,last_y;
intx1,y1;intx0,y0;
intm=0;
structwordstu[SIZE],stu_eg;/*为读取文件中内容设定的相关结构体变量*/
FILE*fp;/*定义文件指针*/
inti,j;
fp=fopen("c:
\","wb+");
if(fp==NULL)
{
printf("cannotopenthisfile\n");
exit(0);
}/*创建或打开特定路径的文件*/
for(i=0;i{
puts("Englishword:
");
scanf("%s",&stu[i].name);/*添加英译中词典中单词名*/
u='y';/*字符变量u存储用户输入的键盘值查询用户是否需要添加释义*/
j=0;/*变量j的数值能控制每个单词释义在三个之内*/
while(u=='y'&&j<=2)
{
o1[i]=j;/*int类型数组o1记载每个单词拥有的释义数*/
printf("Chineseexplanation%d:
",j+1);
y=wherey();
scanf("%s",stu[i].exp[j]);
gettext(1,1,60,14,buf);
if(j<2)
printf("\nanotherexplaination('n'or'y')\n");
getchar();
scanf("%c",&u);
clrscr();
puttext(1,1,60,14,buf);
gotoxy(1,y+2);
j++;
}
clrscr();
}/*添加英译中词典中单词*/
/*利用循环语句添加单词释义实现一次多义功能*/
for(i=0;i{
puts("中文单词:
");
scanf("%s",&stu[i].namm);
u='y';
j=0;
while(u=='y'&&j<=2)
{
o2[i]=j;
printf("英文释义%d:
",j+1);
y=wherey();
scanf("%s",stu[i].exx[j]);
gettext(1,1,60,14,buf);
if(j<2)
printf("\n增加释义('n'or'y')\n");
getchar();
scanf("%c",&u);
clrscr();
puttext(1,1,60,14,buf);
gotoxy(1,y+2);
j++;
/*相关解释同上文英译汉词典中注释*/
}/*添加中译英词典中单词*/
clrscr();
}
for(i=0;iif(fwrite(&stu[i],sizeof(structword),1,fp)!
=1)
{
printf("filewriteerror!
");
exit(0);
}/*利用文件指针和fwrite语句将单词存
放在指定打开文件中/*
window(1,1,80,25);
gettext(20,10,40,14,buf);
u='y';
init();
x0=250;
y0=250;/*设定鼠标的初始位置*/
textbackground(15);
textcolor(0);
clrscr();
outtextxy(180,220,f[0]);/*在设定好的背景颜色和字体颜色下指定位置输出目录文字*/
outtextxy(180,270,f[1]);
setMousePos(x0,y0);
setwritemode
(1);
DrawMouse(x0,y0);/*调用相关的鼠标函数*/
last_x=x0;
last_y=y0;
line(170,210,470,210);line(170,240,470,240);
line(170,260,470,260);line(170,290,470,290);
line(170,210,170,240);line(470,210,470,240);
line(170,260,170,290);line(470,260,470,290);/*设计界面相关文字的框框*/
while(m==0)
{
m=0;
while(mouseStatus(&x1,&y1)==NO_PRESSED&&m==0)
{
if(last_x!
=x1&&last_y!
=y1)
{
DrawMouse(last_x,last_y);
DrawMouse(x1,y1);
last_x=x1;
last_y=y1;
}
}/*设计当鼠标坐标移动且没有按下任何键时鼠标的移动轨迹*/
while(!
(mouseStatus(&x1,&y1)==NO_PRESSED))
{
if(mouseStatus(&x1,&y1)==LEFT_PRESSED&&x1>170&&x1<470&&y1>210&&y1<240)
{
m=1;
break;
}
if(mouseStatus(&x1,&y1)==LEFT_PRESSED&&x1>170&&x1<470&&y1>260&&y1<290)
{
m=2;
break;
}
if(x1<170||x1>470||y1<210||y1>290);
}/*设定鼠标在界面内一定区域进行相关点
击后实现的功能*/
}
restorecrtmode();/*设计词典的界面*/
while(u=='y')/*利用u=='y'使词典能重复使用*/
while
(1)
{
textbackground(3);
textcolor(15);
if(m==1)
{
t=0;
clrscr();
box(15,10,10,65);
gotoxy(27,7);
printf("English-ChineseTranslation");
gotoxy(31,12);
rewind(fp);
printf("entertheword:
");
gotoxy(31+strlen("entertheword:
"),12);/*设计英译汉词典查找功能时的页面*/
scanf("%s",seek);
for(i=0;i{
if(strcmp(stu[i].name,seek)==0)
{
t=1;
break;
}
}/*利用字符串strcmp函数实现查找对比功能*/
if(t==1)/*如果找到相同单词名令t=1,判断是否执行下个步骤*/
{
fseek(fp,i*sizeof(structword),0);
fread(&stu_eg,sizeof(structword),1,fp);
gotoxy(31,15);
for(j=0;j<=o1[i];j++)
{
if(j==0)
printf("theexplanationis:
(%d)%s",j+1,[j]);
else
{
gotoxy(31+strlen("theexplanationis:
"),15+j);
printf("(%d)%s",j+1,[j]);
}
}/*如果t=1,找到该单词在文件中存储的位置后,利用循环结构,fseek和fread语句将其所有释义调出,循环的判断次数取决o1数组内相对应的数字*/
}
for(i=0;i{
for(r=0;r<=o2[i];r++)
{
if(strcmp(stu[i].exx[r],seek)==0)
{
t=2;
break;
}
}/*如果找到相同单词释义令t=2,判断是否执行下个步骤*/
if(t==2)
break;
}
if(t==2)
{
rewind(fp);
fseek(fp,(i)*sizeof(structword),0);
fread(&stu_eg,sizeof(structword),1,fp);
gotoxy(31,15);
printf("theexplanationis:
(1)%s",;
/*如果t=2在汉译英词典库中找到相关释义并将其单词名调出*/
}
if(t==0)
{
gotoxy(31,15);
printf("sorry,don'tfindit");/*词典库中没有此单词则输出sorry,don'tfindit*/
}
getchar();
scanf("%c",&u)
clrscr();/*停顿使用户看清结果*/
gotoxy(22,10);
printf("Doyouwantuseisagain('n'or'y')");
gotoxy(35,14);
printf("enter:
");
gotoxy(35+strlen("enter:
"),14);/*设计没有查到单词的界面*/
scanf("%c",&u);
break;/*对u进行赋值来判定用户是否需要重新使用词典*/
}
if(m==2)
{
t=0;
clrscr();
gotoxy(38,7);
printf("汉译英");
box(20,10,10,60);
gotoxy(35,12);
rewind(fp);
printf("输入单词:
");
gotoxy(35+strlen("输入单词:
"),12);
scanf("%s",seek);
for(i=0;i{
if(strcmp(stu[i].namm,seek)==0)
{
t=1;
break;
}
}
if(t==1)
{
fseek(fp,i*sizeof(structword),0);
fread(&stu_eg,sizeof(structword),1,fp);
gotoxy(35,15);
for(j=0;j<=o2[i];j++)
{
if(j==0)
printf("释义:
(%d)%s",j+1,[j]);
else
{
gotoxy(35+strlen("释义:
"),15+j);
printf("(%d)%s",j+1,[j]);
}
}
}
for(i=0;i{
for(r=0;r<=o2[i];r++)
{
if(strcmp(stu[i].exp[r],seek)==0)
{
t=2;
break;
}
}
if(t==2)
break;
}
if(t==2)
{
rewind(fp);
fseek(fp,(i)*sizeof(structword),0);
fread(&stu_eg,sizeof(structword),1,fp);
gotoxy(35,15);
printf("释义:
(1)%s",;
}
if(t==0)
{
gotoxy(35,15);
printf("对不起,没有这个单词");
}
getchar();
scanf("%c",&u);
clrscr();
gotoxy(27,10);
printf("重新查询('n'or'y')");
gotoxy(35,14);
printf("输入:
");
gotoxy(35+strlen("输入:
"),14);
scanf("%c",&u);
break;/*相关注释参考上文英译中词典*/
}
}
}
intmouseStatus(int*x,int*y)
{
/*定义两个寄存器变量,分别存储入口参数和出口参数*/
unionREGSinregs,outregs;
intstatus;
status=NO_PRESSED;
/*入口参数AH=3,读取鼠标位置及其按钮状态*/
int86(0x33,&inregs,&outregs);
/*CX表示水平位置,DX表示垂直位置*/
*x=*y=/*BX表示按键状态*/
if&1)
status=LEFT_PRESSED;
elseif&2)
status=RIGHT_PRESSED;
return(status);
}
/*设置鼠标指针位置函数*/
intsetMousePos(intx,inty)
{
unionREGSinregs,outregs;
/*入口参数AH=4,设置鼠标指针位置*/
int86(0x33,&inregs,&outregs);
}
/*绘制鼠标函数*/
voidDrawMouse(floatx,floaty)
{
line(x,y,x+5,y+10);
line(x,y,x+10,y+5);
line(x+5,y+10,x+10,y+5);
line(x+7,y+8,x+12,y+13);
line(x+8,y+7,x+13,y+12);
line(x+14,y+12,x+13,y+13);/*利用line函数一条一条绘制鼠标形状*/
}
voidinit()/*进行相关图形驱动*/
{
intgdriver,gmode,i,j;
gdriver=DETECT;
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver,&gmode,"");
}
voidbox(intstartx,intstarty,inthigh,intwidth)/*框框的建立*/
{
inti;
gotoxy(startx,starty);
putch(0xda);
for(i=startx+1;iputch(0xc4);
putch(0xbf);
for(i=starty+1;i{
gotoxy(startx,i);
putch(0xb3);
gotoxy(width,i);
putch(0xb3);
}
gotoxy(startx,starty+high-1);
putch(0xc0);
gotoxy(startx+1,starty+high-1);
for(i=startx+1;iputch(0xc4);
putch(0xd9);
return;
}精心搜集整理,只为你的需要