中南大学数学院大三年级面向对象实验报告

合集下载

面向对象的实验报告

面向对象的实验报告

一、实验目的1. 理解面向对象编程的基本概念,如类、对象、继承、封装、多态等。

2. 掌握面向对象编程的基本语法和常用操作。

3. 通过实验加深对面向对象编程的理解和应用。

二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C#三、实验内容1. 定义一个简单的类,并创建对象实例。

2. 在类中定义属性和方法,并演示其使用。

3. 使用继承实现类的扩展。

4. 使用封装保护类的内部数据。

5. 使用多态演示不同对象间的动态类型转换。

四、实验步骤1. 定义一个名为“Person”的类,包含以下属性和方法:- 属性:姓名(Name)、年龄(Age)、性别(Gender)- 方法:打印个人信息(PrintInfo)2. 创建“Person”类的对象实例,并演示属性和方法的使用。

3. 定义一个名为“Student”的类,继承自“Person”类,并添加以下属性和方法: - 属性:学号(StudentID)- 方法:打印学生信息(PrintStudentInfo)4. 创建“Student”类的对象实例,并演示属性和方法的使用。

5. 定义一个名为“Employee”的类,继承自“Person”类,并添加以下属性和方法:- 属性:工号(EmployeeID)、职位(Position)- 方法:打印员工信息(PrintEmployeeInfo)6. 创建“Employee”类的对象实例,并演示属性和方法的使用。

7. 定义一个名为“Manager”的类,继承自“Employee”类,并添加以下属性和方法:- 属性:部门(Department)- 方法:打印经理信息(PrintManagerInfo)8. 创建“Manager”类的对象实例,并演示属性和方法的使用。

9. 使用多态演示不同对象间的动态类型转换。

五、实验结果与分析1. 创建“Person”类和对象实例,并演示属性和方法的使用。

面向对象编程实验报告

面向对象编程实验报告

面向对象编程实验报告一、实验目的本次实验旨在通过面向对象编程的方式,设计并实现一个简单的学生信息管理系统,加深对面向对象编程原理和概念的理解,并掌握面向对象编程的应用技巧。

二、实验内容1. 设计学生类(Student):包括学生的基本信息(学号、姓名、性别、年龄等)以及相关操作(添加信息、修改信息、删除信息等)。

2. 设计班级类(Class):包括班级的基本信息(班级编号、班级名称等)以及与学生类的关联关系(一个班级包含多个学生)。

3. 设计主程序类(Main):用于对学生信息进行管理和操作,包括添加学生、删除学生、修改学生信息、查询学生信息等功能。

4. 编写测试用例:对设计的学生信息管理系统进行测试,保证系统能够正常运行并实现预期功能。

三、实验步骤1. 设计学生类(Student):首先确定学生类的属性和方法,定义学生类的成员变量(学号、姓名、性别、年龄)以及成员方法(添加学生信息、修改学生信息、查询学生信息等)。

2. 设计班级类(Class):确定班级类的属性和方法,包括班级编号、班级名称以及一个包含学生信息的集合,设计班级类与学生类的关联关系。

3. 编写主程序类(Main):在主程序类中实现学生信息的管理功能,通过用户输入选择对学生信息的操作,调用学生类和班级类中的方法实现相应功能。

4. 编写测试用例:设计多个测试用例,分别测试添加学生、删除学生、修改学生信息等功能,确保系统能够正确运行并实现预期功能。

四、实验结果分析经过测试,学生信息管理系统能够正常运行并实现预期功能。

用户可以通过主程序类对学生信息进行添加、删除、修改和查询操作,操作界面友好,操作流程清晰,便于用户操作和管理学生信息。

五、实验总结通过本次实验,我深入理解了面向对象编程的原理和概念,掌握了面向对象编程的应用技巧,提升了对Java编程语言的熟练程度。

面向对象编程具有代码复用、维护方便和高扩展性等优点,是一种高效的编程思想。

在今后的学习和工作中,我将继续深入研究面向对象编程,不断提升自己的编程能力。

面向对象实习报告(共5篇)

面向对象实习报告(共5篇)

面向对象实习报告(共5篇)第1篇:面向对象实习报告实习题目一1.三个自定义类本题有三个自定义的类:点类VecPosition,圆类circle,矩形类Rect,运用类的继承思想从这三个类中抽象出公共基类base。

其中base中有一个纯虚函数virtual void draw()=0; VecPosition类主要实现各个运算符的点的构造,运算符的重载,求两点距离,判断一个点是否在给定其他几个点的范围内,以及与向量有关的几何运算。

Circle类主要实现圆对象的构造,圆的相关参数设置,求取圆的周长函数(doubleCircle::getCircumference())、面积函数(double Circle::getArea()),判断一个点是否在圆内bool Circle::isInside(VecPosition pos),求两个圆交点函数int Circle::getIntersectionPoints(Circle c,VecPosition *p1,VecPosition *p2)返回加点个数。

求两个圆的相交面积double Circle::getIntersectionArea(Circle c)。

矩形由左上点坐标和右下点坐标确定。

包括矩形的构造,参数的设置修改,求矩形的面积,周长,以及判断一个点是否在矩形内。

2.可视化界面建立单文档工程,添加画图菜单,如下图:三个菜单项分别画点,画线,画矩形。

在view.h中添加如下变量:CPoint类的 m_oldpt,m_pt用于记录画图的起点坐标和终点坐标。

Circle m_circle,Rect m_rect,用于构造圆和矩形。

afx_msg voidOnLButtonDown(UINT nFlags, CPoint point)是响应鼠标按下的消息,并将当前坐标传给m_oldPoint。

