实验二面向对象编程实验报告材料

合集下载

面向对象编程实验报告

面向对象编程实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

面向对象课程实验报告

面向对象课程实验报告

一、实验目的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. 实验结果与分析通过本次实验,我们掌握了面向对象编程的基本概念和原理,了解了面向对象编程语言的基本语法和编程技巧。

java实验报告实验二 面向对象编程(1)

java实验报告实验二 面向对象编程(1)

信息工程学院Java程序设计实习报告实验二面向对象编程(1)1.实验目的掌握Java程序面向对象编程的基本架构,会运用面向对象的思想编写Java程序。

2.实验内容实验题1 阅读如下程序,完成思考题。

class CCircle{ double pi;double radius;double getRadius(){ return radius;}void setCircle(double r, double p){ pi=p;radius=r;}}public class Ex2_1{ public static void main(String args[]){ CCircle cir1=new CCircle();cir1.setCircle(2.0,3.1416);System.out.println("radius="+cir1.getRadius());}}[基本要求] 运行程序并观察运行结果。

[思考问题] 试述程序中主要语句的作用。

CCircle cir1=new CCircle(); //新建一个CCircle对象cir1.setCircle(2.0,3.1416); //初始化对象System.out.println("radius="+cir1.getRadius()); //输出对象的属性实验题2设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主姓名、当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的速率和停车两个操作。

主要代码如下:package package2_2;class Car {private String user;private int speed;private int angle;public Car(String name,int speed,int angle){user=name;this.speed=speed;this.angle=angle;}public void changeSpeed(int speed2){speed=speed2;}public void carStop(){speed=0;angle=0;System.out.println("车辆处于停车状态");}public void display(){System.out.println("车主姓名: "+user);System.out.println("当前车速: "+speed);System.out.println("方向盘角度:"+angle);}实验题3 定义一个类MyProgram,包含两个属性:一个是private的整型属性data、一个是private的String类型的属性str,封装这两个属性的四个方法setData()和getData()、setStr( )和getStr();将这两个属性转变为字符串的方法是toStr()。

面向对象编程 JAVA编程综合实验报告

面向对象编程 JAVA编程综合实验报告

成绩:JA V A编程B综合实验报告实验名称:面向对象编程实验时间:2012年5月31日星期四JAVA编程B综合实验报告一、实验名称面向对象编程二、实验目的1、理解Java语言是如何体现面向对象编程基本思想,2、了解类的封装方法,以及如何创建类和对象,3、了解成员变量和成员方法的特性。

4、掌握OOP方式进行程序设计的方法,5、了解类的继承性和多态性的作用。

三、实验环境配置Windows XP、JDK 1.6与Eclipse 3.5四、实验记录1)创建Applet 应用小程序2)创建对象并使用对象3)使用修饰符五、代码分析一、创建Applet 应用小程序1、创建一个Applet应用程序文件。

(1)程序功能:建立一个Applet小程序,使其可以进行简单的加法运算。

该程序要包含类、接口、属性、方法、事件等面向对象的基本元素。

(2)程序源代码如下。

