




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计 课程设计报告 学 号: 班级序号: 姓 名: 指导老师: 杨林权 中国地质大学(武汉)信息工程学院遥感系2017年6月实习题目一 1) 下面为一个二维空间点类,圆类,矩形类。阅读代码,将其功能全部完善。并编写主函数进行测试。(30分)2) 完成第一步的工作后,进行一个类的整体改进,抽象出一个高层的抽象基类,使用虚函数,继承等面向对象特征对这些类进行改进。(10分)3)将代码结合到MFC的单文档视图框架里,进行图形化显示、菜单和鼠标交互操作。(10分)【设计思想】用类来实现题目要求,先按要求实现题目所给三个类的成员函数,然后再抽象出基类。程序中圆类和矩形类的实现主要靠调用点类的成员函数。点类中定义的一系列重组函数为三个类中各成员函数的实现提供了方便,对象之间的计算使得程序更具有可操作性。本题。三个类中最复杂的是点类,成员函数特别多,完成的难度最大。其中,点类作为基础部分,为圆类和矩形类中部分函数的实现提供条件。Class shape(基类)【设计表示】 class VecPosition(子类)class Rect(子类)class Circle(子类)【算法分析】本题主要的算法就是实现函数的调用以及类的基本知识(一个类调用另一个类的成员函数)。例如:1. 圆类中求两圆交点的函数就调用了点类中的getdistancet(计算点之间的距离),normalize,getDirection(利用向量与x轴的夹角)等函数。2. 在normalize ()函数中调用getDirection()来得到正规化坐标以后的点的坐标。3. 求两相交圆相交部分面积的函数getIntersectionArea (),也调用了点类中的getdistancet()、getDirection()等函数。【调试报告】编写本题最初遇到的困难是,题目所给的信息量太大,题中涉及到的变量,常量非常多,不知道这些量所代表的实际意义,所以便有一种法无从下手的感觉。特别是点类一开始的一系列重组函数,起初不明白其意图,也就不好写出其函数体。调试时,程序中偶尔回出现致命性的错误,明明在于语法上没有错误,但无法运行得到结果。应该是程序的逻辑混乱导致。调试结果如下:【小结】通过对本题的实习,对类的知识有了更进一步的了解,对类之间各种成员变量,函数的调用更加熟悉。知道怎样去调用另一个类中的成员函数。这个题除了锻炼对类的理解外,还增强了我们对程序编写的整体把握,让我们的思路不局限于一个函数或几个函数的调用,而是掌握几个类之间的相互作用。【主要函数代码】/求两个圆的相交面积double getIntersectionArea(Circle c) if (m_posCenter.getDistanceTo(c.m_posCenter) sqrt(m_dRadius - 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;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*c.m_dRadius*PI);elsereturn (m_dRadius*m_dRadius*PI);elsereturn 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 &m_x = p1.m_x)return 1;elsereturn 0;elseif (p1.m_x = m_x &m_x 180的为优秀,且优秀学生占全体学生比例不超过10%。b) (10分)学校出现改革:每个学生信息增加了一项社会活动分,该项表示学生参加校内社团或者社会公益活动情况: 0 没有参加任何社会活动 1 参加了社会活动,评价一般2 参加了社会活动,评价良好3 参加了社会活动,评价优秀1 根据文件“c.txt”的内容,完善学生的记录。2 评优新政:总分= 课程总分*70% + 社会活动分*30 优秀条件:总分240,且优秀学生占全体学生比例不超过5%。请根据学生信息计算评优并输出显示。c)(10分)附加题:对上述需求,采用MFC可视化设计开发,提供对话框操作和结果显示界面。【设计思想】这是一个学生成绩管理系统,设计到的数据类型比较多,所以,采用结构体和模板来解决数据类型问题。又由于,这是一个小型的管理系统,涉及到的函数内容比较多,考虑到数据的封装问题,所以用类来设计。按题目的要求,这个类需要包含:查找,交换,增加,排序,删除,读写文件等一些函数。先是读出文本a.txt,然后,可进行查找,增加,删除,排序学生信息,最后再写入到b.txt文件中,进行输出。【设计表示】增加学生信息安全退出系统按姓名查找学生成绩管理系统删除学生信息查找学生信息按学号查找对学生信息排序【算法分析】1. 排序:排序利用的冒泡排序算法,即将数组中相邻两个数进行比较,较大的排前面,较小的排后面,多次遍历,直到数组不需再调整,冒泡结束。2. 查找:可分为按名字查找和按学号查找,输入信息后,利用for循环,查找函数会判段所提供的文本中是否有此人的信息,如果有则会把该同学的全部信息输出,没有则会提示“没有此人”。3.添加:就是在文本中输入新的学生的信息,保存在自定义类型数组Student A里面即可。4.删除:输入需要删除的学生信息后,会在数组中找寻该同学的信息,找到后,去掉数组中该同学所对应的信息,然后,该信息后面的数据存储位置就相应的减一位。【调试报告】本题最大的问题是希望在多个函数中调用读写文件函数中的数组。由于C+语法不允许返回值类型为数组,因此在最初的时候花费了很多时间。后来查资料发现应该利用指针传递数组,并在Student类里面将自定义类型数组申明为全局变量static,这样它的函数周期就是整个程序的函数周期。这样就解决了只需读取一次就能完成接下来的操作,而不需要每次都读取一遍文件,从而提高效率。调试结果如下:【小结】通过本题的学习,对原本不怎么了解的文件读写方面的知识有了更好的了解。同时,又尝试着把类与结构体结合使用,加深了对结构体的认识。另外,通过题中的多重循环的使用,对循环控制范围引起了重视,今后在设计循环结构时会特别注意这个地方。【主要函数代码】/将学生信息按照总分从高到低排序for (k = 0; k 37; k+)for (i = 1; i 37; i+)if (Ai - 1.add() Ai.add()swap(Ai - 1, Ai);if (Ai - 1.add() = Ai.add()if (Ai - 1.getmath() Ai.getmath()swap(Ai - 1, Ai);/按姓名查找学生while (1)sign = 0;/初始化signcout 是否按姓名查找学生 endl;cout 1.是 0.否 SIGN;if (SIGN = 0)break;elsesize = getsize(A);cout 请输入学生的名字 inname;for (i = 0; i size; i+)if (Ai.getname() = inname)Ai.draw();cout endl;sign = 1;break;if (sign = 0)cout 查无此人 endl;cout endl;实习心得经过一个学期对面向对象程序设计的学习,我学习到了基本的理论知识,了解到了C+语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。在为期一周的C+课程设计中,我体会颇多,学到了很多东西。我加强了对C+的认识,并且复习了自己以前学习到的知识。这些都使得我对计算机语言的学习有了更深入的认识!总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。像学生成绩管理系统这样的程序设计,经历了平时在课堂和考试中不会出现的问题和考验。而这些问题,这并不是我们平时只靠课本,就可以轻易解决的。所以,课设锻炼了我们挑战难题,学会用已掌握的知识去解决具体问题的能力,进一步培养了独立思考问题和解决问题的能力。 通过课程设计的训练,我进一步学习和掌握了对程序的设计和编写,从中体会到了面向对象程序设计的方便和巧妙。懂得了在进行编写一个程序之前,要有明确的目标和整体的设计思想。另外某些具体的细节内容也是相当的重要。这些宝贵的编程思想和从中摸索到的经验都是在编程的过程中获得的宝贵财富。这些经验对我以后的编程会有很
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中考英语第一轮复习:形容词(含答案解析)
- 2025标准国际贸易合同范本
- 2025内蒙古额尔古纳市第一中学人才引进(第二号)模拟试卷及参考答案详解一套
- 2025网约车服务合同简化版范本
- 2025广西百色市平果市道路运输发展中心城镇公益性岗位人员招聘1人考前自测高频考点模拟试题附答案详解(考试直接用)
- 2025海南海口市秀英区事业单位招聘59人(第一号)模拟试卷及答案详解(夺冠系列)
- 2025保险公司合同
- 2025江苏泰州市兴化市医疗卫生事业单位招聘高层次人才78人(全年)考前自测高频考点模拟试题及答案详解(典优)
- 2025湖北黄冈市武穴市事业单位第二批考核招聘三支一扶服务期满人员1人考前自测高频考点模拟试题及一套答案详解
- 2025年河南金铂来矿业有限公司市场化选聘1人考前自测高频考点模拟试题及答案详解(有一套)
- 统编版中考语文一轮复习:义务教育语文课程常用字表(3500字注音版)(2022版课标)
- 建筑工程技术专业《房屋建筑学》课程标准
- 人教版部编版统编版一年级语文上册汉语拼音5《gkh》课件
- DL-T1083-2019火力发电厂分散控制系统技术条件
- 《2024年北京市医疗服务收费目录》
- 意外险医疗险重疾险
- 便利店陈列培训
- 新疆地方史课件
- 硫铁矿的化学性质和利用技术
- 气管切开后气道湿化的护理
- 防震减灾科普知识(图文)课件
评论
0/150
提交评论