文本编辑器课程设计报告.docx

上传人:b****4 文档编号:4796679 上传时间:2022-12-09 格式:DOCX 页数:26 大小:182.48KB
下载 相关 举报
文本编辑器课程设计报告.docx_第1页
第1页 / 共26页
文本编辑器课程设计报告.docx_第2页
第2页 / 共26页
文本编辑器课程设计报告.docx_第3页
第3页 / 共26页
文本编辑器课程设计报告.docx_第4页
第4页 / 共26页
文本编辑器课程设计报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

文本编辑器课程设计报告.docx

《文本编辑器课程设计报告.docx》由会员分享,可在线阅读,更多相关《文本编辑器课程设计报告.docx(26页珍藏版)》请在冰豆网上搜索。

文本编辑器课程设计报告.docx

文本编辑器课程设计报告

1、问题描述-------------------------------------------------------------------------2

1、基本要求----------------------------------------------------------------------2

2、提高要求----------------------------------------------------------------------2

二、需求分析-------------------------------------------------------------------------2

三、概要设计-------------------------------------------------------------------------3

四、详细设计-------------------------------------------------------------------------5

1、文件操作----------------------------------------------------------------------5

2、编辑操作----------------------------------------------------------------------10

3、工具操作----------------------------------------------------------------------19

4、关于操作----------------------------------------------------------------------20

五、编码与调试分析----------------------------------------------------------------20

六、使用说明-------------------------------------------------------------------------22

七、测试结果-------------------------------------------------------------------------22

八、自学知识-------------------------------------------------------------------------26

九、课程设计心得体会-------------------------------------------------------------27

 

一、问题的描述

设计并编写一个小型文本编辑器,使其具有通常文本编辑器(如Vi、Edlin)应具备的基本功能。

1.基本要求:

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

设计用户接口命令,实现对文本的编辑。

2.提高要求:

可以支持“*”、“?

”等通配符,支持复制、粘贴等功能,支持多文档同时编辑。

设计用户接口命令,实现对文本的编辑。

二、需求分析

文本编辑器的基本功能:

该文本编辑器是用windows编写的一个程序,运行后弹出文本编辑器的主界面,由键盘输入或以打开的方式输入或显示文本文件内容。

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

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

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

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

输入形式:

①直接在文本编辑框中输入文本内容;

②以打开的方式打开并在文本框中显示电脑的上文本。

输出形式:

对编辑框中尚无文本内容时进行查找、替换、统计等,程序会弹出一个提示尚无文本信息的小对话框,需输入文本后再进行以上操作。

对编辑框中已有文本内容后进行查找、替换、统计操作,程序将弹出与之对应的对话框,根据所弹出的对话框的按键要求进行之后的操作就可以。

保存文件,另存为等功能都异曲同工,撤销、删除、剪切、复制、粘贴、等就直接在主文本编辑框中操作,直接在其显示操作后的文本信息。

测试数据要求:

任意一文本文件。

3、概要设计

(1)抽象数据类型:

直接运用windows中的的窗口类,通过消息响应,调用API函数实现有关对话框的操作功能,以及自己定义一个仅含有成员函数的普通类对文本字符进行查找、替换、统计的辅助操作,对主对话框和副对话框中函数的回调和参数的回显功能。

 

(2)主程序流程图

文本编辑器

文件

编辑

工具

帮助

新建

打开

保存

另存

退出

复制

粘贴

剪切

清空

删除

清空

撤销

查找

替换

统计

全选

背景音乐

关于

连接XX

连接114

(3)模块调用关系:

该文本编辑器函数括:

WINAPIMain_Proc(),WINAPIChange_Proc(),WINAPIFind_Proc(),WINAPITotal_Proc(),Main_OnInitDialog();Change_OnInitDialog();Find_OnInitDialog();Total_OnInitDialog();Main_OnCommand();Change_OnCommand();Find_OnCommand();Total_OnCommand(),Main_OnClose(),Change_Main_OnClose();Find__OnClose();Total_OnClose();Main_OnSize(),TCHAR*temp(),D_change()等函数;其中每个对话框对应一组函数例如主对话框包括WINAPIMain_Proc(),Main_OnInitDialog(),Main_OnCommand(),Main_OnClose()函数,Main_Proc()函数通过消息响应调用Main_OnInitDialog()完成对话框的初始化,通过调用Main_OnCommand()函数完成对对话框中控件以其菜单项的响应,通过调用Main_OnClose()关闭对话框。

其它的如查找,替换等副窗口也一样。

TCHAR*temp(),函数做回调函数用,返回副对话框中已经改变后的主对话框文本框中的文本内容。

D_change()是实现替换功能的函数

其函数调用关系如下:

Main_Proc(),

Main_OnInitDialog()

Main_OnCommand()

Main_OnCommand()

Change_Proc()

Find_Proc()

Total_Proc()

四、详细设计

