资源描述
(完整word版)电子英汉词典设计
课 程 设 计 报 告
课程名称 C语言程序设计
课题名称 电子英汉词典设计
专 业 *********
班 级 14 *******
学 号 *************
姓 名 ******
指导教师 ******
2016年 1月 10日
35
*******
课 程 设 计 任 务 书
课程名称 C语言程序设计
课 题 电子英汉词典设计
专业班级 ***************
学生姓名 ******
学 号 ************
指导老师 ****
审 批
任务书下达日期 2015年 12月 27日
任务完成日期 2016年 1月 10日
C语言课程设计任务书
设计课题五:电子英汉词典设计
一、问题描述:
英汉词典作为一个常用的学习工具,是我们经常要使用的。该系统能完成一个简单的电子英汉词典的功能,如:单词的查找、增词、删除、修改和维护等工作。
二、功能描述:
1、在计算机中建立有限规模的电子英汉词典(文件),利用程序实现电子英汉词典的查找、增词、删除、修改和维护工作。
2、词典的内容为:每行对应一个词条,每个词条由两个字符串组成,字符串用若干空格符分开;前一个是单词字符串(英文),后一个是释义字符串(中文),使用分号作为多个释义的分隔符(无空格)。
3、对单词和释义字符串长度的限定分别为不少于20个与40个字符,词条数限定为不多于200条。
4、采用菜单工作方式。在一个操作执行之后,程序询问是否继续执行该操作。如输入Y或y,则重复同一操作,不退回到菜单;如输入其它信息,则回到菜单等待另一次选择。仅当选择退出操作时,程序应询问是否将修改后的词典存盘,并根据用户选择存盘退出或不存盘退出。
5、要求整个设计以人为本,用户界面友好。
三、算法提示:
1、数据结构:结构体数组
2、简单的程序设计
3、友好的窗口菜单的设计
四、测试数据:
要求被选用的词条有200个左右,以中学的单词为主。
五、其它:
对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能。
目 录
第一章 绪论 1
1.1 课程背景 1
1.2 本文所做工作 1
第二章 需求分析 2
2.1 需求获取 2
2.2 需求建模 2
2.3 需求评审 2
2.4 层次方框图 3
第三章 总体设计 4
3.1 程序模块 4
3.2 函数分析 4
3.3 总体结构 5
第四章 详细设计 6
4.1 主函数main() 6
4.2 添加单词函数add() 6
4.3 查询单词函数look() 6
4.4 删除函数dele() 7
4.5 修改函数change() 7
4.6 浏览函数all() 7
4.7 保存函数store() 8
4.8 退出函数exit() 8
4.9 初始化函数init() 8
第五章 测试 9
5.1 主菜单 9
5.2 单词的录入 9
5.3 单词查询 9
5.4 显示词条 9
5.5 修改单词 10
5.6 删除功能 10
5.7保存记录 10
5.8 退出系统 11
5.9 打开文本 11
第六章 使用说明 12
第七章 总结 13
附录A 源代码 15
附录B 参考资料 21
第一章 绪论
《C语言程序设计》课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,课程设计的课题比平时的习题复杂得多,也更接近实际。课程设计着眼于与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。为了达到上述目的,本课程设计安排了八个设计课题,训练重点在于基本的程序设计方法和分析问题的能力,而不强调面面俱到。
1.1 课程背景
英汉词典作为一个常用的学习工具,是我们经常要使用的。电子英汉词典设计系统能完成一个简单的电子英汉词典的功能,方便我们查询和记录单词,给我们学习英语提供帮助,同时也激发了我们对学习英语的兴趣。
1.2 本文所做工作
翻阅与编程、项目开发和软件工程的书籍,确定好要制作电子英汉词典设计系统的目标,例如通过这个系统能满足查询、增词等功能的使用。同时要清楚好各个功能之间的关系,及确立好整体的结构。
首先要考虑如下几个问题:如何实现增加单词、删除单词的功能,如何将单词和释义从文件中读取出来并准确无误的显示在显示器上,如何将主菜单始终显示出来不变动位置,如何实现友好化窗口等等,这些都是需要考虑的问题。因此,翻阅了软件工程、项目开发的书籍后,将增加词汇、查询词汇、删除词汇、修改词汇和显示词汇等作为一个个独立的模块进行开发和建立,这样以main函数为主体便有了整体的构造,例如在查询、增词、删除的函数内,都涉及到是否目标搜寻,因此可在其中设置for循环语句,利于逐个搜寻,知道找到目标词汇。另外一个难点就是文件了,利用结构体数组记录所有单词,用fprintf函数再将信息传至文件中。当需要读取文件中的信息时,再用fscanf函数一一将文件中的信息传递给结构体数组内。根据用户的需求,便可以自由的增加、删除单词了。
另外在主函数中加入system(“cls”)可以将显示屏进行清屏处理,再利用whlie(1)语句始终为真,便可将主菜单保持在屏幕的正上方,知道用户要求退出系统,用exit(0)即可退出。
从整体布局到部分的每个模板的设计,再回到整体将所有模块联系在一起。大致的工作便完成了。
第二章 需求分析
需求分析是对用户的业务系统进行调查、分析,对新系统逻辑功能和实现方案进行讨论、评估、综合与协商的阶段。需求分析活动大致分为三个阶段:需求获取、分析建模、需求评审。
2.1 需求获取
电子英汉词典的主要功能是进行单词的查询,来满足用户对于单词释义的需求。而将其衍生出来的就有增加难度大的词和陌生的单词、删除已掌握其用法的简单单词、修改其单词的原本释义或者丰富单词原本的释义、记录系统对单词的操作以及方便下次使用等需求。根据不同的需求建立不同的模块函数来满足需求。输入输出的要求:采用菜单工作方式。在一个操作执行之后,询问是否继续执行该操作。仅当选择退出操作时,程序应询问是否将修改后的词典存盘,并根据用户选择存盘退出或不存盘退出。要求整个设计以人为本,用户界面友好。
2.2 需求建模
由于用户群体的各个用户往往会从不同的角度、不同的抽象级别中阐述他们对原始问题的理解和对目标软件的需求,因此,有必要为原始问题及目标软件及目标软件建立逻辑模型。电子英汉词典程序的功能模型如下:
(1)查询单词
(2)增加单词
(3)删除单词
(4)修改单词
(5)显示所有单词
(6)记录数据
(7)退出程序
(8)从文件中读取单词
2.3 需求评审
(1)一致性
模块与模块之间都有精确紧密的联系。
(2)完整性
所有相关功能基本具备,完整性较好。
(3)现实性。
可以实现单词的查询、增添、删除、修改等功能。
(4)有效性。
输入指令即会弹出相应的操作提示,能解决用户的问题。
2.4 层次方框图
如下图 2-1所示。
存储信息
图 2-1
存储信息
增添单词信息
存储信息
存储信息
删除单词信息
查询单词信息
修改单词信息
判断是否储存
文件中未存单词信息
文件中已存在单词信息
单词信息
第三章 总体设计
3.1 程序模块
主 函 数: main()
初始化函数: init()
查找函数: look()
增加函数: add()
删除函数: dele()
修改函数: change()
浏览函数: all()
存储函数: store()
结束函数: exit()
返回函数: return()
3.2 函数分析
增加函数:能够随时增加想要增加的单词。
查找函数:能够随时查找某个单词。
删除函数:能够删除某单词信息。
修改函数:能随时修改单词信息。
浏览函数:能够浏览所有单词。
存储函数:能把修改后的信息存储在文件中。
3.3 总体结构
如图3-1所示。
图3-1
第四章 详细设计
4.1 主函数main()
为主菜单页面,从页面中可以看到,里面包含7个功能选项的函数,其中还有隐藏的函数system(“cls”)用于将界面清屏,使得主菜单始终处于最上方的位置。其次,利用switch语句实现各函数的调用,根据系统提示输入的数字选项来调用相应的函数。如图 4-1所示。
图 4-1
4.2 添加单词函数add()
先输入一个单词,再进行判断该单词是否存在,若存在,则会出现相应的提示,并返回主菜单,若不存在,则提示输入中文释义。添加成功返回主菜单。如图 4-2所示。
图 4-2
4.3 查询单词函数look()
先输入一个单词,再进行判断该单词是否存在,若存在,则会弹出释义,若不存在,则会出现相应的提示,并返回主菜单。如图 4-3所示。
图 4-3
4.4 删除函数dele()
将该单词的位置用后一个单词取代,依次循环,把最后一个单词取空
先输入一个单词,再进行判断该单词是否存在,若不存在则会提示不存在,若存在,则会删除该单词和它的释义。
如图 4-4所示。
存在
提示已删除单词
判断是否存在该单词
删除单词
不存在
提示不存在该单词
返回
主菜单
图 4-4
4.5 修改函数change()
先输入一个单词,再进行判断该单词是否存在,若不存在则会提示不存在,若存在,则会提示输入新的单词释义。如图4-5所示。
显示原释义,提示输入新的释义
存在
提示修改成功
判断是否存在该单词
修改单词
不存在
返回
提示不存在该单词
图 4-5
主菜单
4.6 浏览函数all()
将显示所有的文件中单词且会统计单词个数。
4.7 保存函数store()
利用fscanf函数将结构体数组中的数据保存到指定文件中。如图 4-6所示。
结构体数组对应的单词和释义信息
信息保存
用“只写”的方式打开文件
将信息传递给文件
返回
主菜单
用fprintf记录文件
提示保存成功
图 4-6
图 4-5
4.8 退出函数exit()
退出系统。
4.9 初始化函数init()
打开程序时,自动将文件中的单词信息传递给结构体数组中。
第五章 测试
5.1 主菜单
程序运行的主菜单,如图4-1所示。
图4-1
5.2 单词的录入
单词的录入,如图4-2所示。
图 4-2
5.3 单词查询
单词的查询,如图4-3所示。
图 4-3
5.4 显示词条
显示词条,验证是否录入保存,如图4-4所示。
图 4-4
5.5 修改单词
修改单词功能,如图4-5所示。
图 4-5
显示单词,验证是否修改,如图4-6所示。
图 4-6
5.6 删除功能
单词的删除功能,如图4-7所示。
图 4-7
显示词条,验证单词是否被删除,如图4-8所示。
图 4-8
5.7保存记录
保存记录,如图4-9所示。
图 4-9
5.8 退出系统
退出系统操作,如图4-10所示。
图 4-10
5.9 打开文本
打开文本文件的记录,如图4-11所示。
图 4-11
第六章 使用说明
首先打开‘电子英汉词典.EXE’文件,会出现主菜单屏幕,其中有7个功能选项,分别是:添加单词、查询单词、删除单词、修改单词、总单词表、存储记录和退出程序。单词记录在D盘指定的‘data.txt’文件中,当D盘没有‘data.txt’文件,程序会在D盘自动新建一个。下面将逐一介绍每一个功能选项:
1.增加单词:按 1 ,再按回车键,即可输入新单词,再按回车键,输入单词的释义,再按回车键,返回主菜单。
2.查询单词:按 2 ,再按回车键,即可输入单词,再按回车键,将会显示已存的单词释义,再按回车键,返回主菜单。若未存该单词则会出现相应的提示,按任意键返回主菜单。
3.删除单词:按 3 ,再按回车键,即可输入单词,再按回车键,将删除已存的单词和释义,再按回车键,返回主菜单。若未存该单词则会出现相应的提示,按任意键返回主菜单。
4.修改单词:按 4 ,再按回车键,即可输入要修改的单词,再按回车键,输入新的单词释义,再按回车键,返回主菜单。若未存该单词则会出现相应的提示,按任意键返回主菜单。
5.总单词表:按 5 ,再按回车键,将显示文件已存的单词个数和所有单词和单词的释义;再按任意键后返回主菜单。
6.存储记录:按 6 ,再按回车键,将功能1、3、4修改后的信息让文件记录。(在相应的文本文件中可以看到)再按任意键后返回主菜单。
7.退出程序:按 7 ,再按回车键,将退出系统。
第七章 总结
课程设计是C语言教学中的一个重要的实践环节。因此,课程设计比课程教学、实验复杂一些,要求所涉及的内容有一定的深度和广度,并更加接近实际应用。通过课程设计的综合训练,培养了我们分析问题、编程和解决实际问题的能力,把理论与实践有机结合起来。.随着科学技术发展的日新日异,当今计算机应用在是生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术十分重要的。
我的题目是电子英汉词典的设计,对于我们这些初学C语言的人来说,这是一个很大的考验,因为这不仅要求我们要熟悉C语言程序设计知识,还要求我们要掌握结构化程序设计的基本思路,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题。在翻阅软件工程的书籍后,了解到在课程设计中追求的总体目标可概括为:选择适当的方法和工具,运用成熟的技术从事软件开发活动,最终实现提高软件产品质量和开发效率,得到可靠性高的,经济适用的、易维护的、满足用户需求的软件产品。 为实现这个总体目标,在软件项目实施过程中,针对分析、设计、编程、测试、维护等具体环节,总结出了一系列具体的目标,如追求高可靠性、可适应性、有效性、可理解性、可互操作性、可重用性、可追踪性和可维护性。这些目标不仅是分析活动、设计活动中追求的目标,也是衡量工作成果,评价产品质量优劣的目标。
回到我的这个题目上,在刚拿到这个题目的时候我的大脑是一片空白,为什么呢?虽然所学的知识都有了一个大致的了解和认识,但是都是零零散散的知识,没有一个系统的概括和总结。因此只能应付考试却不能做出其它的实践。怎么办呢?根据老师的提示,在图书馆内翻阅相关的书籍,其中一本是关于项目开发的,另一本是关于软件工程的。总之,这两本书提供了一种整体性的思维,从用户需求的角度来分析目标,为一个工程或项目提供了有序的工作方案。此外,我还在网上浏览到了往届学长学姐们做的课程设计,真可谓是独具匠心,虽说有些程序代码我看不懂,但是对于看得懂的地方,我觉得设计的非常巧妙,印证了C语言老师上课所说的代码能简则简的要求。可是呢?即使是找到了这么多资料,看了相关的书籍,可脑袋里还是一团乱麻,在学校的图书馆里,为了自己编出这个题目,待了整整一天,看电脑屏幕看着眼睛都花了,就是没任何结果。在这一周内,不停反复的实验,渐渐地对目标清晰了,而且还知道要模块化将每一个功能做好,然后再拼装起来,构成整体。
从完全不会,到慢慢摸索,再到建立雏形,再到调试程序,再到测试。整体算下来差不多一周的时间,在这段时间内我不仅把课程设计的任务完成了,而且还学到了许多课堂所没有的知识,学会了如何去整体性思考问题。
这次课程设计使我学会了很多,虽然其中遇到许多的困难,在上网查资料、翻阅书籍、与同学们相互讨论和向老师请教后,这些问题都被解决。这也使得我越来越有信心将一件事做好。再次感谢我的老师和同学们,因为有了你们的帮助与陪伴,才使得我更加坚信我能行,才有机会向成功迈开步伐。
附录A 源代码
#include <stdio.h>
#include<string.h>
#include<stdlib.h> //文件处理的头文件
#include<windows.h> //会用到清屏的功能
#include<conio.h> //使函数暂停而不立即返回(getch())
struct diction //结构体设置单词的两个变量:英文和释义(字符串)
{
char a[20],b[40];
};struct diction dict[200];
void init() //初值函数
{
int i;
FILE*fp;
if((fp=fopen("D:\\data.txt","r"))==NULL) //判断D盘中是否存在一个data.txt文件
{
printf("\n本地无单词文件data.txt \n系统将自动新建该文件至d盘中\n");//若无,则在D盘中新建一个这样的文件
fp=fopen("D:\\data.txt","w");
getch();
}
for(i=0;i<200;i++)
fscanf(fp,"%s %s\n",dict[i].a,dict[i].b);
fclose(fp);
}
void add()//增加单词的函数
{
int i;
char c[20];
printf("请输入一个单词:");
scanf("%s",c);
for(i=0;i<200;i++)
{
if(strcmp(dict[i].a,c)==0)
{
printf("\n已经存在该单词,它的中文释义为 %s\n",dict[i].b);
printf("\n\n按任意键返回主菜单!");
getch();
break;
}
if(!*dict[i].a)
{
printf("请输入它的中文释义:");
scanf("%s",dict[i].b);
strcpy(dict[i].a,c);
printf("\n添加单词成功!!");
getch();
return;
}
}
if(i>=200)
{
printf("\n\n磁条记录已满!");
printf("\n\n按任意键返回主菜单!");
getch();
return;
}
}
void look()//寻找单词的函数
{
int i;
char d[20];
printf("请输入一个单词:");
scanf("%s",d);
for(i=0;i<200;i++)
{
if(strcmp(dict[i].a,d)==0)
{
printf("%s 的中文释义为:%s",dict[i].a,dict[i].b);
printf("\n\n按任意键返回主菜单!");
getch();
return;
}
if(!*dict[i].a)
{
printf("无该单词释义");
printf("\n\n按任意键返回主菜单!");
getch();
return;
}
}
if(i>=200)
printf("无该单词释义");
printf("\n\n按任意键返回主菜单!");
getch();
return;
}
void dele()//删除单词的函数
{
int i,j;
char e[20];
printf("请输入要删除的单词:");
scanf("%s",e);
for(i=0;i<200;i++)
{
if(strcmp(e,dict[i].a)==0)
{
for(j=i;(*dict[j].a)&&(j<199);j++)
{
strcpy(dict[j].a,dict[j+1].a);
strcpy(dict[j].b,dict[j+1].b);
if(j>=198)
{
strcpy(dict[j+1].a,"\0");
strcpy(dict[j+1].b,"\0");
break;
}
}
if(i>=199)
{
strcpy(dict[i].a,"\0");
strcpy(dict[i].b,"\0");
}
printf("\n该单词已删除!");
printf("\n\n按任意键返回主菜单!");
getch();
return;
}
}
if(i>=200)
{
printf("无该单词!!");
printf("\n\n按任意键返回主菜单!");
getch();
return;
}
}
void change()//修改单词释义的函数
{
int i;
char f[20];
printf("请输入要修改的单词:");
scanf("%s",f);
for(i=0;i<200;i++)
{
if(strcmp(f,dict[i].a)==0)
{
printf("单词原意是%s\n",dict[i].b);
printf("请输入单词的修改的释义:");
scanf("%s",dict[i].b);
printf("\n\n按任意键返回主菜单!");
getch();
return;
}
}
if(i>=200)
{
printf("无该单词!!");
printf("\n\n按任意键返回主菜单!");
getch();
return;
}
}
void all()//查看记录的所有单词
{
int i,j;
system("cls");
for(j=0;(*dict[j].a)&&(j<200);j++);
printf("\n\t记录的单词数为%d个\n",j);
printf("\n词库中所有单词如下:\n");
for(i=0;(*dict[i].a)&&i<200;i++)
{
printf("%s:%s\n",dict[i].a,dict[i].b);
if((i+1)%20==0)
{
getch();
system("cls");
printf("\n\t记录的单词数为%d个\n",j);
printf("当前显示的是第%d个单词:\n",i+2);
}
}
getch();
}
void store()//存储单词的信息至文件中
{
int i;
FILE*fp;
if((fp=fopen("D:\\data.txt","w"))==NULL)
{
printf("\n单词文件无法被打开!\n");
getch();
return;
}
for(i=0;i<200;i++)
fprintf(fp,"%s %s\n",dict[i].a,dict[i].b);
printf("\n单词信息存储成功!!\n按任意键返回主菜单");
getch();
}
void main()
{
char x;
init();
while(1)
{
system("cls");
printf("\n\n 电子英汉词典 \n");
printf("\n\n ********************** 1.添加单词 *************************");
printf("\n\n ********************** 2.查询单词 *************************");
printf("\n\n ********************** 3.删除单词 *************************");
printf("\n\n ********************** 4.修改单词 *************************");
printf("\n\n ********************** 5.总单词表 *************************");
printf("\n\n ********************** 6.储存记录 *************************");
printf("\n\n ********************** 7.退出程序 *************************\n\n");
x=getchar();
switch(x)
{
case '1':add();break;
case '2':look();break;
case '3':dele();break;
case '4':change();break;
case '5':all();break;
case '6':store();break;
case '7':exit(0);
}
}
exit(0);
}
附录B 参考资料
C语言程序设计/陈世清主编、李杰君副主编 --上海交通大学出版社
C语言程序设计实践教程/陈世清主编、曹燚副主编 --上海交通大学出版社
软件工程初级教程/陶华亭主编、吴杰 王海燕副主编 --清华大学出版社
计算机与通信学院课程设计评分表
课题名称:
项 目
评 价
设计方案的合理性与创造性
设计与调试结果
设计说明书的质量
答辩陈述与回答问题情况
课程设计周表现情况
综合成绩
教师签名:
日 期:
展开阅读全文