1、程序设计课程设计 课程设计报告课程名称:程序设计课程设计课程设计题目:类似于“记事本”的文本编辑器姓 名:系:计算机系专 业:计算机科学与技术年 级:学 号:指导教师:职 称:2011年 11月 7日1设计目的32 设计题目及要求33设计算法分析3 3.1 模块调用层次图3 3.2 核心算法描述6 3.3 系统特点64程序代码65调试情况116结论11参考文献 12类似于“记事本” 的文本编辑器1.设计目的本课程设计的目的就是要通过一次集中的强化训练,使学生能及时巩固已学的知识,补充未学的但又必要的内容。进行课程设计目的在于加深对程序设计基础中基础理论和基本知识的理解,促进理论与实践的结合,进
2、一步提高程序设计的能力。具体目的如下:1使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。2培养学生综合运用所学知识独立完成课题的能力。3培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。4提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。5培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。6对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。2.设计题目及要求【1】类似于“记事本
3、”的文本编辑器设计一个文本编辑器,具有对文本等进行读写等基本操作,类似于Windows中的记事本。【2】要求实现如下功能:(1)能够实现基本的文本文件读取、保存、设置字体等功能。(2)具有菜单、工具栏和状态栏。(3)实现其它相关功能(如字体、剪贴板的操作,查找、打印预览等功能)(4)实现多文档界面3.设计算法分析 3.1 模块调用层次图 【1】变量描述定义形式/名称含义/作用结构体CHOOSECOLORCHOOSEFONT一个是VC类库给出的设置颜色的结构体,另一个是VC类库给出的设置字体的结构体全局变量CNotepadApp theApp用theApp这个全局变量来获取当前应用程序实例的句柄
4、hInstance文件头文件:ChildFrm.h MainFrm.h notepad.h notepadDoc.h notepadView.h resource.h StdAfx.h源文件:ChildFrm.cpp MainFrm.cpp notepad.cpp notepadDoc.cpp notepadView.cpp StdAfx.cpp定义了从CMDIChildWnd 派生的文档框架窗口对象CTChildFrame定义了从CMDIFrameWnd 派生的框架窗口对象CMainFrame定义了从CDocument 派生的文档对象CTDoc定义了从CView 派生的视图对象CTView标
5、准AFX 头文件函数void CNotepadView:OnColor()void CNotepadView:OnFont()用来改变字体颜色用来改变字体大小和格式 【2】系统模块调用层次图 基于面向对象的设计,没有模块调用层次图。 程序的实现过程如下: 设计窗口类 注册窗口类 创建窗口 显示窗口 更新窗口 消息循环 窗口处理函数首先由全局变量theApp,链接到VC类库中的_tWinMain()函数,找到这个windows框架结构的入口函数后,再依次以上图示意调用各个类,最后产生文本编辑器这个框架程序。构成应用程序的对象之间的关系:CWinApp3.2核心算法描述3.3 系统特点【1】特点:
6、一个多文档的界面的类似于“记事本”的文本编辑器。该编辑器与记事本相比多了改变字体大小、颜色、自体类型的功能,还增加了查找,替换,显示图片,显示时间等功能。【2】分工:本程序的编写完全由我个人完成,未和任何人分组。4. 程序代码【1】程序代码void CNoteView:OnFont() / TODO: Add your command handler code here CFontDialog dlg; if(IDOK=dlg.DoModal() memcpy(&lf,dlg.m_cf.lpLogFont,sizeof(LOGFONT); if(m_font.m_hObject) m_font
7、.DeleteObject(); m_font.CreateFontIndirect(&lf); Invalidate(); UpdateWindow(); void CNoteView:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here and/or call default CClientDC dc(this); dc.SelectObject(&this-m_font); TEXTMETRIC tm; dc.GetTextMetrics(&tm); if(0x0d
8、=nChar) m_strLine.Empty(); m_ptOrigin.y+=tm.tmHeight; else if(0x08=nChar) COLORREF clr=dc.SetTextColor(dc.GetBkColor(); dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine); m_strLine=m_strLine.Left(m_strLine.GetLength()-1); dc.SetTextColor(clr); else m_strLine+=nChar; CSize sz=dc.GetTextExtent(m_strLine
9、); CPoint pt; pt.x=m_ptOrigin.x+sz.cx; pt.y=m_ptOrigin.y; SetCaretPos(pt); dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine); CView:OnChar(nChar, nRepCnt, nFlags);void CNoteView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default SetCaretPos(point);
10、m_strLine.Empty(); m_ptOrigin=point; CView:OnLButtonDown(nFlags, point);int CNoteView:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CView:OnCreate(lpCreateStruct) = -1) return -1; / TODO: Add your specialized creation code here CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics(&tm); CreateSolidCare
11、t(tm.tmAveCharWidth/8,tm.tmHeight); ShowCaret(); return 0;/用CView生成的记事本的编写void CNoteView:OnFont() / TODO: Add your command handler code here CHARFORMAT m_charFormat; GetCharFormatSelection(); CFontDialog dlg(m_charformat,CF_BOTH|CF_NOOEMFONTS); if(dlg.DoModal()=IDOK) dlg.GetCharFormat(m_charformat);
12、 SetCharFormat(m_charformat); /在CrichEditView类中用CfontDialog实现字体的变更static UINT indicators = ID_SEPARATOR, / status line indicator ID_INDICATOR_CLOCK,/为状态栏增加一个窗格 ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL,;void CMainFrame:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here an
13、d/or call default CTime time; time=CTime:GetCurrentTime();/获得系统时间 CString s=time.Format(%H: %M); m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_CLOCK),s);/更新时间窗格显示的时间 CMDIFrameWnd:OnTimer(nIDEvent);void CMainFrame:OnClose() / TODO: Add your message handler code here and/or cal
14、l default KillTimer(1); CMDIFrameWnd:OnClose();int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)SetTimer(1,1000,NULL); return 0;/在CMainFrame:OnCreate中添加【2】程序执行结果【3】结果的讨论结果不是很让人满意,因为始终不能实现根据用户的选择更改字体的愿望,不过能实现基本的字的输入、删除、空格等操作。5.调试情况在调试过程中出现的一些问题:VC提供的类库函数对大小写的要求是十分严格的,所以很容易出现错误,根据编译时提供的错误信息进行修正还是
15、很有帮助的。成员变量要定义在头文件中,否则在程序还没有生成的时候这个变量会在程序还没有生成之前就被析构了,就不能得到我们预期的效果了。View类始终是覆盖在框架类之上的,所以我们要捕获鼠标左键点击的操作时要在View中进行,如果在框架类中进行编程,就会造成不必要的麻烦,添加编程的麻烦。6.结论这个文本编辑器的代码编写还是相对较简单的,用VC6.0的MFC开发工具,直接就可以生成一个基于windows的框架类程序,不用编写很烦杂的框架程序调用函数,只需了解MFC这个编程工具,学会查询MSDN调用微软提供的类库及各种接口,就会使编写这个记事本程序简单很多。但是第一次接触MFC,并且MFC庞大的库函
16、数也并不不易理解,在编程过程中也耗费了大量的时间,主要是去学习windows框架程序的内部调用机制,以及VC封装的各种库函数的点用方法。我用的是C+这个高级程序语言开发工具,通过这次的课程设计,增加了对MFC编程环境的认识,也加深了对c+语言的认识了解,基本能明白windows框架程序内部生成的一个过程以及其内部调用的机制,一定程度上也深一步地认意识到面向对象的思想。参考文献1C+实用教程 丁有和 编著 电子工业出版社 2009年2C+语言程序设计(第3版) 郑莉 董渊 张瑞丰 编著 清华大学出版社 2009年3数据结构(C语言版) 严蔚敏 吴伟民 编著 清华大学出版社 2010年4软件工程导论(第5版) 张海藩 编著 清华大学出版社 2011年5MFC深入浅出 李久进 编著 1999年
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1