CHJ课程设计报告Word文档下载推荐.docx
《CHJ课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《CHJ课程设计报告Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
任一英文单词。
1.3提高要求
选用两种以上的方法实现字典的操作,要比较不同实现算法的时间复杂度和空间复杂度。
第2章需求分析
2.1软件的基本功能
用户可通过界面的提示选择功能,然后输入单词进行插入或者删除,插入和删除的同时先进行查找,在插入过程中如果单词在文件中已经存在页面提示用户单词已经存在,在删除过程中,如果输入的单词不存在页面提示用户找不到该单词或者不是单词,在整个过程中字典都是有序的,还可以选择Ese退出界面重新开始。
2.1输入输出形式
输入形式:
本程序功能实现全程均以ASCII形式识别,用户可以通过控制台,根据输入提示。
(1)输入1进入主界面,输入2退出程序;
(2)输入单词;
(3)输入Insert插入,输入Delete删除,输入ESC退出界面。
输出形式:
(1)当输入Insert时,如果文件中存在这个单词,则输出“该单词已经存在”的信息,如果该单词不存在,则输出“请输入该单词的信息”;
(2)当输入Delete删除时,如果文件中本不存在该单词,则输出“该单词不存在或则不是一个单词”,如果该单词存在,则输出“删除成功”;
(3)如果输入错误信息,则输出“输入错误请重新输入”的信息;
测试数据要求:
第3章概要设计
3.1抽象数据类型
根据题目要求,经过再三考虑,我觉得用树的知识解决比较简单,但我对树的知识不太了解最后决定用类类型解决:
词典类classDictionary:
主要函数有构造函数Dictionary();
查找函数intFind();
主要功能是判断输入的单词文件中是否存在,添加函数boolInsert(charfirstchar);
主要功能是把输入的单词插入到文件中去;
删除函数intDelete(charfirstchar)主要是把该单词从文件中删除;
动态显示单词的函数intReshow();
读取文件并动态创建单词空间的函数boolReadFile(charfirstchar);
Delete释放空间并把成员变量设置为初始值的函数intClear();
折半查找的函数boolSearch(int,int,char,int);
界面类classFunction:
主要函数有显示菜单函数intShowMenu();
如果想进入系统进行下面操作选择“1”,如果想退出程序选择“2”;
显示输入框函数intInputKey()输入单词然后根据界面提示进行插入或者删除或者退出;
光标定位函数intGotoxy(intx,inty)主要控制界面;
输入界面intInputFace();
进入页面intInterface();
3.2主程序流程
按2
按1
是否
DeleteInsertDeleteInsert
是
否
3.3模块调用关系
本程序中函数包括:
main函数,词典类classDictionary中的函数包括构造函数Dictionary();
查找函数intFind();
插入函数boolInsert(charfirstchar);
删除函数intDelete(charfirstchar);
i动态显示单词的函数ntReshow();
读取文件并动态创建空间的函数boolReadFile(charfirstchar);
释放空间并把成员变量设置为初始值得函数intClear();
折半查找函数boolSearch(int,int,char,int);
其函数的调用关系如下:
第4章详细设计
4.1实现概要设计的数据类型
classDictionary
{
private:
char**p;
//存放当前单词的指针
intm_maxpage;
//最大的页数
intm_page;
//当前的页数
charm_word[100];
//存放输入的单词
boolm_isfind;
//是否查到单词
intm_min;
//search范围的最小
intm_mid;
//search范围的中间
intm_max;
//search范围的最大
intm_line;
//单词的总行数
//intm_left;
//删除后剩余的空间行数
Functionf;
//定义function对象来实现成员函数内调用
public:
Dictionary();
//构造函数
intFind();
//查找函数
boolInsert(charfirstchar);
//添加单词
intDelete(charfirstchar);
//删除单词
intReshow();
//动态显示单词
boolReadFile(charfirstchar);
//读取文件并动态创建单词空间
intClear();
//Delete释放空间并把成员变量设置为初始值
boolSearch(int,int,char,int);
//折半查找的函数
};
#pragmaonce
#include<
iostream>
conio.h>
//getch()
windows.h>
//颜色,刷新
string.h>
//strcmp,strcpy等等
fstream>
//文件
usingnamespacestd;
classFunction
intShowMenu();
//显示菜单函数
intInputKey();
//显示输入框函数
intGotoxy(intx,inty);
//光标定位函数
intInputFace();
//输入界面
intInterface();
//进入页面
4.2主程序以及其他模块的算法描述
#include"
Dictionary.h"
Function.h"
intmain()
intisContinue=1;
//!
Dictionaryd;
f.Interface();
//调用初始界面
while(isContinue)
{
f.ShowMenu();
//显示初始界面
f.InputFace();
//显示主界面并输入单词
d.Clear();
//释放空间并初始化成员变量
isContinue=d.Find();
}
return0;
}
这个函数主要调用了实现功能的各个函数。
其步骤为:
在用户运行时先调用初始界面模块,出现欢迎使用英汉小词典的字样,第二部在查找的单词中循环,调用初始界面模块,然后用户可根据界面的提示选择功能,如果想继续往下走则选择1,如果想退出程序选择2,进入第三步调用主界面函数,用户可根据提示输入自己想插入或者删除的单词,第四部调用释放空间的函数同时该函数对成员变量初始化,在输入错误信息过程中,会记录大量的数据,调用该函数使得运行不会崩,在此过程中还调用了清屏函数,直至用户选择退出。
4.3其他模块的算法描述
插入函数
功能:
在插入函数中调用查找函数,在插入单词的同时对该单词进行了一次查找,如果文件中已经存在该单词,则提示用户该单词已经存在,如果不存在则可插入。
boolDictionary:
:
Insert(charfirstchar)
charmean[40];
//词义
charinsert_word[200];
inti=0;
intj;
f.Gotoxy(2,3);
while
(1)
{mean[i]=getch();
if(mean[i]==27)//ESC返回键
{
returnfalse;
}
elseif(mean[i]==13&
&
i>
0)
f.Gotoxy(4,5);
cout<
<
"
添加成功!
"
;
system("
pause"
);
break;
删除函数
功能:
在删除函数中调用了查找函数,输入单词的提示进行查找,如果该单词在文件中存在则可进行删除,如果该单词不存在,则提示用户该单词不存在或则不是一个单词,具体代码如下:
intDictionary:
Delete(charfirstchar)
charExePath[200];
//原始路径
charResortPath[200];
//
charFilePath[]="
file\\"
//文件路径
inti,j;
//读取可执行程序的路径并把文件的实际路径也加上去
GetModuleFileName(NULL,ExePath,200);
for(i=strlen(ExePath)-14,j=0;
j<
5;
i++,j++)
ExePath[i]=FilePath[j];
ExePath[i]='
1'
//创建新的文件,防止蓝屏或者断电(再把原来的文件删除,最后rename一下)
j=i;
//记录一下1这个下标
ExePath[++i]='
.'
t'
x'
\0'
strcpy(ResortPath,ExePath);
ResortPath[j]=firstchar;
ofstreamoutfile(ExePath);
if(!
outfile.is_open())
f.Gotoxy(60,3);
cout<
文件打开失败"
endl;
system("
return0;
p[m_min][0]='
for(i=0;
i<
m_line;
i++)//保存时跳过要删除的数据
if(i==m_min)i++;
else
outfile<
p[i];
if(i!
=m_line-1)//最后没有空行
outfile.close();
:
DeleteFile(ResortPath);
//删除txt文件
rename(ExePath,ResortPath);
//并把文件名重新设置为原来的文件名
f.Gotoxy(40,3);
cout<
删除成功!
for(i=m_min+1;
i++)//把数据网上挪上去
strcpy(p[i-1],p[i]);
deletep[m_line-1];
//最后要释放一行的空间
//m_left++;
m_line--;
m_max=m_line-1;
第5章编码与调试分析
【问题一】
程序运行时根据提示多次输入错误信息并且多次选择ESC退出界面,然后重新进入后,程序将会终止或则提示内存已满;
解决办法:
在主函数查找单词循环中调用释放空间并初始化成员变量的函数d.Clear();
当用户选择退出重新输入时,之前记录的数据已被清空,问题得以解决。
具体情况如下:
【问题二】
程序无法插入被包含的单词,例如单词表中有很多以a开头的单词,当用户想插入a这个单词时,程序会提示用户该单词已经存在,无法再插入;
解决方法:
在查找时只比较了第一个一个字母没有循环比较整个单词,在查找函数Find()中比较语句if(m_isfind==true)改为if(m_isfind==true&
strcmp(m_word,word)==0)//防止出现包含的情况,问题得以解决。
【问题三】
不熟悉ASCII在编程中有时会用错,经过一步步调试后找到错误并加以改正。
程序编译、链接成功后,自己设计实现程序功能的一组或多组测试数据,并严格此测试数据进行测试,然后分析测试结果。
如果程序不能正常运行或者结果不正确,则需对程序进行单步调试。
如果程序能够基本正确运行,可考虑增加若干基本易错的功能(如避免用户操作错误时程序出现死循环等);
第6章使用说明
进入菜单,根据提示进行选择:
(1)首先进入初始界面,按任意键后进入功能选择界面,如果想退出程序,选择“2”;
(2)如果想进行其他功能,选择“1”;
(3)进入主界面输入单词后,想插入该单词,按Insert;
(4)如果想删除输入的单词,按Delete;
(5)如果想重新输入,按ESC退出;
(6)如果想修改输入的单词,可选择退格键。
第7章测试结果
(1)运行时首先显示如下界面:
(2)当用户按下任意键时显示如下界面:
(3)当用户选择2退出程序时会结束运行,当用户选择1进入界面时会显示以下界面让用户输入想查找、插入、删除的单词。
(4)当用户输入单词的第一个字母时界面会显示以该字母打头的所有单词,一页可存放18个单词,若没有找到可选择Pagedowm和PageUp进行翻页,界面如下:
(5)如果找到想找的单词,根据界面的提示则可选择Delete或者Insert进行删除或则插入,同时可选择Esc退出界面,具体界面如下:
(6)如果用户选择Delete进行删除后,删除成功,界面提示删除成功,并且程序会调用一次查找函数界面提示该单词已经找不到,即删除成功;
具体界面如下:
(7)如果该单词在文件中不存在,则界面会提示该单词不存在或者该单词不是一个单词,具体界面如下:
(8)当用户输入单词后,可选择Insert进行插入,界面提示用户输入单词的词性和意思,同时也可以选择Esc退出界面,具体界面如下:
(9)如果用户输入的单词文件中不存在,则可进行插入,插入成功后,界面会进行提示添加成功,请按任意键继续,具体界面如下:
(10)如果用户想插入的单词本来就存在,则文件不再读取,插入失败,界面提示该单词已经存在,具体界面如下:
(11)当操作都结束后,可选择Esc退出界面返回到以下界面,如果输入错误信息则会提示用户重新输入,具体界面如下:
(12)当操作都结束后,可选择Esc退出界面返回到以下界面:
最后选择2退出整个程序或者选择1再次重复以上操作。
第8章自学知识
在课程设计过程中,特别是在代码编写和调试的过程中,自学了很多新的知识。
例如SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
这些函数需要包含头文件#include<
它的主要作用是进行字体刷新和改变字体颜色的功能,getch()函数包含头文件#include<
方便字符串的strcmp,strcpy等等。
还有一个知识点是清屏函数,它也是包含于<
stdlib.h>
头文件中的,使用形式为system("
CLS"
)。
主要功能就是清空屏幕。
第9章课程设计心得体会
这次的课程设计使我学到了许多课堂上学不到的知识,例如知道了#pragmaonce、#include<
、#include<
string>
等头文件的用法使我的程序更加完善界面更漂亮,还有就是怎样保存文件和读取文件,在课程设计的过程中我“师父”金君教会了我很多原来我不知道的东西,也是他让我深刻体会到我程序与他们程序水平的差距,同时我也喜欢上了编程,虽然不是最好,但以后我一定做到更好,三个星期的学习启发我如果想要写好程序除了要学好课本的知识,还要多动手实践,尽量把所学的知识完全应用起来,从而做到灵活的掌握。
除此之外我还学到了写程序必须要仔细,不能输错一个字符代码。
在修改时候也要有耐心,编译出错误后必须逐个去修改,否则会增加新的错误。
通过这次的课程设计我还学到了怎么去做报告,学会了怎么去用文档的东西,怎么在里面画图,通过短短三个星期学习让我有了很大的进步
其次这次课程设计,增强了我的自信心。
因为在这次课程设计中,我遇到了一些问题,但是都逐个得解决了,虽然有些问题请教了同学,但是从中学了很多东西,也学到了一些处理问题的方法。
在能力上得到了一些提升。
同时也养成了独立思考问题,以及和同学一起探索问题的良好习惯。
当然,在课程设计过程中,有些细节的处理还是不够完美,需要完善的地方还有很多,还需要继续努力,尽量将程序完善。
在编写程序过程中,得到了部分同学的帮助,如:
“我师父”金君教会了我怎样使用光标函数,使得界面这一块调用光标函数既简单又方便,还有很多细小但又致命的问题都是他一一解答,然后根据自己的理解,完成基本算法和细节处理,最后完成了转换函数的代码编写。
第十章参考文献
【1】谭浩强C程序设计(第三版)
【M】北京:
清华大学出版社。
【2】谭浩强C程序设计题解与上机指导(第三版)
【3】廖宇C语言程序设计习题解答及上机指导(第二版)高等教育出版社。