当前位置:文档之家› 课程设计文本编辑器的设计

课程设计文本编辑器的设计

.《高级语言程序设计》课程设计报告题目: 文本编辑器的设计 专业: 计算机科学与技术 班级:14计科一班: 彭鑫 指导教师: 王峻成绩:计算机学院 2015年4月24日2014-2015学年 第2学期目录1 设计内容及要求 (2)1.1设计内容 ..................................................................................... 错误!未定义书签。

1.2具体要求 (2)2 概要设计 (2)2.1系统的功能简介 (3)2.2系统功能模块图........................................................................ 错误!未定义书签。

2.3各个模块之间的主要关系 (3)3 详细设计 (4)3.1文件操作 (4)3.2编辑操作 (9)3.3工具操作 (17)4 程序运行结果与调试 (19)4.1 在调试过程中出现的一些问题 (19)4.2 实验结果 (20)5 课程设计总结与感想 (24)参考文献 (24)源代码 (25)1 设计内容及要求1.1设计内容该文本编辑器运行后弹出文本编辑器的主界面,由键盘输入或以打开的方式输入或显示文本文件内容。

其中程序的编辑项可对当前的文本进行撤销、删除、剪切、复制、粘贴、在文本里显示当前时间、全选、清除、查找、替换、统计等功能。

程序的文件项可以对电脑上txt,c++等格式文件的打开、对当前文本的保存和另存、对当前文本的的新建以及退出文本编辑系统。

程序的工具项为背景音乐,为用户提供了优美动听的音乐,仅在用户编辑疲惫乏力的时候尽情的享用。

最后在程序的帮助项有对该小型文本编辑器的关于,用来介绍该程序,还有访问链接百度,访问114网页大全,为用户提供查找资料等功能服务。

1.2具体要求基本要求:编辑器应具备对文本文件的打开、保存、新建、查找、插人、删除、修改、字符串替换、统计字数,统计行数等功能,对于超过一屏的长文件,应能够分页显示。

设计用户接口命令,实现对文本的编辑2 概要设计2.1系统的功能简介输入一页文字,程序实现文字、数字、空格的统计;可以删除一行信息;查找定位单词;定行位置插入;文件存盘;装入文件;并能显示输入及其他功能。

2.2系统功能模块图运行所需环境:win7及以下各版本windows,visual C++6.0。

2.3各个模块之间的主要关系该系统的功能主要是实现文本的输入,并对文本的相应信息进行的操作。

各个模块之间的关系是相互联系的。

首先,主函数包含了所有的子函数。

主函数是整个系统的核心。

子函数之间也是有联系的,对文本信息的显示、删除、统计、查找、插入,存储,装入,必须是在文本信息输入的情况下进行的。

因此对文本的输入是非常重要的。

在文本的删除、统计、查找、插入、存储、装入、保存所有的子函数之间是没有多大联系的。

3 详细设计3.1文件操作(1)文件的新建的实现:int ret=MessageBox(NULL,TEXT("是否把更改保存到新建的文本文档!!!"),TEXT("温馨提示"),MB_YESNO | MB_ICONQUESTION);if(ret==IDYES) //根据选择如果保存{OPENFILENAME ofn; //文件对象char szFile[MAX_PATH]; //文件的大小,最大ZeroMemory(&ofn,sizeof(ofn)); //文件的初始化ofn.lStructSize = sizeof(ofn);ofn.lpstrFile = szFile;ofn.lpstrFile[0] = TEXT('\0');ofn.nMaxFile = sizeof(szFile);ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0C++\0*.cpp\0"); //保存的文件类型ofn.nFilterIndex = 1;ofn.lpstrFileTitle = NULL;ofn.nMaxFileTitle = 0;ofn.lpstrInitialDir = NULL;ofn.hwndOwner = hwnd;ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;ofn.lpstrTitle=TEXT("保存");if (GetSaveFileName(&ofn)){FILE *fp;fp=fopen(szFile,"w"); //打开文件if(fp==NULL){MessageBox(NULL,TEXT("文件无法保存"),TEXT("呜呜"),MB_OK);}TCHAR str[10000];TCHAR end[10000];memset(end,0,10000);GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));fputs(str,fp);fclose(fp);}SetDlgItemText(hwnd,IDC_EDIT1,"");}else{SetDlgItemText(hwnd,IDC_EDIT1,"");}(2)文件打开的实现:case ID_MENUITEMOPEN: //文本的打开{OPENFILENAME ofn;char szFile[MAX_PATH]; //保存路径变量ZeroMemory(&ofn,sizeof(ofn));在这里我们使用ZeroMemory“函数”,ZeroMemory其实并不是函数,看一下ZeroMemory的定义:ofn.lStructSize = sizeof(ofn);ofn.lpstrFile = szFile;//szFile是一个字符数组,那么szFile这个名字就代表这个字符数组的首地址这是一个指针的应用,把接收选择文件名的数组的地址传递到GetOpenFileName函数中。