〔1〕、文件操作:

1、文件的新建的实现:

intret=MessageBox(NULL,TEXT("是否把更改保存到新建的文本文档!

!

!

"),TEXT("温馨提示"),MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)//根据选择如果保存

{

OPENFILENAMEofn;//文件对象

charszFile[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);

}

TCHARstr[10000];

TCHARend[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、文件打开的实现:

caseID_MENUITEMOPEN:

//文本的打开

{

OPENFILENAMEofn;

charszFile[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);

}

TCHARline[256];

TCHARend[10000];

memset(line,0,256);

memset(end,0,256);

while(!

feof(fp))

{

fgets(line,sizeof(line),fp);

lstrcat(end,line);

intw=strlen(end);

end[w-1]='\0';

lstrcat(end,"\r\n");

}

SetDlgItemText(hwnd,IDC_RICHEDIT1,end);

fclose(fp);//关闭文件

}

break;

}

break;

3、文件保存的实现:

caseID_MENUITEMSAVE:

//文本的保存

{

OPENFILENAMEofnb;

charbcFile[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格式

TCHARbaoc[100000];//保存的最大容量为100000

GetDlgItemText(hwnd,IDC_RICHEDIT1,baoc,sizeof(baoc));

fputs(baoc,fp);

fclose(fp);

}

}

break;

3、退出文本编辑器的实现:

intret=MessageBox(NULL,TEXT("是否把更改保存到新建的文本文档!

!

!

"),TEXT("温馨提示"),MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)

{

OPENFILENAMEofn;

charszFile[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);

}

TCHARstr[10000];

TCHARend[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);

〔2〕、编辑操作:

1、剪切的实现:

caseID_MENUITEMCUT:

//剪切

{SendDlgItemMessage(hwnd,IDC_RICHEDIT1,WM_CUT,0,0);

//传递对话框中的内容首先获取RichEdit中的内容,WM_CUT,传递要进行操作的内容,0,0为两个WPARAM和LPARAM是约定的消息参数类型。

break;

}

2、复制的实现:

caseID_MENUITEMCOPY:

//复制

{SendDlgItemMessage(hwnd,IDC_RICHEDIT1,WM_COPY,0,0);

//传递对话框中的内容首先获取RichEdit中的内容,WM_COPY,,传递要进行操作的内容,0,0为两个WPARAM和LPARAM是约定的消息参数类型。

break;

}

3、粘贴的实现:

caseID_MENUITEMPASTE:

//粘贴

{SendDlgItemMessage(hwnd,IDC_RICHEDIT1,WM_PASTE,0,0);

break;

}

4、清除的实现:

caseID_MENUITEMEMPTY:

//清除

{

SetDlgItemText(hwnd,IDC_RICHEDIT1,"");

break;

}

5、撤销的实现:

caseID_MENUITEMUNDO:

//“撤销”菜单

{

SendDlgItemMessage(hwnd,IDC_RICHEDIT1,EM_UNDO,0,0);

break;

}

6、删除的实现:

caseID_MENUITEMDELETE:

//删除

{

SendMessage(GetDlgItem(hwnd,IDC_RICHEDIT1),WM_CLEAR,0,0);

}

break;

7、全选的实现:

caseID_MENUITEMSELECTALL:

//全选

{

SendMessage(GetDlgItem(hwnd,IDC_RICHEDIT1),EM_SETSEL,0,-1);

}

break;

8、系统时间的实现:

VOIDCALLBACKMyTimerFun(HWNDhwnd,UINTmessage,UINTiTimerID,DWORDdwTime)

{

SYSTEMTIMEstrLocal;//当前时间

GetLocalTime(&strLocal);

TCHARstr[256];

wsprintf(str,"%04d-%02d-%02d%02d:

%02d:

%02d",strLocal.wYear,strLocal.wMonth,

strLocal.wDay,strLocal.wHour,strLocal.wMinute,strLocal.wSecond);

SetDlgItemText(hwnd,IDC_EDIT2,str);

}

9、查找功能的实现:

intcount=0;

intLine_count=1;

intRow_count=1;

intnum=0;

intflag=0;

TCHARstr1[256];

TCHARtemp1[5000];

TCHARtemp2[5000];

memset(temp1,0,5000);

memset(temp2,0,5000);

memset(str1,0,256);

GetDlgItemText(hwnd,IDC_EDIT_FINDWORD,str1,sizeof(str1));

if(strlen(str1)==0)

{

MessageBox(NULL,TEXT("查找的内容为空,请输入内容后再查找!

!

!

"),TEXT("呜呜"),MB_OK);

}

else

{

inti=0;

intj=0;

while(str2[i]!

='\0')

{

if((str2[i]=='\n')||(Row_count==63))

{

Line_count++;

Row_count=0;

}

if(str2[i]==str1[j])

{

i++;

j++;

Row_count++;

if(str1[j]==

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1