版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言课程设计软件学院指导教师:**::一、实验题目及要求题目:电子英汉词典设计要求:1.用图形用户界面实现2.能够编辑词典库中的信息3.能够实现英译汉,汉译英。〔要考虑一词多义〕二、实验过程主要思想:1建立词典库〔相关文件的处理〕设计词典图形用户界面查找单词及词典的重复使用〔实现一词多义〕主要过程.词典库的建立:文件的建立,写入和调出参考教师给的FILE.C文件FILE.C大致容{FILE*fp/*建立文件指针*/fp二fopen("d:\list.t*t","wb+");/*在指定路径建立文本文件*/for(i=0;i<SIZE;i++)/*将构造体中的容if(fwrite(&stu[i],sizeof(structstudent),1,fp)!=1) 写进指定文件中并进{printf("filewriteerror!"); 行判断是否写入*/e*it(0);}fread(&stu_temp,sizeof(structstudent),1,fp);/*将文件中的指定容调出*/}单词库存储在指定路径的指定文件中方便后文的查询和调出单词库的建立利用构造体可以包含一词多义,并将汉译英和英译汉的词典库分开以便实现英汉互译〔在中文dos环境下运行〕图例:〔未在中文dos环境下运行〕设计词典图形用户界面参考文件Graph.c进展图形驱动voidinit(){intgdriver,gmode,i,j;gdriver=DETECT;registerbgidriver(EGAVGA_driver);initgraph(&gdriver,&gmode,"");}图例〔未设置鼠标前〕上网查找相关资料调用鼠标鼠标绘制函数设置鼠标指针位置函数设置函数得到鼠标左右键点击的不同状态〔设置鼠标后运行结果全屏无法截图〕在图形界面下设计用户界面并使用该鼠标设置相关区域的鼠标键点击后得到不同的结果,进入英译汉或汉译英界面查找单词及词典的重复使用〔考虑一词多义〕利用文件指针和函数fseek,fread对构造体的单词名称查找和该相关释义的调用同时考虑英汉互译设置查找不到单词的页面和利用while语句使实现词典是否需要重复使用 功能图例:三、实验结果及心得根据题目描述根本到达题目要求。在实验过程中对照教师给予的帮助程序和相关软件不断构思得到大致的框架,不断的调试不断的查询函数用法的同时加深对c语言的认识,也许只是简单的一句话也许只是简单的一个功能也是需要一个一个经过深思熟虑的代码敲打出来。此次试验中了解图形用户界面,相关文件的存储和调用,鼠标的调用及使用等等平常没有接触到的c语言的知识。深深感受到c语言博大精深,将为以后的软件方面知识的学习打下深刻的根底。四、代码〔dictionary〕#include<process.h>#include<stdlib.h>#include<stdio.h>#include<dos.h>#include<conio.h>#include<string.h>#include<graphics.h>#include<stdlib.h>#include<bios.h>#defineSIZE2 /*设置词典的词汇量*/#define NO_PRESSED 0 /*为读取鼠标的各个状态*/#define LEFT_PRESSED 1#define RIGHT_PRESSED 2voidDrawMouse(float*,floaty);intsetMousePos(int*,inty);intmouseStatus(int**,int*y);voidinit();voidbo*(intstart*,intstarty,inthigh,intwidth);structword{charname[10]; /*存储英译中词典单词名*/char e*p[3][20]; /*存储英译中词典单词释义*/charnamm[10]; /*存储中译英词典单词名*/char e**[3][20]; /*存储英译中词典单词释义*/}; /*创立存放单词及其释义的构造体*/charbuf[20*20*4]; /*设置缓存区*/main(){char*f[]={"Chinese-EnglishTranslation(中译英)","English-ChineseTranslation(英译中)”};intkey,y,*;charu;intt=0,r;into1[SIZE];into2[SIZE]; /*o1,o2数组用来储存单词的释义数目*/charseek[10];/*存储查询功能时用户输入的单词*/intlast_*,last_y;int*1,y1;int*0,y0;intm=0;structwordstu[SIZE],stu_eg; /*为读取文件中容设定的相关构造 体变量*/FILE*fp; /*定义文件指针*/inti,j;fp=fopen("c:\list.t*t","wb+");if(fp==NULL){printf("cannotopenthisfile\n");e*it(0);}/*创立或翻开特定路径的文件*/for(i=0;i<SIZE;i++){puts("Englishword:");scanf("%s",&stu[i].name);/*添加英译中词典中单词名*//*字符变量u存储用户输入的键盘值查询用户是否需要添加释义*/j=0;变量j的数值能控制每个单词释义在三个之*/while(u=='y'&&j<=2){o1[i]=j; /*int类型数组o1记载每个单词拥有的释义数*/printf("Chinesee*planation%d:",j+1);y=wherey();scanf("%s",stu[i].e*p[j]);gette*t(1,1,60,14,buf);if(j<2)printf("\nanothere*plaination“('n'or'y')\n");getchar();scanf("%c",&u);clrscr();putte*t(1,1,60,14,buf);goto*y(1,y+2);j++;}clrscr();}/*添加英译中词典中单词*/次义功能*/for(i=0;i<SIZE;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].e**[j]);gette*t(1,1,60,14,buf);if(j<2)printf("\n增加释义"('n'or'y')\n");getchar();scanf("%c",&u);clrscr();putte*t(1,1,60,14,buf);goto*y(1,y+2);j++;}clrscr();/*相关解释同上文英译汉词典中注释*//*添加中译英词典中单词*/}for(i=0;i<SIZE;i++)if(fwrite(&stu[i],sizeof(structword),1,fp)!=1){printf("filewriteerror!"e*it(0);}/*利用文件指针和fwrite语句将单词存放在指定翻开文件中/*window(1,1,80,25);gette*t(20,10,40,14,buf);u='y';init();*0=250;y0=250;/*设定鼠标的初始位置*/te*tbackground(15);te*tcolor(0);clrscr();outte*t*y(180,220,f[0]);/*在设定好的背景颜色和字体颜色下指定位置输出目录文字*/outte*t*y(180,270,f[1]);setMousePos(*0,y0);setwritemode(1);DrawMouse(*0,y0);/*调用相关的鼠标函数*/last_*=*0;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(&*1,&y1)==NO_PRESSED&&m==0){if(last_*!=*1&&last_y!=y1){DrawMouse(last_*,last_y);DrawMouse(*1,y1);last_*=*1;last_y=y1;}}/*设计当鼠标坐标移动且没有按下任何键时鼠标的移动轨迹*/while(!(mouseStatus(&*1,&y1)==NO_PRESSED)){if(mouseStatus(&*1,&y1)==LEFT_PRESSED&&*1>170&&*1<470&&y1>210&&y1<240){m=1;break;}if(mouseStatus(&*1,&y1)==LEFT_PRESSED&&*1>170&&*1<470&&y1>260&&y1<290){m=2;break;}if(*1<170||*1>470||y1<210||y1>290);} /*设定鼠标在界面一定区域进展相关点击后实现的功能*/}restorecrtmode();/*设计词典的界面*/while(u=='y')/*利用u=='y'使词典能重复使用*/while(1){te*tbackground(3);te*tcolor(15);if(m==1){t=0;clrscr();bo*(15,10,10,65);goto*y(27,7);printf("English-ChineseTranslation");goto*y(31,12);rewind(fp);printf("entertheword:");goto*y(31+strlen("entertheword:"),12);/*设计英译汉词典查找功能时的页面*/scanf("%s",seek);for(i=0;i<SIZE;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);goto*y(31,15);for(j=0;j<=o1[i];j++){if(j==0)printf("thee*planationis:(%d)%s",j+1,stu_eg.e*p[j]);else{goto*y(31+strlen("thee*planationis:"),15+j);printf("(%d)%s",j+1,stu_eg.e*p[j]);}}/*如果t=1,找到该单词在文件中存储的位置后,利用 循环构造,fseek和fread语句将其所有释义调出, 循环的判断次数取凝1数组相对应的数字*/}for(i=0;i<SIZE;i++){for(r=0;r<=o2[i];r++){if(strcmp(stu[i].e**[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);goto*y(31,15);printf("thee*planationis:(1)%s",stu_eg.namm);/*如果t=2在汉译英词典库中找到相关释义并将其单词名调出*/}if(t==0){goto*y(31,15);printf("sorry,don'tfindit"); /*词典库中没有此单词则输出sorry,dfoinn'dtit*/}getchar();scanf("%c",&u)clrscr(); /*停顿使用户看清结果*/goto*y(22,10);printf("Doyouwantuseisagain“('n'or'y')");goto*y(35,14);printf("enter:");goto*y(35+strlen("enter:"),14); /*设计没有查到单词的界面*/scanf("%c",&u);break;/*对u进展赋值来判定用户是否需要重新使用词典*/}if(m==2){t=0;clrscr();goto*y(38,7);printf("汉译英");bo*(20,10,10,60);goto*y(35,12);rewind(fp);printf("输入单词:”);goto*y(35+strlen("输入单词:”),12);scanf("%s",seek);for(i=0;i<SIZE;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);goto*y(35,15);for(j=0;j<=o2[i];j++){if(j==0)printf("释义:(%d)%s”,j+1,stu_eg.e**[j]);else{goto*y(35+strlen("释义:"),15+j);printf("(%d)%s",j+1,stu_eg.e**[j]);}}}for(i=0;i<SIZE;i++){for(r=0;r<=o2[i];r++){if(strcmp(stu[i].e*p[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);goto*y(35,15);printf("释义:(1)%s",stu_);}if(t==0){goto*y(35,15);printf("对不起,没有这个单词");}getchar();scanf("%c",&u);clrscr();goto*y(27,10);printf("重新查询"('n'or'y')");goto*y(35,14);printf("输入:");goto*y(35+strlen("输入:"),14);scanf("%c",&u);break; /*相关注释参考上文英译中词典*/}}}intmouseStatus(int**,int*y){/*定义两个存放器变量,分别存储入口参数和出口参数*/unionREGSinregs,outregs;intstatus;status=NO_PRESSED;/*入口参数AH=3,读取鼠标位置及其按钮状态*/inregs.*.a*=3;int86(0*33,&inregs,&outregs);/*C*表示水平位置,D*表示垂直位置*/**=outregs.*.c*;*y=outregs.*.d*;/*B*表示按键状态*/if(outregs.*.b*&1)status=LEFT_PRESSED;elseif(outregs.*.b*&2)status=RIGHT_PRESSED;return(status);}/*设置鼠标指针位置函数*/intsetMousePos(int*,inty){unionREGSinregs,outregs;/*入口参数AH=4,设置鼠标指针位置*/inregs.*.a*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论