实验02 面向对象编程
- 格式:doc
- 大小:474.00 KB
- 文档页数:9
面向对象的方法有哪些面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将问题分解为对象,并通过对象之间的交互来解决问题。
在面向对象编程中,我们使用类(class)和对象(object)来组织和管理代码,从而实现代码的封装、继承和多态。
面向对象的方法有以下几种:1. 封装(Encapsulation):封装是面向对象编程的基本特征之一。
它指的是将相关的属性和行为(方法)组合在一起,形成一个对象。
封装可以隐藏对象的内部细节,只提供一些外部接口,从而提高代码的可维护性和重用性。
2. 继承(Inheritance):继承是面向对象编程的另一个重要特征。
它通过创建一个新的类(子类)来继承已有类(父类)的属性和方法。
子类可以继承父类的所有非私有成员,并且可以添加自己的成员。
继承可以实现代码的重用和扩展。
3. 多态(Polymorphism):多态是面向对象编程的核心概念之一。
它指的是同一个类的实例在不同的情况下表现出不同的行为。
多态的实现方式包括函数重载和函数重写。
多态可以提高代码的灵活性和可扩展性。
4. 抽象(Abstraction):抽象是将具体的事物抽象成一般性的概念或模板。
在面向对象编程中,抽象是通过接口(interface)和抽象类(abstract class)来实现的。
接口定义了一组方法的签名,抽象类则提供了部分或者完整的方法实现。
抽象可以帮助我们定义通用的行为,并且使得程序具有更高的可复用性。
5. 组合(Composition):组合是指通过将一个类的对象作为另一个类的成员来组合两个类的关系。
组合可以实现部分和整体之间的关系,从而提高代码的灵活性和可维护性。
6. 封装(Encapsulation):封装是将对象的属性和方法封装起来,以隐藏内部实现的细节。
通过封装,对象对外只暴露有限的接口,隐藏了实现的细节,并且可以添加必要的验证和保护机制,提高代码的可靠性和安全性。
舉申科按衣專课程实验报告课程名称:面向对象程序设计院系:专业班级:____________学号:__________姓名:_______________指导教师:____________实验一.面向过程的整型栈编程 (1)1. 需求分析 (1)1.1题目要求 (1)1.2需求分析 (1)2. 系统设计 (2)2.1概要设计 (2)2.2详细设计 (3)4. 软件测试 (4)5. 特点与不足 (4)5.1技术特点 (4)5.2不足和改进的建议 (5)6. 过程和体会 (5)6.1遇到的主要问题和解决方法 (5)6.2课程设计的体会 (5)7. 源码和说明 (5)7.1文件清单及其功能说明 (5)7.2用户使用说明书 (5)7.3源代码 (5)实验二.面向对象的整型栈编程 (12)1. 需求分析 (12)1.1题目要求 (12)1.2需求分析 (12)2. 系统设计 (13)2.1概要设计 (13)2.2详细设计 (13)3. 软件开发 (14)4. 软件测试 (14)5. 特点与不足 (14)5.1技术特点 (14)5.2不足和改进的建议 (15)6. 过程和体会 (15)7. ......................................................................................................................................... 源码和说明. (15)7.1文件清单及其功能说明 (15)7.2用户使用说明书 (15)7.3源代码 (15)实验三.基于算符重载的整型栈编程 (19)1. 需求分析 (19)1.1题目要求 (19)1.2需求分析 (19)2. 系统设计 (20)2.1概要设计 (20)2.2详细设计 (20)3. 软件开发 (20)4. 软件测试 (20)5. 特点与不足 (21)5.1技术特点 (21)5.2不足和改进的建议 (21)6. 过程和体会 (21)6.1遇到的主要问题和解决方法 (21)6.2课程设计的体会 (21)7. 源码和说明 (21)7.1文件清单及其功能说明 (21)7.2用户使用说明书 (21)7.3源代码 (21)实验四.面向对象的整型队列编程 (25)1. 需求分析 (25)1.1题目要求 (25)1.2需求分析 (25)2. 系统设计 (26)3. 软件开发 (26)4. 软件测试 (26)5. 特点与不足 (26)5.1技术特点 (26)5.2不足和改进的建议 (26)6. 过程和体会 (26)6.1遇到的主要问题和解决方法 (26)6.2课程设计的体会 (27)7. ..................................................................................................................................... 源码和说明 (27)7.1文件清单及其功能说明 (27)7.2用户使用说明书 (27)7.3源代码 (27)实验五.基于组合的整型队列编程 (31)1. 需求分析 (31)1.1题目要求 (31)1.2需求分析 (31)2. 系统设计 (31)3. 软件开发 (32)4. 软件测试 (32)5. 特点与不足 (32)5.1技术特点 (32)5.2不足和改进的建议 (32)6. 过程和体会 (32)6.1遇到的主要问题和解决方法 (32)6.2课程设计的体会 (32)7. 源码和说明 (33)7.1文件清单及其功能说明 (33)7.2用户使用说明书 (33)7.3源代码 (33)实验六.基于继承的整型队列编程 (37)1. 需求分析 (37)1.1题目要求 (37)1.2需求分析 (38)2. 系统设计 (38)3. 软件开发 (38)4. 软件测试 (38)5. 特点与不足 (38)5.1技术特点 (38)5.2不足和改进的建议 (38)6. 过程和体会 (39)7. .......................................................................................................................................... 源码和说明. (39)7.1文件清单及其功能说明 (39)7.2用户使用说明书 (39)7.3源代码 (39)实验一.面向过程的整型栈编程1. 需求分析1.1题目要求整型栈是一种先进后出的存储结构,对其进行的操作通常包括判断栈是否为空、向栈顶添加一个整型元素、出栈等。
Java的面向对象编程思想Java是一门流行的编程语言,其被广泛应用于各种领域。
与其它编程语言相比,Java有其独特的面向对象编程思想。
面向对象编程强调的是程序的对象,而不是程序的函数或指令。
这种编程思想使得Java在软件开发中越发重要。
一、什么是面向对象编程思想?在Java编程中,面向对象编程思想是基础。
面向对象编程(OOP)是一种程序设计模式,其中程序看作是一系列对象,每个对象都可以接收数据、处理数据和传递数据。
OOP将数据和方法捆绑在一起,使得数据和方法能够共同操作,对象有助于降低软件的复杂性并强化代码的重用性。
二、Java的基础数据类型Java有两类数据类型:基本数据类型和引用数据类型。
基本数据类型代表的是单一值,例如布尔型、字符型、整型和浮点型。
引用数据类型代表的是对现实世界中的事物进行的抽象。
这些事物可以指对象、集合和数组等复杂的数据结构。
三、Java的面向对象编程实现Java编程中,作为程序员,首先要学会如何写类。
一个类表示了一个对象的行为和属性,同时还定义了该对象的方法。
例如,我们可以定义一个名为Person_class的类,其中包含属性name、age和gender。
我们还可以定义一个set_name()方法来设置该对象的name属性。
Java通过继承实现代码重用。
通过继承,子类可以从父类继承属性和方法。
这使得代码可重用性更高。
子类可以通过继承获得父类的方法,并且还可以添加新的方法和属性。
Java中,一个类只能继承一个父类,但是可以实现多个接口。
Java还支持多态。
Java中,多态指对象可以具有多种形式,可以是父类或子类的对象。
这使得代码可以更加灵活。
多态性可以通过向上转型、方法重载和方法覆盖来实现。
四、Java的封装封装是OOP的基本概念之一,它是指隐藏对象的内部细节,同时只提供公共API以供外部使用。
Java中的封装通常通过访问控制符来实现。
Java的访问控制符有public、private、protected和default。
C++面向对象程序设计实验指导书(第三版)(适用于理工科)学号:姓名:班级:指导老师:计算机系2019年7月实验1 C++程序的运行环境和运行C++程序的方法一、实验目的和要求1.熟悉VS2015的集成开发环境;2.学会使用VS2015编辑、编译、连接和运行C++程序;3.通过运行简单的C++程序,初步了解C++源程序的结构和特点;4.学会使用简单的输入输出操作。
二、实验内容1.编辑、编译、连接和运行以下的C++程序#include<iostream>using namespace std;int main(){cout<<"Hello!\n";cout<<"This is a program."<<endl;return 0;}2.编译下列程序,改正所出现的错误信息,并写出输出结果。
(1)#include<iostream>using namespace std;int main(){cin>>a;int b=3*a;cout<<"b=<<b<<\n";return 0;}(2)int main(){cout<<"Hello!\n";cout<<"Welcome to C++!";}(3)#include<iostream>using namespace std;int main(){int x,y;x=5;y=6;int z=x*y;cout<<"x*y="<<z<<endl;return 0;}3.请填空完成以下程序,并上机调试正确,写出运行结果。
#include<iostream>using namespace std;int add(int a,int b);int main(){int x,y,sum;cout<<"Enter two numbers:”<<’\n’;//在下划线处填上语句,完成用cin读入x和y__________________________________________sum=add(x,y);cout<<”The sum is:”<<sum<<’\n’;return 0;}int add(int a,int b){//在下划线处填上语句,完成计算a与b的和并返回之_________________________}实验2 C++简单程序设计练习一、实验目的和要求1.进一步熟悉VS2015的集成开发环境。
面向对象程序设计的方法面向对象程序设计(Object-Oriented Programming,简称OOP)是一种程序设计方法,它以对象为基本单位,通过封装、继承和多态等概念来组织和管理代码。
以下是一些常用的面向对象程序设计方法:1.封装(Encapsulation):封装是将数据和操作封装在一个对象中的过程。
通过封装,对象可以隐藏内部实现细节,并提供公共接口供其他对象进行交互。
封装有助于提高代码的可维护性、重用性和安全性。
2.继承(Inheritance):继承是指一个类可以继承另一个类的属性和方法。
通过继承,子类可以拥有父类的特性,并可以在此基础上添加、修改或覆盖功能。
继承有助于代码的重用和组织,同时支持创建层次结构和多态性。
3.多态(Polymorphism):多态是指同一个方法可以根据调用的对象不同而表现出不同的行为。
多态可以通过继承和接口实现。
它允许不同类型的对象对同一个方法进行不同的实现,提高代码的灵活性和扩展性。
4.抽象(Abstraction):抽象是将问题领域的实体和行为抽象化为类和方法的过程。
通过抽象,可以从复杂的现实世界中提取出关键概念和通用行为,以简化设计和实现过程。
抽象有助于构建更高层次的模型和逻辑结构。
5.接口(Interface):接口定义了一组方法的规范,但不提供具体的实现。
通过接口,可以定义对象之间的约定和交互方式,实现了代码的松耦合和可替换性。
接口可以用于实现多态性和组件的独立开发。
6.类(Class):类是对象的蓝图或模板,描述了对象的属性和行为。
通过类,可以创建具体的对象实例,并对其进行操作。
类是面向对象编程的基本单位,用于组织和封装相关的数据和方法。
1) 观看老师运行一个简单的java聊天程序。
2) 新建一个Hello.java程序,在控制台打印“欢迎使用本聊天系统!”。
3) 新建一个Test类,在test类中打印下面表达式的运算结果,设a=3,b=-5,f=true:(1) --a % b ++ (2) (a>=1&&a<=12?a:b)4) 阅读TestWhat的源代码,编译并运行,并在老师的要求下使代码规范化。
5) 编写并运行一个字符界面的Java Application,接收用户输入的一个字符,并把该字符打印在屏幕上。
6) 新建一个工程,新建一个包(basic),新建一个类,在类里面写一个方法用来判断三角形的三条边能否构成三角形,并要求能判断出是等腰等边还是普通三角形,在main函数里面实例化对象,调用该方法。
7) 新建另一包(test),然后新建另一个类,测试能不能调用步骤1中的方法.8)Java API有一个类java.util.GregorianCalendar,可用来获得某个日期的年、月、日,用无参数的构造函数创建当前日期的实例,get(GregorianCalendar.YEAR),get(GregorianCalendar.MONTH),get(GregorianCalendar.DAY_OF_MONTH)返回日期的年、月、日。
写程序显示当前的年、月、日。
9)创建聊天程序中的用户类(User),用户拥有自己的名称、出生年份、年龄、密码等信息。
其中年龄要通过出生年份计算出来。
10)考虑以上User类各种方法的访问性,并设计出合理的访问控制修饰符。
11)定义矩形类和它的子类正方形类,并增加一个Printable接口,用于以字符和图形的方式打印矩形和正方形的信息。
(1)定义矩形类,用户输入矩形的长与宽,程序计算其面积和周长;(2)定义矩形类的派生类---正方形类。
正方形类的操作同样是求周长和面积;(3)定义一个接口Printable,其中包括一个方法printWay(),这个方法没有形参,返回值为空;(4)改写矩形类,使之实现Printable接口,用printWay()将矩形的相关信息(长、宽、周长、面积)打印在屏幕上;(5)改写正方形类,重载printWay()方法,将正方形的边长、周长、面积打印在屏幕上;(6)在Printable接口中增加一个新的printWay(char)方法,并改写矩形类、正方形类定义。
《面向对象程序设计》实验指导书(新)《面向对象程序设计》实验指导书一、课程教学与实验教学计划学时比:48/16二、适用专业:信息管理与信息系统三、实验目的基本要求能够充分理解面向对象程序设计的思想和应用方法。
能够使用面向对象编程语言进行相应的程序设计和开发。
理解面向对象的基本思想、概念和特性以及面向对象的分析、建模、设计技术与方法。
掌握C++语言基本构成、类与对象、消息传递与函数、函数与运算符重载、继承性、多态性与虚拟函数、数据封装和隐藏及Windows 程序设计基础。
通过实验动手实践,使学生能够掌握面向对象程序设计的特征和基本思想,以及相应的具体实现和Windows程序设计基础知识。
四、实验内容实验一:循环控制(一)实验目的要求:熟悉VC++集成开发环境,学习使用控制台应用程序;创建工程,建立可执行文件并执行,观察结果。
掌握变量的声明和定义方法,掌握循环语句和条件语句的定义、作用和使用方法。
(二)实验设备:1.服务器;2.交换机;3.计算机。
(三)实验内容:1.编程求1!+2!+3!+4!+…+12!。
2.编程求所有的3位数素数,且该数是对称的。
所谓“对称”是指一个数,倒过来还是该数。
例如,375不是对称数,因为倒过来变成了573。
实验二:递归函数(一)实验目的要求:掌握函数的概念和使用方法,掌握递归函数的概念和使用方法。
(二)实验设备:1.服务器;2.交换机;3.计算机。
(三)实验内容:1.用递归函数来求1!+2!+3!+…+12!。
2.用递归的方法建立一个函数int fibonacci(int n),求Fibonacci数列中第n个数的值。
实验三:用气泡法排序(一)实验目的要求:掌握文件读写的方法,掌握递归函数的概念和使用方法。
(二)实验设备:1.服务器;2.交换机;3.计算机。
(三)实验内容:建立一个文件,文件中包含一系列数,用这些数构成一个数组,并按照数值,为这个数组从小到大排序,把排序结果输出到另一个文件中。
实验四 Java语言面向对象基础编程一、实验目的1.理解Java语言是如何体现面向对象编程基本思想,2.了解类的封装方法,以及如何创建类和对象,3.了解成员变量和成员方法的特性。
二、实验内容1.类的定义、封装和对象创建的使用。
编写一个Java应用程序,该程序中有3个类:Trangle、Leder和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。
具体要求如下:(1)Trangle类具有类型为double的三个边,以及周长、面积属性,Trangle类具有返回周长、面积以及修改三个边的功能。
另外,Trangle类还具有一个boolean 型的属性,该属性用来判断三个属能否构成一个三角形。
(2)Lader类具有类型double的上底、下底、高、面积属性,具有求面积的功能。
(3)Circle类具有类型为double的半径、周长和面积属性,具有求周长、面积的功能。
package exercise;class Trangle{double sideA,sideB,sideC,area,length;boolean boo;//带三个参数的构造函数public Trangle(double a,double b,double c) {sideA=a;//参数a,b,c 分别赋值给sideA,sideB,sideCsideB=b;sideC=c;if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){//a,b,c 构成三角形的条件表达式boo=true;//给boo 赋值。
}else{boo=false;//给boo 赋值。
}}double getLength(){return sideA+sideB+sideC;//方法体,要求计算出length 的值并返回}//计算三角形的面积publicdouble getArea(){if(boo){double p=(sideA+sideB+sideC)/2.0;area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));return area;}else{System.out.println("不是一个三角形,不能计算面积");return 0;}}publicvoid setABC(double a,double b,double c){sideA=a;//参数a,b,c 分别赋值给sideA,sideB,sideCsideB=b;sideC=c;if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){//a,b ,c 构成三角形的条件表达式boo=true;//给boo 赋值。
面向对象编程java课程设计一、课程目标知识目标:1. 让学生掌握面向对象编程的基本概念,如类、对象、继承、封装和多态;2. 使学生了解Java语言中面向对象编程的基本语法和结构;3. 帮助学生理解面向对象编程在实际软件开发中的应用场景和优势。
技能目标:1. 培养学生运用Java语言编写面向对象程序的能力;2. 使学生能够运用继承、封装和多态等面向对象编程技术进行程序设计;3. 培养学生分析问题、设计并实现面向对象解决方案的能力。
情感态度价值观目标:1. 激发学生对编程的兴趣,提高他们学习Java语言的积极性;2. 培养学生良好的编程习惯,强调代码规范和程序结构的重要性;3. 培养学生的团队协作能力,让他们在编程实践中学会分工与协作。
分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能够独立编写简单的面向对象Java程序;2. 学生能够利用面向对象编程技术解决实际问题;3. 学生能够在团队项目中发挥自己的优势,与团队成员共同完成项目任务;4. 学生能够理解面向对象编程在实际应用中的价值,提高编程兴趣和自信心。
二、教学内容1. 面向对象编程基本概念:介绍类、对象、属性、方法等基本概念,以及面向对象编程的特点和优势。
教材章节:第一章 面向对象编程概述2. Java类与对象:讲解如何定义类、创建对象,以及对象的初始化和引用。
教材章节:第二章 Java类与对象3. 继承与多态:阐述继承的概念、实现方法,以及多态的原理和应用。
教材章节:第三章 继承与多态4. 封装:介绍封装的概念,讲解如何通过访问权限控制、构造方法等实现封装。
教材章节:第四章 封装5. Java集合框架:介绍Java集合框架的基本概念,如List、Set、Map等,以及集合的使用场景。
教材章节:第五章 Java集合框架6. 异常处理:讲解异常处理的基本概念、分类,以及如何使用try-catch语句进行异常处理。
面向对象程序设计(C++)实验指导一、实验环境本实验基于当前主流的面向对象开发平台,编码规范遵循主流的参考规范。
二、编程语言和开发工具C++语言,开发工具不限,建议使用Visual C++ 6.0版本三、编码规范(编码规范的要求)要求遵循良好的的程序设计习惯来设计实验和编写代码。
(注:如果你将程序的很多功能全部放在一个长长的main()主函数中实现,这样的程序设计和编码风格会被扣分,请将不同的功能模块分别用函数来实现。
)1.在实验过程中应注意培养规范的编码风格:2.标识符的命名应要求达到顾名思义的程度,一看就知道用来做什么;3.提供足够的注释,注释文字清晰明了;4.程序排版的要求:a)不同功能模块用空行分隔,使功能块一目了然;b)基本上一条语句一行;同一层次的语句统一缩进对齐。
四、实验见后文……五、注意事项所有实验要求独立完成,同学之间可以讨论,但严禁抄袭,若发现雷同,抄袭者和被抄袭者此次实验成绩均记零分。
实验一 C++基础 (2课时)实验目的和要求:1. 掌握C++程序的基本格式与规范,学会编写简单的C++程序。
2. 理解C++程序结构的特点。
3. 熟悉C++程序的基本输入输出操作。
4. 掌握内联函数的使用方法。
5. 掌握函数重载的定义和使用方法。
6. 掌握C++内存的动态分配与释放方法。
7. 理解引用的概念,掌握引用的使用方法。
预习内容:cin/cout 的使用;new 和delete 的使用;函数重载;const 常量。
实验内容:1、用内联函数编写Fibonacci 级数,使用if 语句判断函数的出口,在程序中用cout 语句输出提示信息,Fibonacci 级数的公式为:⎩⎨⎧>-+-==2)2()1(2,11)(n n fib n fib n n fib 内联函数inline int fib(int n)。
2、程序Ex_Swap 实现数据交换。
分别用指针和引用作为函数mySwap 的形参,并通过重载int 、double 型变量值的交换。
C#基础知识.NET/DOTNET:一般指.NET FRAMEWORK框架,一种平台,一种技术C#(sharp):一种编程语言,可以开发基于.NET平台的应用一个解决方案下面可以有多个项目,项目可以包含多个文件,文件中是我们写的程序在文件中,命名空间中可以包含类,类中可以包含方法,方法中是我们写的程序Main方法是我们程序的入口方法:当我们执行程序时候会首先找到Main方法,从Main方法的第一句程序开始执行,当Main方法执行完成后,程序结束。
.sln是解决方案的文件,今天写的第一句话:Console.WriteLine("你想写的内容!");第二句话:Console.ReadKey();当程序执行到Console.ReadKey();的时候,程序会停在这里,等待用户从键盘上输入一个键盘,用户输入这个键之后,程序才继续执行。
在C#中,每一句话都要一分号结束。
#region和#endregion可以折叠一段代码变量:代表着一块内存空间,我们可以通过变量名称向内存存取数据,有变量就不需要我们记忆复杂的内存地址。
在学习一句话Console.WriteLine()用于让用户从键盘上输入一句话,当程序执行到下面这句话,就会暂停,然后等待用户从键盘上输入一句话,按下回车继续执行。
如果想得到用户输入内容,就需要用户定义一个string类型的变量,写在下面这句话前面接收用户输入的内容。
转义字符是一个字符,可以赋值给例如char这样的类型;它有一个\+一个字母来组成具有特殊意义的一个字符;常用的转义字符有:\n换行 \b相当于backspace退格 \t tab由多个空格组成的一个字符,具有行与行之间的对齐功能,@字在字符串前面表示不转义,其都两种定义1)字符串中如果有\,则不在理解为转义符2)使字符串可以换行3)如果在字符串前面加上@符号,在字符串上用两个双引号代表一个双引号Decimal类型默认的无法转换成double类型注意:赋值运算符/算术运算符在进行运算时,要参与运算的操作数的类型必须相同,并且其运算结束也与操作数的类型相同。
程序设计实践实验报告《程序设计实践实验报告》在程序设计课程中,学生们经常需要完成各种实践实验,以加深对编程语言和算法的理解,并提高实际编程能力。
本次实验报告将介绍我们在程序设计实践中所进行的实验内容和实验结果。
实验一:基本语法和数据类型在这个实验中,我们学习了编程语言的基本语法和数据类型,包括变量的声明和赋值、条件语句、循环语句以及各种数据类型的使用。
通过编写简单的程序,我们掌握了如何正确地使用这些语法和数据类型,并且能够编写出简单的程序来解决实际问题。
实验二:数组和函数在这个实验中,我们学习了数组的定义和使用,以及函数的声明和调用。
我们通过编写程序来实现对数组的各种操作,比如查找最大值、最小值、求和等。
同时,我们也学会了如何编写函数来实现特定的功能,并且能够正确地调用这些函数。
实验三:面向对象编程在这个实验中,我们学习了面向对象编程的基本概念和语法,包括类的定义和对象的创建。
我们通过编写程序来实现面向对象的思想,比如定义一个学生类,然后创建多个学生对象,并对这些对象进行各种操作。
实验四:算法设计与实现在这个实验中,我们学习了一些常用的算法,比如排序算法、搜索算法等。
我们通过编写程序来实现这些算法,并且对它们进行测试和分析,以便更好地理解这些算法的原理和性能。
通过这些实验,我们不仅加深了对编程语言和算法的理解,还提高了实际编程能力。
我们相信,在今后的学习和工作中,这些实验经验将会对我们产生积极的影响。
希望通过这份实验报告,能够让更多的人了解到程序设计实践的重要性,以及它对我们的学习和成长所带来的益处。
面向对象程序C++设计实验报告计算机与信息工程系C++面向对象程序设计实验报告专业:计算机班级:学号:姓名:指导老师:刘文涛实验1:Visual C++6.0开发环境应用入门一、实验目的1、了解Visual C++6.0的特点。
2、熟悉Visual C++6.0的开发环境。
3、学习用Visual C++6.0编写标准的C++控制台程序。
二、实验任务使用Visual C++来建立一个非图形化的标准C++程序,编译、运行三、实验步骤#include <iostream.h>struct time{int year;int month;int day;int hour;int minue;int second;};void main(){time a;cout<<"please input year:";cin>>a.year;cout<<"please input month:";cin>>a.month;cout<<"please input day:";cin>>a.day;cout<<"please input hour:";cin>>a.hour;cout<<"please input minue:";cin>>a.minue;cout<<"please input second:";cin>>a.second;cout<<a.year<<"年"<<a.month<<"月"<<a.day<<"日"<<a.hour<<"时"<<a.minue<<"分"<<a.second<<"秒";}四:个人小结这是第一次开始学习C++,以前也没有接触过类似的东西。
python⾯向对象编程实例1.编写程序, 编写⼀个学⽣类, 要求有⼀个计数器的属性, 统计总共实例化了多少个学⽣class Student:"""学⽣类"""count = 0 # 计数def__init__(self, name, age): = nameself.age = ageStudent.count += 1 # 要使得变量全局有效,就定义为类的属性def learn(self):print("is learning")stu1 = Student("jack", 33)stu2 = Student("amy", 24)stu3 = Student("lucy", 22)stu4 = Student("lulu", 45)print("实例化了%s个学⽣" % Student.count)输出:实例化了4个学⽣View Code2.编写程序, A 继承了 B, 俩个类都实现了 handle ⽅法, 在 A 中的 handle ⽅法中调⽤ B 的 handle ⽅法class B:"""类B"""def__init__(self):passdef handle(self):print("B.handle")class A(B):"""类A"""def__init__(self):super().__init__()def handle(self):super().handle() # super依赖于继承a = A()a.handle()输出:B.handleView Code3.编写程序, 如下有三点要求:1. ⾃定义⽤户信息数据结构,写⼊⽂件, 然后读取出内容, 利⽤json模块进⾏数据的序列化和反序列化2. 定义⽤户类,定义⽅法db,例如执⾏obj.db可以拿到⽤户数据结构3. 在该类中实现登录、退出⽅法, 登录成功将状态(status)修改为True, 退出将状态修改为False(退出要判断是否处于登录状态).密码输⼊错误三次将设置锁定时间(下次登录如果和当前时间⽐较⼤于30秒即不允许登录)⽤户数据结构:user_info{"egon":{"password":"123",'status':False,'timeout':0},"alex":{"password":"456",'status':False,'timeout':0},}import jsonimport time# data = {# "egon":{"password":"123",'status':False,'timeout':0},# "alex":{"password":"456",'status':False,'timeout':0},# }## with open("user_info", "w", encoding="utf-8") as f:# json.dump(data, f) # 序列化class User:"""⽤户类"""def__init__(self):er_dic = self.read() # 初始化时将⽤户信息读取出来ername = ""# 记录当前登录⽤户def write(self):"""序列化"""with open("user_info", "w", encoding="utf-8") as f:json.dump(er_dic, f) # 序列化def read(self):"""拿到⽤户数据"""with open("user_info", "r", encoding="utf-8") as f:user_dic = json.load(f) # 反序列化return user_dicdef db(self):print("⽤户数据结构:", er_dic)def login(self):"""登录"""i = 0while i < 3:username = input("username:").strip()password = input("password:").strip()if username in er_dic and password == er_dic[username]["password"]: time_now = time.time() # 获取当前时间period = time_now - er_dic[username]["timeout"] # 时间差if period >= 30: # 判断时间间隔是否满⾜登录条件print("------%s登陆成功-----" % username)ername = usernameer_dic[username]["status"] = True # 记录⽤户登录状态self.write() # 将修改保存到⽂件breakelse:print("⽤户处于锁定状态,请%s S后再试" % (30 - period))breakelse:print("⽤户名或密码错误!")i += 1if i == 3 and username in er_dic:er_dic[username]["timeout"] = time.time() # 记录3次登录失败的时间点 self.write() # 将修改保存到⽂件exit("退出")def exit(self):"""退出"""if ername: # ⽤户处于登录状态er_dic[ername]["status"] = False # 修改⽤户登录状态self.write() # 将修改保存到⽂件exit("⽤户%s退出登录" % ername)def help_info(self):"""帮助信息"""print("""命令列表:查看数据结构:db登录:login退出登录:exit""")def handle(self):"""处理⽤户输⼊命令"""while True:cmd = input("请输⼊命令:").strip()cmd = cmd.split()if hasattr(self, cmd[0]): # 使⽤反射func = getattr(self, cmd[0]) # 拿到⽅法名func()else:self.help_info() # 打印帮助信息user = User()if__name__ == "__main__":user.handle()"""输出:请输⼊命令:loginusername:egonpassword:123------egon登陆成功-----请输⼊命令:exit⽤户egon退出登录"""View Code4.⽤⾯向对象的形式编写⼀个⽼师⾓⾊, 并实现以下功能, 获取⽼师列表, 创建⽼师、删除⽼师、创建成功之后通过 pickle 序列化保存到⽂件⾥,并在下⼀次重启程序时能读取到创建的⽼师, 例如程序⽬录结构如下.proj|-- bin/| |-- start.py 程序启动⽂件|-- config/| |-- settings.py 程序配置(例如: 配置存储创建⽼师的路径相关等)|-- db 数据存储(持久化, 使得每次再重启程序时, 相关数据对应保留)| |-- teachers/ 存储所有⽼师的⽂件| |-- ... ...|-- src/ 程序主体模块存放| |-- __init__.py| |-- teacher.py 例如: 实现⽼师相关功能的⽂件| |-- group.py 例如: 实现班级相关的功能的⽂件|-- main.py 程序运⾏主体程序(可进⾏菜单选择等)|-- README.md 程序说明⽂件代码:# start.py"""程序启动⽂件"""import osimport sysBASE_PATH = os.path.dirname(os.getcwd())sys.path.insert(0, BASE_PATH) # 将proj的路径添加到模块搜索路径中from src import mainif__name__ == "__main__":main.main()# settings.py"""定义⼀些常量"""import osBASE_PATH = os.path.dirname(os.getcwd())teacher_file = os.path.join(BASE_PATH, "db", "teacher_info") # 教师⽂件路径# main.py"""程序运⾏主体,可进⾏菜单选择"""from src.manager import Managerdef main():li = for i in range(len(li)):print(i+1, li[i][0])while True:ch = input("输⼊序号进⾏操作:").strip()getattr(Manager(), li[int(ch)-1][1])() # 反射,找到对象相应的⽅法并执⾏# manager.py"""创建教师,删除教师,查看教师"""from src.my_pickle import MyPicklefrom config.settings import *from src.teacher import Teacherclass Manager:"""管理员类"""info = [("查看教师", "show_teacher"),("创建教师", "create_teacher"),("删除教师", "delete_teacher"), ("退出", "exit")]def__init__(self):self.teacher_pickle_obj = MyPickle(teacher_file) # 实例化MyPickle类,teacher_file是settings中的教师⽂件路径def show(self, pickle_obj):"""从⽂件中读取信息"""pick_obj = getattr(self, pickle_obj)data_g = pick_obj.readiter() # 读取对象信息for teacher_obj in data_g:for key in teacher_obj.__dict__:print(key, teacher_obj.__dict__[key]) # 打印对象信息print("-" * 50)def show_teacher(self):"""查看教师信息"""print("教师信息".center(45, "-"))self.show("teacher_pickle_obj")def create_teacher(self):"""创建教师信息"""name = input("输⼊要创建的教师姓名:").strip()school = input("输⼊教师所在学校:").strip()teacher = Teacher(name, school) # 实例化⼀个教师对象self.teacher_pickle_obj.write(teacher) # 将对象写⼊⽂件print("创建教师成功!")def delete_teacher(self):"""删除教师信息"""self.show_teacher()inp = input("输⼊要删除的教师姓名:").strip()self.teacher_pickle_obj.delete(inp) # 删除print("删除成功!")def exit(self):exit()# my_pickle.py"""读写⽂件信息"""import pickleimport osfrom config.settings import *class MyPickle:def__init__(self, filename):self.filename = filenamedef write(self, data): # 写⼊with open(self.filename, "ab") as f:pickle.dump(data, f)def readiter(self): # 读取with open(self.filename, "rb") as f:while True:try:data = pickle.load(f)yield dataexcept:breakdef delete(self, name): # 删除f2 = MyPickle(self.filename+".bak") # 新建⼀个⽂件for item in self.readiter(): # 从⽂件中load数据if == name:pass# 找到了就不写⼊else:f2.write(item) # 没找到就将对象写⼊⽂件os.remove(self.filename) # 删除旧⽂件os.rename(self.filename+".bak", self.filename) # 新⽂件名重命名为旧⽂件名# teacher.pyclass Teacher:"""教师类"""def__init__(self, name, school): = nameself.school = schoolView Code5、定义MySQL类要求:1.对象有id、host、port三个属性2.定义⼯具create_id,在实例化时为每个对象随机⽣成id,保证id唯⼀3.提供两种实例化⽅式,⽅式⼀:⽤户传⼊host和port ⽅式⼆:从配置⽂件中读取host和port进⾏实例化4.为对象定制⽅法,save和get_obj_by_id,save能⾃动将对象序列化到⽂件中,⽂件路径为配置⽂件中DB_PATH,⽂件名为id号,保存之前验证对象是否已经存在,若存在则抛出异常,;get_obj_by_id⽅法⽤来从⽂件中反序列化出对象mysql.py"""以时间戳作为对象的id"""import timeimport pickleimport osimport settingsclass MySql:"""MySql类"""def__init__(self, host=settings.HOST, port=settings.PORT):self.host = hostself.port = portself.id = self.create_id() # 为对象⽣成iddef create_id(self):"""为对象⽣成id"""return int(time.time())def save(self):"""将对象序列化到⽂件中"""if not os.path.isfile(os.path.join(settings.DB_PATH, str(self.id))): # 判断⽂件是否存在with open(os.path.join(settings.DB_PATH, str(self.id)), "wb") as f:pickle.dump(self, f)else:raise TabError("the id has already existed")def get_obj_by_id(self, obj_id):"""反序列化对象"""with open(os.path.join(settings.DB_PATH, str(obj_id)), "rb") as f:mysql_obj = pickle.load(f)print(mysql_obj)print(mysql_obj.id,mysql_obj.host, mysql_obj.port)mysql = MySql() # 默认从配置⽂件中读取host和portmysql1 = MySql("192.168.0.11", 8089) # ⽤户传⼊host和portmysql1.save()mysql.get_obj_by_id(1528189434)View Codesettings.pyimport osDB_PATH = os.path.join(os.getcwd(), "db") # 序列化的⽂件存放位置HOST = "127.0.0.1"PORT = 8080View Code。
第 1 页 共 9 页 实验二 面向对象编程 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类实例的两个属性的输出。 package package1;
public class Book { private String title; private float listPrice; public Book(String Title,float price){ super(); this.title=Title; this.listPrice=price; } public Book(){ super(); } public void settitle(String Title){ this.title=Title; } public String gettitle(){ return title; } public void setlistPrice(float price){ this.listPrice=price; } public float getlistPrice(){ 第 2 页 共 9 页
return listPrice; } public String toString(){ return("name:"+this.title+" Price"+this.listPrice); }
} package package1;
public class BookManagement { public static void main(String[] args){ Book b1=new Book("How to learn Java?",45); System.out.println("name:"+b1.gettitle()+" Price"+b1.getlistPrice()); System.out.println(b1.toString()); } }
实验运行结果:
实验题2 有两个类:MobileManagement和Mobile,Mobile类的的两个实例分别描述如图3.4所示两部手机名称及价格,类MobileManagement在包cn.edu.nwsuaf.jp.p3中,而Mobile在包cn.edu.nwsuaf.jp.p3.data中。 基本要求:设计Mobile类与MobileManagement类,在类MobileManagement类中实例化Mobile类的对象使程序能够显示两部手机的价格和数量,运行结果如图3.5。
E365, 1780 RMB M330, 1450 RMB 第 3 页 共 9 页
图3.4 手机及价格图 图3.5 运行结果 package cn.edu.nwsuaf.jp.p3.data;
public class Mobile { /** * @param args */ private String Mobilename; private String Mobileprice; public void setMoilename(String name){ this.Mobilename=name; } public void setMoileprice(String price){ this.Mobileprice=price; } public String getMobilename(){ return this.Mobilename; } public String getMobileprice(){ return this.Mobileprice; } public Mobile(String name,String price){ this.Mobilename=name; this.Mobileprice=price; } } package cn.edu.nwsuaf.jp.p3; import javax.swing.JOptionPane;
import cn.edu.nwsuaf.jp.p3.data.*; public class MobileManagement { public static void main(String[] args) { Mobile m1=new Mobile("E365","1780.0RMB"); 第 4 页 共 9 页
Mobile m2=new Mobile("M330","1450RMB"); JOptionPane.showMessageDialog(null, "Mobile phones:\n\n"+m1.getMobilename()+": "+m1.getMobileprice()+"\n"+m2.getMobilename()+": "+m2.getMobileprice()+"\n\nThere are 2 mobile phones.");
}
}
试验运行结果:
实验题3 有四个类,主类Store在包cn.edu.nwsuaf.jp.p4中,Mobile、Mp3Player、Product在包cn.edu.nwsuaf.jp.p4.data中,Mobile、Mp3Player是Product的子类,Product类为抽象类。 基本要求: 设计类Mobile和类MP3Player,使它们和类Product、Store组成一个完整的程序,且运行结果如图3.6所示。
图3.6 运行结果 package cn.edu.nwsuaf.jp.p4.data;
public abstract class Product { protected String Productname; protected float Productprice; protected static int count;
public String getProducename(){ 第 5 页 共 9 页
return this.Productname; }
public float getProduceprice(){ return this.Productprice; } public static int getcount(){ return count;
}} package cn.edu.nwsuaf.jp.p4.data;
public class Mp3Player extends Product { public int memory; public Mp3Player (String name,float price,int memory){ super(name,price); this.memory=memory; } public int getmemory(){ return this.memory; } public String toString(){ return (Productname+"("+memory+"MB),"+Productprice+"RMB\n"); }
} package cn.edu.nwsuaf.jp.p4.data;
public class Mobile extends Product{ public String type; public Mobile(String name,float price,String type){ super(name,price); this.type=type; } public String gettype(){ return this.type; } public String toString(){ return Productname+" "+type+","+Productprice+"RMB\n"; }
} package cn.edu.nwsuaf.jp.p4; import javax.swing.JOptionPane; import cn.edu.nwsuaf.jp.p4.data.*; 第 6 页 共 9 页
public class Store { /** * @param args */ public static void main(String[] args) { Mobile m1=new Mobile("E365",1780,"On China Mobile"); Mobile m2=new Mobile("M330",1450,"On China Mobile"); Mp3Player p1=new Mp3Player("Meizo X3",399,256); Mp3Player p2=new Mp3Player("Meizo E5",580,512); Mp3Player p3=new Mp3Player("Xlive XM MP3 Play",930,256); JOptionPane.showMessageDialog(null,"The Products are:\n\n"+p1.toString()+p2.toString()+p3.toString()+m1.toString()+m2.toString()+"\nThere are "+Product.getcount()+" products."); }
} 运行实验结果:
实验题4 有四个类,主类Store在包cn.edu.nwsuaf.jp.p4中,Mobile、Mp3Player、Product在包cn.edu.nwsuaf.jp.p4.data中,Mobile、Mp3Player是Product的子类, Product类实现Comparable接口,请重写Comparable接口中方法compareTo,实现product对象按照价格排序,运行结果如图3.8所示。