MFC文本编辑器ADO连接数据库.docx

上传人:b****7 文档编号:8923830 上传时间:2023-02-02 格式:DOCX 页数:35 大小:364.22KB
下载 相关 举报
MFC文本编辑器ADO连接数据库.docx_第1页
第1页 / 共35页
MFC文本编辑器ADO连接数据库.docx_第2页
第2页 / 共35页
MFC文本编辑器ADO连接数据库.docx_第3页
第3页 / 共35页
MFC文本编辑器ADO连接数据库.docx_第4页
第4页 / 共35页
MFC文本编辑器ADO连接数据库.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

MFC文本编辑器ADO连接数据库.docx

《MFC文本编辑器ADO连接数据库.docx》由会员分享,可在线阅读,更多相关《MFC文本编辑器ADO连接数据库.docx(35页珍藏版)》请在冰豆网上搜索。

MFC文本编辑器ADO连接数据库.docx

MFC文本编辑器ADO连接数据库

C++面向对象程序设计

实践设计报告

设计题目:

文本编辑器的实现(数据库)

院系:

桂林电子科技大学信息科技学院

信息工程系

学生专业:

计算机科学与技术(软件)

学生姓名:

学生学号:

*******

日期:

2013.1.4

桂林电子科技大学信息科技学院

一、应用程序的名称

MFC文本编辑器

二、应用程序概述

2.1应用程序的主题

“MFC文本编辑器”主要是实现对txt格式的文本进行编辑的功能,主要涉及对文本进行保存、打开、编辑、查找、替换、字数统计等功能。

在实现基本功能的基础上做到界面美观,清晰,操作简便,还增加的更多人性化功能便于用户使用。

2.2设计目的

本题目设计目的是训练学生的基本编程能力,了解文件编辑系统的开发流程,熟悉C++语言对文件、数据库的各种基本操作,还有运用MFC编写可视化窗口的基本操作。

本程序中涉及数据库、文件、MFC中Dialog类库的运用等方面的知识。

通过本程序的训练,使学生能对C++语言对数据库操作和文件操作有一个更深刻的了解,掌握利用数据库实现对数据保存的原理,还掌握了MFC中对文件操作的方法,为进一步开发出高质量的办公化软件打下坚实的基础。

三、程序简介

3.1基本结构

3.2基本内容

文件模块:

提供新建、打开、保存、另存为、退出功能。

编辑模块:

提供撤销、复制、剪切、粘贴、删除、清空、查找/替换、转到、全选、时间与日期功能

格式模块:

提供字体功能

查看模块:

提供使用功能、字数统计功能

关于模块:

版权声明

3.3运行环境

Windows操作系统、需要SQLSever2005以上版本的SQL数据库

四、详细设计

4.1数据库设计

4.1.1数据表设计

字段数据类型属性

idint主键、自增、非空

timedatetime默认值getdate()、非空

operatevarchar(50)非空

4.2程序部分

4.2.1图标设计

通过引入将图标文件引入项目中,起名IDI_ICON

通过设置CMFCDlg函数中的LoadIcon实现改变图标

CMFCDlg:

:

CMFCDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CMFCDlg:

:

IDD,pParent)

{

//{{AFX_DATA_INIT(CMFCDlg)

//NOTE:

theClassWizardwilladdmemberinitializationhere

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

m_hIcon=AfxGetApp()->LoadIcon(IDI_ICON);

}

4.2.2主界面

设计灵感来源微软的记事本

4.2.2.1主界面载入前的初始化

通过ADO的方法对数据库进行连接,并且通过Insert语句对数据库增加访问数据。

相关代码:

MFC文本编辑器Dlg.h

//连接数据库变量

_ConnectionPtrm_pConnection;

_RecordsetPtrm_pRecordset;

MFC文本编辑器Dlg.cpp

BOOLCMFCDlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//Add"About..."menuitemtosystemmenu.

//IDM_ABOUTBOXmustbeinthesystemcommandrange.

ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

