260 likes | 435 Views
OOP 实验汇总及课程设计. 大纲. 实验报告:撰写 8 个报告 主要实验: 14 个 课程设计: 多媒体同学地图系统: MCMS. 面向对象程序设计 - 实验实习. 第 1 章 c++ 基础知识 ——2 : P16,1-5 1 第 2 章 类和对象 ——4 : P43,2-5 第 3 章 运算符重载 ——2 : P56,3-6 2 第 4 章 继承与派生 ——4 : P73,4-6 3 第 5 章 多态性与虚函数 ——4 : P82,5-6 第 6 章 mfc 编程 ——3 : P110,6-11,6-12
E N D
大纲 • 实验报告:撰写8个报告 • 主要实验:14个 • 课程设计:多媒体同学地图系统:MCMS
面向对象程序设计-实验实习 第1章 c++基础知识——2:P16,1-5 1第2章 类和对象——4:P43,2-5 第3章 运算符重载——2 :P56,3-6 2第4章 继承与派生——4 :P73,4-6 3第5章 多态性与虚函数——4 :P82,5-6 第6章 mfc编程——3 :P110,6-11,6-12 4第7章 屏幕绘图及文本显示——3 :P132,7-9,10,11 5第8章 键盘与鼠标——3 :P152,8-7,8,9,10 第9章 windows控件——2 :P212,9-10,11,12,13,14,15,16 第10章 资源——2 :P238,10-12,13,14,15 第11章 单文档与多文档——3 :P265,11-11,12,13 6第12章 数据库编程——2 :P288,12-8,9 7第13章 多媒体编程——2 :P298,13-3 8第14章 internet编程——2 :P306,14-2 红色为要撰写实验报告的
实验1 • P16,1-5 分解质因数算法: • step1: 获得分解质因数n; • step2: 先找n最小的质数k; • step3: 如果k等于n,则说明分解质因数的过程已经结束,打印出即可; • step4: 如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的n,重复执行第二步; • step5: 如果n不能被k整除,则用k+1作为k的值,重复执行第二步;
实验2 • P43,2-5 Circle类设计 class Circle{ public: • float perimeter(); • float area(); private: • float radius; • };
实验3 • P56,3-6运算符重载 (Complex类设计) • class Complex{ • public: • Complex(){i='i';} • Complex(double x, double y):a(x),b(y){i='i';} • void input(); • void output(); • void add(const Complex c); • void subtraction(const Complex c); • friend ostream& operator<<(ostream&, Complex&); • friend istream& operator>>(istream&, Complex&); • private: • double a;//real numbers • double b;//real numbers • char i;//imaginary unit • };
实验4 • P73-6,设计Worker类,Teacher类和Mechanic类
实验5 • P82,5-6 多态
Shape类、 Triangle类 class Shape{ public: virtual float area()=0; }; class Triangle: public Shape{ public: Triangle(float x, float y, float z):a(x),b(y),c(z){} virtual float area(){ float s; s=(a+b+c)/2; s=s*(s-a)*(s-b)*(s-c); s=sqrt(s); return s; } private: float a,b,c; };
Circle类、Rectangle类 class Circle: public Shape{ public: Circle(float x):r(x){} virtual float area(){ return 3.14*r*r;} private: float r; }; class Rectangle: public Shape{ public: Rectangle(float x, float y):a(x),b(y){} virtual float area(){ return a*b;} private: float a; float b; };
演示 Shape *sPtr; Circle c(10); Rectangle r(10,10); Triangle t(3,4,5); sPtr=&c; cout<<"Cirle area:"<<sPtr->area()<<endl; sPtr=&r; cout<<"Rectangle area:"<<sPtr->area()<<endl; sPtr=&t; cout<<"Triangle area:"<<sPtr->area()<<endl;
实验6 • 函数指针 • 静态库 • 动态库 • 装入时链接: #pragma comment(lib,”XXXlib.lib”) • 执行时链接: LoadLibrary,GetProcAddree,FreeLibrary函数 • 插件框架 • 插件开发
实验7 • P132:7-9,7-10,7-11 • 综合设计:中国地图。点( Pie)状城市用圆符号;线( Polyline)状河流用线符号;面(Polygon 、FloodFill)数据状省市用多边形符号。各层考虑合理的分级,分色。所需数据自己解决并参考OGC SFS进行简单的地图数据结构设计(数组或向量存储)。
中国(同学)地图 • 同学数据 • 姓名 性别 生日 邮箱 经度 纬度 籍贯… • 类设计 • CFriends、CCity、CRoad、CProvince • 坐标变换 • 经纬度到屏幕坐标变换 • 屏幕到经纬度坐标变换 • 地图绘显 • 点、线、面图层(中国城市,道路,省区)
实验8 • 实现中国地图操作功能 • +,-键缩放地图,→←↑↓键移动地图 • 鼠标调用Polyline, polygon绘制河流、省区及鼠标光标的地理坐标(屏幕到经纬度坐标变换) • 添加地图的边框、图例和经纬网格及刻度。
实验9 • 将教材9-1至9-13实例综合为一个基于对话框的应用程序,以学友为例设计类,必要的属性,并将输入数据保存在数组或向量中。 • 完成“多媒体同学地图系统”的同学基本信息管理功能模块。 • 同学基本信息 • 通用对话框:地图着色
实验10 • 将10章实例增加到“多媒体同学地图系统”,使其具备商业软件的品质。 • 菜单、加速键、工具栏、状态条、图标、位图、对话框和字符串提示等
实验11 • 利用MDI重新设计“多媒体同学地图系统”,使其初步具备分为同学基本信息管理、图形表达等功能模块。并能实现空间和属性数据的串行化。
实验12 • P12-8,12-9 • 将“多媒体同学地图系统”修改为基于数据库的系统,尝试利用数据库或空间数据库Spatialite存储数据。 • 利用C++stream实现数据的内部存储:cin、cout以及ifstream,ofstream读写数据; • 直接对数据库操作:MCMS启动从数据库中读取数据, MCMS退出将数据保存到数据库 • 通用数据库如access或sql server或sqlite • 空间数据库Spatialite
实验13 • P13-3.编写一个基于单文档的应用程序,双击用户区时可以播放声频和视频文件。 • 实现“多媒体同学地图系统”多媒体功能模块。 • 照片 • 视频自我介绍 • 网站(微博)URL • …
实验14 • 编写支持网络聊天的 “多媒体同学地图系统” • 浏览网页 • 网络聊天 • 在线好友 • 网游踪迹 • 时空分析(统计:上网时间,地点,内容)
OOP课程设计说明 • “多媒体同学地图系统”,分为同学基本信息管理、图形表达、多媒体和网络聊天等功能模块(插件)。 • 模块一:地图。图层分为中国城市、道路和省份等基础图层(注意空间数据满足拓扑关系); • 模块二:同学。学生(OOP课程的每位学生)信息及其同学、好友信息(至少10条) • 模块三:多媒体。照片、视频和网址(各一条) • 模块四:网络。支持聊天和冲浪轨迹的统计、地图显示。
OOP课程设计要求 • 在完成教材实例和习题的基础上,完成“多媒体同学地图系统” MCMS(Multimedia classmate Map system:MCMS)系统的设计; • 文档模式;数据存储;模块设计(类)和插件框架的使用迭代进行; • 系统开放设计不拘泥于形式,只要体现OOA,OOD和OOP即可; • 每位学生必须提交课程设计MCMS,否则实验成绩为0分计! • 资源网站:http://code.google.com/p/osgis/ • 全部课件和书中项目以及实验代码