import java.awt.*;import java.awt.event.*;import java.applet.Applet;public class Applet1 extends Applet implements ActionListener {Label label1 = new Label("+");Label label2 = new Label("=");TextField field1 = new TextField(6);TextField field2 = new TextField(6);TextField field3 = new TextField(6);Button button1 = new Button("相加");public void init() { // 初始化add(field1);add(label1);add(field2);add(label2);add(field3);add(button1);button1.addActionListener(this);}public void actionPerformed(ActionEvent e) { // 处理按钮事件int x = Integer.parseInt(field1.getText())+ Integer.parseInt(field2.getText());field3.setText(Integer.toString(x)); // 数值转换为字符串}}2、编写一个浏览Applet应用程序的页面文件Applet1.HTML,源代码如。

面向对象设计原则实验报告实验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 等。

《面向对象程序设计》实验报告[二]

《面向对象程序设计》实验报告[二]

计算机科学与工程学院《面向对象程序设计》实验报告[二]专业班级2017数字媒体技术01 实验地点J411 学生学号1705121411 指导教师陈艳学生姓名黄浩博实验时间实验项目类的定义及应用(6学时)实验类别基础性()设计性(√)综合性()其它()实验目的及要求1.掌握类定义的语法;2.掌握构造函数和析构函数的定义;3.掌握几个关键字的用法:this、const、new/delete、friend4.综合应用类的封装性解决常见问题;5.完成实验内容,调试通过后将完整代码及运行截图粘贴到实验结果对应的题号下面;6.对本次实验进行总结(遇到的问题,可行的解决方案,收获,体会等等)7.完成实验报告后,以学号+姓名+实验2(.doc或.docx)为名上传到ftp://218.199.185.223/student/上传作业/陈艳/面向对象程序设计下对应班级及实验项目文件夹中成绩评定表类别评分标准分值得分合计上机表现积极出勤、遵守纪律主动完成设计任务30分程序与报告程序代码规范、功能正确报告详实完整、体现收获70分说明:评阅教师:日期:年月日题目1:#include<iostream>#include<math.h>using namespace std;class Triangle{public:voidSetabc(double x,double y, doublez);doublePerimeter();double Area();private:double a,b,c;};int main(){double a,b,c;cout<<"Please enter the triangle's a,b,c:";cin>>a>>b>>c;Triangle triangle;triangle.Setabc(a,b,c);double len=triangle.Perimeter();double s=triangle.Area();cout<<"The triangle's Perimeter is :"<<len<<endl <<"The triangle's Area is :"<<s<<endl;return 0;}void Triangle::Setabc(double x, double y, double z){ a=x;b=y;c=z;}double Triangle::Perimeter(){double len;len=a+b+c;return len;}double Triangle::Area(){double p=(a+b+c)/2;double s=sqrt(p*(p-a)*(p-b)*(p-c));return s;}题目2:#include<iostream>class Square{private:double m_a;public:Square();~Square();void Set(double a);void Get();double Perimeter();double Area();};int main(){Square square;std::cout<<"Please enter the square's length:";double a,b,c;std::cin>>a;square.Set(a);square.Get();b=square.Perimeter();c=square.Area();std::cout<<"The square's Perimeter is :"<<b<<std::endl <<"The square's Area is :"<<c<<std::endl;return 0;}Square::Square(){std::cout<<"This project is about square!"<<std::endl; }Square::~Square(){std::cout<<"Bye~~"<<std::endl;}void Square::Set(double a){m_a=a;}void Square::Get(){std::cout<<"The square's length is:"<<m_a<<std::endl; }double Square::Perimeter(){return 4*m_a;}double Square::Area(){return m_a*m_a;}题目3:#include<iostream>class Time{private:int m_hour,m_minute,m_second;public:Time(){std::cout<<"This is a new time."<<std::endl;};void Set(int s,int m,int h){m_hour=h;m_minute=m;m_second=s;};void Interval(Time s);~Time(){std::cout<<"End..."<<std::endl;};};int main(){Time time[2];std::cout<<"Please enter the time in chronological order.";for(int a=0;a<2;a++){std::cout<<"Please enter the time:(second minute,hour)"<<std::endl; int s,m,h;std::cin>>s>>m>>h;time[a].Set(s,m,h);}time[1].Interval(time[0]);return 0;}void Time::Interval(Time S){int s,m,h;bool flag1(0),flag2(0);if(this->m_second>S.m_second) s=this->m_second-S.m_second;else{s=60+this->m_second-S.m_second;flag1=1;}if(flag1) this->m_minute--;if(this->m_minute>S.m_minute) m=this->m_minute-S.m_minute;else{m=60+this->m_minute-S.m_minute;题目6:Line.h#ifndef LINE_H_#define LINE_H_class Point {private:int m_x, m_y;public:Point(int x = 0, int y = 0) :m_x(x), m_y(y) {};~Point() {};void pset(int x, int y) { m_x = x; m_y = y; };void pput();Point operator+(const Point& point) const;Point operator-(const Point& point) const;Point& operator=(const Point& point);};class Line {private:Point m_start, m_end;public:Line(int x1=0, int y1=0, int x2=0, int y2=0) :m_start(x1, y1), m_end(x2, y2) {};~Line() {};void lput();void lset(Point s, Point e) { m_start = s, m_end = e; };void lprin(Line l[], int n) {for (int x = 0; x < n; x++) {cout << "The line "<<x<<" :"<<endl;l[x].lput();}}。

实验2 面向对象编程

实验2 面向对象编程

实验项目名称:面向对象编程实验学时: 8 同组学生姓名:郁佳慧实验地点:工科楼A207 实验日期:实验成绩:批改教师:刘晶批改时间:一、实验目的和要求(1)熟练掌握Java语言类定义的基本语法;(2)熟练掌握类成员的访问控制,对象建立的方法;(3)熟练掌握类构造方法、成员方法的定义和重载;(4)熟练掌握类继承、多态和抽象性;(5)熟练掌握接口的定义和实现方法;(6)掌握基本的异常处理方法;(7)调试程序要记录调试过程中出现的问题及解决办法;(8)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验;(9)做完实验后给出本实验的实验报告。

二、实验仪器和设备奔腾以上计算机,Windows 操作系统,装有JDK1.6和Eclipse4.2软件。

三、实验过程(1)设计复数类,成员变量包括实部和虚部,成员方法包括实现复数加法、减法、比较、字符串描述、比较是否相等等操作。

(2)包的建立与使用:设计计算器类Calculator,计算加、减、乘、除和立方体体积,并且打包为mypackage。

观察源文件目录下是否生成了mypackage文件夹,在该文件夹中是否有Calculate.class文件。

编辑PackageDemo.java,保存在Calculator.java 同一目录下,引用计算器类的各方法显示计算结果。

(3)试编码实现简单的银行业务:处理简单帐户存取款、查询。

编写银行帐户类BankAccount,包含数据成员:余额(balance)、利率(interest);操作方法:查询余额、存款、取款、查询利率、设置利率。

再编写主类UseAccount,包含main()方法,创建BankAccount类的对象,并完成相应操作。

(4)假定根据学生的3门学位课程的分数决定其是否可以拿到学位,对于本科生,如果3门课程的平均分数超过60分即表示通过,而对于研究生,则需要平均超过80分才能够通过。

根据上述要求,请完成以下Java类的设计:1)设计一个基类Student描述学生的共同特征。

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

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

C++面向对象程序设计实验二报告实验三类与对象(一)一、实验目的1、掌握类的定义和使用;2、掌握类的定义和对象的声明;3、复习具有不同访问属性的成员的访问方式4、观察构造函数和析构函数的执行过程。

、实验内容1(定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性。

有两个公有成员函数run、st op。

其中,rank为枚举类型CPU_rank定义为enumCPU_rank,P1,1,P2, P3, P4, P5, P6, P7,,frequency 为单位是MHZ的整型数,voltage 为浮点型的电压值。

观察构造函数和析构函数的调用顺序。

#include <iostream>using namespace std;enum CPU_rank {P1=1,P2,P3,P4,P5,P6,P7};class CPUprivate:CPU_rank rank;int frequency;float voltage;p ublic:CPU (CP U_ra nk r, int f, float v)ran k=r;freque ncy=f;voltage=v;cout << "构造了一个CPU!" << endl;-CPU () { cout << " 析构了一个CPU!" << endl; }void Run() {cout << "CPU 开始运行!" << endl; }void Stop() {cout << "CPU 停止运行!" << endl; } };void mai n()CPU a(P6,300,2.8);a.Ru n();a.Sto p();2(定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。

面向对象技术实验二报告

面向对象技术实验二报告

[姓名]面向对象技术实验报告实验二排序面向对象技术实验二报告1.实验内容:设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。

要求:1.可以对任何简单类型和任意对象进行排序2.可以支持升序、降序、字典排序等多种顺序要求3.可以随意增加排序算法和顺序要求,保证其他程序不修改4.减少程序代码中逻辑上的冗余5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点6.提交设计报告,包括:使用UML设计的类图;主要程序代码说明;方案优缺点比较。

在实现该程序时运用了类的继承、接口的实现以及组合的方案2.程序的总体设计:详见后面所附UML类图3.关键代码说明:(1)Compator接口(use to compare)主要利用java的pator类,创建一个MyCompator接口public interface MyCompator {int compare(Object o1,Object o2);},然后实现这个接口,用于比较任何简单类型和任意对象,分别实现ByteCompator、CharCompator、DoubleCompator、FloatCompator、IntCompator、LongCompator、ShortCompator、StringCompator以StringCompator为例,其他实现类与此类似public class StringCompator implements MyCompator{@Overridepublic int compare(Object o1, Object o2) {String str1 = (String)o1;String str2 = (String)o2;return pareTo(str2);}}(2)第一种实现:创建Sorter类作为父类①在sorter类中实现各类方法用于各种数据类型以及任何对象的排序,以sortIntArray为例final void sortIntArray(int[] array,boolean isAscend) {Integer[] integers = new Integer[array.length];for(int i = 0;i<array.length;i++)integers[i]=array[i];this.setCompator(new IntCompator());this.sort(isAscend, integers);for(int j = 0;j<integers.length;j++)array[j]=integers[j];}②创建抽象类/**** @param isAscend 是否升序排序*/protected abstract void sort(boolean isAscend,Object[] array);/*** 按升序排序final void sort(Object[] array){sort(true,array);}}③排序算法:package com.inheritancesort;import pator.MyCompator;public class BubbleSorter extends Sorter {public BubbleSorter( MyCompator a) {super(a);}public BubbleSorter() {super();}@Overridepublic void sort(boolean isAscend,Object[] array) {if(isAscend){for (int i = 0; i < array.length-1; i++) {for (int j = 0; j < array.length-i-1; j++) {if(pare(array[j], array[j+1])>0)swap(array,j,j+1);}}}else{for (int i = 0; i < array.length-1; i++) {for (int j = 0; j < array.length-i-1; j++) {if(pare(array[j], array[j+1])<0)swap(array,j,j+1);}}}}private void swap(Object[] array, int j, int i) {Object temp =array[j];array[j] = array[i];array[i] = temp;}package com.inheritancesort;import pator.MyCompator;public class InsertSorter extends Sorter{public InsertSorter(MyCompator c){super(c);}public InsertSorter(){super();}@Overridepublic void sort(boolean isAscend,Object[] array) {for(int i = 1;i <array.length; i++){int j = -1;while(j <= i && pare(array[i], array[++j])>0);//找到element[i]应该摆放的位置,此处可以利用查找算法进行优化if(j < i){//将j之后的数据移动一位,然后把elements[i]移动到j处Object temp = array[i];for(int k = i-1;k >= j;k--){array[k+1] = array[k];}array[j] = temp;}}if(!isAscend){Object[] objects = new Object[array.length];for(int i =0;i<array.length;i++)objects[i]=array[array.length-i-1];for(int i =0;i<array.length;i++)array[i]=objects[i];}}}************************************************************************************************************** package com.inheritancesort;import pator.MyCompator;public class QuickSorter extends Sorter {public QuickSorter(){super();}public QuickSorter(MyCompator c){super(c);}@Overridepublic void sort(boolean isAscend,Object[] array) {quick_sort(array,0,array.length-1,compator);if(!isAscend){Object[] objects = new Object[array.length];for(int i =0;i<array.length;i++)objects[i]=array[array.length-i-1];for(int i =0;i<array.length;i++)array[i]=objects[i];}}private void quick_sort(Object[] a, int low, int high,MyCompator c) { int k;if (low < high) {k = split(a, low, high,c);quick_sort(a, low, k - 1,c);quick_sort(a, k + 1, high,c);}}private int split(Object[] a, int low, int high,MyCompator c) { int k;int i = low;Object x = a[low];for (k = low + 1; k <= high; k++) {if (pare(a[k], x)<=0) {i=i+1;if (i != k)swap(a, i, k);}}swap(a, low, i);return i;}private void swap(Object[] array, int j, int i) {Object temp =array[j];array[j] = array[i];array[i] = temp;}}(3)第二种实现* 1.对于原生数据类型数组,先将其包装成对应的对象数组,然后排序,最后将排序好的对象数组拆包装并赋值给原生数据类型数组* 2.对于对象类型数组,用户需要实现自己的MyCompator接口重要算法:package com.interfacesort;import pator.MyCompator;/*** 1.在该类中提供三种排序算法(选择,冒泡,快速).* 2.在该类中对于原生数据类型和对象类型的排序是等价的,都需要一个MyCompator接口的实现类,* 但是对于原生数据类型是该包中(具体在Sorter类中)提供的简单的MyCompator接口的实现类,* 而对于对象类型是需要用户自己实现MyCompator接口的.* 3.在该类中还可以添加排序算法,此时只要在枚举Algorithm中添加相应的类别,然后再sort方法中添加相应的分支**/public class PrimitiveSorter<T>{//选择算法public void sort(T[] array,MyCompator c,SortAlgorithm algorithm) {switch(algorithm){case BUBBLE:bubble_sort(array,c);break;case QUICK:quick_sort(array, 0,array.length-1,c);break;case INSERT:insert_sort(array,c);break;}}//冒泡算法private void bubble_sort(T[] array,MyCompator c){for(int i=0;i<array.length;i++){for(int j=0;j<array.length-i-1;j++){if(pare(array[j], array[j+1])>0){swap(array,j, j+1);}}}}//快速算法private void quick_sort(T[] a, int low, int high,MyCompator c) {int k;if (low < high) {k = split(a, low, high,c);quick_sort(a, low, k - 1,c);quick_sort(a, k + 1, high,c);}}private int split(T[] a, int low, int high,MyCompator c) {int k;int i = low;T x = a[low];for (k = low + 1; k <= high; k++) {if (pare(a[k], x)<=0) {i=i+1;if (i != k)swap(a, i, k);}}swap(a, low, i);return i;}//插入排序private void insert_sort(T[] elements ,MyCompator c){for(int i = 1;i <elements.length; i++){int j = -1;while(j <= i && pare(elements[i], elements[++j])>0);//找到element[i]应该摆放的位置,此处可以利用查找算法进行优化if(j < i){//将j之后的数据移动一位,然后把elements[i]移动到j处T temp = elements[i];for(int k = i-1;k >= j;k--){elements[k+1] = elements[k];}elements[j] = temp;}}}private void swap(T[] objects, int j, int k) {T temp =objects[j];objects[j] = objects[k];objects[k] = temp;}}package com.interfacesort;import pator.MyCompator;public class TypeSorter<T> {@SuppressWarnings("unchecked")public void sortArray(T[] array,boolean isAscend,SortAlgorithm algorithm,MyCompator c){new PrimitiveSorter<T>().sort(array, c,algorithm);if(!isAscend){T[] array2 = (T[])new Object[array.length];for(int i=0;i<array.length;i++)array2[i]=array[array.length-i-1];for(int i=0;i<array.length;i++)array[i]=array2[i];}}}4.工厂方法的使用在我的程序里没有使用简单工程,因为简单在扩展的时候违背了开闭原则。

实验二 面向对象编程

实验二  面向对象编程

实验二面向对象编程
一、实验目的:
练习类和类成员的定义及访问方法,实际应用被保护数据屏蔽外部访问的方法。

进一步理解面向对象程序设计的思想。

二、实验内容:
1.创建类,使用重载构造函数的方法来使该类的对象既可以接受一个string类
型的数据初始化,也可以接受一个int类型的数据初始化。

初始化时将输入的内容打印出来。

2.设计一个Employee类。

每个Employee对象都有其私有字段——姓名、职工
号、月基本工资、加班天数、加班费的计算方法。

在另一个类中创建实例,由用户输入员工数并初始化不同的员工信息和加班天数,输出员工的所有相关信息。

三、实验步骤。

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

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

面向对象程序设计实验报告一.实验目的进一步熟悉Java程序的结构,掌握Java的运算符、表达式、数组及流程控制语句的应用。

二. 实验内容(1)编写Application。

实现:将上学期所学的各门课程的名称及考试成绩的信息用数组存放,并在for(或while)循环中利用排序算法,将成绩进行升(或降)序排列,最后输出排序后的课程成绩。

(2)编写Applet程序,实现:将上学期所学的各门课程的名称及考试成绩的信息用数组存放,并在for(或while)循环中利用排序算法,将成绩进行升(或降)序排列,最后输出排序后的课程成绩。

三. 实验步骤(1)进行模板设计,设计出自己想要的模板。

(2)根据自己设计的模板编写出代码,并进行Java Application程序调试。

(3)编写并调试Java Applet程序。

四.实验结果1.编写一个application程序。

截图如下代码如下:import javax.swing.*;import java.awt.*;import java.awt.event.*;public class applicationInOut{public static void main(String args[]){new FrameInOut();}}class FrameInOut extends Frame implements ActionListener{JPanel p1,p2,p3,p4;JButton btn1,btn2,btn3;JTextArea t1;TextField text1,text2,text3,text4,text5,text6,text7,text8;Label lab1,lab2,lab3,lab4,lab5,lab6,lab7,lab8;String information1[]={"姓名","性别:","学号","班级"};String information2[]={"","","",""};String course[]={"数据结构","线性代数","大学英语","电子电路"}; int score[]={0,0,0,0};FrameInOut(){super("学生成绩信息排名");btn1=new JButton("信息显示");btn2=new JButton("按成绩排名");btn3=new JButton("退出");lab1=new Label("姓名");lab2=new Label("性别");lab3=new Label("学号");lab4=new Label("班级");lab5=new Label("数据结构");lab6=new Label("线性代数");lab7=new Label("大学英语");lab8=new Label("电子电路");text1=new TextField(10);text2=new TextField(10);text3=new TextField(10);text4=new TextField(10);text5=new TextField(10);text6=new TextField(10);text7=new TextField(10);text8=new TextField(10);t1=new JTextArea(10,20);p1=new JPanel();p2=new JPanel();p3=new JPanel();p4=new JPanel();p1.add(btn1);p1.add(btn2);p1.add(btn3);p2.add(lab1);p2.add(text1);p2.add(lab2);p2.add(text2);p2.add(lab3);p2.add(text3);p2.add(lab4);p2.add(text4);p3.add(lab5);p3.add(text5);p3.add(lab6);p3.add(text6);p3.add(lab7);p3.add(text7);p3.add(lab8);p3.add(text8);p4.add(t1);add(p1);add(p2);add(p3);add(p4);setLayout(new FlowLayout());p1.setBackground(Color.red);p2.setBackground(Color.orange);p3.setBackground(Color.orange);p4.setBackground(Color.blue);t1.setForeground(Color.blue);btn1.addActionListener(this);btn2.addActionListener(this);btn3.addActionListener(this);setSize(700,400);setVisible(true);}public void actionPerformed(ActionEvent e){if(e.getSource()==btn1){t1.setText("");information2[0]=text1.getText();information2[1]=text2.getText();information2[2]=text3.getText();information2[3]=text4.getText();score[0]=Integer.parseInt( text5.getText());score[1]=Integer.parseInt( text6.getText());score[2]=Integer.parseInt( text7.getText());score[3]=Integer.parseInt( text8.getText());for(int i=0;i<information1.length;i++){t1.setFont(new Font("黑体",Font.BOLD,15));t1.append(information1[i]+":"+information2[i]+"\n");}for(int i=0;i<course.length;i++){t1.setFont(new Font("黑体",Font.BOLD,15));t1.append(course[i]+":"+score[i]+"\n");}}else if(e.getSource()==btn2){information2[0]=text1.getText();information2[1]=text2.getText();information2[2]=text3.getText();information2[3]=text4.getText();score[0]=Integer.parseInt( text5.getText());score[1]=Integer.parseInt( text6.getText());score[2]=Integer.parseInt( text7.getText());score[3]=Integer.parseInt( text8.getText());int i,j,m;String coursename;for(i=0;i<score.length;i++){for(j=i+1;j<course.length;j++){if(score[i]>score[j]){m=score[j];score[j]=score[i];score[i]=m;coursename=course[i];course[i]=course[j];course[j]=coursename;}}}t1.setText("");for(i=0;i<information1.length;i++){t1.setFont(new Font("黑体",Font.BOLD,15));t1.append(information1[i]+":"+information2[i]+"\n");}for(i=0;i<course.length;i++){t1.setFont(new Font("黑体",Font.BOLD,15));t1.append(course[i]+" 成绩为:"+score[i]+"\n");}}if(e.getSource()==btn3){dispose();System.exit(0);}}}2.编写一个applet程序。

实验报告2面向对象编程基础

实验报告2面向对象编程基础
实验
准备
你为本次实验做了哪些准备:
仔细阅读《C#面向对象与程序设计》教材,熟悉C#语言环境和C#语言如何实现面向对象编程的基本思想.
实验
进度
本次共有3个练习,完成3个。
实验
总结

本次实验的收获、体会、经验、问题和教训:
通过课堂上跟随老师学习,课后认真阅读教材,跟同学讨论实验结果,上网查阅C#相关资料,通过周一下午的上机操作和其他时间的上机练习,把不会的问题都弄懂,终于完成了实验报告上的三个实验问题,以下是三个实验问题的具体实现过程。
教师
评语
问题1和问题2:
(问题2是在问题1基础上实现的)
问题3:
成绩
辽宁工程技术大学上机实验报告2
实验名称
面向对象编程基础
院系
姓名
实验
目的
简述本次实验目的:
1.掌握继承的工作机制和意义。
2.掌握派生类的定义方法和实现。
3.掌握base关键字的使用。
4.编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序。
5.掌握虚拟方法和重载方法的使用。
6.掌握抽象类和抽象方法的使用。

面向对象技术-实验报告

面向对象技术-实验报告

实验报告课程名称Java程序设计实验项目实验一类、对象与构造函数实验二派生类与继承系别___________理学院_____________专业/班级_________电技1302____________姓名______蔡超月____________实验日期_______________________成绩_______________________指导教师夏红科一、实验题目:实验一类、对象与构造函数实验二派生类与继承二、实验内容:(1)创建一个雇员类,该类中有数据成员有姓名、家庭住址和邮政编码等,其功能有修改姓名、显示数据信息。

要求:雇员类的定义作为.h保存雇员类功能函数的实现放在.cpp中。

雇员类的使用放在单独的.cpp文件中,该文件使用#include编译预处理命令包含类定义的头文件,在main()函数中使用雇员类创建几个对象并显示信息。

(2)定义一个哺乳动物类,再由此派生出人类、狗类和猫类,这些类中均有speak()函数,请设计相应的类层次结构并加以实现,观察在调用过程中,到底使用了哪个类的speak()函数。

(3)设计一个能细分为矩形、三角形、圆形和椭圆形的图形类,使用继承将这些图形分类,找出能作为基类部分的共同特征(如宽,高,中心点等)和方法(如初始化、求面积等),并设计多种继承模式来测试继承的属性。

三、程序清单及结果:(需要标明实现程序对应的实验内容,并给出合理的程序注释及运行结果)1)程序清单及注释内容1:#include<iostream>#include<string>using namespace std;class employee{protected:string name1;string address1;string shi1;string sheng1;string post1;char name[10];char address[20];char shi[10];char sheng[10];char post[7];int num;public:shuru();void changename(char str[]);void display();void moren(char n[],char s[],char c[],char p1[],char p2[]);};employee::shuru(){cout<<"请输入编号:";cin>>num;cout<<"请输入姓名:";cin>>name1;cout<<"请输入地址:";cin>>address1;cout<<"请输入所在市:";cin>>shi1;cout<<"请输入所在省:";cin>>sheng1;cout<<"请输入邮编:";cin>>post1;cout<<endl;cout<<endl;}void employee::moren(char n[],char s[],char c[],char p1[],char p2[]){strcpy(name,n);strcpy(address,s);strcpy(shi,c);strcpy(sheng,p1);strcpy(post,p2);cout<<"姓名:"<<name<<endl;cout<<"街道地址:"<<address<<endl;cout<<"所在市:"<<shi<<endl;cout<<"所在省:"<<sheng<<endl;cout<<"邮政编码:"<<post<<endl;}void employee::changename(char n[]){strcpy(name,n);}void employee::display(){cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name1<<endl;cout<<"街道地址:"<<address1<<endl;cout<<"所在市:"<<shi1<<endl;cout<<"所在省:"<<sheng1<<endl;cout<<"邮政编码:"<<post1<<endl;cout<<endl;}void main(){while(1){employee a;int num;cout<<"显示默认值请输入1:"<<endl;cout<<"修改参数请输入2:"<<endl;cout<<endl;cin>>num;if(num==1){a.moren("CCY","MYX","BJS","BJ","101500");cout<<endl;}else if(num==2){a.shuru();a.display();}else{cout<<"错误!!!"<<endl;cout<<endl;}}}内容2#include<iostream.h>#include<string.h>class Animal{float weight;public:void speak(){}void setWeight(float wt){weight = wt;}float getWeight(){return weight;}};class Human:public Animal{public:void speak(){cout<<"说话"<<endl;}};class Cat:public Animal{public:void speak(){cout<<"喵喵"<<endl;}};class Dog:public Animal{public:void speak(){cout<<"汪汪"<<endl;}};void main(){ // 定义三个对象Human hm;Cat cat;Dog dog; // 调用不同类的speak函数 cout<<"人:"; hm.speak();cout<<"猫:"; cat.speak();cout<<"狗:"; dog.speak();内容3:#include<iostream>using namespace std;class Figure // 定义基类图形类{public: // 公有函数成员Figure(int wid){width = wid;}float area(){}int getWidth(){return width;}private: // 私有数据成员int width; // 宽度或半径};class Rectangle:public Figure{ // 定义矩形类int height;public:Rectangle(int wid, int hei):Figure(wid){height = hei;}float area(){return getWidth() * height;}};class Triangle:public Figure{ // 定义三角形类int height;public:Triangle(int wid, int hei):Figure(wid){height = hei;}float area(){return 1.0/2* getWidth() * height;} };class Circle:public Figure{ // 定义圆类public:Circle(int wid):Figure(wid){}float area(){return 3.14 * getWidth() * getWidth();} };void main(){Rectangle rect(5,4);Triangle tri(5,4);Circle cir(5);cout<<"矩形的面积是:"<<rect.area()<<endl<<"三角形的面积是:"<<tri.area()<<endl<<"圆的面积是:"<<cir.area()<<endl;}}2)程序运行结果内容1:内容2:内容3:四、程序调试报告及总结在本次试验中,遇到了程序无法运行等现象,经检查发现是代码语法错误。

实验二 面向对象编程实验报告

实验二 面向对象编程实验报告

实验二面向对象编程实验报告一、实验目的本次实验旨在深入理解和掌握面向对象编程的基本概念和方法,通过实际编程操作,提高运用面向对象思想解决问题的能力,熟悉面向对象编程的开发流程和技巧,培养良好的编程习惯和代码规范。

二、实验环境本次实验使用的编程环境为具体编程环境名称及版本,操作系统为操作系统名称及版本。

三、实验内容(一)问题描述设计一个简单的学生管理系统,能够实现对学生信息(包括姓名、学号、年龄、成绩等)的录入、查询、修改和删除操作。

(二)类的设计1、设计一个`Student` 类,用于表示学生对象。

该类包含以下属性:`name`(姓名)、`student_id`(学号)、`age`(年龄)、`score`(成绩)。

2、为`Student` 类添加构造函数,用于初始化学生对象的属性。

3、为`Student` 类添加`get` 和`set` 方法,用于获取和设置学生对象的属性值。

(三)功能实现1、录入功能:实现用户输入学生信息,并创建`Student` 对象进行存储。

2、查询功能:根据学号或姓名查询学生信息,并输出查询结果。

3、修改功能:根据学号或姓名找到对应的学生对象,修改其属性值。

4、删除功能:根据学号或姓名删除对应的学生对象。

四、实验步骤(一)类的实现```javapublic class Student {private String name;private String studentId;private int age;private double score;public Student(String name, String studentId, int age, double score) {thisname = name;thisstudentId = studentId;thisage = age;thisscore = score;}public String getName(){return name;}public void setName(String name) {thisname = name;}public String getStudentId(){return studentId;}public void setStudentId(String studentId) {thisstudentId = studentId;}public int getAge(){return age;}public void setAge(int age) {thisage = age;}public double getScore(){return score;}public void setScore(double score) {thisscore = score;}}```(二)主函数实现```javaimport javautilArrayList;import javautilScanner;public class StudentManagementSystem {private ArrayList<Student> students;public StudentManagementSystem(){students = new ArrayList<>();}public static void main(String args) {StudentManagementSystem system = new StudentManagementSystem();Scanner scanner = new Scanner(Systemin);while (true) {Systemoutprintln("1、录入学生信息");Systemoutprintln("2、查询学生信息");Systemoutprintln("3、修改学生信息");Systemoutprintln("4、删除学生信息");Systemoutprintln("5、退出系统");int choice = scannernextInt();switch (choice) {case 1:systemaddStudent(scanner);break;case 2:systemqueryStudent(scanner);break;case 3:systemmodifyStudent(scanner);break;case 4:systemdeleteStudent(scanner);break;case 5:Systemoutprintln("感谢使用,再见!");Systemexit(0);default:Systemoutprintln("输入有误,请重新输入!");}}}//录入学生信息public void addStudent(Scanner scanner) {Systemoutprintln("请输入学生姓名:");String name = scannernext();Systemoutprintln("请输入学生学号:");String studentId = scannernext();Systemoutprintln("请输入学生年龄:");int age = scannernextInt();Systemoutprintln("请输入学生成绩:");double score = scannernextDouble();Student student = new Student(name, studentId, age, score);studentsadd(student);Systemoutprintln("学生信息录入成功!");}//查询学生信息public void queryStudent(Scanner scanner) {Systemoutprintln("请输入查询方式(1、按学号查询 2、按姓名查询):");int queryType = scannernextInt();if (queryType == 1) {Systemoutprintln("请输入学号:");String studentId = scannernext();for (Student student : students) {if (studentgetStudentId()equals(studentId)){Systemoutprintln("姓名:"+ studentgetName());Systemoutprintln("学号:"+ studentgetStudentId());Systemoutprintln("年龄:"+ studentgetAge());Systemoutprintln("成绩:"+ studentgetScore());return;}}Systemoutprintln("未找到该学号对应的学生信息!");} else if (queryType == 2) {Systemoutprintln("请输入姓名:");String name = scannernext();for (Student student : students) {if (studentgetName()equals(name)){Systemoutprintln("姓名:"+ studentgetName());Systemoutprintln("学号:"+ studentgetStudentId());Systemoutprintln("年龄:"+ studentgetAge());Systemoutprintln("成绩:"+ studentgetScore());return;}}Systemoutprintln("未找到该姓名对应的学生信息!");} else {Systemoutprintln("输入有误,请重新输入!");}}//修改学生信息public void modifyStudent(Scanner scanner) {Systemoutprintln("请输入修改方式(1、按学号修改 2、按姓名修改):");int modifyType = scannernextInt();if (modifyType == 1) {Systemoutprintln("请输入学号:");String studentId = scannernext();for (Student student : students) {if (studentgetStudentId()equals(studentId)){Systemoutprintln("请输入新姓名:");String newName = scannernext();Systemoutprintln("请输入新年龄:");int newAge = scannernextInt();Systemoutprintln("请输入新成绩:");double newScore = scannernextDouble();studentsetName(newName);studentsetAge(newAge);studentsetScore(newScore);Systemoutprintln("学生信息修改成功!");return;}}Systemoutprintln("未找到该学号对应的学生信息!");} else if (modifyType == 2) {Systemoutprintln("请输入姓名:");String name = scannernext();for (Student student : students) {if (studentgetName()equals(name)){Systemoutprintln("请输入新学号:");String newStudentId = scannernext();Systemoutprintln("请输入新年龄:");int newAge = scannernextInt();Systemoutprintln("请输入新成绩:");double newScore = scannernextDouble();studentsetStudentId(newStudentId);studentsetAge(newAge);studentsetScore(newScore);Systemoutprintln("学生信息修改成功!");return;}}Systemoutprintln("未找到该姓名对应的学生信息!");} else {Systemoutprintln("输入有误,请重新输入!");}}//删除学生信息public void deleteStudent(Scanner scanner) {Systemoutprintln("请输入删除方式(1、按学号删除 2、按姓名删除):");int deleteType = scannernextInt();if (deleteType == 1) {Systemoutprintln("请输入学号:");String studentId = scannernext();for (Student student : students) {if (studentgetStudentId()equals(studentId)){studentsremove(student);Systemoutprintln("学生信息删除成功!");return;}}Systemoutprintln("未找到该学号对应的学生信息!");} else if (deleteType == 2) {Systemoutprintln("请输入姓名:");String name = scannernext();for (Student student : students) {if (studentgetName()equals(name)){studentsremove(student);Systemoutprintln("学生信息删除成功!");return;}}Systemoutprintln("未找到该姓名对应的学生信息!");} else {Systemoutprintln("输入有误,请重新输入!");}}}```五、实验结果通过对程序的运行和测试,能够成功实现学生信息的录入、查询、修改和删除功能。

实验二 面向对象编程

实验二  面向对象编程

实验二面向对象编程一、实验目的:掌握类与对象的定义方法,成员函数的实现与调用方法,领会类实现数据隐藏与封装的原理。

二、实验时间:三、实验地点:四、实验内容:1、编写Circle类,有数据成员Radius,成员函数get_area()用于计算面积,get_perimeter()用于计算周长,disp( )用于显示面积和周长,set_radius()设置半径,get_radius()获取半径。

完善必要的构造函数,构造一个Circle的对象进行测试,对构造函数和析构函数的调用情况进行分析。

2、编写圆柱体类Cylinder,有数据成员Circlr对象和长度Len,成员函数get_vol() 计算体积,get_area()计算表面积。

完善必要的构造函数和拷贝构造函数,构造Cylinder的对象进行测试。

对构造函数,拷贝构造函数和析构函数的调用情况进行分析。

3、设计学生类Stu,含no(学号),name(姓名),deg(成绩)数据成员,成员函数有setdata()用于设置对象,disp()用于输出80—89分段学生数据。

在main()中定义对象数组,用于存储输入学生数据。

五、实验要求:在上机前写出全部源程序;六、实验结果分析:源程序及结果分析:1. Circle类#include <iostream>using namespace std;const float PI = 3.14;class Circle{public:Circle (float r);float set_radius();//设置半径,float get_radius();//获取半径。

float get_area();//用于计算面积,float get_perimeter();//用于计算周长,void disp( );//用于显示面积和周长,~Circle();private:float Radius;};Circle::Circle(float r){Radius = r;cout<<"构造函数调用成功"<<endl;}float Circle::set_radius()//用来设置圆的半径{float r;Radius = r;return Radius;}float Circle::get_radius()//用于获取圆的半径{return Radius;}float Circle::get_perimeter(){return 2*PI*Radius;}float Circle::get_area(){return PI*Radius*Radius;}void Circle::disp(){cout<<"The perimeter is "<<get_perimeter()<<endl;cout<<"The area is "<<get_area()<<endl;}Circle::~Circle(){cout<<"析构函数调用成功"<<endl;}int main(){Circle circle(5.5);cout<<"The Radius is 5.5"<<endl;circle.disp();return 0;}结果分析:2. 圆柱体类Cylinder#include<iostream>using namespace std;const float PI = 3.14;class Cylinder{public:Cylinder(float pCirclr,float pLen);Cylinder(Cylinder &c);float get_vol();float get_area();~Cylinder();private:float Circlr,Len;};Cylinder::Cylinder(float pCirclr,float pLen) {Circlr=pCirclr;Len=pLen;cout<<"构造函数调用成功"<<endl; }Cylinder::Cylinder(Cylinder &c){Circlr=c.Circlr;Len=c.Len;cout<<"拷贝构造函数调用成功"<<endl;}float Cylinder::get_vol(){return PI*Circlr*Circlr*Len;}float Cylinder::get_area(){return 2*PI*Circlr*Circlr+2*PI*Circlr*Len; }Cylinder::~Cylinder(){cout<<"析构函数调用成功"<<endl;}int main(){float pCirclr;float pLen;cout<<"Input r and high:";cin>>pCirclr;cin>>pLen;Cylinder c1(pCirclr,pLen);Cylinder c2(c1);cout<<"The volume is:"<<c2.get_vol()<<endl;cout<<"The area is:"<<c2.get_area()<<endl;return 0;}结果分析:3. Student 类#include<iostream>#include<string.h>using namespace std;class Student{public:Student();//构造函数void setdata(); //输入信息void disp(); //结果输出private:int no;char name[20];float deg;};Student::Student(){}void Student::setdata(){int pno;char pname[20];float pdeg;cin>>pno;cin>>pname;cin>>pdeg;no=pno;strcpy(name,pname);deg=pdeg;}void Student::disp(){if (deg<=89&deg>=80)cout<<"no:"<<no<<" name:"<<name<<" degree:"<<deg<<endl; }int main(){Student stu[4]; //申请对象数组for(int i=0;i<4;i++) //分别输入每个对象的信息{cout<<"Input number name deg:";stu[i].setdata();}for(int i=0;i<4;i++){stu[i].disp();}return 0;}结果分析:4.复数类#include <iostream>using namespace std;class Complex{public:Complex(); //构造函数void Input(); //输入实部和虚部int get_RealPart(); //获取实部int get_ImaginayPart(); //获取虚部void Disp(); //结果打印输出Complex(Complex &p);~Complex();private:int rp;int ip;};//构造函数Complex::Complex(){}//拷贝函数Complex::Complex(Complex &p){rp = p.rp;ip = p.ip;}//获取实部int Complex::get_RealPart(){return rp;}//获取虚部int Complex::get_ImaginayPart(){return ip;}//输入函数void Complex::Input(){cout<<"请输入复数的实部和虚部:";cin>>rp;cin>>ip;}//输出函数void Complex::Disp(){if(rp!=0&&ip!=0)cout<<"复数为:"<<rp<<"+"<<ip<<"i"<<endl;elsecout<<"复数为:"<<rp<<ip<<"i"<<endl;else if(rp==0&&ip!=0)cout<<"实部为0 复数为:"<<ip<<"i"<<endl;else if(rp!=0&&ip==0)cout<<"虚部为0 复数为:"<<rp<<endl;elsecout<<"实部和虚部都为0 复数为:0"<<endl;}//析构函数Complex::~Complex(){}int main(){Complex c; //申请对象c.Input();c.Disp();return 0;}结果分析:5.矩形类#include <iostream>using namespace std;class Point{public:void Input(); //坐标输入函数float get_x(); //获取横坐标float get_y(); //获取纵坐标private:float x,y;};class Rectangle{public:Rectangle(Point px, Point py); //构造函数void get_RectangleArea(); //计算面积函数void Disp(); //面积结构展示函数private:Point p1, p2;float RectangleArea;};Point::Point(){}//输入坐标void Point::Input(){cout<<"Input Coordinate (x, y): ";cin>>x>>y;}//获取横坐标float Point::get_x(){return x;}//获取纵坐标float Point::get_y(){return y;}//构造函数Rectangle::Rectangle(Point px, Point py){p1 = px;p2 = py;}//计算矩形的面积void Rectangle::get_RectangleArea(){float a,b;a = p1.get_x() - p2.get_x();b = p1.get_y() - p2.get_y();RectangleArea = a*b;}//面积结果打印void Rectangle::Disp(){cout<<"矩形的面积为:"<<RectangleArea<<endl; }int main(){Point p1, p2; //申请p1, p2两个对象p1.Input(); //输入第一个点的坐标p2.Input(); //输入另一个点的坐标Rectangle Area(p1, p2); //申请Area对象Area.get_RectangleArea();Area.Disp(); //计算结果打印return 0;}结果分析:6. 1~36随机选择不同的7个数#include <iostream>#include <cstdlib>#include <ctime>using namespace std;void GetRandNum(int *r) //生成一个在1~36间的整数{*r = rand()%36+1;}int main(){int a[7], n = 7;srand((int)time(0));cout<<"1~36中随机选7个不同数结果如下:"<<endl;while(1){int r = 0, k = 0;GetRandNum(&r);for(int i = 0; i<(7-n); i++){if(a[i] == r)k++; //如果生成的随机数等于以有的数则K加一}if(k==0) //k=0说明原先生成的数和此时生成的数不重复{a[7-n] = r; //将生成的数放入生生成数数组cout<<r<<" ";n--;if(n==0)return 0; //结束}}}结果分析:七、实验心得体会及问题反馈:本实验主要是对面向对象的编程。

面向对象的开发实训报告

面向对象的开发实训报告

一、实训背景随着信息技术的飞速发展,面向对象编程已成为当今软件开发的主流技术。

为了提高我们的编程能力和实际项目经验,我们选择了面向对象开发作为实训内容。

本次实训以Java语言为基础,结合实际项目需求,学习并实践面向对象编程的方法和技巧。

二、实训目标1. 掌握面向对象编程的基本概念和原理;2. 熟悉Java语言的基本语法和常用类库;3. 能够运用面向对象的方法设计、实现和维护软件系统;4. 培养团队协作和沟通能力。

三、实训内容1. 面向对象编程基本概念(1)面向对象的基本特征:封装、继承、多态;(2)面向对象的基本原理:抽象、类、对象、继承、多态、接口;(3)面向对象的设计模式:单例模式、工厂模式、观察者模式等。

2. Java语言基础(1)Java语言的基本语法;(2)常用类库:String、ArrayList、HashMap等;(3)异常处理、多线程编程。

3. 面向对象设计实现(1)设计一个简单的面向对象系统,包括用户管理、权限管理、数据管理等模块;(2)运用面向对象的设计原则和设计模式,提高代码的可读性、可维护性和可扩展性;(3)使用UML图进行需求分析和系统设计。

4. 项目实践(1)根据实际需求,设计并实现一个具有实际应用价值的软件系统;(2)在项目开发过程中,注重团队协作和沟通,提高项目进度和质量;(3)学会使用版本控制工具,如Git,进行代码管理。

四、实训过程1. 阶段一:理论学习(1)通过阅读教材、参考书籍和网上资料,学习面向对象编程的基本概念和原理;(2)通过课堂讲解和课后练习,掌握Java语言的基本语法和常用类库。

2. 阶段二:系统设计(1)分析项目需求,确定系统功能模块;(2)运用面向对象的设计原则和设计模式,进行系统设计;(3)使用UML图描述系统架构和类关系。

3. 阶段三:代码实现(1)根据系统设计,编写Java代码实现各个模块的功能;(2)在编写代码过程中,注意代码规范和性能优化;(3)使用版本控制工具进行代码管理。

面向对象程序设计实验2

面向对象程序设计实验2

《实验07:类与对象》实验报告实验序号:07 实验项目名称:类与对象学号姓名专业、班实验地点指导教师实验时间一、实验目的及要求类是C++扩展数据类型,可以封装不同类型的数据成员和函数成员,类是面向对象程序设计的基础。

本次实验内容包括面向对象的基本概念、构造函数与析构函数,从实际问题抽象出类等,通过实验要求:1、掌握面向对象的基本概念,类的定义方法;2、掌握类成员的访问权限及访问类成员的方法;3、掌握内联函数;4、掌握引用概念及应用,引用作为函数参数;5、掌握构造函数与析构函数的意义及使用方法。

6、掌握友员函数、友员类的使用,以及运算符重载为成员函数和友元函数的方法。

二、实验设备(环境)及要求微型计算机;windows 操作系统;Microsoft Visual Studio 6.0集成开发环境;Microsoft Visual Studio 6.0集成开发环境的MSDN。

三、实验内容与步骤1、【范例】设计一个程序,定义一个矩形类,包括数据成员和函数成员。

【提示】要求有构造函数、析构函数,完成赋值、修改、显示等功能的接口,并编写main函数测试,要求用一个对象初始化另一个对象。

【分析】要确定一个矩形(四边都是水平或垂直方向,不能倾斜),只要确定其左上角和右下角的x 和y 坐标即可,因此应包括四个数据成员,eft,right,top,bottom,即左右上下四个边界值。

由构造函数对数据成员赋值,赋值函数完成未初始化的矩形赋值,修改函数可以修改各数据成员,显示函数则画出该矩形。

class Rectangle {int left, top ;int right, bottom;public:Rectangle(int l=0, int t=0, int r=0, int b=0);~ Rectangle(){};//析构函数,在此函数体为空void Assign(int l, int t, int r, int b);void SetLeft(int t){ left = t;} // 以下四个函数皆为内联成员函数void SetRight( int t ){ right = t;}void SetTop( int t ){ top = t;}void SetBottom( int t ){ bottom = t;}void Show();void Draw( CDC* pDC);};// 将上述内容保存为rect.h#include <iostream.h>#include “rect.h”// 构造函数,带缺省参数,缺省值为全0,在声明中指定Rectangle::Rectangle(int l , int t, int r, int b) {left = l; top = t;right = r; bottom = b;}void Rectangle::Assign(int l, int t, int r, int b){left = l; top = t;right = r; bottom = b;}void Rectangle::Show(){cout<<”left-top point is (”<<left<<”,”<<top<<”)”<<’\n’;cout<<”right-bottom point is (”<<right<<”,”<<bottom<<”)”<<’\n’;}void Rectangle::Draw(CDC * pDC){pDC->Rectangle(left, top, right, bottom );}// 将上述内容保存为rect.cpp#include <iostream.h>#include “rect.h”void main(){Rectangle rect;rect.Show();rect.Assign(100,200,300,400);rect.Show();Rectangle rect1(0,0,200,200);rect1.Show();Rectangle rect2(rect1);rect2.Show();}// 将上述内容保存为Exp.cpp【提示】Draw成员函数需要一个CDC指针参数,CDC是MFC中的设备上下文类,控制程序的图形输出,其成员函数Rectangle输出一个矩形,在这里不作要求。

实验二面向对象编程实验报告材料

实验二面向对象编程实验报告材料

实验二面向对象编程1.实验目的(1)掌握类与对象基本知识;(2)Java中的继承机制及包(package)、接口(interface)等的设计方法;(3)掌握static、this、super等关键字的使用;(4)掌握Java中两种比较器的用法。

2.实验内容实验题1 定义一个类Book,包含两个属性:一个是private的String类型的属性title、一个是private 的float类型的属性listPrice,封装这两个属性的四个方法setTitle()和getTitle()、setListPrice( )和geListPrice()。

基本要求:(1)设计类Book及类BookManagement,在类BookManagement中输出Book类的对象的两个private 属性;(2)重写父类的toString()方法,实现Book类实例的两个属性的输出。

实验结果:实验过程:首先建立一个Books工程,再建立俩个类Book和Bookmanagement。

在Book类中,有俩个属性:一个是private的String类型的属性title、一个是private的float类型的属性listPrice,使用getter和setter生成四个方法setTitle()和getTitle()、setListPrice( )和geListPrice()。

最后重写Tostring函数。

在Bookmanagement中有主函数,使用JOptionPane.showMessageDialog(null,book)函数使之用对话框形式输出代码如下:package book;public class Book {private String title;private float listPrice;public Book(String title, float listPrice) {super();this.title = title;this.listPrice = listPrice;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public float getListPrice() {return listPrice;}public void setListPrice(float listPrice) {this.listPrice = listPrice;}@Overridepublic String toString() {return"title:" + getTitle() + ",Price:" + getListPrice();}}package book;import javax.swing.JOptionPane;public class Bookmanagement{/*public static void output1(Book book){System.out.println("请输出book的title:" + book.getTitle());System.out.println("请输出book的listPrice:" + book.getListPrice());}public static void output2(Book book){System.out.println( book.toString());}*/public static void main(String[] args){Book book = new Book("How to programing in Java",89.9f);JOptionPane.showMessageDialog(null,book);//output1(book);//output2(book);}}实验题2 有两个类:MobileManagement和Mobile,分别描述如图3.4所示两部手机名称及价格,类MobileManagement在包.nwsuaf.jp.p3中,而Mobile在包.nwsuaf.jp.p3.data中。

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

实验二面向对象编程1.实验目的(1)掌握类与对象基本知识;(2)Java中的继承机制及包(package)、接口(interface)等的设计方法;(3)掌握static、this、super等关键字的使用;(4)掌握Java中两种比较器的用法。

2.实验容实验题1 定义一个类Book,包含两个属性:一个是private的String类型的属性title、一个是private 的float类型的属性listPrice,封装这两个属性的四个方法setTitle()和getTitle()、setListPrice( )和geListPrice()。

基本要求:(1)设计类Book及类BookManagement,在类BookManagement中输出Book类的对象的两个private 属性;(2)重写父类的toString()方法,实现Book类实例的两个属性的输出。

实验结果:实验过程:首先建立一个Books工程,再建立俩个类Book和Bookmanagement。

在Book类中,有俩个属性:一个是private的String类型的属性title、一个是private的float类型的属性listPrice,使用getter和setter生成四个方法setTitle()和getTitle()、setListPrice( )和geListPrice()。

最后重写Tostring函数。

在Bookmanagement中有主函数,使用JOptionPane.showMessageDialog(null,book)函数使之用对话框形式输出代码如下:package book;public class Book {private String title;private float listPrice;public Book(String title, float listPrice) {super();this.title = title;this.listPrice = listPrice;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public float getListPrice() {return listPrice;}public void setListPrice(float listPrice) {this.listPrice = listPrice;}Overridepublic String toString() {return"title:" + getTitle() + ",Price:" + getListPrice();}}package book;import javax.swing.JOptionPane;public class Bookmanagement{/*public static void output1(Book book){System.out.println("请输出book的title:" + book.getTitle());System.out.println("请输出book的listPrice:" + book.getListPrice());}public static void output2(Book book){System.out.println( book.toString());}*/public static void main(String[] args){Book book = new Book("How to programing in Java",89.9f);JOptionPane.showMessageDialog(null,book);//output1(book);//output2(book);}}实验题2 有两个类:MobileManagement和Mobile,分别描述如图3.4所示两部手机名称及价格,类MobileManagement在包.nwsuaf.jp.p3中,而Mobile在包.nwsuaf.jp.p3.data中。

基本要求:设计相关类,使程序能够显示两部手机的价格和数量,运行结果如图3.5。

E365, 1780 RMB M330, 1450 RMB图3.4 手机及价格图图3.5 运行结果实验结果:实验过程:首先建立一个Mobiles工程,再建立俩个类Mobile和MobileManagement。

在Mobile类中,有俩个属性:一个是private的String类型的属性name、一个是private的float类型的属性price,使用getter和setter 生成四个方法setName()和getName()、setPrice( )和gePrice()。

最后重写Tostring函数。

在MobileManagement中有主函数,使用JOptionPane.showMessageDialog(null,phone1 + "\n" + phone2 + "\n" + "There are " + count + " mobile phones.")函数使之用对话框形式输出代码如下:.nwsuaf.jp.p3.data;public class Mobile {private String name;private int price;public Mobile(String name,int price) {super(); = name;this.price = price;}public String getName() {return name;}public void setName(String name) { = name;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}Overridepublic String toString() {return getName() + " " + getPrice() + " RMB";}}.nwsuaf.jp.p3;import javax.swing.JOptionPane;.nwsuaf.jp.p3.data.Mobile;public class MobileManagement{static int count = 0;public static void output(Mobile phone){System.out.println( phone.toString());}public static void main(String[] args){Mobile phone1 = new Mobile("E365",1780);count++;Mobile phone2 = new Mobile("M330",1450);count++;System.out.println();JOptionPane.showMessageDialog(null,phone1 + "\n" + phone2 + "\n" + "There are " + count + " mobile phones.");}}实验题3 有四个类,主类Store在包.nwsuaf.jp.p4中,Mobile、Mp3Player、Product在包.nwsuaf.jp.p4.data中,Mobile、Mp3Player是Product的子类,Product类为抽象类。

基本要求:设计类Mobile和类MP3Player,使它们和类Product、Store组成一个完整的程序,且运行结果如图3.6所示。

图3.6 运行结果实验结果:实验过程:首先在建立一个store的工程,在包.nwsuaf.jp.p4.data中建立是那个类Mobile、Mp3Player、Product。

在包.nwsuaf.jp.p4中建立类Store。

各个累的结构如下:再在主函数中实例化对象,在用对话框形式输出。

代码如下:.nwsuaf.jp.p4.data;public abstract class Product {private String Name;private double price;public Product(String name, double price) { super();Name = name;this.price = price;}public String getName() {return Name;}public void setName(String name) {Name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}Overridepublic String toString() {return getName() + "," + getPrice() + " RMB";}public abstract void output(Product p);}.nwsuaf.jp.p4.data;public class Mp3Player extends Product{public Mp3Player(String name, double price) {super(name, price);}Overridepublic void output(Product p) {// TODO Auto-generated method stubSystem.out.println( Mp3Player.class.toString());}}.nwsuaf.jp.p4.data;public class Mobile extends Product{public Mobile(String name, double d) {super(name, d);}Overridepublic void output(Product p) {System.out.println( Mobile.class.toString());}}import javax.swing.JOptionPane;.nwsuaf.jp.p4.data.Mobile;.nwsuaf.jp.p4.data.Mp3Player;.nwsuaf.jp.p4.data.Product;public class Store {/*** param args*/public static int count = 0;public static void main(String[] args) {Mp3Player p1 = new Mp3Player("Meizo X3 (256MB)",399.0);Mp3Player p2 = new Mp3Player("Meizo E5 (512MB)",580.0);Mp3Player p3 = new Mp3Player("Xlive XM Mp3Play(256MB)",930.0);Mobile m1 = new Mobile("E365 on China Mobile",1780.0);Mobile m2 = new Mobile("E3330 on China Mobile",1450.0);Product[] products = {p1,p2,p3,m1,m2};String text = "";for(int i = 0; i < products.length; ++i){text += products[i]+"\n";count ++;}JOptionPane.showMessageDialog(null,"The products are:\n\n"+text+"\nThere are "+ count +" products.");}}实验题4 有四个类,主类Store在包.nwsuaf.jp.p4中,Mobile、Mp3Player、Product在包.nwsuaf.jp.p4.data中,Mobile、Mp3Player是Product的子类, Product类实现Comparable接口,请重写Comparable接口中方法compareTo,实现product对象按照价格排序,运行结果如图3.8所示。

相关文档
最新文档