//Settheiconforthisdialog.Theframeworkdoesthisautomatically

//whentheapplication'smainwindowisnotadialog

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

//增加访问记录

try

{

m_pConnection.CreateInstance(__uuidof(Connection));

m_pRecordset.CreateInstance(__uuidof(Recordset));

m_pConnection->Open((_bstr_t)"Driver={SQLServer};Server=Melon-PC\\SQL2005;Database=note;UID=sa;PWD=123456","","",adModeUnknown);

m_pRecordset=m_pConnection->Execute("insertintoOperateRecord(operate)values('登陆')",NULL,adCmdText);

}

catch(_com_errore)

{

AfxMessageBox(e.Description());

}

//TODO:

Addextrainitializationhere

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

4.2.2.2主界面关闭最后处理

通过ADO的方法对数据库进行连接,并且通过Insert语句对数据库增加登出数据,之后关闭数据库连接和记录集,并释放。

相关代码:

MFC文本编辑器Dlg.h

//连接数据库变量

_ConnectionPtrm_pConnection;

_RecordsetPtrm_pRecordset;

MFC文本编辑器Dlg.cpp

voidCMFCDlg:

:

PostNcDestroy()

{

//增加访问记录

try

{

m_pConnection.CreateInstance(__uuidof(Connection));

m_pRecordset.CreateInstance(__uuidof(Recordset));

m_pConnection->Open((_bstr_t)"Driver={SQLServer};Server=Melon-PC\\SQL2005;Database=note;UID=sa;PWD=123456","","",adModeUnknown);

m_pRecordset=m_pConnection->Execute("insertintoOperateRecord(operate)values('登出')",NULL,adCmdText);

}

catch(_com_errore)

{

AfxMessageBox(e.Description());

}

m_pConnection->Close();

m_pRecordset->Close();

m_pConnection.Release();

m_pRecordset.Release();

CDialog:

:

PostNcDestroy();

}

4.2.2.3主界面关闭第一处理

根据判断文本是否被修改,决定是否进行保存处理。

相关代码:

MFC文本编辑器Dlg.h

//保存

BOOLisNew;

CStringSavePath;

BOOLisModified;

MFC文本编辑器Dlg.cpp

//关闭判断

voidCMFCDlg:

:

OnClose()

{

isModified=m_edit.GetModify();

CStringstring;

m_edit.GetWindowText(string);

if(isNew&&string.IsEmpty())

{

CDialog:

:

OnClose();

}

elseif(isModified)//被修改

{

intQuitChoice=MessageBox("当前文本已被修改,想保存吗?

","系统提示",

MB_YESNOCANCEL|MB_ICONQUESTION);

if(QuitChoice==IDYES)//选是

{

OnSava();

if(isModified=FALSE)

CDialog:

:

OnClose();

}

elseif(QuitChoice==IDNO)//选否

{

CDialog:

:

OnClose();

}

else

{

return;

}

}

else//没被修改

{

CDialog:

:

OnClose();

}

}

4.2.2.4菜单设计

通过对话框属性设置添加主界面的MENU。

相关名称与函数:

菜单名菜单ID对应函数

新建(&N)\tCtrl+NIDR_NEWOnNew

打开(&O)...\tCtrl+OIDR_OPENOnOpen

保存(&S)\tCtrl+SIDR_SAVAOnSava

另存为(&A)...IDR_ASOnAs

退出(&X)IDR_EXITOnExit

撤销(&Z)\tCtrl+ZIDR_UNDOOnUndo

剪切(&X)\tCtrl+XIDR_CUTOnCut

复制(&C)\tCtrl+CIDR_COPYOnCopy

粘贴(&V)\tCtrl+VIDR_PASTEOnPaste

删除(&D)\tCtrl+DIDR_DELOnDel

清空IDR_ClearOnClear

查找/替换(&F)\tCtrl+FIDR_FINDOnFind

