英汉小词典课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2012-2013学年第二学期学号
《高级语言程序设计》
课程设计报告
题目:英汉小词典
专业:计算机科学和技术
班级:计科2班
姓名:XXXX
指导教师:XXX
成绩:
计算机和信息工程系
2013年06月28日
目录
1设计内容及要求 (3)
1.1设计内容 (3)
1.2设计任务及具体要求 (3)
2概要设计 (4)
2.1系统功能简介 (4)
2.2总体设计框图 (4)
3设计过程或程序代码 (5)
3.1对关键代码加以分析说明 (5)
3.2程序运行界面 (10)
4 程序设计结果和分析 (12)
5 心得 (13)
致谢 (13)
参考文献 (13)
附录:源程序 (14)
英汉小词典
1 设计内容及要求
1.1设计内容
(1)、在计算机中建立有限规模的电子英汉词典(文件),利用程序实现电子
英汉词典的查询、增词、删除、修改和维护工作。

(2)、词典的内容为:每行对应一个词条,每个词条由两个字符串组成,字
符串用若干空格符分开;前一个是单词字符串(英文),后一个是释义字符串(中文),使用分号作为多个释义的分隔符(无空格)。

(3)、对单词和释义字符串长度的限定分别为不少于20个和40个字符,词
条数限定为不多于200条。

(4)、采用菜单工作方式。

在一个操作执行之后,程序询问是否继续执行该
操作。

如输入A或a,则重复同一操作,不退回到菜单;如输入其它信息,则回到菜单等待另一次选择。

仅当选择退出操作时,程序应询问是否将修改后的词典存盘,并根据用户选择存盘退出或不存盘退出。

1.2设计任务及具体要求
主要利用c语言的文件操作能力设计开发一个英汉小词典,至少具有如下功能:查询、删除、增词、修改单词。

操作界面要符合用户的一般习惯,图形或文本界面都可以。

要求:明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;提高学生用高级语言进行程序设计的能力,重点提高用C语言进行文件操作和绘图使用的编程技术水平;初步了解软件开发的一般方法和步骤;提高撰写技术文档的能力。

2 概要设计
2.1系统的功能简介 用户可以通过本系统查询单词以及释义,修改,新增以及删除词条。

用户在使用电子词典的时候,有可能会使用电子词典的查询功能,也有可能使用电子词典的轻松背单词功能,当用户需要查询的时候,系统必须提供这个单词的所有信息,以便和用户获得所需要的信息;可以自定义单词,使用户自己可以新增词条,扩充词库。

输入和输出的要求:当用户使用查询功能时,系统必须显示词条和释义;当用户觉得本词条存在不足,需要修改时,系统必须提供修改的词条和释义,以及用户输入的内容,修改完成时,提示按确认结束,删除单词时显示要删除的词条和释义,以及词条已删除。

