中国地质大学面向对象程序设计课设报告

上传人:第*** 文档编号:31000617 上传时间:2018-02-03 格式:DOCX 页数:13 大小:120.25KB
返回 下载 相关 举报
中国地质大学面向对象程序设计课设报告_第1页
第1页 / 共13页
中国地质大学面向对象程序设计课设报告_第2页
第2页 / 共13页
中国地质大学面向对象程序设计课设报告_第3页
第3页 / 共13页
中国地质大学面向对象程序设计课设报告_第4页
第4页 / 共13页
中国地质大学面向对象程序设计课设报告_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《中国地质大学面向对象程序设计课设报告》由会员分享,可在线阅读,更多相关《中国地质大学面向对象程序设计课设报告(13页珍藏版)》请在金锄头文库上搜索。

1、面向对象程序设计课程设计报告学 号: 班级序号: 姓 名: 指导老师: 杨林权 中国地质大学(武汉)信息工程学院遥感系2017 年 6 月1实习题目一1) 下面为一个二维空间点类,圆类,矩形类。阅读代码,将其功能全部完善。并编写主函数进行测试。 (30 分)2) 完成第一步的工作后,进行一个类的整体改进,抽象出一个高层的抽象基类,使用虚函数,继承等面向对象特征对这些类进行改进。 (10 分)3)将代码结合到 MFC 的单文档视图框架里,进行图形化显示、菜单和鼠标交互操作。(10 分)【设计思想】用类来实现题目要求,先按要求实现题目所给三个类的成员函数,然后再抽象出基类。程序中圆类和矩形类的实现

2、主要靠调用点类的成员函数。点类中定义的一系列重组函数为三个类中各成员函数的实现提供了方便,对象之间的计算使得程序更具有可操作性。本题。三个类中最复杂的是点类,成员函数特别多,完成的难度最大。其中,点类作为基础部分,为圆类和矩形类中部分函数的实现提供条件。【设计表示】 【算法分析】本题主要的算法就是实现函数的调用以及类的基本知识(一个类调用另一个类Class shape(基类)class VecPosition(子类)class Circle(子类)class Rect(子类)2的成员函数) 。例如:1. 圆类中求两圆交点的函数就调用了点类中的 getdistancet(计算点之间的距离) ,n

3、ormalize,getDirection(利用向量与 x 轴的夹角)等函数。2. 在 normalize ()函数中调用 getDirection()来得到正规化坐标以后的点的坐标。3. 求两相交圆相交部分面积的函数 getIntersectionArea (),也调用了点类中的 getdistancet() 、getDirection()等函数。【调试报告】编写本题最初遇到的困难是,题目所给的信息量太大,题中涉及到的变量,常量非常多,不知道这些量所代表的实际意义,所以便有一种法无从下手的感觉。特别是点类一开始的一系列重组函数,起初不明白其意图,也就不好写出其函数体。调试时,程序中偶尔回出现

