《程序设计课程设计》.doc_第1页
《程序设计课程设计》.doc_第2页
《程序设计课程设计》.doc_第3页
《程序设计课程设计》.doc_第4页
《程序设计课程设计》.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告课程名称:程序设计课程设计课程设计题目:类似于“记事本”的文本编辑器姓 名:系:计算机系专 业:计算机科学与技术年 级:学 号:指导教师:职 称:2011年 11月 7日目 录1设计目的32 设计题目及要求33设计算法分析3 3.1 模块调用层次图3 3.2 核心算法描述6 3.3 系统特点64程序代码65调试情况116结论11参考文献 1212类似于“记事本” 的文本编辑器1.设计目的本课程设计的目的就是要通过一次集中的强化训练,使学生能及时巩固已学的知识,补充未学的但又必要的内容。进行课程设计目的在于加深对程序设计基础中基础理论和基本知识的理解,促进理论与实践的结合,进一步提高程序设计的能力。具体目的如下:1使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。2培养学生综合运用所学知识独立完成课题的能力。3培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。4提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。5培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。6对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。2.设计题目及要求【1】类似于“记事本”的文本编辑器设计一个文本编辑器,具有对文本等进行读写等基本操作,类似于Windows中的记事本。【2】要求实现如下功能:(1) 能够实现基本的文本文件读取、保存、设置字体等功能。(2) 具有菜单、工具栏和状态栏。(3) 实现其它相关功能(如字体、剪贴板的操作,查找、打印预览等功能)(4) 实现多文档界面3.设计算法分析 3.1 模块调用层次图 【1】变量描述定义形式/名称含义/作用结构体CHOOSECOLORCHOOSEFONT一个是VC类库给出的设置颜色的结构体,另一个是VC类库给出的设置字体的结构体全局变量CNotepadApp theApp用theApp这个全局变量来获取当前应用程序实例的句柄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标准AFX 头文件函数void CNotepadView:OnColor()void CNotepadView:OnFont()用来改变字体颜色用来改变字体大小和格式 【2】系统模块调用层次图基于面向对象的设计,没有模块调用层次图。程序的实现过程如下:设计窗口类 注册窗口类 创建窗口 显示窗口 更新窗口 消息循环窗口处理函数首先由全局变量theApp,链接到VC类库中的_tWinMain()函数,找到这个windows框架结构的入口函数后,再依次以上图示意调用各个类,最后产生文本编辑器这个框架程序。构成应用程序的对象之间的关系:CWinAppCWinThreadCSingleDocTempateCSingleDocTempateCCmdTargetCFrameWndCMDIFrameWndCDocTemplateCDocumentCViewCControlBarCControlBarCObjectCMDIChildWndCWndCStatusBar3.2核心算法描述应用程序对象CWinApp文档模板对象CDocTemplate文档对象CDocument工具条对象CToorBar文档边框窗口对象CMDIChildFrame视对象CView状态栏对象CStatusB主边框窗口对象CMDIFrameWnd3.3 系统特点【1】特点:一个多文档的界面的类似于“记事本”的文本编辑器。该编辑器与记事本相比多了改变字体大小、颜色、自体类型的功能,还增加了查找,替换,显示图片,显示时间等功能。【2】分工:本程序的编写完全由我个人完成,未和任何人分组。4. 程序代码【1】程序代码void CNoteView:OnFont() / TODO: Add your command handler code hereCFontDialog dlg;if(IDOK=dlg.DoModal()memcpy(&lf,dlg.m_cf.lpLogFont,sizeof(LOGFONT);if(m_font.m_hObject)m_font.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 defaultCClientDC dc(this);dc.SelectObject(&this-m_font);TEXTMETRIC tm;dc.GetTextMetrics(&tm);if(0x0d=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);elsem_strLine+=nChar;CSize sz=dc.GetTextExtent(m_strLine);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 defaultSetCaretPos(point); 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 hereCClientDC dc(this);TEXTMETRIC tm;dc.GetTextMetrics(&tm);CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);ShowCaret();return 0;/用CView生成的记事本的编写void CNoteView:OnFont() / TODO: Add your command handler code hereCHARFORMAT m_charFormat;GetCharFormatSelection(); CFontDialog dlg(m_charformat,CF_BOTH|CF_NOOEMFONTS); if(dlg.DoModal()=IDOK) dlg.GetCharFormat(m_charformat); SetCharFormat(m_charformat); /在CrichEditView类中用CfontDialog实现字体的变更static UINT indicators =ID_SEPARATOR, / status line indicatorID_INDICATOR_CLOCK,/为状态栏增加一个窗格ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;void CMainFrame:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultCTime 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 call defaultKillTimer(1);CMDIFrameWnd:OnClose();int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)SetTimer(1,1000,NULL);return 0;/在CMainFrame:OnCreate中添加【2】程序执行结果【3】结果的讨论结果不是很让人满意,因为始终不能实现根据用户的选择更改字体的愿望,不过能实现基本的字的输入、删除、空格等操作。5.调试情况在调试过程中出现的一些问题:VC提供的类库函数对大小写的要求是十分严格的,所以很容易出现错误,根据编译时提供的错误信息进行修正还是很有帮助的。成员变量要定义在头文件中,否则在程序还没有生成的时候这个变量会在程序还没有生成之前就被析构了,就不能得到我们预期的效果了。View类始终是覆盖在框架类之上的,所以我们要捕获鼠标左键点击的操作时要在View中进行,如果在框架类中进行编程,就会造成不必要的麻烦,添加编程的麻烦。6.结论这个文本编辑器的代码编写还是相对较简单的,用VC6.0的MFC开发工具,直接就可以生成一个基于windows的框架类程序,不用编写很烦杂的框架程序调用函数,只需了解MFC这个编程工具,学会查询MSDN调用微软提供的类库及各种接口,就会使编写这个记事本程序简单很多。但是第一次接触MFC,并且MFC庞大的库函数也并不不易理解,在编程过程中也耗费了大量的时间,主要是去学习windows框架程序的内部调用机制,以及VC封装的各种库函数的点用方法。我用的是C+这个高级程序语言开发工具,通过这次的课程设计,增加了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论