2.2 总体程序框图
图A 总体设计
图B 详细设计 3 设计过程或程序代码
主函数
查询
增词 删除 修改 退出 开始 显示菜单
执行查询函数 执行新增函数
执行删除函数 执行修改函数
退出词典 1 2 3 4
5
3.1对关键代码加以分析说明:
(一)菜单显示:
int main(int argk,char *argh[])
{
int m=0;
if(argk>1) strcpy([1]);
else strcpy(,"c:\\dict.txt");
for(;;)
{
printf("\n\-----------欢迎使用电子英汉小词典!
-----------\n\------------------------\n\-1-查询词条\n\-2-新增词条
\n\-3-删除词条\n\-4-修改词条\n\-5-退出词典\n\--------------------\n");
m=getchar()-'0';
switch(m)
{
case 1: Search();break;
case 2: Append();break;
case 3: Delete();break;
case 4: Update();break;
default : return 0;
}
}
return 0;
}
(二)查询词条:
void Search(void)
{
Project i;
fpos_t p=0;
memset(&i,0,szProject );
printf("please input the word you want:");
scanf("%s",i.word );
p=consult(i.word,i.mean);
if(p==0)
{
printf("sorry do not find what you want!\n");
return;
}
printf("单词:%s\n释义%s",i.word,i.mean );
}
(三)新增词条:
void Append(void)
{
Project i;
FILE *f=0;
fpos_t p=0;
memset(&i,0,szProject);
printf("please input the word you want:");
scanf("%s",i.word );
p=consult(i.word,0);
if(p)
{
printf("sorry do not find what you want!\n");
return;
}
printf("please giving the meaning,按确认结束");
fflush(stdin);
gets(i.mean);
f=fopen(,"ab");
fwrite(&i,szProject,1,f);
fclose(f);
printf("词条已新增\n");
}
(四)删除词条:
void Delete(void)
{
Project i;
FILE *f=0;
fpos_t p=0;
memset(&i,0,szProject);
printf("please input the word you want:");
scanf("%s",i.word);
p=consult(i.word,0);
if(p==0)
{
printf("sorry do not find what you want!\n");
return;
}
p--;
memset(&i,0,szProject);
f=fopen(,"rb+");
fsetpos(f,&p);
fwrite(&i,szProject,1,f);
fclose(f);
printf("词条已删除\n");
}
(五)修改词条:
void Update(void)
{
Project i;
FILE *f=0;
fpos_t p=0;
memset(&i,0,szProject);
printf("please input the word you want:");
scanf("%s",i.word);
p=consult(i.word,0);
if(p==0)
{
printf("sorry do not find what you want!\n");
return;
}
p--;
printf("please giving the meaning,按确认结束(输入drop放弃修改):");
fflush(stdin);
gets(i.mean);
if(strstr(i.mean,"drop"))
{
printf("已放弃修改!\n");
return;
}
f=fopen(,"rb+");
fsetpos(f,&p);
fwrite(&i,szProject,1,f);
fclose(f);
printf("词条已保存\n");
}
3.2程序运行界面
进入菜单界面后,出现“欢迎使用电子英汉词”;然后有5个选项:1查询词条,2新增词条,3删除词条,4修改词条,5退出词典。

输入1,按回车键,输入你想查询的词条,如果系统里存在你要查询的单词,就会输出词条和释义,如果没有,会显示“sorry do not find what you want!”,。

输入2,按回车键,输入你想要新增词条,输入你要新增的单词,如“cat”,按回车输入释义“猫”,如果系统存在本词条,则会输出“sorry do not find what you want!”
输入3,按回车键,输入你想删除的词条,按回车会输出词条已删除。

输入4,按回车键,输入你想修改的词条,按回车,输入释义。

如果放弃修改则输入“drop”。

输入5,退出词典。

4 程序设计结果和分析
当把程序写好并进行调试时,并不是一帆风顺的,总会遇到很多在调试时遇到的错误。

1.首先在定义函数时,不能输入汉字。

否则会程序会显示错误。

2.如果要调用查询函数,增词函数,删除函数,修改函数等要在主函数前面进行申明,否则会显示警告。

3.如果程序在运行的过程中,对于一个循环语句,如果你返回的值始终是真的,那么程序将进如死循环。

4.对应该有花括弧的复合语句,忘记加花括弧。

5. 所调用的函数在调用语句之后才定义,而又在调用前未加说明。

5 心得
在本课程设计的设计过程中,我体会到了从事C语言课程设计工作需要严谨、认真的态度和作风,半点都不能马虎。

每个细微的小细节都必须十分注意,如果不认真思考,就会出现或大或小的错误。

如果没有发现前面的错误,对后面的工作影响就会很大,甚至有时会推倒很多前面做的工作。

有时候,我自己觉得我写的程序非常正确,但就是编译通不过,在查询错误的过程中,面临着否认自己的过程,感觉很痛苦。

在设计过程中遇到的很多问题和麻烦,通过向同学请教和讨论后基本得到了解决,让我明白了团体的力量是巨大的,平时遇到问题要勇于和同学们和老师讨论,这样才能共同进步和学习,也只有这样才能进步的更快,同时也要敢于相信自己的主见,也要考虑别人的想法和意见,不能一味的接受或者排斥,同时也不能太骄傲自大,要谦虚地向老师和同学请教,只有这样我才能不断的进步。

在反反复复的学习中,我终于作出一个简单的程序,虽然这个程序的功能非常简单,而且在实际运用中还有些不足,比如:在查询词条后,按任意键会退出词典,这点还需要改进。

在进行其他功能完成后,按任意键不会退出系统。

致谢
在这次C语言课程设计中,我的老师和同学给了我及大的帮助。

特别是我的指导老师孙淮宁老师,还有我的C语言任课老师徐宁老师。

在此,我对他们表示
感谢!感谢他们在我面对困难时给了我帮助和支持。

也感谢那些给我帮助的所有同学!
参考文献:
【1】谭浩强.C程序设计(第三版).清华大学出版社.2005年: P219~P363 【2】胡超、闫玉宝. 30天学通Visual C++项目案例开发. 电子工业出版社. 2009年:P228~P273
附录:源程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define szWORD 50
#define szSTRN 200
#define szProject sizeof(struct Dictionary)
char [szSTRN];
typedef struct Dictionary /*声明新结构体类型名为Project*/ {
char word[szWORD];
char mean[szSTRN];
}Project;
fpos_t consult(char *word,char *mean)
{
FILE *f=0;
Project i;
int r=0;
fpos_t p=0;
if(!word) return 0;
f=fopen(,"rb"); /*以读的方式打开二进制文件*/
if(!f) return 0;
while(!feof(f)) /*指针是否指导文件末尾*/
{
fgetpos(f, &p);
r=fread(&i,szProject,1,f); /*读入数据的存放地址*/
if(r<1) break;
if(i.word[0]==0) continue;
if(strcmp(i.word,word)) continue;
if(mean) strcpy(mean,i.mean );
fclose(f); /*关闭文件*/
return p+1;
}
fclose(f); /*关闭文件*/
return 0;
}
void Search(void); /*对Search函数进行函数声明*/
void Append(void); /*对Append函数进行函数声明*/
void Delete(void); /*对Delete函数进行函数声明*/
void Update(void); /*对Update函数进行函数声明*/
int main(int argk,char *argh[]) /*主菜单显示*/
{
int m=0;
if(argk>1) strcpy([1]); /*文件复制*/
else strcpy(,"c:\\dict.txt"); /*文件复制*/
for(;;)
{
printf("\n\------------------\n\-欢迎使用电子英汉小词典!\n\--------------------\n\-1-查询词条\n\-2-新增词条\n\-3-删除词条\n\-4-修改词条\n\-5-退出词典
\n\--------------------\n");
m=getchar()-'0';
switch(m)
{
case 1: Search();break;
case 2: Append();break;
case 3: Delete();break;
case 4: Update();break;
default : return 0;
}
}
return 0;
}
void Search(void) /*查询词条*/
{
Project i;
fpos_t p=0;
memset(&i,0,szProject ); /*将结构体szProject的指定位置清零*/ printf("please input the word you want:");
scanf("%s",i.word );
p=consult(i.word,i.mean);
if(p==0)
{
printf("sorry do not find what you want!\n");
return;
}
printf("单词:%s\n释义%s",i.word,i.mean );
}
void Append(void) /*新增词条*/
{
Project i;
FILE *f=0;
fpos_t p=0;
memset(&i,0,szProject); /*将结构体szProject的指定位置清零*/ printf("please input the word you want:");
scanf("%s",i.word );
p=consult(i.word,0);
if(p)
{
printf("sorry do not find what you want!\n");
return;
}
printf("please giving the meaning,按确认结束");
fflush(stdin); /*清除标准输入设备(本程序中指键盘)的缓存*/ gets(i.mean);
f=fopen(,"ab"); /*以向文件末尾添加数据的方式打开文件*/
fwrite(&i,szProject,1,f); /*输出数据的地址*/
fclose(f); /*关闭文件*/
printf("词条已新增\n");
}
void Delete(void) /*删除词条*/
{
Project i;
FILE *f=0;
fpos_t p=0;
memset(&i,0,szProject); /*将结构体szProject的指定位置清零*/ printf("please input the word you want:");
scanf("%s",i.word);
p=consult(i.word,0);
if(p==0)
{
printf("sorry do not find what you want!\n");
return;
}
p--;
memset(&i,0,szProject); /*将结构体szProject的指定位置清零*/ f=fopen(,"rb+"); /*以读写的方式打开二进制文件*/
fsetpos(f,&p);
fwrite(&i,szProject,1,f); /*输出数据的地址*/
fclose(f); /*关闭文件*/
printf("词条已删除\n");
}
void Update(void) /*修改词条*/
{
Project i;
FILE *f=0;
fpos_t p=0;
memset(&i,0,szProject); /*将结构体szProject的指定位置清零*/ printf("please input the word you want:");
scanf("%s",i.word);
p=consult(i.word,0);
if(p==0)
{
printf("sorry do not find what you want!\n");
return;
}
p--;
printf("please giving the meaning,按确认结束(输入drop放弃修改):");
fflush(stdin); /*清除标准输入设备(本程序中指键盘)的缓存*/ gets(i.mean);
if(strstr(i.mean,"drop"))
{
printf("已放弃修改!\n");
return;
}
f=fopen(,"rb+"); /*以读写的方式打开二进制文件*/
fsetpos(f,&p);
fwrite(&i,szProject,1,f); /*输出数据的地址*/
fclose(f); /*关闭文件*/ printf("词条已保存\n");}。

相关文档
最新文档