转到(&G)...\tCtrl+GIDR_GOOnGo

全选(&A)\tCtrl+AIDR_ALLOnAll

时间和日期IDR_TIMEOnTime

字体(&F)...IDR_FONTOnFont

使用记录IDR_ADOOnAdo

字数统计IDR_COUNTOnCount

关于(&A)关于(&A)OnAbout

4.2.3文件模块

4.2.3.1新建

先对正在打开的文档进行判断,若文档经过修改后没有进行保存,则询问用户是否保存,若文档是空的或者已经保存未被修改,则直接清除文档中的内容,达到新建目的。

相关代码:

MFC文本编辑器Dlg.h

//保存

BOOLisNew;

BOOLisModified;

MFC文本编辑器Dlg.cpp

//新建

voidCMFCDlg:

:

OnNew()

{

isModified=m_edit.GetModify();

CStringstring;

m_edit.GetWindowText(string);

if(isNew&&string.IsEmpty())

{

;

}

elseif(isModified)//被修改

{

intChoice=MessageBox("当前文本已被修改,想保存吗?

","系统提示",

MB_YESNO|MB_ICONQUESTION);

if(Choice==IDYES)//选是

{

OnSava();

}

}

//新建

m_edit.SetSel(0,-1);

m_edit.Clear();

isNew=TRUE;

m_edit.SetModify(FALSE);

}

4.2.3.2打开

先对正在打开的文档进行判断,若文档经过修改后没有进行保存,则询问用户是否保存,若文档是空的或者已经保存未被修改,用CFileDialog类建立打开对话框,按照用户的在对话框中的选择打开文件并且显示在编辑框中,并且设置文件地址,以便保存功能。

相关代码:

MFC文本编辑器Dlg.h

//保存

BOOLisNew;

CStringSavePath;

BOOLisModified;

MFC文本编辑器Dlg.cpp

//打开功能

voidCMFCDlg:

:

OnOpen()