用switch分支控制画图种类,在view类中加入变量i,添加三个菜单消息响应函数,对i进行赋值;当点击菜单项“点”时,i=0;当点击菜单项“圆” 时,i=1;当点击菜单项“矩形”时,i=2;在view中添加void C实º习一View::OnLButtonUp(UINT nFlags, CPoint point)用来响应鼠标左键弹起消息。

面向对象课程实验报告

面向对象课程实验报告

一、实验目的1. 理解面向对象编程的基本概念和原理。

2. 掌握面向对象编程语言(如Java、Python)的基本语法和编程技巧。

3. 通过实验,加深对面向对象编程思想的理解,提高编程能力。

二、实验环境1. 操作系统:Windows 102. 开发环境:Eclipse/PyCharm3. 编程语言:Java/Python三、实验内容1. 面向对象编程基本概念(1)面向对象编程(OOP)是一种编程范式,强调数据和操作数据的代码的封装。

(2)面向对象编程的基本要素包括:类(Class)、对象(Object)、继承(Inheritance)、多态(Polymorphism)和封装(Encapsulation)。

2. 类与对象的定义(1)定义一个名为“Student”的类,包含以下属性:姓名(name)、年龄(age)和性别(gender)。

(2)创建一个名为“Student”的对象,并初始化属性值。

3. 封装(1)将Student类的name、age和gender属性定义为私有属性,以防止外部直接访问。

(2)提供公有的setter和getter方法,用于访问和修改属性值。

4. 继承(1)定义一个名为“Student”的父类,包含姓名、年龄和性别属性。

(2)定义一个名为“Teacher”的子类,继承自“Student”类,并添加一个新的属性:职称(title)。

5. 多态(1)定义一个名为“Animal”的父类,包含一个名为“makeSound”的方法。

(2)定义一个名为“Dog”的子类,继承自“Animal”类,并重写“makeSound”方法。

(3)定义一个名为“Cat”的子类,继承自“Animal”类,并重写“makeSound”方法。

6. 实验代码以下是实验过程中编写的Java代码示例:```javapublic class Student {private String name;private int age;private String gender;public Student(String name, int age, String gender) { = name;this.age = age;this.gender = gender;}public void setName(String name) { = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}public void setGender(String gender) {this.gender = gender;}public String getGender() {return gender;}}public class Teacher extends Student {private String title;public Teacher(String name, int age, String gender, String title) { super(name, age, gender);this.title = title;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}}public class Animal {public void makeSound() {System.out.println("Animal makes a sound"); }}public class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Dog barks");}}public class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Cat meows");}}```7. 实验结果与分析通过本次实验,我们掌握了面向对象编程的基本概念和原理,了解了面向对象编程语言的基本语法和编程技巧。

面向对象设计原则实验报告实验01

面向对象设计原则实验报告实验01

面向对象设计原则实验报告1.1实验目的1. 通过实例深入理解和掌握所学的面向对象设计原则。

2.熟练使用面向对象设计原则对系统进行重构。

3.熟练绘制重构后的结构图(类图)。

1.2实验内容1.在某绘图软件中提供了多种大小不同的画笔(Pen),并且可以给画笔指定不同颜色,某设计人员针对画笔的结构设计了如图1-1所示的初始类图。

通过仔细分析,设计人员发现该类图存在非常严重的问题,即如果需要增加一种新的大小或颜色的笔,就需要增加很多子类,例如增加一种绿色的笔,则对应每一种大小的笔都需要增加一支绿色笔,系统中类的个数急剧增加。

试根据依赖倒转原则和合成复用原则对该设计方案进行重构,使得增加新的大小或颜色的笔都较为方便,请绘制重构之后的结构图(类图)。

2.在某公司财务系统的初始设计方案中存在如图1-2所示的Employee类, 该类包含员工编号(ID),姓名(name),年龄(age).性别(gender)、薪水(salary)、每月工作时数( workHoursPerMonth),每月请假天数(leaveDaysPerMonth)等属性。

该公司的员工包括全职和兼职两类,其中每月工作时数用于存储兼职员工每个月工作的小时数,每月请假天数用于存储全职员工每个月请假的天数。

系统中两类员工计算工资的万法也不一样,全职员工按照工作日数计算工资﹐兼职员工按照工.作时数计算上资﹐内此在 Employee 类中提供了两个方法calculateSalaryByDays()和calculateSalaryByHours(),分别用于按照大数和时数计算工资,此外,还提供了方法displaySalary()用于显示工资。

试采用所学面向对象设计原则分析图1-2中Employee类存在的问题并对其进行重构绘制重构之后的类图。

3.在某图形界面中存在如下代码片段,组件类之间有较为复杂的相互引用关系:如果在上述系统中增加一个新的组件类,则必须修改与之交互的其他组件类的源代码,将导致多个类的源代码需要修改。

面向对象实验报告

面向对象实验报告

面向对象实验报告面向对象实验报告引言:面向对象编程是一种软件开发方法,它将现实世界中的事物抽象成对象,通过定义对象的属性和行为来描述其特征和功能。

本实验旨在通过实际操作,深入理解面向对象编程的概念和原则。

一、实验背景面向对象编程是计算机科学领域的重要概念之一,它具有封装、继承和多态等特性,可以提高代码的可重用性和可维护性。

在本实验中,我们将通过编写一个简单的学生管理系统来探索面向对象编程的实际应用。

二、实验目的1. 理解面向对象编程的基本概念和原则;2. 掌握类的定义、对象的创建和方法的调用;3. 熟悉封装、继承和多态的使用;4. 实践面向对象编程的思维方式和方法论。

三、实验过程1. 类的定义在学生管理系统中,我们首先需要定义一个学生类,包含学生的基本信息,如学号、姓名、年龄等。

通过封装这些属性和定义相应的方法,我们可以实现对学生对象的创建和操作。

2. 对象的创建在主程序中,我们可以通过实例化学生类来创建学生对象。

