电子生词库.docx
《电子生词库.docx》由会员分享,可在线阅读,更多相关《电子生词库.docx(41页珍藏版)》请在冰豆网上搜索。
![电子生词库.docx](https://file1.bdocx.com/fileroot1/2023-1/9/fd89cf44-b5af-4914-bb98-1cfe450f46a8/fd89cf44-b5af-4914-bb98-1cfe450f46a81.gif)
电子生词库
北京联合大学
课程设计报告
课程名称:
C语言程序设计课设
项目名称:
电子生词库
学院:
自动化学院专业:
姓名:
学号:
指导教师:
鞠慧敏成绩:
2010年6月18日
第1部分课程设计题目与要求
1.问题描述
根据需要,建立属于自己的生词库,使用起来方便。
生词选自本人常需要的单词中,对于英语单词,给出中文含义,对于中文单词给出英文含义。
2.功能要求
循环显示所有菜单。
在主菜单中选择1:
创建生词库。
用文件建立一个单词库,中英文单词均有,对于英语单词,给出中文件事,对于中文单词给出英文解释。
在主菜单中选择2:
进入子菜单,并显示词库。
显示是哟有单词和单词数、所有中文单词和单词数、所有英文单词和单词数,显示英文单词时按字母从小到大的顺序排列。
在子菜单选择4,返回主菜单;选择0,推出整个系统。
在主菜单中选择3:
首先确认密码。
然后进入子菜单,并编辑词库,如添加新词、删除旧词、修改旧词。
在子菜单中选择4,返回主菜单,选择0,推出整个程序。
在主菜单中选择4:
查找生词。
显示所要查找的单词和其含义。
在主菜单中选择5:
记忆单词。
在主菜单中选择0:
显示结束信息。
按任意键后退出主序。
3.任务分工
创建生词库、显示词库由制作,编辑生词、查找生词由制作,记忆单词、显示结束信息由制作。
第2部分《电子生词库系统》的设计与功能实现
1.总体设计
主函数(main)
1、创建单词库:
voidmycreate
2、显示单词库:
voidmydisplay
3、编辑单词库:
voidmybianji
(1)增加单词:
voidadd
(2)删除单词:
voidmydelete
(3)修改单词:
voiddele
4、查找单词:
voidmysearch
5单词记忆:
voidmynew
2.数据结构
structenglish
{charword[20];charexplain[20];};
structchinese
{charexplain[20];charword[20];};
3.算法设计
采用模块化的思想,按照“自顶向下,逐步细化”的原则设计算法。
主模块:
主函数:
创建函数:
显示函数:
编辑函数:
查找函数:
单词记忆:
4.程序代码设计
voidmyprint1();voidmode();voidmodc();voidmysearch();voidsch_chinese();voidsch_english();voidmynew();oidmyprint2();voidmyprint3();voidmycreate();voidmycreatee();voidmycreatec();voidmydisplay();voidmydisplaya();voidmydisplaye();voidmydisplayc();voidmybianji();voidmydelete();voiddele();voiddelc();voidmyadd();voidadde();voidaddc();voidmymodify();
5.测试与调试
本函数在同学的设计下第一次编译共有65个错误,其中有函数输入错误、函数重复、缺少标点等错误。
在同学一起的努力下将其中的错误逐一的解决掉。
第3部分课程设计总结
1.个人总结
陶冶的总结:
为期一星期的C语言实训已经基本结束,但是给我的影响是相当大的。
通过这次实训,使我明白C语言这门课程光仅仅是听课是远远不够的,上机训练也不容忽视。
通过上机训练,才能够明白自己知识的不足,才能够有的放矢,更加深刻的理解C语言中的知识点。
通过实训,我找到了许多知识漏点,学到了很多以前不懂的知识,以前认为自己已经懂了的知识点也理解更加深刻了。
尤其是遇到了自己当时不知道如何编写的C语言题目如何编写,通过自己的学习和同同学的交流后,试编和改错,最后能够顺利的编写出来,带来的也有成就感。
并增加了我们对C语言的兴趣和学好C语言的信心。
与同学们交流的过程中,了解了程序的多种解决方法,知道了不同编写方法有不同的特点。
总结C语言实训的几个重要作用:
1.加深对课堂讲授内容的理解
课堂上要讲授许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用C语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差。
学习C语言不能停留在学习它的语法规则,而是利用学到的知识编写C语言程序,解决实际问题。
即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。
只有通过上机才能检验自己是否掌握C语言、自己编写的程序是否能够正确地解题。
自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对C语言的理解和程序开发能力。
2.熟悉程序开发环境、学习计算机系统的操作方法
一个C语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。
所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。
通过上机实验,熟练地掌握C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。
同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
3.学习上机调试程序
完成程序的编写,决不意味着万事大吉。
你认为万无一失的程序,实际上机运行时可能不断出现麻烦。
如编译程序检测出一大堆错误。
有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。
开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。
通过这次为数不多的几天计算机实践学习,我们更好的了解了一些关于C语言的知识,理解巩固了我们C语言的理论知识。
C语言这门课程对于我们应用电子专业的同学也相当重要,我们会再将来继续学习并熟悉这门课程。
张雪冰个人总结:
忙碌了一个多星期,在大家的共同努力下,我们总算将此程序设计出来。
尽管不是自己独立完成,但仍然很高兴,因为在设计的过程中,让我了解到要设计一个大型程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序,这过程艰辛,但只要你持之以恒,成功指日可待。
另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。
为了解决此类问题,最好就是多向同学,老师请教,不要怕难为情。
尤其是老师,评他们多年的编写程序的经验,要解决我们的问题,对他们来说只是smallcase。
在设计这个程序时,我们刚开始是根据老师给我们提供的资料,用画图以及循环将框架设计出来,但是接下去便无从下手了,计算是个关键和难点,我们也查了相应的资料,但是它上面用得是坐标来做的,所以为了方便设计程序,我们也改为坐标来做的,这样计算问题解决了。
接下去就是按键问题,我们的资料是用鼠标做的,所以关于按键这个函数就只能我们自己设计,还好手头有类似的资料,经过自己的反复尝试以及与与同学的讨论,这也不难,最好还是被我们搞定了。
最后就是闪烁,这个设计的方法很死板,都一个类型,就是算坐标比较烦琐,要确定好它的位置,但是这些只要你自己愿意去尝试,问题都可以迎刃而解的。
从这一个多星期的设计过程中,我看到了大家的拼搏与努力,也让我知道团队精神得难能可贵,尽管一年下来大家不怎么有多大接触,但是彼此之间的友谊已经在我们心里扎根生底,在遇到问题时,我们会共同进退,每个人都很慷慨不会因为是通过自己艰辛劳动设计出来的东西而不准他人剽窃了。
总之,这次设计程序让我受益良多,我会好好珍惜像这种难得的机会。
林凯楠的个人总结:
两周的C语言实训终于完成了,可以说这次的实训还是很成功的。
虽然我们在实训过程中遇到了不少困难,但最终完成了电子声词库的所有要求内容以及创新部分。
按照一个星期前的现在,当听到老师布置给我们的这个题目时,我们都很诧异了,这么难的题目我们怎么搞的定呢,我们都开始抱怨,抗议,可是一切都是徒劳,我们只能尽我们自己最大的努力把程序给写出来。
首先是主框架部分。
对于我们这些刚接触编程的学生来说,开始的部分最为困难。
拿到题目后,我们组对题目进行了讨论,然后分组。
虽然我的c语言学的并不扎实,期末成绩也并不理想。
但我希望通过这次的实训真正学到东西。
于是我自告奋勇,选择了比较难的两个大部分,编辑和查找。
也算是对自己的一个挑战。
之后,我便按照题目的要求创建函数,定义变量,进行查找等等。
经过第一便得尝试,我发现了很多问题。
字符串不会比较,文件打不开等等。
一下出现了这么多错误,而我自己又查不出错误在哪。
一时间没有主意。
后来在同学的帮助下,我尝试先按照题目要求画出了流程图,再根据流程图来编程。
我发现,有了流程图的帮助让我找到了程序中很多的错误。
同时我发现以前编的程序逻辑上很混乱。
而流程图恰好帮我整理的思路。
这便是我在这次实训中的第一个收获。
经过了3天,我所负责的部分已经有了大概的框架。
我跟他们商量,把大家写好的程序放在一起再来改错。
但是,经过编译,结果很不理想。
出现了120多个错误。
一下让我们很郁闷。
有的错误我们很快就改正了。
像有的地方没有加分号,scanf没有用&等等。
但还有很多错误没有解决,程序也不能运行。
于是我们多次向老师同学请教。
也一直再商量和改正,但成果并不理想。
一下子,我们的进度完全停止了。
这让我们很着急。
最后。
我们在毫无头绪的情况下。
网上找到了相关的编程内容。
进行了借鉴。
虽然我上网找到了相关程序,但我并没有觉得万事大吉了。
我并不想向您隐瞒我上网借鉴这件事,我在看到程序后,也认真的对照自己的程序进行了学习。
完成实训任务并不是我的目的,我想从别人的程序中学到有用的东西。
于是,我深刻的发现了自己的不足。
首先是基础太不牢固了。
只学会了基本的一些内容。
例如循环我只会用for循环。
但程序中还用到了while循环和do-while循环。
对于文件的相关知识我也不是很理解。
其次是逻辑上很混乱,查找的过程总是达不到要求。
删除的时候,随然找到了要删除的单词,但不知道怎样实现删除。
看的程序我才恍然大悟。
我知道了怎样用双循环,知道了怎样用指针去打开文件来写入和读出。
这都是我的收获。
在放假的这3天,我特意看了书,学习了一下程序。
让我有了很大的进步。
最后的答辩让我很紧张。
虽然我仔细的读过程序了,但还是觉得没底。
第一次答辩真的不理想。
我们的程序放在一起,出现了错误。
老师问我关于字符串比较的内容我也不是很会。
于是我们组再次进行了讨论。
我们先修改了程序中的错误,然后一句一句的讲每句语句的内容,含义和作用。
我还特别翻书重新看了文件的内容。
尤其是fscanf,fprintf,等的作用。
还看了有关头文件调用的内容。
也知道了fflush(stdin)的意思和作用。
希望能在下一次答辩中得到好的结果。
一个中午我都在教室里,发现了问题,我都会去向学的好的同学问。
希望自己知道的更多。
但是第二次答辩,因为紧张,并没有把能说清楚的东西说明白。
旁边的同学都为我着急,让我冷静。
但我还是没有冷静下来。
发了脾气。
当时觉得很生气。
想到自己的努力没有得到大家的认同,也让我觉得委屈。
一时间,态度很不好。
但出了教室我就后悔了。
知道了自己的态度不是一个学生应该有的。
于是我特地回来希望老师能再给我一次答辩的机会。
也想向老师道歉。
希望老师能原谅我一时的莽撞。
感谢老师这段时间来对我的教导。
虽然在这次试训中我遇到了很多困难,但在老师的帮助下都克服了过去。
也让我真正学到了平时上理论课时学不到的一些实践性的东西。
我会珍惜这次的经历的。
再次感谢您对我的教导!
2.结束语
经过两周小组成员的不懈努力,我们顺利地完成了这项工作。
在此,我们应由衷感谢C语言鞠慧敏老师对我们的大力帮助,使我们的工作能顺利地完成。
附录Ⅰ程序清单
#include
#include
#include
#include
#defineN100
//结构体
structenglish
{charword[20];charexplain[20];};
structchinese
{charexplain[20];charword[20];};
//引用函数
voidmyprintf1();
voidmyprintf2();
voidmyprintf3();
voidmycreate();
voidmycreatee();
voidmycreatec();
voidmydisplay();
voidmydisplaya();
voidmydisplaye();
voidmydisplayc();
voidmybianji();
voidmydelete();
voiddele();
voiddelc();
voidmyadd();
voidadde();
voidaddc();
voidmymodify();
voidmode();
voidmodc();
voidmysearch();
voidsch_chinese();
voidsch_english();
voidmynew();
//主程序
voidmain()
{
charchoose='\0',yesno='\0';
do
{
myprintf1();
printf("\n");
fflush(stdin);
choose=getchar();
switch(choose)
{
case'1':
mycreate();break;
case'2':
mydisplay();break;
case'3':
mybianji();break;
case'4':
mysearch();break;
case'5':
mynew();break;
case'0':
exit(0);
default:
printf("\n%c为非法选项!
\n",choose);
}
printf("\n要进入主菜单吗(y/n)?
\n");
fflush(stdin);
yesno=getchar();
while(yesno!
='y'&&yesno!
='Y'&&yesno!
='N'&&yesno!
='n')
{
printf("\n请重新输入(y/n)!
\n");
fflush(stdin);
yesno=getchar();
};
}while(yesno=='Y'||yesno=='y');
}
//显示菜单
voidmyprintf1()
{
printf("|--------------------------------------|\n");
printf("|请输入选项编号(0--5)|\n");
printf("|--------------------------------------|\n");
printf("|1--创建生词库|\n");
printf("|2--显示词库|\n");
printf("|3--编辑词库|\n");
printf("|4--查找生词|\n");
printf("|5--创新功能|\n");
printf("|0--退出系统|\n");
printf("|--------------------------------------|\n");
}
//显示显示菜单
voidmyprintf2()
{
printf("*.......................................*\n");
printf("*请输入编号(0--4)*\n");
printf("*.......................................*\n");
printf("*1--显示所有单词*\n");
printf("*2--显示中文单词*\n");
printf("*3--显示英文单词*\n");
printf("*4--返回*\n");
printf("*0--退出系统*\n");
printf("*.......................................*\n");
}
//显示编辑菜单
voidmyprintf3()
{
printf("|***************************************|\n");
printf("|请输入选项编号(0--4)|\n");
printf("|***************************************|\n");
printf("|1--添加新词|\n");
printf("|2--删除旧词|\n");
printf("|3--修改旧词|\n");
printf("|4--返回|\n");
printf("|0--退出系统|\n");
printf("|***************************************|\n");
}
//创建函数
voidmycreate()
{
charchoose='\0';
printf("请选择创建词库的类型(E/C)\n");
do
{
printf("输入大写字母EorC\n");
fflush(stdin);
choose=getchar();
switch(choose)
{
case'E':
mycreatee();break;
case'C':
mycreatec();break;
default:
printf("输入有误,请重新输入\n");
}
}while(choose!
='E'&&choose!
='C');
}
//创建英文词库
voidmycreatee()
{
inti=0;
charyesno='\0';
structenglishdispe[N];
FILE*fp=NULL;
fp=fopen("c:
\\1\\english.txt","w");
if(fp==NULL)
{printf("\n文件打开失败!
\n");return;}
//输入信息
printf("word:
");scanf("%s",dispe[i].word);
printf("explain:
");scanf("%s",dispe[i].explain);
fprintf(fp,"%15s%15s\n",dispe[i].word,dispe[i].explain);
printf("你要继续创建吗?
(y/n)\n");
//输入选择信息
fflush(stdin);
yesno=getchar();
while(yesno=='y'||yesno=='Y')
{
i++;
printf("word:
");scanf("%s",dispe[i].word);
printf("explain:
");scanf("%s",dispe[i].explain);
fprintf(fp,"%15s%15s\n",dispe[i].word,dispe[i].explain);
printf("你要继续创建吗?
(y/n)\n");
fflush(stdin);
yesno=getchar();
}
fclose(fp);
//输入是no时,返回
if(yesno=='n'||yesno=='N')return;
}
//创建中文词库
voidmycreatec()
{
inti=0;
charyesno='\0';
structchinesedispc[N];
FILE*fq=NULL;
//打开文件
fq=fopen("c:
\\1\\chinese.txt","w");
if(fq==NULL)
{printf("\n文件打开失败!
\n");return;}
//输入信息
printf("explain:
");scanf("%s",dispc[i].explain);
printf("word:
");scanf("%s",dispc[i].word);
fprintf(fq,"%15s%15s\n",dispc[i].explain,dispc[i].word);
printf("你要继续创建吗?
(y/n)\n");
fflush(stdin);
yesno=getchar();
while(yesno=='y'||yesno=='Y')
{
printf("explain:
");scanf("%s",dispc[i].explain);
printf("word:
");scanf("%s",dispc[i].word);
fprintf(fq,"%15s%15s\n",dispc[i].explain,dispc[i].word);
i++;
printf("你要继续创建吗?
(y/n)\n");
fflush(stdin);
yesno=getchar();
}
fclose(fq);
if(yesno=='n'||yesno=='N')return;
}
//显示函数
voidmydisplay()
{
charchoose='\0',yesno='\0';
do
{
myprintf2();
fflush(stdin);
choose=getchar();
switch(choose)
{
case'1':
mydisplaya();break;
case'2':
mydisplayc();break;
case'3':
mydisplaye();break;
case'4':
return;
case'0':
exit(0);
default:
printf("\n%c为非法选项\n",choose);break;
}
printf("\n要继续显示吗(y/n)?
\n");
fflush(stdin);
yesno=getchar();
while(yesno!
='y'&&yesno!
='Y'&&yesno!
='N'&&yesno!
='n')
{
printf("\n要继续显示吗?
请重新输入!
\n");
fflush(stdin);
yesno=getch();
};
}while(yesno=='Y'