目录
题目:小型英汉词典........................................................................................................................ 1
问题描述:........................................................................................................................................ 1
问题描述:................................................................................................................................ 1
基本要求:................................................................................................................................ 1
测试数据:................................................................................................................................ 1
提高要求:................................................................................................................................ 1
考核要求:................................................................................................................................ 1
需求分析 ............................................................................................................................................ 1
软件的基本功能: .................................................................................................................... 1
输入要求:................................................................................................................................ 2
输入形式:................................................................................................................................ 2
输出形式:................................................................................................................................ 2
概要设计 ............................................................................................................................................ 3
抽象数据类型:........................................................................................................................ 3
流程图: .................................................................................................................................... 3
块调用关系: ............................................................................................................................ 3
详细设计 ............................................................................................................................................ 5
实现概要设计的数据类型: ....................................................................................................5
主要函数说明:........................................................................................................................ 5
对话框操作的代码及主要算法的代码:................................................................................6
编码与调试分析.............................................................................................................................. 23
编码与调试过程中遇到的问题及解决办法:......................................................................23
测试结果 .......................................................................................................................................... 24
用户这方面:这部分只能对文件进行查找功能 ..................................................................24
管理员这方面:主要是插入删除 ..........................................................................................25
自学知识 .......................................................................................................................................... 27
课程设计心得体会 .......................................................................................................................... 27
参考资料:...................................................................................................................................... 27
页0
题目:小型英汉词典
问题描述:
问题描述:
设计一个英汉词典,支持 Member 的查找、插入、删除操作。
基本要求:
实现字典的常用方法有:有序线性表(用二分检索实现)、AVL 树(二叉搜索树)、Patricia Tree、
散列表等,任选一种方法实现字典的操作,查找单词、插入单词(插入时,先查找,找不到
插入,找到提示用户)、删除单词(删除时,先查找,找到删除,找不到提示用户)。字典是
按字母顺序排列的,不能用顺序查找,插入或删除单词后,要保持字典的有序性。
测试数据:
任一英文单词。
提高要求:
选用两种以上的方法实现字典的操作,要比较不同实现算法的时间复杂度和空间复杂度。
考核要求:
(1)如果采用线性结构且无序,成绩为不及格。
(2)选择合适的数据结构,达到了基本要求,成绩为优秀。
(3)鼓励设计图形用户界面。
提示:字典可以自己建立,但必须按字母 a~z 建立 26 个文件,建议从网上下载,文件
类型为 txt。
需求分析
软件的基本功能:
页1
⑴可以输入英文,查找要查找的英文单词的意思;
⑵也可以输入中文,则便会显示一些包含该中文词组的意思,用户可以根据
需要双击要查找的意思,则会输出用户需要的英文单词;
⑶可以插入单词及意思,以完善字典的词汇量;
⑷可以删除单词,有利于管理单词表。
*其中(3)(4)只有管理员才能操作。
输入要求:如下图。在①中输入要操作的单词(中文或英文),根据②中的
索引双击要查找的内容,如果②中没有显示出,则表明不存在该单词。双击②中
你选中的单词,③中会输出相应的解。
输入形式:
⑴ 英文单词或者英文单词的前几个字母
⑵ 中文词组
输出形式:
在②中输出索引,在③中输出要查找的单词或单词的意思。
页2
测试数据要求:
用户可以根据要求测试该程序,可以输入中文词组或英文单词或英文单词的
前几个字母。
概要设计
抽象数据类型:
根据题目的要求,考虑用平衡二叉树比较适合。
流程图:
管理员界面
输入
插入
删除
用户界面
输入英语字
母或汉字
查找
双击你要的内容
输出相应的结果
块调用关系:
本程序中函数包括:main 函数,平衡二叉树操作相关函数,win32 相关
页3
操作函数
其函数调用关系如下:
WinMain
Main_Proc
Main_OnCommand
GetDlgItemText
InsertAVL
WinMain
Main_Proc
Main_OnCommand
GetDlgItemText
InsertAVL
DeleteAVL
InOrder
是 英 文
吗
CTE
SearchBST
SetDlgItem
页4
详细设计
实现概要设计的数据类型:
///////////////////////////// 定义结构体 ///////////////////////////
typedef struct BSTNode
{
char *Eng;
char *Ch;
int bf;
struct BSTNode *lchild,*rchild;//左、右孩子指针
//结点的平衡因子
}BSTNode,*BSTree;
主要函数说明:
void R_Rotate(BSTree &p);
序树作右旋处理
void L_Rotate(BSTree &p);
序树作左旋处理
//对以*p 为根的二叉排
//对以*p 为根的二叉排
void LeftBalance(BSTree &T);
//对以指针T所指结点为根的二叉树作
左平衡旋转处理
void RightBalance(BSTree &T);
为根的二叉树作右平衡旋转处理
//对以指针T所指结点
bool InsertAVL(BSTree &T,int e,bool &taller);
bool SearchBST(BSTree &T,int key);
//插入结点 e
//查找元素 key 是否在树
T中
void PrintBST(BSTree T,int m);
//按树状打印输出二叉树
的元素
void CreatBST(BSTree &T);
意:以输入-1 为二叉树建立的结束)
void LeftBalance_div(BSTree &p,int &shorter);
理
void RightBalance_div(BSTree &p,int &shorter);
页5
//创建平衡二叉树,(注
//删除结点时左平衡旋转处
//删除结点时右平衡旋转处
理
void Delete(BSTree q,BSTree &r,int &shorter);
int DeleteAVL(BSTree &p,int x,int &shorter);
//删除结点
//平衡二叉树的删除操作
对话框操作的代码及主要算法的代码:
//记录二叉树是否变短了
//记录二叉树是否长高了
1,对话框操作的代码:
bool taller=false;
int shorter=0;
int i = 0;
TCHAR temp_Eng_test[NUM];
TCHAR temp_Ch_test[NUM];
TCHAR temp_Eng[NUM];
TCHAR temp_Ch[NUM];
TCHAR filename[14] = "C:\\word\\a.txt";
HWND hwndCombol = GetDlgItem(hwnd,IDC_LIST1);
//得到 LISTBOX
这个控件的句柄
HWND hwndCombo2 = GetDlgItem(hwnd,IDD_MAIN);
GetDlgItemText(hwnd,IDC_EDIT1,temp_Eng_test,sizeof(temp_Eng_test));
count = strlen(temp_Eng_test);
if(temp_Eng_test[0] >=0 && temp_Eng_test[0] <=127)
{
if(count == 0)
{
T=(BSTree)malloc(sizeof(BSTNode));
T = NULL;
ListBox_ResetContent(hwndCombol);
SetDlgItemText(hwnd,IDC_EDIT4," ");
}
else if(count == 1)
{
以行为
页6
//删除列表框中所
if(DBLCLK == false)
SetDlgItemText(hwnd,IDC_EDIT4," ");
filename[8] = temp_Eng_test[0];
ifstream ifile(filename);
if(!ifile)
{
MessageBox(hwnd,TEXT("open
file
error!"),TEXT("error"),MB_OK);
exit(1);
}
while(ifile.getline(temp_Eng,256,' '))
{
ifile.getline(temp_Ch,256);
InsertAVL(T,temp_Eng,temp_Ch,taller);
taller=false;
}
ifile.close();
InOrder(hwnd,T,temp_Eng_test);
}
else
{
if(counttest != count)//这是我加的,加上就没有问题了
{
if(DBLCLK == false)
SetDlgItemText(hwnd,IDC_EDIT4," ");
ListBox_ResetContent(hwndCombol);//这是清空
DBLCLK = false;
counttest = count;
InOrder(hwnd,T,temp_Eng_test);
}
页7