4、致命性的错误,明明在于语法上没有错误,但无法运行得到结果。应该是程序的逻辑混乱导致。调试结果如下:【小结】通过对本题的实习,对类的知识有了更进一步的了解,对类之间各种成员变量,函数的调用更加熟悉。知道怎样去调用另一个类中的成员函数。这个题除了锻炼对类的理解外,还增强了我们对程序编写的整体把握,让我们的思路不局限于一个函数或几个函数的调用,而是掌握几个类之间的相互作用。3【主要函数代码】/求两个圆的相交面积double getIntersectionArea(Circle c) if (m_posCenter.getDistanceTo(c.m_posCenter) sqrt(m_dRadius

5、 - c.m_dRadius) /相交double d, s1, s2;d = m_posCenter.getDistanceTo(c.m_posCenter);s1 = (acos(m_dRadius*m_dRadius + d*d - c.m_dRadius*c.m_dRadius) / (2 * m_dRadius*d)*m_dRadius*m_dRadius) - (m_dRadius*m_dRadius*sin(2 * (acos(m_dRadius*m_dRadius + d*d - c.m_dRadius*c.m_dRadius) / (2 * m_dRadius*d) / 2;

6、s2 = (acos(c.m_dRadius*c.m_dRadius + d*d - m_dRadius*m_dRadius) / (2 * c.m_dRadius*d)*c.m_dRadius*c.m_dRadius) - (c.m_dRadius*c.m_dRadius*sin(2 * (acos(c.m_dRadius*c.m_dRadius + d*d - m_dRadius*m_dRadius) / (2 * c.m_dRadius*d) / 2;return s1 + s2;else /内含if (m_dRadius c.m_dRadius)return (c.m_dRadius*

7、c.m_dRadius*PI);elsereturn (m_dRadius*m_dRadius*PI);else4return 0;double getMagnitude() /获取向量长度return sqrt(m_x*m_x + m_y*m_y);/获取向量方向(与 X轴夹角)double getDirection() return (atan(m_y / m_x) * 180 / PI; ; /判断坐标是否在给定两点的 X,Y 之间bool isBetweenX(const VecPosition &p1, const VecPosition &p2) if (p1.m_x = m_x

8、&m_x = p1.m_x)return 1;elsereturn 0;elseif (p1.m_x = m_x &m_x 180 的为优秀, 且优秀学生占全体学生比例不超过 10%。b) (10 分)学校出现改革:每个学生信息增加了一项社会活动分,该项表示学生参加校内社团或者社会公益活动情况:0 没有参加任何社会活动1 参加了社会活动,评价一般2 参加了社会活动,评价良好63 参加了社会活动,评价优秀1 根据文件“c.txt”的内容,完善学生的记录。2 评优新政:总分= 课程总分 *70% + 社会活动分 *30优秀条件:总分240,且优秀学生占全体学生比例不超过 5%。请根据学生信息计算评

9、优并输出显示。c)(10 分)附加题:对上述需求,采用 MFC 可视化设计开发,提供对话框操作和结果显示界面。【设计思想】这是一个学生成绩管理系统,设计到的数据类型比较多,所以,采用结构体和模板来解决数据类型问题。又由于,这是一个小型的管理系统,涉及到的函数内容比较多,考虑到数据的封装问题,所以用类来设计。按题目的要求,这个类需要包含:查找,交换,增加,排序,删除,读写文件等一些函数。先是读出文本 a.txt,然后,可进行查找,增加,删除,排序学生信息,最后再写入到 b.txt 文件中,进行输出。【设计表示】学生成绩管理系统安全退出系统增加学生信息查找学生信息删除学生信息按姓名查找按学号查找7

10、【算法分析】1. 排序:排序利用的冒泡排序算法,即将数组中相邻两个数进行比较,较大的排前面,较小的排后面,多次遍历,直到数组不需再调整,冒泡结束。2. 查找:可分为按名字查找和按学号查找,输入信息后,利用 for 循环,查找函数会判段所提供的文本中是否有此人的信息,如果有则会把该同学的全部信息输出,没有则会提示“没有此人” 。3.添加:就是在文本中输入新的学生的信息,保存在自定义类型数组 Student A里面即可。4.删除:输入需要删除的学生信息后,会在数组中找寻该同学的信息,找到后,去掉数组中该同学所对应的信息,然后,该信息后面的数据存储位置就相应的减一位。【调试报告】本题最大的问题是希望

11、在多个函数中调用读写文件函数中的数组。由于 C+语法不允许返回值类型为数组,因此在最初的时候花费了很多时间。后来查资料发现应该利用指针传递数组,并在 Student 类里面将自定义类型数组申明为全对学生信息排序8局变量 static,这样它的函数周期就是整个程序的函数周期。这样就解决了只需读取一次就能完成接下来的操作,而不需要每次都读取一遍文件,从而提高效率。调试结果如下:【小结】通过本题的学习,对原本不怎么了解的文件读写方面的知识有了更好的了解。同时,又尝试着把类与结构体结合使用,加深了对结构体的认识。另外,通过题中的多重循环的使用,对循环控制范围引起了重视,今后在设计循环结构时会特别注意这

12、个地方。【主要函数代码】/将学生信息按照总分从高到低排序9for (k = 0; k SIGN;if (SIGN = 0)break;elsesize = getsize(A);cout inname;for (i = 0; i size; i+)if (Ai.getname() = inname)Ai.draw();10cout endl;sign = 1;break;if (sign = 0)cout 查无此人 endl;cout endl;11实习心得经过一个学期对面向对象程序设计的学习,我学习到了基本的理论知识,了解到了 C+语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打

13、下了坚实的基础。在为期一周的 C+课程设计中,我体会颇多,学到了很多东西。我加强了对 C+的认识,并且复习了自己以前学习到的知识。这些都使得我对计算机语言的学习有了更深入的认识!总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。像学生成绩管理系统这样的程序设计,经历了平时在课堂和考试中不会出现的问题和考验。而这些问题,这并不是我们平时只靠课本,就可以轻易解决的。所以,课设锻炼了我们挑战难题,学会用已掌握的知识去解决具体问题的能力,进一步培养了独立思考问题和解决问题的能力。 通过课程设计的训练,我进一步学习和掌握了对程序的设计和编写,从中体会到了面向对象程序设计的方

14、便和巧妙。懂得了在进行编写一个程序之前,要有明确的目标和整体的设计思想。另外某些具体的细节内容也是相当的重要。这些宝贵的编程思想和从中摸索到的经验都是在编程的过程中获得的宝贵财富。这些经验对我以后的编程会有很大的帮助的,我要好好利用。由于时间的紧迫和对知识的了解不够广泛,造成了代码中还存在许多不足,功能上还不够完善。以后我会继续努力,大胆创新,争取能编写出透射着自己思想的程序。这次课程设计让我充分认识到了自己的不足,认识到了动手能力的重要性。我会在以后的学习中更加努力锻炼自己,提高自己,让自己写出更好更完善的程序,为以后的编程打好基础!总而言之,这次课程设计实践让我收获很大。最后,向本次课设中给予我帮助的老师和同学们,表达由衷的感谢!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号