嵌入式系统课程设计 快译通词典.docx
《嵌入式系统课程设计 快译通词典.docx》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计 快译通词典.docx(18页珍藏版)》请在冰点文库上搜索。
嵌入式系统课程设计快译通词典
软件学院
课程设计报告书
课程名称嵌入式系统课程设计
设计题目快译通词典
专业班级嵌入式软件09-2班
学号0920010201
姓名车文通
指导教师王建立
年月
1设计时间
2012年6月11日-2012年6月15日
2设计目的
通过本次课程设计,全面掌握、熟悉C语言的程序设计与技巧,进一步提高编写程序,分析程序及上机操作,调试程序的能力,提高动手操作能力及分析问题和解决问题的能力
3设计任务
一单词查询
给定文本文件“dict.txt”,该文件用于存储词库。
词库为“英-汉”,“汉-英”双语词典,每个单词和其解释的格式固定,如下所示:
#单词
Trans:
解释1@解释2@…解释n
每个新单词由“#”开头,解释之间使用“@”隔开。
一个词可能有多个解释,解释均存储在一行里,行首固定以“Trans:
”开头。
下面是一个典型的例子:
#abyssinian
Trans:
a.阿比西尼亚的@n.阿比西尼亚人;依索比亚人
该词有两个解释,一个是“a.阿比西尼亚的”;另一个是“n.阿比西尼亚人;依索比亚人”。
要求编写程序将词库文件读取到内存中,接受用户输入的单词,在字典中查找单词,并且将解释输出到屏幕上。
用户可以反复输入,直到用户输入“exit”字典程序退出。
程序执行格式如下所示:
./app–text
-text表示使用文本词库进行单词查找。
二、建立索引,并且使用索引进行单词查询
要求建立二进制索引,索引格式如下图所示。
将文本文件“dict.txt”文件转换为上图所示索引文件“dict.dat”,使用索引文件实现单词查找。
程序执行格式如下:
./app–index
-index表示使用文本词库dict.txt建立二进制索引词库dict.dat
./app–bin
-bin表示使用二进制索引词库进行单词查找。
三、支持用户自添加新词
用户添加的新词存放在指定文件中。
如果待查单词在词库中找不到,则使用用户提供的词库。
用户的词库使用文本形式保存,便于用户修改。
程序执行格式图1-1所示。
./app词库选择选项-f用户词库文件名
词库选项为-test1,或者-test2,表示使用文本词库或者二进制索引词库。
-f为固定参数,用来指定用户词库文件名。
4设计内容
4.1需求分析
4.1.1功能需求
实现用户输入要查询的单词,在字典中查找单词,并且将解释输出到屏幕上。
1.将英文单词翻译为中文意思。
2.用户利用索引进行单词查询。
3.用户可以自行添加新词。
4.1.2性能需求
(1)用户输入的单词中仅含有英文文字的分隔符空格、逗号、句号和换行符,除些之外再不含其它文字。
(2)用户输入单词时,必须以以下格式有效:
“#单词”。
解释中需遵循以下原则:
解释之间使用“@”隔开。
一个词可能有多个解释,解释均存储在一行里,行首固定以“Trans:
”开头。
并且表明词性。
例:
#单词
Trans:
a.解释1@n.解释2@..解释n
(3)用户输入时,判断单词是否相同时不区分大小写。
例如ABC、Abc、Abc、aBC、abc…都是同一个单词。
(4)若单词库中,无所查询的单词时,进行提示“查无此词”。
(5)尽量考虑缩短程序的运行时间,提高程序运行速度。
4.2总体设计
概要设计
(1)单词查询
(2)建立索引文件
(3)在索引文件中查询
(4)添加新词
具体系统流程图如图4.2.1
1-1
图4.2.1系统流程图
1-1模块
功能需求:
要求编写程序将词库文件读取到内存中,接受用户输入的单词,在字典中查找单词,并且将解释输出到屏幕上。
用户可以反复输入,直到用户输入“exit”字典程序退出。
4.2.1抽象数据类型
typedefstructword
{
charwd[20];
chartrans[300];
structword*next;
}word,*wordp;
功能流程图:
如图4.2.2所示
图4.2.2单词查询模块流程图
描述:
开始,将文本加载到链表中,输入所查单词,判断是否输入exit,若是则结束,若否则判断输入单词格式是否正确,若格式不正确,则返回等待继续输入,若格式正确在链表中查询,查询之后判断在链表中否找到所输入的单词,若没找到,输出无此词,并返回等待输入,若找到,则输出单词意思,然后结束。
4.3详细设计
4.3.1抽象数据类型
charwd[20]
chartrans[300]
4.3.2主要函数模块
4.3.2.1:
查找单词模块
函数原型:
intcmpWord(char*,char*)
函数返回值类型:
int
函数参数了类型:
cha*
函数功能:
到链表中查找单词判断找到的单词与用户输入单词是否一致
4.3.2.2得到单词模块
函数原型:
char*getWord(wordpwp,charword[])
函数参数:
structword,charword
函数返回值类型:
char*单词的地址
函数作用:
返回找到的单词的地址
4.3.2.3输出模块
函数原型:
intputInfo(structword*)
函数参数:
structword*
函数返回值类型:
int
函数作用:
输出单词所对应的单词解释
1.详细模块设计
(1)具体在链表中查询模块
功能需求:
在链表中查找要查询的单词。
功能流程图:
如图4.3.1
图4.3.1在链表中查找单词
(2)将文件加载到内存模块
功能需求:
从文件“dict.txt”读取单词到内存,内存存储结构采用链表结构。
图4.3.2将文件加载到内存模块
初始化装载内存模块
函数原型:
structword*Initdic(void);
函数参数:
空
函数返回值类型:
结构体word指针类型
函数功能:
将文件dict.txt以链表的形式存入内存每个链表是个结构体存放单词和解释
4.4测试与分析
4.4.1测试
图1和2为模块测试
图3.4.5为整体测试
模块测试图如图1和图2所示
图1
图2
图3正确测试
图4错误测试
图5退出测试
4.4.2分析
内容包括:
系统实现了单词的查询功能但是初始化链表的时候没有分类存储,如果文件dict.txt的单词量很大的话会导致系统耗时很久,如果能分类存储就更好了时间会缩短很多。
4.5附录
#include
#include
#include
#include"headfile.h"
#defineLENsizeof(word)
wdpInitialize(void)
{
FILE*fp;
intn=0;
inti=0;
charch,cl;
wdphead;
wdpp1,p2;
wordwrd;
p1=p2=(wdp)malloc(LEN);
if((fp=fopen("dict.txt","r"))==NULL)
{
printf("CANNOTOPENTHEFILETHATYOUNEED\n");
exit
(1);
}
for(i=0;;i++)
{
ch=fgetc(fp);
cl=fgetc(fp);
if(ch!
='\n')
p1->wd[i]=cl;
elsebreak;
}
for(i=1;;i++)
{
ch=fgetc(fp);
if(ch!
='\n')
{p1->trans[0]='T';
p1->trans[i]=ch;}
elsebreak;
}
head=NULL;
do{
n++;
if(n==1)head=p1;
elsep2->next=p1;
p2=p1;
p1=(wdp)malloc(LEN);
for(i=0;;i++)
{
ch=fgetc(fp);
if(ch!
='\n')
p1->wd[i]=ch;
elsebreak;
}
for(i=0;;i++)
{
ch=fgetc(fp);
if(ch!
='\n')
p1->trans[i]=ch;
elsebreak;
}
}while((ch=fgetc(fp))!
=EOF);
p2->next=NULL;
fclose(fp);
return(head);
}
char*getOut(wdpwp,charword[])
{
inti=0;
char*q;
for(i=0;i<30;i++)
{
word[i]=wp->wd[i];
}
q=word;
return(q);
}
intcmpChar(char*dst,char*src)
{
if(strcmp(src,dst)==0)return1;
elsereturn0;
}
intoutPut(wdpwp)
{
inti=0;
printf("yourword:
");
for(i=0;i<30;i++)
{
printf("%c",wp->wd[i]);
}
printf("\n");
for(i=0;i<=30;i++)
{
printf("%c",wp->trans[i]);
}
return0;
}
头文件代码
typedefstructword
{
charwd[30];
chartrans[300];
structword*next;
}word,*wdp;
#ifndefHEADFILE_H_
#defineHEADFILE_H_
structword*Initialize(void);
char*getOut(structword*,char[]);
intcmpChar(char*,char*);
intoutPut(structword*);
#endif
Main函数代码
#include
#include
#include
#include"headfile.h"
intmain(intargc,char*argv[])
{
word*wp1;
word*wp2;
charputin[30];
chargetout[30];
inti=0;
wp1=Initialize();
wp2=wp1;
printf("*************************");
printf("\nENLISH-CHINESEDICTIONARY");
printf("\n*************************\n");
printf("二班一组作品");
a:
printf("\n\npleaseinputword:
");
scanf("%s",putin);
if((putin[0]=='e')&&(putin[1]=='x')&&(putin[2]=='i')&&(putin[3]=='t'))
exit
(1);
while(!
cmpChar(getOut(wp1,getout),putin))
{
if(wp1->next!
=NULL)
wp1=wp1->next;
elsebreak;
}
if(wp1->next!
=NULL)outPut(wp1);
elseprintf("\nCONNOTFOUNDYOURWORD");
wp1=wp2;
gotoa;
return0;
}
5总结与展望
通过这一周的课程设计,是我更加了解C语言linux的一些知识,增强了我分析问题的能力和综合知识的运用,分析问题和解决问题,锻炼实际解决问题的重要环节。
在这一周的时间里让我学会并复习了很多知识,提高自己的动手的能力,而且在本次时间中让我深深体会到了团队的重要性,做嵌入式设计,个人是不肯能完成的,需要整个团队的共同努力,团队很好的合作是我们这次课程设计成功完成的最重要的基础。
虽然在本次课程设计中遇到了许多问题,例如流程图的错误,代码的运行测试等等,但是在老师和同学们的帮助下都得到了解决.,最终完成整个设计。
参考文献
[1]浩强,C程序设计,第3版,出版社:
清华大学出版社,2005
[2]赵苍明,穆煜,Linux开发教程,北京:
人民邮电出版社,2009
[3]严蔚敏,吴伟民,数据结构(C语言)[M],北京:
北京清华大学出版社,2010
成绩评定
成绩教师签字