VC++课程设计报告要求及样例2010.doc_第1页
VC++课程设计报告要求及样例2010.doc_第2页
VC++课程设计报告要求及样例2010.doc_第3页
VC++课程设计报告要求及样例2010.doc_第4页
VC++课程设计报告要求及样例2010.doc_第5页
免费预览已结束,剩余12页可下载查看

下载本文档

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

文档简介

Visual C+课程设计一、 基本要求课程设计以学生的自主开发为主,学生可以通过各种途径查找与课题相关技术资料,解决设计和开发过程中遇到的各种问题,促使学生自觉利用互联网、校园网、图书馆等资源来辅助该课程的学习。要求学生应用软件工程的思想和方法完成应用程序的设计和开发。学生以个人为单位,独立进行设计和编程,并提交完整的课程设计文档。 具体要求如下:(1)可根据教师提供的参考题目选择设计题目,也可自由选题。(2)学生课程设计后,要求上交源程序和实验报告。(3)实验报告要体现系统设计方案,主要内容包括:系统功能说明、使用说明、程序结构、运行及测试结果等(见附件一)。要求源程序必须有良好的风格,要求注释细致,采用较好的缩进格式。二、 实验过程及要求Visual C+课程设计不仅是对代码编写能力的综合锻炼,更是对软件项目开发过程的训练,因此,本课程设计尽量模仿软件项目的开发过程进行。一般来说,可分以下几个阶段进行:开题、系统设计、系统编码实现、系统测试、系统评价与验收。1开题题目可来自教师指定的参考题目,也可自由选题,特别是鼓励有创新性的题目或是在已知题目的基础上进行创新。相同题目的具体内容应有所区分。在确认软件具体功能和特点后,进行后续的设计与开发。2系统设计系统设计的任务是对所确定的题目从问题需求、数据结构、程序结构、难点及关键技术等方面进行分析,形成系统设计方案,分为概要设计和详细设计两个阶段。学生需要根据软件的功能查阅较多的相关资料,并通过与教师及同学的讨论来完成。3系统编码实现学生根据系统设计方案,对系统进行编程实现。在编码初期,要对编程规范与约定进行确定,并确定基本的模块测试方法。4系统测试和系统完善在对程序各模块测试完成后,对整个系统进行测试。对系统测试遇到的问题要及时进行解决,包括设计与代码的修改等。5系统评价与验收 对完成的系统需要组织评价。一般要求提交以下材料:(1) 课程设计报告。它是对整个开发过程的全面总结,是对每个人工作进行评价的重要依据。其格式见附件一。(2) 源程序清单。要求代码具有良好的编写风格,注释清楚完整,要求采用较好的缩进格式。(3) 可执行程序,包括运行该程序所依赖的其他内容,如外部数据文件等。三、 考核形式Visual C+课程设计不仅是对面向对象与可视化程序设计和编程能力的训练,也是对软件项目开发方法的综合训练。因此,评价课程设计完成的结果不仅要看程序功能完成的情况、软件设计与编码的难度、工作量的大小以及程序的质量,还要看实验报告和相关的程序文档。课程设计的评价按照以下几个方面进行:(1)软件功能、质量及编程工作量。(2)软件设计、编码的难度及创新性。(3)文档及程序风格。(4)课程设计过程中的独立性及纪律遵守情况。要求:源程序的代码量一般在1500行以上比较合适。四、附件:1附件1Visual C+课程设计报告格式要求2附件2Visual C+课程设计报告样例附件1: Visual C+课程设计报告格式要求Visual C+课程设计报告题目名称:班级:姓名(学号):1 题目(问题)描述2 功能分析3 系统设计3.1 程序总体结构3.2 主要功能模块设计3.3 程序界面设计3.4 类与函数的设计与实现:包括名称、功能、参数说明等4 运行与测试结果5 小结要求:字数不少于3000字(不包括源代码), 报告中的代码不能超过总篇幅的1/5,课程设计报告页数以612页为宜。附件2 : Visual C+课程设计实验报告样例Visual C+课程设计题目名称:二维绘图系统班级:计算0801姓名:张三学号:12345678指导教师:完成时间:1 题目描述利用Visual C+实现一个二维绘图系统。该系统能够进行基本图元的绘制,能够进行图元的组合,能够对图形进行各种编辑操作,并能实现图形文件的输入输出。该系统与目前许多CAD软件(如Microsoft Office Visio软件)的基本功能相似。2 功能分析系统主要功能包括:(1)基本图形元素的绘制基本图形元素主要包括点、直线、圆弧、圆、椭圆、多边形等。用户能够对基本图形元素的参数进行设置,如圆半径、圆心坐标、线宽、线的颜色等。(2)图形的缩放包括基本图形元素、图块的缩放以及整体图形的缩放。(3)图形的编辑包括图形参数的修改、删除、移动、旋转、复制、粘贴等。(4)图形文件的读写能够将所绘制的组合图元或整个图形保存到文件中,并能够进行文件的读取。3 系统设计3.1 系统整体结构3.1.1 系统中的图形类型划分在本系统中,主要分为两类图形:基本图形和组合图形(如图1所所示)。其中基本图形主要包括直线、矩形、圆、椭圆、三角形、多边形、文本等。组合图形由基本图形构造而成,如电路中的二极管符号、开关符号等。图1 系统中的图形类型3.1.2 对图形的操作 用户可以对图形进行各种操作,主要包括图形的拾取、编辑、填充。其中编辑功能又包括旋转、移动、镜像、复制、剪贴、粘贴、删除、缩放。如图2所示。图2 图形操作3.2 主要模块设计3.2.1 图形基类的设计首先将图形的基本属性归结为一个基类CEntity,基类里包含图形的类型、颜色、线形、线宽等基本属性。由于该类中含有多个纯虚函数,所以该类是抽象类,不能直接创建对象,需要在派生类中覆盖这些纯虚函数,并为派生类创建对象,利用多态性的性质,可以使用抽象基类CEntity的指针访问具体的派生类对象。图形类的层次如图3所示:CEntityClineCRectangleCEllipseCTriangleCCircleCArcCHexagon基类派生类直线类矩形类圆三角形椭圆类正六边形圆弧图3 平面绘图系统图形类层次3.2.2 命令类的设计(1) 面向对象的消息响应机制消息(Message)表示为能在对象间传递的数据集,它是对象间的通讯机制。设计一个面向对象环境的本质是:对象可以用消息在彼此之间传送控制。在Window环境中,一个特定的消息可以代表一个简单通用的事件,如鼠标移动、按键或客户区刷新;而任何特定的消息可以在不同的对象中引发不同的动作,如按下鼠标左键的消息(WM_LBUTTONDOWN)对于绘制直线和绘制矩形将引发不同的操作行为。尽管对象接收消息的顺序在程序中是不可预知的,但对象处理每个消息所采取的行为却是显式定义的。例如,在视图类对象中,我们无法知道用户是先单击了鼠标左键还是先单击了鼠标右键,但是我们却可以对这两个消息加入相应的代码从而引发各自的操作行为。消息可由一个对象发送给另一个对象,或是由操作环境本身发送给某个对象,例如在Window中,诸如WM_LBUTTONDOWN和WM_MOUSEMOVE之类的消息产生于应用程序中;一个对象也可以通过向其他对象或自己发送一条或多条新消息来处理一个消息,有时即使一个简单的动作也包含了层层叠叠的消息处理。(2) 命令基类的设计对于创建和修改图元对象的操作可以抽象出一个命令基类CCommand,在该基类中定义了OnLButtonDown(UNIT nflag,const Position & pos)、OnMouseMove(UNIT nflag,const Position & pos)、OnRButtonDown(UNIT nflag,const Position & pos)等几个虚函数。在派生类中对这几个虚函数进行重载,可以得到不同的行为。 (3) 命令类的层次如图4所示:CCommandCreateLineCreateRectCreateCircleCreateTriangleCreateEllipseCreateArcCreateHexagonMoveCmdMirrorCmdRotateCmdCutCmdEraseCmdPlasteCmdCopyCmd平移类 镜像类复制类旋转类剪切类粘贴类创建直线创建矩形创建圆创建三角形创建椭圆创建圆弧派生类:创建图元派生类:修改图元基类图4 平面绘图系统的命令类层次删除类创建正六边形3.2.3 主要数据结构由于图形基类CEntity是从MFC的CObject类派生,所以在系统实现中使用了MFC库提供的数据结构CObArray和CObList。CObArray是一个数组类,可以保存指向CObject的指针,CEntity是从COject类派生,所以可以将CEntity *指针保存在数组中;CObList类可以将CEntity *指针保存在双向链表中,允许双向查询,速度快。在本系统的实现中,将绘制的图形元素放在一个CObList类型变量(m_EntityList)的链表中,将组合图形包含的图元放在一个CObList类型变量(m_List)的链表中,将被选中的图形元素放在CObArray类型的数组(m_SelectArray)中,将复制或剪切的图形元素放在CObArray类型的数组(m_CopyArray)中。3.2.4 文件存储(1)文件存储格式文件的存储格式主要有文本格式和二进制格式。文本格式的一个显著优点是可以用文本编辑软件(如记事本)打开文件进行观察和读取。与文本格式不同,二进制格式不能简单的将文件打开编辑。但二进制文件读取速度快,并且能够利用 MFC库进行序列化,是主流的文件输出格式。(2) 序列化和反序列化序列化就是形成一个二进制文件,用于保存系统中要永久存储的对象数据。序列化能够使程序中的对象永久保存,也就是说关闭程序重新运行后,这些对象仍然可以保留。所谓反序列化就是从文件中读出已序列化的对象,并采用读出的数据给系统数据赋初值,即将数据从硬盘存储转换为内存存储。在本系统中,序列化就是向一个数据文件中逐个地写入图形元素对象;反序列化就是从二进制文件中读出数据,利用读出的数据实现对CEntity对象的构造。为了完成序列化,MFC保存了已经序列化的数据对象信息。MFC序列化一个文件时,它采用这些信息来动态创建CEntity对象,并自动把它们加载到图形对象列表中。类的序列化可序列化的类必须直接或间接从CObject派生,并且满足两个条件:第一,在类的声明中包含宏DECLARE_SERIAL;第二,在用来实现类成员函数的C+源文件(一般为.CPP文件)中包含宏IMPLEMENT_SERIAL。集合的序列化由于所有的集合类都是从CObject类派生出来的,并且集合类声明中都包含有DECLARE_SERIAL宏调用,因此我们就可以通过调用集合类的Serialize成员函数,很方便地使集合序列化。例如,如果调用了有CEntity对象指针组成的CObList集合的Serialize函数,那么每个CEntity *指针所指向的对象的Serialize函数就会被自动调用。在MFC应用程序框架中,从文档类CDocument类中派生出来的类可以很方便的实现数据序列化。当用户选择了File菜单中的Save或者Open菜单项时,应用程序框架即会创建CArchive对象(以及内部的CFile对象),然后再调用文档类的Serialize函数,并将CArchive对象的引用传递给它。然后文档派生类的Serialize函数就会对每一个非临时数据成员进行序列化。3.3 程序界面设计界面环境作为人机信息交流的通道,主要是辅助用户完成工作。为了方便用户使用,在系统实现中进行了工具栏设计、光标设计和状态栏设计。3.3.1 工具栏设计由于只有菜单的系统操作起来不够灵活,系统实现时添加了几个工具栏,用户可以通过工具栏进行相应的操作。在本系统中除了创建工程时自带的工具栏,主要添加了图形绘制工具栏、编辑工具栏和属性工具栏 。通过工具栏资源编辑器添加工具栏按钮并编辑按钮图片。3.3.2 光标设计为了使用户得到对于当前操作的立即、可见的反馈,在系统设计时为不同的工作状态设计不同的鼠标形状,使得系统可以根据当前的操作改变光标的形状。例如在画不同的图元时,光标会显示为一个画笔和相应的图元形状,当选中图形时会显示为选中时的形状,从而使用户很清楚正在进行的操作类型。3.3.3 状态栏设计虽然光标反馈非常有效,而且可以增强应用程序的外观,但图形反馈还不够精确,这时应用程序应该以精练的语言提供文字反馈。这些消息一般显示于消息框或者屏幕底部的状态栏。在本系统中修改创建工程时自带的状态栏,为其添加显示信息,可以随时显示当前光标的位置坐标(x,y),在绘制和修改图形时会提示用户进行下一步操作,以更好地实现与用户的交互。3.4 类与函数的设计与实现3.4.1 逻辑坐标类的设计与实现Position类为整个绘图系统提供了与逻辑坐标相关操作的支持,它提供了比MFC类库中的CPoint类更为强大的功能。Position类的声明如下: class Positionpublic:double x;double y;public:void Init(); / 初始化成员变量 const Position& operator=(const Position& positionSrc);/重载赋值运算符friendPosition operator+(const Position& position1,const Position& position2); /重载加法运算符friendPosition operator-(const Position& position1,const Position& position2);/重载减法运算符friendPosition operator*(const Position& position, const double& scale); /重载乘法运算符doubleDistance(const Position& pnt); /计算两点间距离BOOLIsSame(const Position& pointSrc); /判断两点是否重合Position Offset(const double & deltax,const double & deltay);Position Offset(const Position& off); /对一点进行平移操作Position Rotate(const Position& basePos, const double angle) ; /对一点进行旋转操作Position Mirror(const Position& pos1, const Position& pos2) ; /对一点进行镜像操作void Serialize(CArchive &ar) ;/ 对一点进行序列化;Position对应于二维空间的一个位置,这个位置是存在于客观世界的,即世界坐标。而Windows消息(如WM_MOUSEMOVE)所获得的鼠标光标的坐标值却是设备(屏幕)坐标(CPoint的实例对象)。为了能够将图形元素的世界坐标和计算机的屏幕坐标相联系,就要进行以下操作:(1)将图形元素的世界坐标转化为屏幕坐标,从而进行图形元素的显示;(2)由Windows消息得到屏幕坐标,将其转换为世界坐标,然后进行图形元素的处理和存储。世界坐标与设备坐标的变换是在视类中通过函数WorldtoScreen(const Position& pos,CPoint& screenPt)和ScreentoWorld(CPoint& screenPt, const Position& pos)实现的。3.4.2 图元类设计与实现(1)图元基类的实现将图形的基本属性归结为一个抽象基类CEntity。CEntity类的声明如下:class CEntity : public CObjectDECLARE_SERIAL(CEntity) protected:intm_type;/ 图元类型COLORREFm_color ; / 图元颜色UINTm_lineStyle ; / 图元的线型intm_lineWidth ; / 图元的线宽int isCombin; /标记是否组合图元public:CEntity operator = (const CEntity& entity); / 重载等号virtualCEntity*Copy() return NULL; / 指针拷贝virtualvoidInit(); / 初始化成员变量值virtualintGetType() return m_type; / 返回图元的类型COLORREFGetColor() return m_color; / 返回图元颜色void SetColor(COLORREF color) m_color = color; / 设置图元颜色virtual PositionGetDesPos()return (0,0); /获得变点坐标virtual PositionGetBasePos()return (0,0); /获得定点坐virtual void Draw(CDC * pDC, int drawMode = dmNormal ) ; / 绘制图元对象virtual BOOL Pick(const Position& pos, const double pick_radius) return FALSE; / 给定一点及拾取半径,判断图元是否被选中virtual void Move(const Position& basePos,const Position& desPos) / 给定一个基点和一个目标点平移图元virtual void MoveToPos(const Position& desPos) /将图形移动到指定点virtual void Rotate(const Position& basePos, const double angle) / 给定一个基点和一个角度值旋转图元virtual void Mirror(const Position& pos1, const Position& pos2)/ 给定两点,对图元做镜像virtual void Change(const Position& pos) /改变图元大小virtual void Serialize(CArchive& ar) ; / 图元对象串行化;(2)直线类的实现从图元基类CEntity派生出Cline类,在该类中覆盖其父类CEntity中的所有虚函数,并定义两个描述直线所必须的成员变量:直线起点坐标和直线终点坐标。重载父类中定义的函数,在Cline的Draw成员函数中完成对直线绘制的工作;在Draw函数中,对设备环境变量的绘图模式进行设置,创建相应画笔,调用设备环境类的成员函数,绘制直线。(3)矩形类的实现声明图元基类CEntity的派生类CRectangle,在该类中覆盖其父类CEntity中的所有虚函数,并定义两个矩形所必须的成员变量:左上角坐标和右下角坐标。对父类函数进行重载,在CRectangle的Draw成员函数中完成对矩形绘制的工作;在Draw函数中,对设备环境变量的绘图模式进行设置,创建相应画笔,调用设备环境类的成员函数,分别绘制矩形的四条边,完成矩形的绘制。(4)圆弧类的实现声明图元基类CEntity的派生类CArc,在该类中覆盖其父类CEntity中的所有虚函数,并定义两个描述圆弧所必须的成员变量:圆心坐标、起点坐标和终点坐标。在CArc的Draw成员函数中完成对圆弧绘制的工作;在Draw函数中,对设备环境变量的绘图模式进行设置,创建相应画笔,调用设备环境类的成员函数,调用绘制圆弧的成员函数完成圆弧的绘制。(5)其它图元类的实现各基本图元类都是从图元基类CEntity中派生出来的,只是在派生类中添加体现各图元主要特征的变量,如在三角形类中需添加记录三个顶点坐标的Position型变量、在圆和正六边形类中添加一个记录中心点的Position型变量和一个记录半径的double型变量。需要根据各图形的特点重载基类中的函数或实现父类中的虚函数。其基本操作与上述三种图元类似。(6)组合图元类的实现组合图形是将前面实现的基本图元组合在一起,将这些图元作为一个整体来实现绘制和编辑。组合图形类也是从图元基类CEntity中派生出来的,其声明如下所示:class CDesk1: public CEntityDECLARE_SERIAL(CDesk1)public:Positionbasepos; /组合图形的定点 CObList m_list ; / 用链表记录组合图形类中的图元.;3.4.3 命令类设计与实现绘图系统将用户对各种图元的绘制和操作都视之为 “命令”:对各种图元的绘制与操作工作都转化为对命令的执行。由于这些命令具有很多相似的地方,如都会对鼠标左键按下、鼠标移动、鼠标右键按下等做出消息处理,所以可以抽象出命令基类,再派生出其他命令类。(1)命令基类的实现无论是对直线的绘制

温馨提示

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

评论

0/150

提交评论