{

isModified=m_edit.GetModify();

CStringstring;

m_edit.GetWindowText(string);

if(isNew&&string.IsEmpty())

{

;

}

elseif(isModified)//文本被修改

{

intChoice=MessageBox("当前文本已被修改,想保存吗?

","系统提示",MB_YESNO|MB_ICONQUESTION);

if(Choice==IDYES)

{

OnSava();

}

}

//打开

charszFileFilter[]="文本(*.txt)|*.txt|";

charszFileExt[]="txt";

CFileDialogdlg(true,szFileExt,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFileFilter,AfxGetMainWnd());

CStringstrPath;

if(dlg.DoModal()==IDOK)

{

CStdioFileFile;

CStringstrText,strLine;

strPath=SavePath=dlg.GetPathName();

File.Open(dlg.GetPathName(),CFile:

:

modeReadWrite);

while(File.ReadString(strLine))

{

strLine+="\r\n";

strText+=strLine;

}

m_edit.SetWindowText(strText);

File.Close();

m_edit.SetModify(FALSE);

isNew=FALSE;

}

}

4.2.3.3保存

先对文档是否是新建的进行判断,若是新建的则跳转到另存为。

若不是则提取出编辑框中的内容,再从SavePath变量中获取路径,进行保存处理。

相关代码:

MFC文本编辑器Dlg.h

//保存

BOOLisNew;

CStringSavePath;

BOOLisModified;

MFC文本编辑器Dlg.cpp

//保存功能

voidCMFCDlg:

:

OnSava()

{

charszFileFilter[]="文本(*.txt)|*.txt|";

charszFileExt[]="txt";

if(isNew)

{

OnAs();

}

else

{

CStdioFileFile;

CStringstr;

m_edit.GetWindowText(str);

File.Open(_T(SavePath),CFile:

:

modeCreate|CFile:

:

modeReadWrite);

File.WriteString(str);

File.Close();

m_edit.SetModify(FALSE);

}

m_edit.SetSel(0,0);

}

4.2.3.4另存为

建立另存为对话框,通过用户在对话框中的选择进行判断。

若文件存在,则提示用户是否替换按用户选择采取对应的操作;若文件不存在,则设置SavePath变量为用户设置的路径,再提取编辑框中的内容进行存储。

相关代码:

MFC文本编辑器Dlg.h

//保存

BOOLisNew;

CStringSavePath;

BOOLisModified;

MFC文本编辑器Dlg.cpp

//另存为

voidCMFCDlg:

:

OnAs()

{

CFileStatusfs;//文件存在状态

charszFileFilter[]="文本(*.txt)|*.txt|";

charszFileExt[]="txt";

CFileDialogdlg(FALSE,szFileExt,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFileFilter,AfxGetMainWnd());

CStringstrPath;

if(dlg.DoModal()==IDOK)//按下另存为

{

strPath=dlg.GetPathName();

if(CFile:

:

GetStatus(_T(strPath),fs))//文件存在

{

CStringinfo=strPath;

info+="已存在。

\r\n要替换它吗?

";

intnChoice=MessageBox(info,"另存为",MB_ICONWARNING|MB_YESNO);

if(nChoice==IDYES)//确认替换

{

SavePath=strPath;

CStdioFileFile;

CStringstr;

m_edit.GetWindowText(str);

File.Open(_T(strPath),CFile:

:

modeCreate|CFile:

:

modeReadWrite);

File.WriteString(str);

File.Close();

isNew=FALSE;

m_edit.SetModify(FALSE);

}

else//不替换

{

OnAs();

}

}

else//文件不存在

{

SavePath=strPath;

CStdioFileFile;

CStringstr;

m_edit.GetWindowText(str);

File.Open(_T(strPath),CFile:

:

modeCreate|CFile:

:

modeReadWrite);

File.WriteString(str);

File.Close();

isNew=FALSE;

m_edit.SetModify(FALSE);

}

}

m_edit.SetSel(0,0);

}

4.2.3.5退出

进入OnClose函数进行是否需要保存的询问。

相关代码:

MFC文本编辑器Dlg.cpp

//退出

voidCMFCDlg:

:

OnExit()

{

OnClose();

}

4.2.4编辑模块

4.2.4.1撤销、剪切、复制、粘贴、删除

运用编辑框类中的函数进行操作。

相关代码:

MFC文本编辑器Dlg.cpp

//撤销

voidCMFCDlg:

:

OnUndo()

{

m_edit.Undo();

}

//粘贴

voidCMFCDlg:

:

OnPaste()

{

m_edit.Paste();

}

//删除

voidCMFCDlg:

:

OnDel()

{

m_edit.Clear();

}

//剪切

voidCMFCDlg:

:

OnCut()

{

m_edit.Cut();

}

//复制

voidCMFCDlg:

:

OnCopy()

{

m_edit.Copy();

}

4.2.4.2清空

将文本框中的内容设置为空,并且恢复光标焦点。

相关代码:

MFC文本编辑器Dlg.cpp

//清除

voidCMFCDlg:

:

OnClear()

{

m_edit.SetWindowText("");

m_edit.SetFocus();

}

4.2.4.3全选

运用编辑框的SetSel函数进行全选。

相关代码:

MFC文本编辑器Dlg.cpp

//全选

voidCMFCDlg:

:

OnAll()

{

m_edit.SetSel(0,-1);

}

4.2.4.4时间和日期

通过建立SYSTEMTIME类型的变量,并且通过GetLocalTime获取本地时间,在通过ReplaceSel函数将时间插入编辑框。

相关代码:

MFC文本编辑器Dlg.h

//插入时间变量

intnstar,nend;

MFC文本编辑器Dlg.cpp

//添加时间

voidCMFCDlg:

:

OnTime()

{

SYSTEMTIMEst;

GetLocalTime(&st);

CStringsTime;

sT

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

当前位置:首页 > 农林牧渔 > 林学

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

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