1、背单词小程序软件工程专业C+ 课程设计报告一课程设计目的及要求1设计目的1.提高和加强计算机应用与软件开发能力,由初学者向专业的程序员过渡。2.培养独立分析问题、解决问题、查阅资料以及自学能力,以适应计算机产业日新月 异发展的形势。3.学习和掌握 C+ 程序设计方法以及上机调试技巧, 为今后学习其它专业课程打好基 础。2设计要求(题目)1)背单词小程序2)学生选课系统二课程设计的具体实现1)背单词小程序1总体设计本程序主要有以下功能: 添加新词 顺序测验和随即测验 记录没背过的词 查找单词的汉语或英语意思 (输入中文查对应的英语意思, 输入英文查对应汉语意思)各模块执行完3.未4.英3.已进入
2、程序,显主要流V 6.1添随英机译背单背单顺汉序译汉互2 详细设计具体实现包括十个模块和一个头文件。分别是: First.cpp, Main.cpp.Menu.cpp, Part l.cpp, Part 2.cpp, Part 3.cpp, Part 4.cpp, Part 5.cpp, Part 6.cpp 五大功能粗实现.cpp, HEAD.H。Meu n函数主要功能:用户进入系统首先执行的就是主函数,然后进入主菜单函数, 它将显示主界面,并提示用户选择所需的功能。其中改变了屏幕和字体的 颜色来构造一种欢快的气氛来学习。主功能: 1.添加单词;2.进入检测;3.已背单词;4.未背单词;5.
3、英汉互译;6.退出。请选择:system(cls); / 清屏Add_word(); 、调用添词函数 cinj;system(cls);if(j=1)Add();else if(j=2)system(cls);Frame();else / 尽量避免在使用程序时因操作引起的失误cout认真一点!( v_ )#endl;cout 回答问题决定您的方向: endl;cout 您是否对我的程序满意: Y/Nch;if(ch=Y|ch=y)system(cls);Frame();elseexit(0);else if(i=2)system(cls);Test();cinj;if(j=1)Test_ByO
4、rder();cout 任意键返回主目录 !ch;if(ch=b|ch=B)system(cls);Frame();elsesystem(cls);Frame();else if(j=2)Test_Bylmmediately();cout任意键返回主目录! ch;if(ch=b|ch=B)system(cls);Frame();elsesystem(cls);Frame();else if(j=3)添加单词主要功能:用户在主界面选择功能1后即执行添加单词模块。它将提示 用户输入添加单词,之前可以显示已存在的单词,利用while循环实现不定量输入单词,最后保存到单词库请选择:主要使用技术:文件指
5、针(FILE *fp) while判断循环 关键代码:char ch=Q; 用来判断是否继续输入单词if(fp=fope n(dictio nary.txt,ab+)=NULL)cout文件无法打开!endl; exit(0);/特别有成 for(i=0;fread(&Wordi,sizeof(WoRD),1,fp)!=0;i+) coutWordi. nu m vWordi.E_wordve ndl;就感的地方!把以前的单词输出来展示j=i;while(ch=q|ch=Q) / while循环支持不断向文件载入内容coutvv目前单词库单词存储量为:vvjvve ndl; cout请分别输入
6、新增单词的编号、单词、中文翻译和背诵记录(tt/ff):Wordj. numWordj.E_wordWordj.C_wordWord|j.TF;fwrite(&Wordj,sizeof(WoRD),1,fp);coutvv添加成功!是否继续增添单词,继续则输入Q/qe ndl;cin ch;检测功能主要功能:用户在主界面选择功能2后即执行该模块。在此模块中可以 实现顺序检测和随机检测。用户输入正确或错误都会给与提示 !并且可以输 入想要检测的单词数量,量力而行。主要技术:文件的读出与写入,取随机数,if语句关键代码:if(fp=fopen(dictionary.txt,ab+)=NULL)co
7、ut 文件无法打开 !endl;exit(0); for(i=0;it;i+)fread(&Wordi,sizeof(WoRD),1,fp);cout 随即检测开始 !:endl;cout 请输入这次测试的单词量: p;if(p=t)for(i=0;it;i+)char word10;int j;j=rand()%t; / 产生随机数 coutWordj.C_word word; if(strcmp(word,Wordj.E_word)=0)cout 回答正确 !endl;char tf3=tt;strcpy(Wordi.TF,tf); / 将信息记录在案! elsecout 回答错误 !en
8、dl;char tf3=ff; strcpy(Wordi.TF,tf);elsefor(i=0;ip;i+)char word10;int j;j=ra nd()%p; / 产生随机数 coutWordj.C_wordvv word;if(strcmp(word,Wordj.E_word)=0) _ cout回答正确!endl;char tf3=tt;strcpy(Wordi.TF,tf);elsecoutvv回答错误!endl; char tf3=ff;strcpy(Wordi.TF,tf);关键代码:if(fp=fopen(dictionary.txt,ab+)=NULL) / 打开文件
9、并判断文件是否存在cout 文件无法打开 !endl; exit(0); for(i=0;it;i+)fread(&Wordi,sizeof(WoRD),1,fp); / 将文件信息读出 cout 已背过的单词: endl;for(i=0;it;i+)char ch5=tt;char cf5=TT;if(strcmp(Wordi.TF,ch)=0|strcmp(Wordi.TF,cf)=0) / 和 英汉互译差不多的操作 判断后输出coutWordi.E_word Wordi.C_wordendl;未背单词主要功能:用户在主界面选择功能 3后即执行该模块, 能够显示尚未背 诵的单词。主要技术:
10、该模块只是调用和显示, 主要用到了 if 函数和字符串处理和 文件的读出技术。-关键代码:if(fp=fope n(dictio nary.txt,ab+)=NULL) cout文件无法打开!endl;exit(0);for(i=0;it;i+)fread( &Wordi,sizeof(WoRD),1,fp);cout未背过的单词:e ndl;for(i=0;it;i+)char ch5=ff;char cf5=FF;if(strcmp(Wordi.TF,ch)=0|strcmp(Wordi.TF,cf)=0)coutWordi.E_wordvWordi.C_wordve ndl; 英汉互译主
11、要功能:用户在主界面选择功能5后即执行该模块,能够进行英汉互 译功能。主要技术:该模块只是调用和显示,主要用到了 if函数和字符串处理和 文件的读出技术。关键代码:char E20; 用数组是为了下面的地址WoRD Word100;if(fp=fope n(dictio nary.txt,ab+)=NULL)cout文件无法打开!endl;exit(0);for(i=0;it;i+)fread( &Wordi,sizeof(WoRD),1,fp);cout输入其英文: E;for(i=0;it;i+) if(strcmp(Wordi.E_word,E)=0) coutWordi.C_worde
12、 ndl; cout任意键返回主目录! ch;if(ch=b|ch=B)system(cls);Frame(); elsesystem(cls);Frame();头文件本套程序一共有一个头文件。 HEAD.h 用于定义单词结构体,共有“单 词编号”,“ 单词英文”,“ 单词中文意思”,“ 标注”几项。代码如下 :struct WoRD / 没有用 WORD时因为 #includevwindows.h 里有叫WOR的 O_O b 汗!int num; / 单词编号char E_word20; / 单词英文char C_word30; / 单词中文意思char TF3; / 用来标注是否背过;3调
13、试及问题解决本套程序的调试中遇到过许多问题。尤以以下几个最具代表性和启发 性:1程序无法循环使用。刚开始程序完成一项功能后就自动退出程序,总是不能再返回主菜单, 这样程序也就显得特无力。后来通过他人指导利用函数间相互调用完成了 界面间自由往来!而且利用清屏功能让程序显得干净明了!void Frame()int i,j;Menu();cini;if(i=1)system(cls);Add_word();cinj;system(cls);if(j=1)Add();else if(j=2)system(cls);Frame();else / 尽量避免在使用程序时因操作引 起的失误 cout认真一点!
14、( J_ )#endl; cout 回答问题决定您的方向: endl; cout 您是否对我的程序满意: Y/Nch;if(ch=Y|ch=y)system(cls);Frame();elseexit(0);2文件的调入后的数据更新。每次进行单词添加的时候都只能显示 10 个单词,但是我渴望的是把以 前的单词输出来,再把这次添加的单词也输出来。 。后来我利用一个数组把文件里的单词信息记录了一下, 再把那个全局变 量记录一共多少单词数,这样就使得程序对单词信息很清晰,单词更新也 不再是问题!void First() / 这个函数实现了文件信息的更新 每次开始它都可以将以前的文件内容跟现在串起来
15、! 是我花费最长时间的地方 ! T_T WoRD Word100;FILE *fp;int i,j;if(fp=fopen(dictionary.txt,ab+)=NULL)cout 文件无法打开 !endl;exit(0); for(i=0;fread(&Wordi,sizeof(WoRD),1,fp)!=0;i+)t=i; / 将上次单词数赋给现在需要使用的 t 记录下来 !3显示背诵过和为背诵过的单词不能实现试过用bool,但是失败了!。一。b汗 后来我从int换到char又换 到字符串! 利用字符串处理函数 strcmp(str1,str2)=0 实现了。 有时候就 是一个很简单的问题
16、,但是就是弄不好!挺可恶! if(strcmp(Wordi.TF,ch)=0|strcmp(Wordi.TF,cf)=0)/ 条件符合就输出 coutWordi.E_word Wordi.C_wordendl;4关于重名在用 #include 包含一些系统自带的头文件时会遇到自己的构造体或变 量明和系统冲突,虽然这个知识点在课本一开始就知道了,但是真正在实 战中还挺难发现。必有 WOR就在“ windows.h ”中存在。5.一些遗憾 对于文件流相关知识的不熟悉让我感觉很受挫!不过没关系,我可以利用下 一个程序去熟悉去掌握! 这个小程序中仍旧存在的种种问题让我也压力挺大 的,但是迫于时间和考试
17、只好将修改作罢了 不过因此我也理解了那些已经在 一线奋斗的前辈的苦恼,软件真的没有那么简单! !以下是附带代码: 背单词的小程序/ 头文件 HEAD.Hstruct WoRD / 没有用 WORD时因为 #includewindows.h 里有叫 WOR的 O_O b 汗!int num; / 单词编号char E_word20; / 单词英文char C_word30; / 单词中文意思char TF5; / 用来标注是否背过;/FIRST.CPP#include#include#include#includeHEAD.Hvoid Frame();#includeint t;void Fir
18、st() / 这个函数实现了文件信息的更新 每次开始它都可以将以前的文件内容跟现在串起来 ! 是我花费最长时间的地方 ! T_TWoRD Word100;FILE *fp;int i,j;if(fp=fopen(dictionary.txt,ab+)=NULL)cout 文件无法打开 !endl;exit(0); for(i=0;fread(&Wordi,sizeof(WoRD),1,fp)!=0;i+)t=i; / 将上次单词数赋给现在需要使用的 t 记录下来 !/MAIN.CPP#include#includeHEAD.H#includevoid First();void Frame();
19、void main()system(color 3E); / 屏幕及字体颜色SetConsoleTitle( 英 语 也 疯 狂 老邓制作 !); / 屏幕标题First();Frame(); /Game begin!MENU.CPP#include#include#include#includeHEAD.Hextern int t; / 全局变量void Add_word();void Add();void Test();void Test_ByOrder();void Test_ByImmediately();void Review();void Done();void Preview()
20、;void Doing();void Translate();void Transluate_EC();void Transluate_CE();void Quit();void Menu() / 主菜单 (A 3 A) /endl;cout 背单词 cout endl;cout添加新词endl;coutendl;cout进入检测endl;coutendl;cout已背单词endl;coutendl;cout未背单词endl;coutendl;cout英汉互译endl;coutendl;cout返回现实endl;coutcout 请选择 :; void Frame()i;if(i=1)syst
21、em(cls);Add_word();cinj;system(cls);if(j=1)Add();else if(j=2) system(cls); Frame();else / 尽量避免在使用程序时因操作引起的失误cout认真一点!( )#endl;cout 回答问题决定您的方向: endl;cout 您是否对我的程序满意: Y/Nch;if(ch=Y|ch=y)system(cls);Frame();elseexit(0);else if(i=2)system(cls);Test();cinj;if(j=1)Test_ByOrder();cout 任意键返回主目录 !ch;if(ch=b|
22、ch=B)system(cls);Frame();elsesystem(cls);Frame();else if(j=2)Test_ByImmediately();cout 任意键返回主目录 !ch;if(ch=b|ch=B)system(cls);Frame();elsesystem(cls);Frame(); else if(j=3)system(cls);Frame();else / 尽量避免在使用程序时因操作引起的失误cout 认真一点!( )#endl;cout 回答问题决定您的方向: endl;cout 您是否对我的程序满意: Y/Nch;if(ch=Y|ch=y)system(c
23、ls);Frame();elseexit(0);else if(i=3)system(cls);Review();cinj;if(j=1)Done();cout 任意键返回主目录 !ch;if(ch=b|ch=B)system(cls);Frame();elseelse if(j=2) system(cls); Frame();else / 尽量避免在使用程序时因操作引起的失误cout 认真一点!( )#endl;cout 回答问题决定您的方向: endl;cout 您是否对我的程序满意: Y/Nch; if(ch=Y|ch=y)system(cls);Frame();elseexit(0);
24、else if(i=4) system(cls);Preview();cinj; if(j=1) Doing(); cout 任意键返回主目录 !ch;if(ch=b|ch=B)system(cls);Frame(); else else if(j=2)system(cls);Frame();elsecout/ 尽量避免在使用程序时因操作引起的失误认真一点!( J_ )#”endl;cout 回答问题决定您的方向: endl;cout 您是否对我的程序满意: Y/Nch;if(ch=Y|ch=y)system(cls);Frame();elseexit(0); else if(i=5)system(cls);Translate();cinj;if(j=1)Transluate_EC();cout 任意键返回主目录 !ch; if(ch=b|ch=B)system(cls);Frame(); elseelse if(j=2
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1