通过调用构造函数,为学生对象赋予具体的属性值。

例如,创建一个名为Tom的学生对象,可以使用以下代码:Student tom = new Student("001", "Tom", 18);3. 方法的调用定义了学生类后,我们可以为其添加一些方法,如获取学生信息、修改学生信息等。

通过调用这些方法,可以实现对学生对象的操作和管理。

例如,获取Tom的年龄可以使用以下代码:int age = tom.getAge();4. 继承的应用在学生管理系统中,我们可以将学生类作为基类,派生出一些特定类型的学生类,如研究生、本科生等。

通过继承,子类可以继承基类的属性和方法,并可以添加自己特有的属性和方法。

这样,我们可以更好地组织和管理不同类型的学生对象。

5. 多态的实现通过使用多态,我们可以在不同的上下文中使用同一个方法名,实现不同的功能。

例如,在学生管理系统中,我们可以定义一个统一的显示信息方法,然后在不同的学生类中重写该方法,以实现不同类型学生的信息展示。

面向对象课程实训总结报告

面向对象课程实训总结报告

一、前言面向对象编程(Object-Oriented Programming,OOP)是当今软件开发领域的主流编程范式,具有封装、继承、多态等特点。

为了提高我们的编程能力和面向对象思维能力,本学期我们进行了面向对象课程的实训。

以下是我对本次实训的总结报告。

二、实训内容1. 实训目标本次实训旨在帮助我们:(1)掌握面向对象编程的基本概念、原则和设计模式;(2)学会使用面向对象编程语言(如Java、C++等)进行编程;(3)提高编程能力和面向对象思维能力;(4)培养团队协作和沟通能力。

2. 实训过程本次实训分为三个阶段:(1)理论学习:深入学习面向对象编程的基本概念、原则和设计模式,理解面向对象编程的优势;(2)实践操作:通过编写简单的面向对象程序,巩固所学知识,提高编程能力;(3)项目实战:分组完成一个小型项目,锻炼团队协作和沟通能力。

三、实训收获1. 理论知识方面通过本次实训,我对面向对象编程有了更深入的理解,掌握了以下知识点:(1)面向对象编程的基本概念:类、对象、封装、继承、多态等;(2)面向对象设计原则:单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、组合优于继承等;(3)常用设计模式:工厂模式、单例模式、观察者模式、策略模式、模板方法模式、适配器模式等。

2. 实践操作方面在实训过程中,我学会了使用面向对象编程语言编写程序,掌握了以下技能:(1)掌握面向对象编程语言的基本语法和语法规则;(2)熟练运用面向对象编程语言进行编程,提高编程效率;(3)学会使用面向对象设计原则和设计模式,提高代码质量。

3. 团队协作和沟通能力方面在项目实战阶段,我与团队成员紧密合作,共同完成项目。

在此过程中,我学会了以下技能:(1)明确项目目标和任务分工;(2)与团队成员有效沟通,确保信息畅通;(3)协调团队成员,共同解决问题。

四、实训不足与改进1. 理论知识方面在理论学习阶段,我发现自己在某些知识点上掌握得不够扎实,如面向对象设计模式的应用。

面向对象设计原则实验报告实验02

面向对象设计原则实验报告实验02

设计模式(2)实验报告一、实验目的1.结合实例,熟练绘制设计模式结构图。

2.结合实例,熟练使用 Java 语言实现设计模式。

3.通过本实验,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些设计模式。

二、实验要求1.结合实例,绘制设计模式的结构图。

2.使用 Java 语言实现设计模式实例,代码运行正确。

三、实验内容1.迭代器模式设计一个逐页迭代器,每次可返回指定个数(一页)元素,并将该迭代器用于对数据进行分页处理。

绘制对应的类图并编程模拟实现。

2.适配器模式某 OA 系统需要提供一个加密模块,将用户机密信息(例如口令、邮箱等)加密之后再存储在数据库中,系统已经定义好了数据库操作类。

为了提高开发效率,现需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有些甚至没有源代码。

试使用适配器模式设计该加密模块,实现在不修改现有类的基础上重用第三方加密方法。

要求绘制相应的类图并编程模拟实现,需要提供对象适配器和类适配器两套实现方案。

3.模板方式模式和适配器模式在某数据挖掘工具的数据分类模块中,数据处理流程包括 4 个步骤,分别是:①读取数据;②转换数据格式;③调用数据分类算法;④显示数据分类结果。

对于不同的分类算法而言,第①步、第②步和第④步是相同的,主要区别在于第③ 步。

第③步将调用算法库中已有的分类算法实现,例如朴素贝叶斯分类(Naive Bayes)算法、决策树(DecisionTree)算法、K 最近邻(K-NearestNeighbor , KNN)算法等。

现采用模板方法模式和适配器模式设计该数据分类模块,绘制对应的类图并编程模拟实现。

4.工厂方法模式在某网络管理软件中,需要为不同的网络协议提供不同的连接类,例如针对 POP3 协议的连接类 POP3Connection、针对 IMAP 协议的连接类 IMAPConnection 、针对 HTTP 协议的连接类 HTTPConnection 等。

面向对象设计实验报告

面向对象设计实验报告

一、实验目的1. 理解面向对象设计的核心概念,如封装、继承、多态等。

2. 掌握面向对象设计的方法和步骤。

3. 通过实际案例分析,提高面向对象设计的实践能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse三、实验内容1. 面向对象设计的基本概念2. 类与对象3. 继承与多态4. 实际案例分析四、实验步骤1. 面向对象设计的基本概念(1)定义:面向对象设计(Object-Oriented Design,OOD)是一种以对象为中心的设计方法,通过将现实世界中的实体抽象为对象,以对象及其相互关系来描述系统的结构和行为。

