您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > c语言课程设计-电子英汉词典(含源码)
1C语言课程设计软件学院指导老师:学号:姓名:2一、实验题目及要求题目:电子英汉词典设计要求:1.用图形用户界面实现2.能够编辑词典库中的信息3.能够实现英译汉,汉译英。(要考虑一词多义)二、实验过程主要思想:1建立词典库(相关文件的处理)2设计词典图形用户界面3查找单词及词典的重复使用(实现一词多义)3主要过程1.词典库的建立:文件的建立,写入和调出参考老师给的FILE.C文件FILE.C大致内容{FILE*fp/*建立文件指针*/fp=fopen(d:\list.txt,wb+);/*在指定路径建立文本文件*/for(i=0;iSIZE;i++)/*将结构体中的内容if(fwrite(&stu[i],sizeof(structstudent),1,fp)!=1)写进指定文件中并进{printf(filewriteerror!);行判断是否写入*/exit(0);}fread(&stu_temp,sizeof(structstudent),1,fp);/*将文件中的指定内容调出*/}单词库存储在指定路径的指定文件中方便后文的查询和调出单词库的建立利用结构体可以包含一词多义,并将汉译英和英译汉的词典库分开以便实现英汉互译(在中文dos环境下运行)图例:(未在中文dos环境下运行)42.设计词典图形用户界面参考文件Graph.c进行图形驱动voidinit(){intgdriver,gmode,i,j;gdriver=DETECT;registerbgidriver(EGAVGA_driver);initgraph(&gdriver,&gmode,);}图例(未设置鼠标前)上网查找相关资料调用鼠标鼠标绘制函数设置鼠标指针位置函数设置函数得到鼠标左右键点击的不同状态(设置鼠标后运行结果全屏无法截图)在图形界面下设计用户界面并使用该鼠标设置相关区域的鼠标键点击后得到不同的结果,进入英译汉或汉译英界面53.查找单词及词典的重复使用(考虑一词多义)利用文件指针和函数fseek,fread对结构体内的单词名称查找和该相关释义的调用同时考虑英汉互译设置查找不到单词的页面和利用while语句使实现词典是否需要重复使用功能图例:三、实验结果及心得根据题目描述基本达到题目要求。在实验过程中对照老师给予的帮助程序和相关软件不断构思得到大致的框架,不断的调试不断的查询函数用法的同时加深对c语言的认识,也许只是简单的一句话也许只是简单的一个功能也是需要一个一个经过深思熟虑的代码敲打出来。此次试验中了解图形用户界面,相关文件的存储和调用,鼠标的调用及使用等等平常没有接触到的c语言的知识。深深感受到c语言博大精深,将为以后的软件方面知识的学习打下深刻的基础。6四、代码(dictionary)#includeprocess.h#includestdlib.h#includestdio.h#includedos.h#includeconio.h#includestring.h#includegraphics.h#includestdlib.h#includebios.h#defineSIZE2/*设置词典的词汇量*/#defineNO_PRESSED0/*为读取鼠标的各个状态*/#defineLEFT_PRESSED1#defineRIGHT_PRESSED2voidDrawMouse(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];7into2[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:\list.txt,wb+);if(fp==NULL){printf(cannotopenthisfile\n);exit(0);}/*创建或打开特定路径的文件*/for(i=0;iSIZE;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(j2)printf(\nanotherexplaination?('n'or'y')\n);getchar();scanf(%c,&u);clrscr();puttext(1,1,60,14,buf);gotoxy(1,y+2);j++;}clrscr();8}/*添加英译中词典中单词*//*利用循环语句添加单词释义实现一次多义功能*/for(i=0;iSIZE;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(j2)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;iSIZE;i++)if(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;/*设定鼠标的初始位置*/9textbackground(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&&x1170&&x1470&&y1210&&y1240){m=1;break;}if(mouseStatus(&x1,&y1)==LEFT_PRESSED&&x1170&&x1470&&y1260&&y1290){10m=2;break;}if(x1170||x1470||y1210||y1290);}/*设定鼠标在界面内一定区域进行相关点击后实现的功能*/}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;iSIZE;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++)11{if(j==0)printf(theexplanationis:(%d)%s,j+1,stu_eg.exp[j]);else{gotoxy(31+strlen(theexplanationis:),15+j);printf((%d)%s,j+1,stu_eg.exp[j]);}}/*如果t=1,找到该单词在文件中存储的位置后,利用循环结构,fseek和fread语句将其所有释义调出,循环的判断次数取决o1数组内相对应的数字*/}for(i=0;iSIZE;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,stu_eg.namm
本文标题:c语言课程设计-电子英汉词典(含源码)
链接地址:https://www.777doc.com/doc-3422205 .html