版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 C语言课程设计 软件学院 指导老师: 学号: 姓名:一、实验题目及要求题目:电子英汉词典设计要求 : 1.用图形用户界面实现 2.能够编辑词典库中的信息3.能够实现英译汉,汉译英。(要考虑一词多义)二、实验过程 主要思想 : 1 建立词典库(相关文件的处理) 2 设计词典图形用户界面 3 查找单词及词典的重复使用(实现一词多义) 主要过程 1.词典库的建立:文件的建立,写入和调出参考老师给的FILE.C 文件 FILE.C大致内容 FILE *fp/*建立文件指针*/ fp=fopen("d:list.txt","wb+");/*在指定路径建立文本文件
2、*/ for(i=0;i<SIZE;i+) /*将结构体中的内容 if(fwrite(&stui,sizeof(struct student),1,fp)!=1) 写进指定文件中并进 printf("file write error!"); 行判断是否写入*/ exit(0); fread(&stu_temp,sizeof(struct student),1,fp); /*将文件中的指定内容调出*/ 单词库存储在指定路径的指定文件中方便后文的查询和调出 单词库的建立利用结构体可以包含一词多义,并将汉译英和英译汉的词典库分 开以便实现英汉互译(在中文do
3、s环境下运行)图例:(未在中文dos环境下运行)2. 设计词典图形用户界面 参考文件Graph.c 进行图形驱动 void init() int gdriver, gmode, i, j; gdriver = DETECT; registerbgidriver(EGAVGA_driver); initgraph(&gdriver, &gmode, ""); 图例(未设置鼠标前) 上网查找相关资料调用鼠标鼠标绘制函数 设置鼠标指针位置函数 设置函数得到鼠标左右键点击的不同状态 (设置鼠标后运行结果全屏无法截图) 在图形界面下设计用户界面并使用该鼠标设置相关区域
4、的鼠标键点击后得到不同的结果,进入英译汉或汉译英界面 3. 查找单词及词典的重复使用(考虑一词多义) 利用文件指针和函数fseek ,fread 对结构体内的单词名称查找和该相关 释义的调用同时考虑英汉互译 设置查找不到单词的页面和利用while语句使实现词典是否需要重复使用 功能 图例:三、实验结果及心得 根据题目描述基本达到题目要求。 在实验过程中对照老师给予的帮助程序和相关软件不断构思得到大致的框架,不断 的调试不断的查询函数用法的同时加深对c语言的认识,也许只是简单的一句话也许只 是简单的一个功能也是需要一个一个经过深思熟虑的代码敲打出来。 此次试验中了解图形用户界面,相关文件的存储和
5、调用,鼠标的调用及使用等等平常没有接触到的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&
6、gt;#define SIZE 2 /*设置词典的词汇量*/#define NO_PRESSED 0 /*为读取鼠标的各个状态*/#define LEFT_PRESSED 1#define RIGHT_PRESSED 2void DrawMouse(float x,float y);int setMousePos(int x,int y);int mouseStatus(int* x,int* y);void init();void box(int startx,int starty,int high,int width) ;struct word char name10; /*存储英译中词典
7、单词名*/ char exp320; /*存储英译中词典单词释义*/ char namm10; /*存储中译英词典单词名*/ char exx320; /*存储英译中词典单词释义*/; /*创建存放单词及其释义的结构体*/char buf20*20*4; /*设置缓存区*/main() char *f="Chinese-English Translation(中译英)","English-Chinese Translation(英译中)" int key,y,x; char u; int t=0,r; int o1SIZE; int o2SIZE; /*
8、o1,o2数组用来储存单词的释义数目*/ char seek10; /*存储查询功能时用户输入的单词*/ int last_x,last_y; int x1,y1; int x0,y0; int m=0; struct word stuSIZE,stu_eg; /*为读取文件中内容设定的相关结构 体变量*/ FILE *fp; /*定义文件指针*/ int i,j;fp=fopen("c:list.txt","wb+"); if(fp=NULL) printf("cannot open this filen"); exit(0); /
9、*创建或打开特定路径的文件*/ for(i=0;i<SIZE;i+) puts("English word:"); scanf("%s",&); /*添加英译中词典中单词名*/ u='y' /*字符变量u存储用户输入的键盘值 查询用户是否需要添加释义*/ j=0; /*变量j的数值能控制每个单词释义在 三个之内*/ while(u='y'&&j<=2) o1i=j; /*int类型数组o1记载每个单词拥有的 释义数*/ printf("Chinese expl
10、anation %d :",j+1); y=wherey(); scanf("%s",stui.expj); gettext(1,1,60,14,buf); if(j<2) printf("nanother explaination ? ('n'or 'y')n") ; getchar(); scanf("%c",&u); clrscr(); puttext(1,1,60,14,buf); gotoxy(1,y+2); j+; clrscr(); /*添加英译中词典中单词*/ /
11、*利用循环语句添加单词释义实现一次 多义功能 */ for(i=0;i<SIZE;i+) puts("中文单词:"); scanf("%s",&stui.namm); u='y' j=0; while(u='y'&&j<=2) o2i=j; printf("英文释义 %d :",j+1); y=wherey(); scanf("%s",stui.exxj); gettext(1,1,60,14,buf); if(j<2) printf(&qu
12、ot;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;i<SIZE;i+) if(fwrite(&stui,sizeof(struct word),1,fp)!=1) printf("file write error!"); e
13、xit(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,f0); /*在设定好的背景颜色和字体颜色下指 定位置输出目录文字*/ outtextxy(180,270,f1); setMousePos(x0,y0); setwritemode(1); Dra
14、wMouse(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) =
15、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&&am
16、p;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=&
17、#39;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-Chinese Translation"); gotoxy(31,12); rewind(fp); printf("enter the word:"); gotoxy(31+strlen("enter the word:"),12)
18、;/ *设计英译汉词典查找功能 时的页面*/ scanf("%s",seek); for(i=0;i<SIZE;i+) if(strcmp(,seek)=0) t=1; break; /*利用字符串strcmp函数实现查 找对比功能*/ if(t=1) /*如果找到相同单词名令t=1,判 断是否执行下个步骤*/ fseek(fp,i*sizeof(struct word),0); fread(&stu_eg,sizeof(struct word),1,fp); gotoxy(31,15); for(j=0;j<=o1i;j+) if(j
19、=0) printf("the explanation is :(%d) %s",j+1,stu_eg.expj); else gotoxy(31+strlen("the explanation is :"),15+j); printf("(%d) %s",j+1,stu_eg.expj); /*如果t=1,找到该单词在文件中存储的位置后,利用 循环结构,fseek和fread语句将其所有释义调出, 循环的判断次数取决o1数组内相对应的数字*/ for(i=0;i<SIZE;i+) for(r=0;r<=o2i;r+) i
20、f(strcmp(stui.exxr,seek)=0) t=2; break; /*如果找到相同单词释义令t=2,判 断是否执行下个步骤*/ if(t=2) break; if(t=2) rewind(fp); fseek(fp,(i)*sizeof(struct word),0); fread(&stu_eg,sizeof(struct word),1,fp); gotoxy(31,15); printf("the explanation is :(1) %s",stu_eg.namm); /*如果t=2在汉译英词典库中找到相关 释义并将其单词名调出*/ if(t
21、=0) gotoxy(31,15); printf("sorry,don't find it"); /*词典库中没有此单词则输出 sorry,don't find it*/ getchar(); scanf("%c",&u) clrscr(); /*停顿使用户看清结果*/ gotoxy(22,10); printf("Do you want use is again ?('n' or 'y')"); gotoxy(35,14); printf("enter:"
22、); 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);
23、scanf("%s",seek); for(i=0;i<SIZE;i+) if(strcmp(stui.namm,seek)=0) t=1; break; if(t=1) fseek(fp,i*sizeof(struct word),0); fread(&stu_eg,sizeof(struct word),1,fp); gotoxy(35,15); for(j=0;j<=o2i;j+) if(j=0) printf("释义:(%d) %s",j+1,stu_eg.exxj); else gotoxy(35+strlen("
24、释义:"),15+j); printf("(%d) %s",j+1,stu_eg.exxj); for(i=0;i<SIZE;i+) for(r=0;r<=o2i;r+) if(strcmp(stui.expr,seek)=0) t=2; break; if(t=2) break; if(t=2) rewind(fp); fseek(fp,(i)*sizeof(struct word),0); fread(&stu_eg,sizeof(struct word),1,fp); gotoxy(35,15); printf("释义:(1)
25、%s",stu_); 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",&
26、amp;u); break; /*相关注释参考上文英译中词典*/ int mouseStatus(int* x,int* y) /*定义两个寄存器变量,分别存储入口参数和出口参数*/ union REGS inregs,outregs; int status; status=NO_PRESSED; /*入口参数AH3,读取鼠标位置及其按钮状态*/ inregs.x.ax=3; int86(0x33,&inregs,&outregs); /*CX表示水平位置,DX表示垂直位置*/ *x=outregs.x.cx; *y=outregs.x.dx; /*BX表示按键状态*/ if(outregs.x.bx&1) status=LEFT_PRESSED; else if(outregs.x.bx&2) status=RIGHT_PRESSED; return (status);/*设置鼠标指针位置函数*/int setMousePos(int x,int y) union
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学生请假安全协议书
- 大学高层次人才聘用协议书(2篇)
- 2024年内蒙古自治区鄂尔多斯市公开招聘警务辅助人员(辅警)笔试经典自测卷(1)含答案
- 2024年四川省遂宁市公开招聘警务辅助人员(辅警)笔试摸底备战测试(1)卷含答案
- 2021年四川省阿坝自治州公开招聘警务辅助人员(辅警)笔试专项训练题试卷(1)含答案
- 《汽车营销技术》课件第9章
- 2024年黑龙江省大庆市公开招聘警务辅助人员(辅警)笔试高频必刷题试卷含答案
- 2024年标准简易农民工劳动协议样式版
- 《数控编程与操作》课件第4章
- 2024年房地产线上线下推广服务协议版B版
- 医学科学(小学生科普)ppt课件
- 新员工入职消防安全教育培训记录
- 读了萧平实导师的《念佛三昧修学次第》才知道原来念佛门中有微妙法
- 周边传动浓缩刮泥机检验报告(ZBG型)(完整版)
- 纸箱理论抗压强度、边压强度、耐破强度的计算
- 土地增值税清算审核指南
- 死亡通知书模板
- 鹬蚌相争课件
- PMC(计划物控)面试经典笔试试卷及答案
- 失业保险金申领表_11979
- 《质量管理体系文件》风险和机遇评估分析表
评论
0/150
提交评论