(2)核心概念:a. 封装:将对象的属性(数据)和行为(方法)封装在一起,对外提供接口。

b. 继承:允许一个类继承另一个类的属性和方法,实现代码复用。

c. 多态:允许不同类的对象对同一消息作出响应,实现行为的变化。

2. 类与对象(1)定义:类是具有相同属性和行为的对象的抽象,对象是类的实例。

(2)步骤:a. 定义类:创建一个新的类,定义属性(成员变量)和方法(成员函数)。

b. 创建对象:使用new关键字创建类的实例。

c. 访问对象属性和方法:使用点号(.)操作符访问对象的属性和方法。

3. 继承与多态(1)继承:定义一个新的类(子类)继承自另一个类(父类),子类继承父类的属性和方法。

(2)多态:允许不同类的对象对同一消息作出响应,实现行为的变化。

(3)步骤:a. 定义父类:创建一个父类,定义属性和方法。

b. 定义子类:创建一个子类,继承自父类,并添加新的属性和方法。

c. 实现多态:使用子类对象调用父类方法,实现不同对象对同一消息的不同响应。

4. 实际案例分析(1)案例分析:设计一个简单的图书管理系统。

(2)设计步骤:a. 分析需求:图书管理系统需要管理图书的增删改查等功能。

b. 设计类:设计图书类(Book)、借阅者类(Borrower)和管理员类(Admin)。

面向对象c 实验报告

面向对象c 实验报告

面向对象c 实验报告实验报告:面向对象C程序设计一、实验目的本次实验旨在通过设计一个面向对象的C程序,来加深对面向对象程序设计的理解,并实践C语言中面向对象的编程思想。

二、实验过程1. 设计类和对象:在C语言中,没有类的概念,但可以通过以下方式模拟类和对象。

- 定义一个结构体来表示一个类,结构体中包含该类的成员变量和成员函数指针。

- 定义一些函数来模拟类的成员函数,函数的第一个参数是结构体类型的指针,该指针指向当前对象。

2. 创建对象:定义一个结构体变量,该变量称为对象,通过调用构造函数来初始化对象的成员变量,将对象传递给成员函数。

3. 调用成员函数:使用对象调用该对象的成员函数,通过函数指针实现多态性。

4. 析构对象:在不再使用对象时,调用析构函数来释放对象占用的资源,避免内存泄漏。

5. 运行程序:编译并运行C程序,观察程序的输出结果。

三、实验结果在C语言中实现面向对象的程序设计,可以提供一种思路和方式来实现面向对象的编程思想。

通过将相关的数据和函数封装在一个表示类的数据结构中,并通过该数据结构的函数指针来调用成员函数,可以模拟出面向对象的效果。

四、实验总结通过本次实验,我对于C语言中如何实现面向对象编程有了进一步的理解。

尽管C语言本身没有类的概念,但通过结构体和函数指针的方式,我们可以模拟出类和对象的概念,并实现封装、继承和多态等面向对象的特性。

C语言中面向对象的编程思想可以使程序更加模块化、灵活和易于维护。

通过将相关的数据和函数封装在一个结构体中,我们可以将代码组织得更加清晰,降低代码的耦合度,提高代码的重用性。

此外,通过函数指针的方式来调用成员函数,可以实现多态性,使得代码更加灵活和可扩展。

当然,C语言中实现面向对象编程也存在一些限制和不足。

相比于面向对象编程语言,如C++和Java,C语言中的面向对象编程需要手动管理对象的生命周期,容易出现内存泄漏的问题。

此外,C语言中没有提供访问控制的特性,不同成员函数之间的访问权限不能进行限制。

面向对象设计原则实验报告实验07

面向对象设计原则实验报告实验07

设计模式实验报告一、实验目的1. 学会选择合适的设计模式解决在软件开发中遇到的实际问题,加深对常用设计模式的理解和掌握。

2.掌握一些常用的设计模式联用技巧,学会同时运用多种设计模式解决实际问题。

二、实验要求1.根据实例场景正确选择设计模式,理解常用设计模式的动机和意图。

2.结合实例,绘制对应的模式结构图。

三、实验内容1.练习 1在某 FPS (First - Person Shooting ,第一人称射击)游戏中提供了多个不同的游戏场景。

在每一个游戏场景中,提供了对应的地图(Map)、天气(Weather)和游戏背景音乐(Sound)等。

请选择一种合适的设计模式对游戏场景进行设计,使得当用户选择游戏场景时,该场景所对应的地图、天气和背景音乐能够同时出现;此外,还可以方便地在该游戏中增加新的游戏场景。

要求给出该设计模式的名称并结合实例绘制对应的结构图(即类图,类名、方法名和属性名可自行定义)。

2.练习 2在某 FPS 游戏中,系统可以给所有游戏成员发送通知,例如提示任务执行完毕、发送新的任务提醒、发出敌人袭击警报等。

请选择一种合适的设计模式设计该系统通知模块,使得在系统中可以灵活地增加或删除游戏成员。

要求给出该设计模式的名称并结合实例绘制对应的结构图(即类图,类名、方法名和属性名可自行定义)。

3.练习 3某 FPS 游戏中提供了一个游戏管理器(GameManager),通过该管理器用户可以对音效(Sound Effect)、场景(Scene)、游戏角色(Role)等对象进行参数设置。

为了节约系统资源开且保证对象状态的一致性,在游戏运行时,用户只能打开唯一的一个管理器界面。

根据以上描述,请选择两种合适的设计模式设计该游戏管理器,在实现对多个对象进行统一设置的同时保证游戏管理器的唯一性。

要求给出这两种设计模式的名称并结合实例绘制对应的结构图(即类图,类名、方法么和属性名可自行定义)。