ofn.lpstrFile[0] = TEXT('\0');ofn.lpstrFile[0] = TEXT('\0');效果等价于ZeroMemory(szFile,sizeof(szFile)/sizeof(char));ofn.nMaxFile = sizeof(szFile);ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.txt\0");文件过滤器*.*就表示所有文件*.txt就表示所有文本文件abc*.*就表示所有以abc开头的文件abc*.txt就表示所有以abc开头的文本文件(txt)ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0");用“\0”分割出几个段,每两段是一组过滤器,每组的第一个段代表过滤器的显示的值,而第二段表示真正的过滤器ofn.nFilterIndex = 1; //选择一个过滤器ofn.lpstrFileTitle = NULL;windows的一个惯例:结构体的指针类型别名一般是LP+结构体的名字GetOpenFileName(&ofn)而不是GetOpenFileName(ofn),因为GetOpenFileName函数要的是OPENFILENAME的指针(8)只要用户还没关闭对话框,那么GetOpenFileName函数是停住的,同步模式的PlaySound 以及getchar、scanf是一样的。

用户关闭对话框,GetOpenFileName函数返回,返回值是BOOL,等于TRUE表示用户选择了文件,如果等于FALSE就表示用户选择了【取消】按钮ofn.nMaxFileTitle = 0;ofn.lpstrInitialDir = NULL;ofn.hwndOwner = hwnd;ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;if(GetOpenFileName(&ofn)){FILE *fp;fp=fopen(szFile,"r");if(fp==NULL){MessageBox(NULL,TEXT("文件打开错误!"),TEXT("记事本"),MB_OK);}TCHAR line[256];TCHAR end[10000];memset(line,0,256);memset(end,0,256);while(!feof(fp)){fgets(line,sizeof(line),fp);lstrcat(end,line);int w=strlen(end);end[w-1]='\0';lstrcat(end,"\r\n");}SetDlgItemText(hwnd,IDC_RICHEDIT1,end);fclose(fp); //关闭文件}break;}break;(3)文件保存的实现:case ID_MENUITEMSAVE: //文本的保存{OPENFILENAME ofnb;char bcFile[MAX_PATH];ZeroMemory(&ofnb,sizeof(ofnb));ofnb.lStructSize = sizeof(ofnb);ofnb.lpstrFile = bcFile;ofnb.lpstrFile[0] = TEXT('\0');ofnb.nMaxFile = sizeof(bcFile);ofnb.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.txt\0");ofnb.nFilterIndex = 1;ofnb.lpstrFileTitle = NULL;ofnb.nMaxFileTitle = 0;ofnb.lpstrInitialDir = NULL;ofnb.hwndOwner = hwnd;ofnb.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST|OFN_OVERWRITEPROMPT;if (GetSaveFileName(&ofnb)){FILE * fp = fopen (".txt","w"); //保存所有文件都为txt格式TCHAR baoc [100000]; //保存的最大容量为100000GetDlgItemText(hwnd,IDC_RICHEDIT1,baoc,sizeof(baoc));fputs(baoc,fp);fclose(fp);}}break;(4)退出文本编辑器的实现:int ret=MessageBox(NULL,TEXT("是否把更改保存到新建的文本文档!!!"),TEXT("温馨提示"),MB_YESNO | MB_ICONQUESTION);if(ret==IDYES){OPENFILENAME ofn;char szFile[MAX_PATH];ZeroMemory(&ofn,sizeof(ofn));ofn.lStructSize = sizeof(ofn);ofn.lpstrFile = szFile;ofn.lpstrFile[0] = TEXT('\0');ofn.nMaxFile = sizeof(szFile);ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0C++\0*.cpp\0");ofn.nFilterIndex = 1;ofn.lpstrFileTitle = NULL;ofn.nMaxFileTitle = 0;ofn.lpstrInitialDir = NULL;ofn.hwndOwner = hwnd;ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;ofn.lpstrTitle=TEXT("保存");if (GetSaveFileName(&ofn)){FILE *fp;fp=fopen(szFile,"w");if(fp==NULL){MessageBox(NULL,TEXT("文件无法保存"),TEXT("呜呜"),MB_OK);}TCHAR str[10000];TCHAR end[10000];memset(end,0,10000);GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));fputs(str,fp);fclose(fp);}MessageBox(NULL,TEXT("文件保存成功!放心关闭!!!"),TEXT("嘻嘻"),MB_OK);}EndDialog(hwnd, 0);3.2编辑操作:(1)剪切的实现:case ID_MENUITEMCUT: //剪切{ SendDlgItemMessage(hwnd,IDC_RICHEDIT1,WM_CUT,0,0);//传递对话框中的内容首先获取RichEdit中的内容,WM_CUT,传递要进行操作的内容,0,0为两个WPARAM和LPARAM是约定的消息参数类型。

相关主题