目录第一章课程设计目的和要求 (1)1.1课程设计的目 (1)1.2基本要求 (1)第二章课程设计任务内容 (2)2.1设计背景 (2)2.2简易文本编辑器设计内容 (2)第三章详细设计 (3)3.1总体结构图 (3)3.2函数分析 (3)3.3主函数程序流程图 (4)3.4子函数流程图 (5)第四章程序编码与调试 (7)4.1程序编码 (7)4.2编码调试 (8)4.3运行结果 (9)第五章课程设计心得与体会 (11)附录1 参考文献 (12)附录2 源程序代码 (13)第一章课程设计目的和要求C语言课程设计是一门实践性非常强的课程,不但要注重c语言程序设计基本知识的学习,更要注重程序设计技能的培养,使学生能够允许渐进地把握c语言程序设计的技能。
通过课程设计,培养学生阅读和编写程序的能力,培养计算机程序设计的能力和素质,以及思维方法。
初步积累编程经验,打下良好的计算机应用基础。
1.1课程设计的目1.通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《c语言程序设计》课程学习的内容2.掌握工程软件设计的基本方法,强化上级动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性。
3.掌握基本的程序设计过程和技巧,掌握基本的分析问题合理性,通过计算机求解问题的能力,具备初步的高级语言程设计能力。
为后续个门计算机课程的学习和毕业设计打下结实基础。
4.通过c语言课程设计,使学生了解高级程序设计语言的结构。
1.2 基本要求1.基本要求:①要求用VC中的MFC控件打开和保存文件。
②要求在设计的程序中至少能完成六种编辑功能。
③完成的程序界面要美观,能够完成六种编辑的全过程。
2.创新要求:①在记事本中增加工具栏,工具栏中应有常使用的工具按钮;②在记事本中增加状态栏;第二章课程设计任务内容2.1 设计背景随着计算机在社会生活深红越来越深入而广泛的应用,在文件中有些文件需要改动,比如插入,替换,删除等一系列操作,为了更好的修改文件,不得不进行一系列的操作来修改,因此,文件的修改操作是十分重要的。
2.2简易文本编辑器设计内容1.具有显示总行数;2.具有:查找,替换(等长,不等长),插入(插串,文本块的插入),块移动(行块,列块移动),删除;3.可正确存盘,取盘。
第三章详细设计3.1总体结构图该程序是用c语言编译成的,主要能够实现查找功能、复制功能、粘贴功能、替3.2函数分析ID_FILE_NEW:新建ID_FILE_OPEN:打开ID_FILE_PRINT:打印DECLARE_MESSAGE:删除ID_EDIT_FIND:查找ID_EDIT_REPLACE:替换ID_EDIT_CUT:剪切ID_EDIT_COPY:粘贴ID_EDIT_HELP:帮助ID_EDIT_ALL :全选3.3主函数程序流程图图3-2 主函数流程图为了添加工具按钮,要使用ActiveX控件中的Microsoft Windows Common Control 6.0控件。
请按上述方法添加。
选择其中一个叫ImageList的控件来装载图像。
在程序界面上添加它,然后右键单击此控件,左键单击“属性”,弹出“属性页”对话框的“图像”,再单击“插入图片”就可以一次性装载图片了(如不满意,以后还可以添加)。
图片可在C:\Microsoft VisualStudio\Common\Graphics\Bitmaps\TlBr_W98下选择(假设VB安装在C盘下)。
在插入图片时给每一张图片注明关键字,以便在引用图片时不至于混乱。
如插入“新建”的图片,我们在“关键字”栏注明“New”。
图片有了,接下来在程序界面添加工具栏(ToolBar)。
添加后工具栏就出现在菜单下面,右键单击它,选择“属性”,在弹出的“属性页”对话框中的“通用”项作些设置,主要如下两项:①“图像列表”:选择ImageList1②“样式”:根据喜爱选择1-trbStandard或者2-trbFlat继续点击“属性页”的“按钮”选项,插入若干按钮。
按钮有多种样式,请根据需要设置。
这里请一定注意:每一个与用户操作有关的按钮都必须注明关键字、装载图片,如“新建”按钮,在“关键字”项注明“新建”,在“图像”项键入“New”(即ImageList1中的图片关键字),需要的话还可以在“工具提示文本”项填入适当的提示语。
3.4子函数流程图图3-3 ID_EDIT_FIND查找流程图这是实现查找功能的函数。
首先我们要输入想要查找的内容。
然后点击确定。
程序根据输入的内容,检索文本。
如果检索到输入的内容就显示出来,如果没有就要求重新输入。
图3-4 ID_EDIT_REPLACE替换流程图这是实现替换功能的函数。
首先要选中要替换的内容,然后输入想要替换的内容。
点击替换按钮,电脑会检索文本。
然后用项替换的内容,替换选中的内容。
图3-5 ID_EDIT_CUT剪切流程图这是实现剪切功能的函数。
首先要选中剪切的内容。
然后剪切,程序会把剪切的内容放到建立的缓存中。
第四章程序编码与调试4.1 程序编码1.设计方法和基本原理:(1)问题的解决方案:根据问题描述,可以将问题解决分为三步:①绘制界面:新建一个标准EXE工程,点击Icon属性给它找个合适的Icon图标。
②编辑菜单。
按Ctrl+E调出菜单编辑器,设置菜单编辑器的菜单项。
③编写代码。
④添加工具按钮⑤编写工具按钮代码(2)主要技术问题的描述:①为了将要编辑的文档显示出来,要添加一个控件。
使用单击菜单“工程”-“部件”,在弹出的“部件”对话框里找到Microsoft RichText Box 6.0并选中它,“确定”按钮。
这时左边的工具栏上出现了该控件的图标。
在窗体上绘制RichText Box,其大小和位置可不用理睬,我们将在代码中处理,为了在打开和编辑文件时有垂直滚动条,可以把它的ScrollBar属性设为2-rtfVertical。
②将ActiveX控件中的公共对话框Microsoft Common Dialog 6.0控件添加到控件箱中,以便提供一组标准的操作对话框,进行诸如打开和保存文件,设置打印选项,以及选择颜色和字体等操作。
③参考教材第五章的内容,编写程序代码。
④为了添加工具按钮,要使用ActiveX控件中的Microsoft Windows Common Control6.0控件。
请按上述方法添加。
选择其中一个叫ImageList的控件来装载图像。
在程序界面上添加它,然后右键单击此控件,左键单击“属性”,弹出“属性页”对话框的“图像”,再单击“插入图片”就可以一次性装载图片了(如不满意,以后还可以添加)。
图片可在C:\Microsoft Visual Studio\Common\Graphics\Bitmaps\TlBr_W98下选择(假设VB安装在C盘下)。
在插入图片时给每一张图片注明关键字,以便在引用图片时不至于混乱。
如插入“新建”的图片,我们在“关键字”栏注明“New”。
图片有了,接下来在程序界面添加工具栏(ToolBar)。
添加后工具栏就出现在菜单下面,右键单击它,选择“属性”,在弹出的“属性页”对话框中的“通用”项作些设置,主要如下两项:①“图像列表”:选择ImageList1②“样式”:根据喜爱选择1-trbStandard或者2-trbFlat继续点击“属性页”的“按钮”选项,插入若干按钮。
按钮有多种样式,请根据需要设置。
这里请一定注意:每一个与用户操作有关的按钮都必须注明关键字、装载图片,如“新建”按钮,在“关键字”项注明“新建”,在“图像”项键入“New”(即ImageList1中的图片关键字),需要的话还可以在“工具提示文本”项填入适当的提示语。
⑶编写工具栏的按钮代码:工具栏按钮的代码编辑很简单,可以按照下面的格式去编写:Private Sub ToolBar1_ButtonClick(ByVal Button As MSComctlLib.Button)On Error Resume Next '出错处理Select Case Button.Key '按关键字选择Case "新建"mnuNew_Click '等于菜单项“新建”被单击Case "打开" '等于菜单项“打开”被单击mnuOpen_Click'......(继续编写其它按钮的代码)End Select4.2编码调试根据数据结构、函数功能和主要的流程图,进行源代码操作。
在编码时,注意代码的书写规范,包括命名惯例、注释、分隔和缩进等,这样使程序层次清晰,增强可读性和可维护性。
编码完成后,检查错误,编译直到正常运行,达到预期效果。
4.3运行结果运行结果及部分运行界面截图如下:图4-1 初始状态图4-2 替换操作图4-3 查找操作第五章课程设计心得与体会步入大学,我们接触到了更多的计算机专业知识。
在大一第二学期,学习了c++程序设计,大二的时候又学习了数据结构课程。
而这学期的课程设计,对我来说是一个新的挑战。
从开始到现在,课程设计的每一个环节,我自己都精心准备,让我对编程有了更深刻的认识,也是我知道了自己的不足之处。
在老师刚布置下来任务之后,我便开始在网上和图书管理搜集资料,虽然关于这方面的资料很多,但是好多都和我的不相匹配。
于是我每一本书都仔细阅读,筛选出了对我的程序设计有用的信息。
然后,看懂了是一方面,自己动手做,又是另一个挑战。
我发现如果不是透彻的弄懂了,在实际操作的时候,根本实现不了结果。
于是,我又把资料仔细的阅读,并询问老师和同学们,再加上自己的摸索,最终提早完成了任务。
我设计的是简易文本编辑器,要求有查找,插入,替换,块移动,删除功能,在这次课程设计作业的过程中,虽然课程设计有明确的目的及要求,但由于在设计方面我们没有经验,理论基础知识掌握得不牢固,在设计中难免会出现这样那样的问题。
在编写过程中也有许多小问题,比如没有定义,缺少符号等等,但经过仔细的修改以及寻求别人的帮助把问题也改正了,大多数是因为自己的粗心而引起的。
在设计过程中,要独立的完成自己的设计思路。
在学习理论知识的同时也要参加实践活动,把课本上的知识运动到实践当中去,也是我们学习专业理论知识的最终目的。
本次的课程设计,培养了我C++语言,C语言及其他课程的理论知识和理论联系实际,应用生产实际知识解决实际问题的能力;在设计的过程中还培养独立自主的能力。
在今后的学习过程中我们会更加努力。
附录1 参考文献1.谭浩强:C++程序设计,清华大学出版社,2004年6月第一版2.严蔚敏:数据结构(C语言版),清华大学出版社,1997年4月第一版3.王大刚:《c语言编程宝典》4.鲁沐浴:《c语言最新编程技巧200例》,电子工业出版社,1997年1月5.梁翎,李爱齐:《c语言程序设计使用技巧与程序实例》,上海科普出版社,1996年5月6.陈国章:《Turbo c程序技巧与应用实例》,天津科学技术出版社,1995年5月7.王士元:《c高级使用程序设计》,清华大学出版社,1996年6月8.Herbert Schildt:《C:The Complete Reference》9.黄明,梁旭,万红丽:《c语言课程设计》,电子工业出版社,2006年10.郭翠英:《c语言程序设计案例精编》,中国水利水电出版社,2005年附录2 源程序代码11A081__INCLUDED_)// 简单文本.cpp : Defines the class behaviors for the application.//#include "stdafx.h"#include "简单文本.h"#include "MainFrm.h"#include "简单文本Doc.h"#include "简单文本View.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////// //// CMyAppBEGIN_MESSAGE_MAP(CMyApp, CWinApp)//{{AFX_MSG_MAP(CMyApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG_MAP// Standard file based document commandsON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)// Standard print setup commandON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////// //// CMyApp constructionCMyApp::CMyApp(){// TODO: add construction code here,// Place all significant initialization in InitInstance}/////////////////////////////////////////////////////////////////////////// //// The one and only CMyApp objectCMyApp theApp;/////////////////////////////////////////////////////////////////////////// //// CMyApp initializationBOOL CMyApp::InitInstance(){AfxEnableControlContainer();// Standard initialization// If you are not using these features and wish to reduce the size// of your final executable, you should remove from the following// the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls(); // Call this when using MFC in a shared DLL #elseEnable3dControlsStatic(); // Call this when linking to MFC statically #endif// Change the registry key under which our settings are stored.// TODO: You should modify this string to be something appropriate// such as the name of your company or organization.SetRegistryKey(_T("Local AppWizard-Generated Applications"));LoadStdProfileSettings(); // Load standard INI file options (including MRU)// Register the application's document templates. Document templates// serve as the connection between documents, frame windows and views.CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CMyDoc),RUNTIME_CLASS(CMainFrame), // main SDI frame windowRUNTIME_CLASS(CMyView));AddDocTemplate(pDocTemplate);// Parse command line for standard shell commands, DDE, file openCCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);// Dispatch commands specified on the command lineif (!ProcessShellCommand(cmdInfo))return FALSE;// The one and only window has been initialized, so show and update it.m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateWindow();return TRUE;}/////////////////////////////////////////////////////////////////////////// //// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)// No message handlers//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()// App command to run the dialogvoid CMyApp::OnAppAbout(){CAboutDlg aboutDlg;aboutDlg.DoModal();}/////////////////////////////////////////////////////////////////////////// //// CMyApp message handlers// MainFrm.h : interface of the CMainFrame class///////////////////////////////////////////////////////////////////////////// //#if !defined(AFX_MAINFRM_H__2B4A6574_EC9D_4C5B_802E_9FFB04EF8786__INCLUDED_ )#define AFX_MAINFRM_H__2B4A6574_EC9D_4C5B_802E_9FFB04EF8786__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CMainFrame : public CFrameWnd{protected: // create from serialization onlyCMainFrame();DECLARE_DYNCREATE(CMainFrame)// Attributespublic:// Operationspublic:// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMainFrame)virtual BOOL PreCreateWindow(CREATESTRUCT& cs);//}}AFX_VIRTUAL// Implementationpublic:virtual ~CMainFrame();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected: // control bar embedded membersCStatusBar m_wndStatusBar;CToolBar m_wndToolBar;// Generated message map functionsprotected://{{AFX_MSG(CMainFrame)afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSGDECLARE_MESSAGE_MAP()};/////////////////////////////////////////////////////////////////////////// ////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately beforethe previous line.#endif// !defined(AFX_MAINFRM_H__2B4A6574_EC9D_4C5B_802E_9FFB04EF8786__INCLUDED_)// 简单文本.h : main header file for the 简单文本 application//#if !defined(AFX__H__1DD5B072_4F80_4F7C_9F05_2FFBCD7DE7F3__INCLUDED_)#define AFX__H__1DD5B072_4F80_4F7C_9F05_2FFBCD7DE7F3__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#ifndef __AFXWIN_H__#error include 'stdafx.h' before including this file for PCH #endif#include "resource.h" // main symbols/////////////////////////////////////////////////////////////////////////// //// CMyApp:// See 简单文本.cpp for the implementation of this class//class CMyApp : public CWinApp{public:CMyApp();// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMyApp)public:virtual BOOL InitInstance();//}}AFX_VIRTUAL// Implementation//{{AFX_MSG(CMyApp)afx_msg void OnAppAbout();// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()};/////////////////////////////////////////////////////////////////////////// ////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX__H__1DD5B072_4F80_4F7C_9F05_2FFBCD7DE7F3__INCLUDED_)// 简单文本Doc.h : interface of the CMyDoc class///////////////////////////////////////////////////////////////////////////// //#if !defined(AFX_DOC_H__55667EB4_AB9C_44C9_B790_E5E249118EB1__INCLUDED_) #define AFX_DOC_H__55667EB4_AB9C_44C9_B790_E5E249118EB1__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CMyDoc : public CDocument{protected: // create from serialization onlyCMyDoc();DECLARE_DYNCREATE(CMyDoc)// Attributespublic:// Operationspublic:// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMyDoc)public:virtual BOOL OnNewDocument();virtual void Serialize(CArchive& ar);//}}AFX_VIRTUAL// Implementationpublic:virtual ~CMyDoc();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:// Generated message map functionsprotected://{{AFX_MSG(CMyDoc)// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()};/////////////////////////////////////////////////////////////////////////// ////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_DOC_H__55667EB4_AB9C_44C9_B790_E5E249118EB1__INCLUDED_)// 简单文本View.h : interface of the CMyView class///////////////////////////////////////////////////////////////////////////// //#if !defined(AFX_VIEW_H__1E4AC431_E4C9_4EE2_86C3_195FF811A081__INCLUDED_) #define AFX_VIEW_H__1E4AC431_E4C9_4EE2_86C3_195FF811A081__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CMyView : public CView{protected: // create from serialization onlyCMyView();DECLARE_DYNCREATE(CMyView)// Attributespublic:CMyDoc* GetDocument();// Operationspublic:// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMyView)public:virtual void OnDraw(CDC* pDC); // overridden to draw this viewvirtual BOOL PreCreateWindow(CREATESTRUCT& cs);protected:virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);//}}AFX_VIRTUAL// Implementationpublic:virtual ~CMyView();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:// Generated message map functionsprotected://{{AFX_MSG(CMyView)// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()};#ifndef _DEBUG // debug version in 简单文本View.cppinline CMyDoc* CMyView::GetDocument(){ return (CMyDoc*)m_pDocument; }#endif/////////////////////////////////////////////////////////////////////////// ////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_VIEW_H__1E4AC431_E4C9_4EE2_86C3_195FF8。