4.练习 4为了让游戏场景呈现更加通真的效果,在某 FPS 游戏中可以对场景(Scene)的光照效果等进行渲染(Rendering)。

面向对象程序设计实训报告总结

面向对象程序设计实训报告总结

面向对象程序设计实训报告总结
面向对象程序设计实训是我在大学期间参与的一门实践课程,通过这门课程的学习和实践,我对面向对象程序设计的理论和实践有了更深入的了解和掌握。

在实践过程中,我首先学习了面向对象程序设计的基本概念和原则,掌握了类、对象、继承、多态等重要概念和特性。

我了解到面向对象程序设计是一种将现实世界的事物抽象为类和对象的编程范式,可以更好地理解和模拟现实世界的复杂系统。

接着,我学习了面向对象程序设计的基本语法和语义,包括类的定义、对象的创建和使用、方法的定义和调用等。

我通过编写简单的程序来实践这些概念和语法,加深了对面向对象程序设计的理解。

在实践过程中,我还学习了面向对象程序设计的设计原则和模式。

我了解到设计原则是指导面向对象程序设计的准则,如开闭原则、单一职责原则、迪米特法则等。

这些原则可以帮助我们设计出高质量、可扩展和易维护的程序。

同时,我也学习了一些常用的设计模式,如工厂模式、单例模式、观察者模式等,这些模式可以帮助我们解决特定的设计问题。

通过实践,我发现面向对象程序设计可以提高代码的可读性、可维护性和可重用性。

通过将复杂系统拆分为多个类和对象,可以更好地组织和管理代码。

面向对象程序设计的设计原则和模式可以帮助我们设计出更好的系统架构和代码结构。

总的来说,面向对象程序设计实训是一门非常有价值的课程,通过这门课程的学习和实践,我对面向对象程序设计有了更深入的了解和掌握。

这门课程不仅提高了我的编程能力,还培养了我的系统设计和分析能力。

我相信这门课程对我未来的职业发展也有很大的帮助。

面向对象实验报告

面向对象实验报告

实验报告面向对象分析与设计班级学号姓名指导老师实验一用例图与活动图设计与实现[实验目的]1.熟悉UML建模2.掌握用例图的设计与实现4.掌握使用活动图细化用例的方法[实验内容]1.简单需求分析选课系统包括如下功能:(1)管理员通过系统管理界面进入系统,建立学期要开的各种课程,将课程信息保存在数据库中并对课程进行改动和删除(2)学生通过客户端浏览器根据学号和密码进入系统,可以选课,也可以查询已选课程本系统涉及的用户包括管理员和学生,他们是用例图中的执行者,他们的主要特征相似,都具有姓名和注册号(学生为学号)等信息,所以可以抽象出高层执行者“人”,而管理员和学生都从人统一派生。

数据库管理系统是另外一个执行者。

2.事件流(1)添加课程事件流(1)管理员选择进入管理界面,用例开始(2)系统提示输入管理员密码(3)管理员输入密码(4)系统验证密码A1:密码错误(5)进入管理界面,系统显示目前所建立的全部课程信息(6)管理员选择添加课程(7)系统提示输入新课程信息(8)管理员输入信息(9)系统验证是否和已有课程冲突A2:有冲突(10)系统添加新课程,提示课程添加成功(11)系统重新进入管理主界面,显示所有课程(12)用例结束其他事件流:A1:密码错误(1)系统提示再次输入(2)用户确认(3)三次错误,拒绝再次访问(4)否则进入添加课程事件流第(5)步A2:有冲突(1)系统提示冲突,显示冲突课程信息(2)用户重新输入(3)继续验证直到无冲突(4)进入添加课程事件流第(10)步删除课程事件流和修改课程事件流与此类似(2)选课事件流(1)学生进入选课登录界面,用例开始(2)系统提示输入学号和密码(3)学生输入学号和密码(4)系统验证A1:验证失败(5)进入选课主界面(6)学生点击选课。

(7)系统显示所有课程信息(8)学生选择课程(9)系统验证课程是否可选A2:课程不可选(10)系统提示课程选择成功(11)用例结束错误流:A1:验证失败(1)系统提示验证失败,提示重新输入(2)三次失败,拒绝访问(3)成功,转选课事件流第(5)步A2:课程不可选(1)系统提示课程不可选及原因(2)学生重新选课(3)重新验证直至成功(4)转选课事件流第(10)步3.选课用例图根据前面的需求分析可以试着粗略找出系统用例,并在后期的用例建模工作中合并、优化、筛选这些用例。

面向对象程序设计实验报告

面向对象程序设计实验报告

面向对象程序设计实验报告姓名Name学号Student No.班级Class代码总行数Code Lines 实验名称Item1.实验目的综合应用所学的知识分析问题、解决问题,提高实际编程能力及程序调试能力。

2.实验内容设计并实现一个个人通信录,能记录人员的各种通信信息。

支持通信录条目的添加、查找、删除、修改。

要求:1)通信录需记录的个人信息自行设计。

2)要求采用图形用户界面(GUI),界面效果及事件处理方式自行设计,尽量考虑美观与易用性。

3)系统结构设计应采用面向对象的思想,发现问题域中的事物(常称为实体),抽象成类,建立实体类之间的关系。

同时建立实体类与界面类之间的关系。

要求程序结构设清晰合理。

3.关键代码public class AddressBook extends Frame implements ActionListener{private MenuItem noteAdd=new MenuItem("添加");private MenuItem noteDel=new MenuItem("删除");Private MenuItem noteEdit=new MenuItem("修改");private MenuItem noteSearch=new MenuItem("查找");private MenuItem noteExit=new MenuItem("退出");private List noteList=new List();private String[][]message=new String[1000][4];public Info notes=new Info();public AddressBook(){super("通讯录");Menu note=new Menu("编辑");note.add(noteAdd);note.add(noteDel);note.add(noteEdit);note.add(noteSearch);note.addSeparator();note.add(noteExit);MenuBar bar=new MenuBar();bar.add(note);setMenuBar(bar);add(noteList);noteAdd.addActionListener(this);noteDel.addActionListener(this);noteEdit.addActionListener(this);noteExit.addActionListener(this);noteSearch.addActionListener(this);noteList.addActionListener(this);addWindowListener(new WindowCloser());setSize(400,600);setVisible(true);}public void actionPerformed(ActionEvent e){if(e.getSource()==noteAdd){notes.mail=null;=null;notes.address=null;notes.telephone=null;int index=noteList.getItemCount();EditDialog dlg=new EditDialog(this,"通讯录",notes,false);if(dlg.isOk){message[index][0]=dlg.textName.getText();message[index][1]=dlg.text Address.getText();message[index][2]=dlg.textEmail.getText();message[index][3]=dlg.textTelephone.getText();if(message[index][0]!=null){String s="姓名:"+message[index][0]+"地址:"+message[index][1]+"E-mail:"+message[index][2]+"电话:"+message[index][3];noteList.add(s);}}dlg.dispose();}else if(e.getSource()==noteEdit||e.getSource()==noteList){int i=noteList.getSelectedIndex();if(i!=-1){=message[i][0];notes.address=message[i][1];notes.mail=message[i][2];notes.telephone=message[i][3];面向对象程序设计实验报告EditDialog dlg=new EditDialog(this,"修改通讯录",notes,false);if(dlg.isOk){message[i][0]=dlg.textName.getText();message[i][1]=dlg.textAddress.getText();message[i][2]=dlg.textEmail.getText();message[i][3]=dlg.textTelephone.getText();String s="姓名:"+message[i][0]+"地址:"+message[i][1]+"E-mail:"+message[i][2]+"电话:"+message[i][3]; noteList.replaceItem(s,i);}dlg.dispose();}}else if(e.getSource()==noteDel){ConfirmDialog cd=new ConfirmDialog(this,"确认删除?","确认要删除这条通讯录信息吗?");if(cd.close){int index=noteList.getSelectedIndex();for(int i=index;i<noteList.getItemCount()-1;i++){for(int j=0;j<4;j++)message[i][j]=message[i+1][j];}noteList.remove(index);}}else if(e.getSource()==noteSearch){EditDialog dlg=new EditDialog(this,"查找通讯录",notes,true);if(dlg.isOk){for(int i=0;i<noteList.getItemCount();i++){String thisname=noteList.getItem(i).toString().split("")[0].split(":")[1];String thistelephone=noteList.getItem(i).toString().split("")[30].split(":")[1];if((.equals(thisname)&&dlg.telephone.equals(thistelephone))||(.equal s(thisname)&&(dlg.telephone.equals("")))||((.equals(""))&&dlg.telephone.equ als(thistelephone))){String show="查找成功!信息为:"+noteList.getItem(i).toString();JOptionPane.showMessageDialog(null,show);return;}}。

中南大学数学院大三年级面向对象实验报告

中南大学数学院大三年级面向对象实验报告

中南大学数学院大三年级面向对象实验报告C++面向对象程序设计实验报告姓名:班级:学号:实验一,画线在visual C++6.0里面文件->新建->工程里面的MFC Appwizard [EXE]除了第二步选单文档,基本上都是默认的。

建一个文件进行一下操作int m;CPoint p1,p2;在构造函数里面初使化m CZuoBiaoView::CZuoBiaoView(){// TODO: add construction code herem=0;}在资源文件Menu中的IDR_MAINFRAME中添加消息句柄OnLButtonDown,OnLButtonUp,OnMouseMove .再回到ZuoBiaoView.cpp中编译一下程序void CZuoBiaoView::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);m=1;p1=point;CView::OnLButtonDown(nFlags, point);}void CZuoBiaoView::OnLButtonUp(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultp2=point;CClientDC dc(this);OnPrepareDC(&dc);dc.MoveTo(p1);dc.LineTo(p2);m=0;CView::OnLButtonUp(nFlags, point);}void CZuoBiaoView::OnMouseMove(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultstatic int n=0;switch(++n){case 1:p2=point;break;case 2:p1=p2;p2=point;n=0;break;}CClientDC dc(this);OnPrepareDC(&dc);if(m==1){dc.MoveTo(p1);dc.LineTo(p2);}CView::OnMouseMove(nFlags, point);}实验二,创建菜单用MFC创建菜单按钮具体的制作过程:首先,生成一个MFC AppWizard EXE 工程生成一个以CButton为基类的新类,名为CMenuButton,然后用ClassWizard 为其添加两个成员函数:DrawItem()和PreSubclassWidnow();手工为CMenuButton类添加BOOL类型m_bDrawFocusRect成员变量,用于决定是否在按钮上画焦点矩形,添加SetDrawFocusRect()函数用于设置这个标志,默认为画焦点矩形;添加两个枚举类型的变量m_ArrowType和m_PopupPos,用于决定所画的箭头的类型和菜单弹出的位置。

面向对象设计原则实验报告实验06

面向对象设计原则实验报告实验06

设计模式(6)实验报告一、实验目的1.结合实例,熟练绘制设计模式结构图。

2.结合实例,熟练使用 Java 语言实现设计模式。

3.通过本实验,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些设计模式。

二、实验要求1.结合实例,绘制设计模式的结构图。

2.使用 Java 语言实现设计模式实例,代码运行正确。

三、实验内容1.状态模式在某网络管理软件中, TCP 连接(TCP Connection)具有建立(Established)、监听(Listening)、关闭(Closed)等多种状态,在不同的状态下 TCP 连接对象具有不同的行为,连接对象还可以从一个状态转换到另一个状态。

当一个连接对象收到其他对象的请求时,它根据自身的当前状态做出不同的反应。

现采用状态模式对 TCP 连接进行设计,绘制对应的类图并编程模拟实现。

2.享元模式某 OA 系统采用享元模式设计权限控制与管理模块,在该模块中,将与系统功能相对应的业务类设计为享元类并将相应的业务对象存储到享元池中(提示;可使用 Map 实现,key 为业务对象对应的权限编码, value 为业务对象)。

用户身份验证成功后,系统通过存储在数据库中的该用户的权限编码集从享元池获取相应的业务对象并构建权限列表,在界面上显示用户所拥有的权限。

根据以上描述,绘制对应的类图并编程模拟实现。

3.代理模式在某电子商务系统中,为了提高查询性能,需要将一些频繁查询的数据保存到内存的辅助存储对象中(提示:可使用 Map 实现)。

用户在执行查询操作时,先判断辅助存储对象中是否存在待查询的数据,如果不存在,则通过数据操作对象查询并返回数据,然后将效据保存到辅助存储对象中,否则直接返回存储在辅助存储对象中的数据。

现采用代理模式中的缓冲代理实现该功能,要求绘制对应的类图并编程模拟实现。

4.命令模式某灯具厂商要生产一个智能灯具遥控器,该遥控器具有 5 个可编程的插槽,每个插槽都有一个控制灯具的开关,这5个开关可以通过蓝牙技术控制5个不同房间灯光的打开和关闭,用户可以自行设置每一个开关所对应的房间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象程序设计作业C++做一个窗口小程序,用纯API的方式:#include <windows.h>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){WNDCLASS wndclass;HWND hwnd;MSG msg;wndclass.style = CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProc = WndProc;wndclass.cbClsExtra = 0;wndclass.cbWndExtra = 0;wndclass.hInstance = hInstance;wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL;wndclass.lpszClassName = L"Test";if(!RegisterClass(&wndclass)) return FALSE;hwnd = CreateWindow(L"Test",L"Test",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,nShowCmd);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) {switch(message){case WM_PAINT:HDC hdc;PAINTSTRUCT ps;hdc = BeginPaint(hwnd,&ps);TextOut(hdc,20,60,L"love you",8);EndPaint(hwnd,&ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;case WM_MBUTTONDOWN:MessageBox(hwnd,L"鼠标中键被按下!",L"mouseEvent",MB_OK);break;case WM_LBUTTONDOWN:MessageBox(hwnd,L"鼠标左键被按下!",L"mouseEvent",MB_OK);break;case WM_RBUTTONDOWN:MessageBox(hwnd,L"鼠标右键被按下!",L"mouseEvent",MB_OK);break;}return DefWindowProc(hwnd,message,wParam,lParam);}一个窗口捕捉的程序代码用的是VC编译器:为了方便,屏幕显示在"无标题.txt - 记事本"窗口里,所以你得新建一个文本文件,并取名为"无标题",然后打开这个记事,并运行下面这个程序。

#include<windows.h>int main(){HWND TextWnd=FindWindow(NULL,"无标题.txt - 记事本");HDC TextDC=GetDC(TextWnd);HWND DeskWnd=::GetDesktopWindow();RECT DeskRC;::GetClientRect(DeskWnd,&DeskRC);HDC DeskDC=GetDC(DeskWnd);HBITMAP DeskBmp=::CreateCompatibleBitmap(DeskDC,DeskRC.right,DeskRC.bottom); HDC memDC;memDC=::CreateCompatibleDC(DeskDC);SelectObject(memDC,DeskBmp);while(1){StretchBlt(memDC,0,0,DeskRC.right,DeskRC.bottom,DeskDC,0,0,DeskRC.right,DeskR C.bottom,SRCCOPY);RECT TextRC;GetClientRect(TextWnd,&TextRC);::StretchBlt(TextDC,0,0,TextRC.right,TextRC.bottom,memDC,0,0,DeskRC.right,DeskRC.bottom,SRCCOPY);Sleep(300);}return 0;}#include<windows.h>LRESULT CALLBACK MyWndproc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lparam) {if(message == WM_DESTROY){::PostQuitMessage(0);return 0;}if(message == WM_PAINT){PAINTSTRUCT ps;HDC hdc = ::BeginPaint(hWnd,&ps);::EndPaint(hWnd,&ps);//RECT rectClient;//GetClient(hWnd,&rectClient); ;;;;(InvalidateRect)//::ValidateRect(hWnd,&rectClient);return 0;}return ::DefWindowProc(hWnd,message,wParam, lparam);}int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd){WNDCLASSEX wndcls;wndcls.cbClsExtra = 0;wndcls.cbSize = sizeof(wndcls);wndcls.cbWndExtra = 0;wndcls.hbrBackground = ::CreateSolidBrush(RGB(0,255,0));wndcls.hCursor = ::LoadCursor(NULL,IDC_CROSS);wndcls.hIcon = ::LoadIcon(NULL,IDI_QUESTION);wndcls.hIconSm = NULL;wndcls.hInstance = hInstance;wndcls.lpszMenuName=NULL; //wndcls中这个成员没有赋值wndcls.lpfnWndProc = MyWndproc; //这里要写自己定义的过程函数名称wndcls.lpszClassName = TEXT("MyFirstClass");//(WideCharToMUltiByte)//W char//wndcls.IpszClassName = TEXT("MyFirstClass");wndcls.style = CS_HREDRAW | CS_VREDRAW;::RegisterClassEx(&wndcls);HWND hWnd= ::CreateWindow(TEXT("MyFirstClass"),TEXT("MyCaption"),WS_OVERLAPPEDWINDOW,0,0 ,300,300,NULL,NULL,hInstance,NULL);if(!hWnd){return(-1);}::ShowWindow(hWnd,nShowCmd);::UpdateWindow(hWnd);MSG msg;while(::GetMessage(&msg,NULL,NULL,NULL)){::TranslateMessage(&msg);//转化键盘消息::DispatchMessage(&msg);}return msg.wParam; //逗号改成".",因为wParan是MSG的一个成员//return 0;}// 1.cpp : Defines the class behaviors for the application.//#include "stdafx.h"#include "1.h"#include "MainFrm.h"#include "ChildFrm.h"#include "1Doc.h"#include "1View.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif///////////////////////////////////////////////////////////////////////////// // CMy1AppBEGIN_MESSAGE_MAP(CMy1App, CWinApp)//{{AFX_MSG_MAP(CMy1App)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()///////////////////////////////////////////////////////////////////////////// // CMy1App constructionCMy1App::CMy1App(){// TODO: add construction code here,// Place all significant initialization in InitInstance}///////////////////////////////////////////////////////////////////////////// // The one and only CMy1App objectCMy1App theApp;///////////////////////////////////////////////////////////////////////////// // CMy1App initializationBOOL CMy1App::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.CMultiDocTemplate* pDocTemplate;pDocTemplate = new CMultiDocTemplate(IDR_MY1TYPE,RUNTIME_CLASS(CMy1Doc),RUNTIME_CLASS(CChildFrame), // custom MDI child frameRUNTIME_CLASS(CMy1View));AddDocTemplate(pDocTemplate);// create main MDI Frame windowCMainFrame* pMainFrame = new CMainFrame;if (!pMainFrame->LoadFrame(IDR_MAINFRAME))return FALSE;m_pMainWnd = pMainFrame;// Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);// Dispatch commands specified on the command lineif (!ProcessShellCommand(cmdInfo))return FALSE;// The main window has been initialized, so show and update it.pMainFrame->ShowWindow(m_nCmdShow);pMainFrame->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 CMy1App::OnAppAbout(){CAboutDlg aboutDlg;aboutDlg.DoModal();}///////////////////////////////////////////////////////////////////////////// // CMy1App message handlers// MainFrm.cpp : implementation of the CMainFrame class#include "stdafx.h"#include "1.h"#include "MainFrm.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif///////////////////////////////////////////////////////////////////////////// // CMainFrameIMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)//{{AFX_MSG_MAP(CMainFrame)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code !ON_WM_CREATE()//}}AFX_MSG_MAPEND_MESSAGE_MAP()static UINT indicators[] ={ID_SEPARATOR, // status line indicatorID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,};/////////////////////////////////////////////////////////////////////////////// CMainFrame construction/destructionCMainFrame::CMainFrame(){// TODO: add member initialization code here}CMainFrame::~CMainFrame(){}int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)){TRACE0("Failed to create toolbar\n");return -1; // fail to create}if (!m_wndStatusBar.Create(this) ||!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))){TRACE0("Failed to create status bar\n");return -1; // fail to create}// TODO: Delete these three lines if you don't want the toolbar to // be dockablem_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);return 0;}BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){if( !CMDIFrameWnd::PreCreateWindow(cs) )return FALSE;// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT csreturn TRUE;}CMainFrame///////////////////////////////////////////////////////////////////////////// // CMainFrame diagnostics#ifdef _DEBUGvoid CMainFrame::AssertValid() const{CMDIFrameWnd::AssertValid();}void CMainFrame::Dump(CDumpContext& dc) const{CMDIFrameWnd::Dump(dc);}#endif //_DEBUG///////////////////////////////////////////////////////////////////////////// // CMainFrame message handlers// stdafx.h : include file for standard system include files,// or project specific include files that are used frequently, but// are changed infrequently//#if !defined(AFX_STDAFX_H__F1BD735B_CB84_4E80_9CD2_F247808B4236__INCLUDED_)#define AFX_STDAFX_H__F1BD735B_CB84_4E80_9CD2_F247808B4236__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers#include <afxwin.h> // MFC core and standard components#include <afxext.h> // MFC extensions#include <afxdisp.h> // MFC Automation classes#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls#ifndef _AFX_NO_AFXCMN_SUPPORT#include <afxcmn.h> // MFC support for Windows Common Controls#endif // _AFX_NO_AFXCMN_SUPPORT//{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_STDAFX_H__F1BD735B_CB84_4E80_9CD2_F247808B4236__INCLUDED_)Draw.cpp代码:// Draw.cpp : 实现文件#include "stdafx.h"#include "LineDemo.h"#include "Draw.h"IMPLEMENT_SERIAL(CDraw, CObject, 2)// CDrawCDraw::CDraw(): m_flag(0), m_firpt(0){}CDraw::~CDraw(){}// CDraw 成员函数CDraw::CDraw(int m_flag, CPoint m_firpt, CPoint m_endpt) {this->m_flag=m_flag;this->m_firpt=m_firpt;this->m_endpt=m_endpt;}void CDraw::Draw(CDC* pDC){switch(m_flag){case 1:pDC->MoveTo (m_firpt);pDC->LineTo (m_endpt);break;case 2:pDC->Rectangle(m_firpt.x,m_firpt.y,m_endpt.x,m_endpt.y);break;case 3:pDC->Ellipse (m_firpt.x,m_firpt.y,m_endpt.x,m_endpt.y);break;default:break;}}void CDraw::Serialize(CArchive& ar){if (ar.IsStoring()){ar<<m_flag;ar<<m_firpt.x<<m_firpt.y;ar<<m_endpt.x<<m_endpt.y;}else{ar>>m_flag;ar>>m_firpt.x>>m_firpt.y;ar>>m_endpt.x>>m_endpt.y;}}。

相关文档
最新文档