




免费预览已结束,剩余66页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
这是我自己做的,拿出来供后来人学习,相信你们能比我做的更好中北大学软件学院面向对象程序设计实验教学大纲课程类别:学科基础教育课程 课程名称:面向对象的程序设计方法开课单位:软件学院 课程编号:N02140104S总 学 时:16 学 分: 1适用专业:软件工程 先修课程: C语言程序设计 一、课程在教学计划中地位、作用;本课程主要是配合面向对象程序设计开设的实验课,目的是加强学生对课堂内容的理解。 二、实验内容、基本要求: 实验一 一个简单的JAVA 应用程序实验目的:1、掌握下载、安装与配置Java 程序运行环境。2、熟悉开发JAVA应用程序的三个步骤:编写源文件、编译源文件和运行应用程序。实验内容:1、编写一个程序,输出“欢迎你学习Java 语言!”2、编写一个程序,从键盘输入一个盒子的长、宽、高,输出盒子的长、宽、高和这个盒子的体积。实验二 Java语言基础训练实验目的:1、学习基本数据类型的定义与使用、数组的定义及使用、枚举类型的定义与使用。2、熟悉Java基本语法,练习使用Java的数据类型、运算符、表达式和控制结构。实验内容:(学生成绩管理系统之一) 编写Java程序,定义一个学生类,并编写主类测试该类的功能。基本要求如下: 学生类中包含属性有:学号、姓名、性别(枚举类型)、一个存放上学期成绩的数组(float) 学生类包含的方法有:信息的录入、信息的输出、输出学生上学期的总分和均分、查找哪门课考了多少分,对考试成绩排序,输出最高分和最低分等;实验三 面向对象基础程序设计 实验目的:1、掌握类的定义、属性、方法、及相关语法规则。2、掌握构造函数的编写、类成员的使用、深入理解类的抽象和封装。 实验内容:(学生成绩管理系统之二)在实验二的基础上,如果想记录每个学生每学期的成绩,应该继续抽象哪些类出来,它们之间的关系是什么?请编程实现。实验四 深入面向对象程序设计(一) 实验目的:1、 熟练掌握类的抽象和构造方法的定义。2、 掌握对象的组合和对象数组。实验内容:编写Java程序,构造一个瓶子类(该瓶子由一个长方体和一个球体构成),计算瓶子的体积,并编写主类构造几个瓶子测试该类的功能。实验五 深入面向对象程序设计(二)实验目的: 1、理解什么是上转型对象,什么是抽象类,接口2、理解子类的继承性、子类对象的创建3、理解不同对象的上转型对象调用同一方法时可能产生的不同行为,即多种形态(多态)4、理解面向对象设计中的面向抽象的原则和开-闭原则。实验内容 1、利用抽象类或接口、继承、多态等知识点,计算不同图形的面积。(体现多态) 2、在上题的基础上,构造柱体类,计算拥有不同底面的柱体的体积。(体现设计中的面向抽象的原则和开-闭原则)实验六 输入输出流程序设计实验目的:1、掌握文件的创建及存储方式。2、掌握文件的不同读写方法。3、理解输入输出流,并能针对具体的问题选择合适的输入输出流使用实验内容:(学生成绩管理系统之三) 想要将之前的学生成绩管理系统中的基本信息持久保存,就需要用到文件,请根据具体的保存对象和应用场景,选择合适的输入输出流,将信息持久保存。实验七 图形用户界面与事件处理机制实验目的:1、掌握面向对象事件处理机制。2、学习Java图形组件和布局管理器的使用。实验内容:(学生成绩管理系统之四) 之前的学生成绩管理系统,交互性很差,仅停留在字符界面,请设计学生成绩管理系统中的登陆界面和登录之后的主窗体界面,并完成从登录到主窗体的跳转。实验八 综合实验实验目的:1、掌握面向对象程序开发思想。2、掌握使用图形用户界面对文件进行访问的程序开发机制。实验内容:(学生成绩管理系统之五)用面向对象程序设计思想完善之前的学生成绩管理系统,将之前学生成绩管理系统的业务逻辑事件和实验七设计的主窗体界面进行连接,完成图形用户界面下的学生成绩管理系统。 三、学时分配:章节名称讲授(学时)实验(学时)小计实验一 一个简单的JAVA 应用程序22实验二 Java语言基础训练22实验三 面向对象基础程序设计22实验四 深入面向对象程序设计(一)22实验五 深入面向对象程序设计(二)22实验六 输入输出流程序设计22实验七 图形用户界面与事件处理机制22实验八 综合实验22 四、主要参考书1耿祥义.Java面向对象程序设计实验指导与习题解答.北京:清华大学出版社,20132(美) 布奇(Booch,G.).面向对象程序分析与设计.北京:电子工业出版社,2012 五、考核方式(包括作业、测验、考试等及其所占比例) 实验报告、出勤率及实验完成质量为考核成绩的依据。辅导教师 成绩 实验日期年月日实验时间1、实验名称 :实验一 一个简单的JAVA 应用程序2、实验目的 : 1、掌握下载、安装与配置Java 程序运行环境。2、熟悉开发JAVA应用程序的三个步骤:编写源文件、编译源文件和运行应用程序。 3、实验内容 :1、编写一个程序,输出“欢迎你学习Java 语言!”2、编写一个程序,从键盘输入一个盒子的长、宽、高,输出盒子的长、宽、高和这个盒子的体积。4、实验原理或流程图 : 1. 输出“欢迎你学习Java 语言!”HelloJava + static main(String args):voidBoxVolume + static main(String args):void 2.计算盒子体积 Boxlength : floatwidth : floatheight : float inputInfor():void getVolume():float printVolume():void5、实验过程或源代码 :1. /源文件:HelloJava.javapublic class HelloJava /主类HelloJava的声明和定义 public static void main(String args) /主方法main的声明和定义 System.out.println(欢迎你学习Java 语言!); 2. /源文件:BoxVolume.javaimport java.util.Scanner; /引包语句,引入Scanner类public class BoxVolume /主类BoxVolume的声明和定义 public static void main(String args) /主方法main的声明和定义 Box box1=new Box(); /用Box类创建一个对象box1 box1.inputInfor(); /给对象发送消息 box1.printVolume(); /给对象发送消息 class Box /类Box的声明和定义 float length,width,height; / 类的属性 void inputInfor() /类方法inputInfor的声明和定义 Scanner scan = new Scanner(System.in); /用Scanner类创建一个对象scan System.out.println(请输入盒子的长:);/提示输入长 length=scan.nextFloat(); /从键盘接收一个实型数据并赋给length System.out.println(请输入盒子的宽:);/提示输入宽 width=scan.nextFloat(); /从键盘接收一个实型数据并赋给width System.out.println(请输入盒子的高:);/提示输入高 height=scan.nextFloat(); /从键盘接收一个实型数据并赋给height float getVolume() /类方法getVolume的声明和定义 return length*width*height; /返回盒子的体积 void printVolume() /类方法printVolum的声明和定义 System.out.println(盒子的体积为:+getVolume(); /输出盒子的体积 运行结果:1. 输出“欢迎你学习Java 语言!”2. 计算盒子体积6、实验结论及心得 :1、学会了java环境的安装、环境变量的配置。2、学会了如何创建一个类,理解了类的构成,知道了长、宽、高是盒子类的属性,输入信息和计算体积是盒子类的方法。3、掌握了如何用类创建一个对象,以及如何给对象发送消息,理解了面向对象的程序设计=对象+消息。4、掌握了类“Scanner”的使用方法。5、以后需要注意的是:程序中的; 、 、( )、 等必须在英文模式下输入,否则编译器会提示输入了非法字符。6、Public 类的名称必须和文件名一致,否则编译器会提示应在声明为*.java的文件名中声明某个输入错误的公共类。7、java中严格区分大小写。8、println( )使用时,+的作用是连接字符串和变量。9、println( )和print( )的不同之处在于println( )在输出后会自动换行而print( )不会。10、使用Scanner时,需要在程序最前面加上引包语句(即: import java.util.Scanner; ),否则编译时会出现无法识别Scanner的错误。11、Scanner、System、String三个英文单词的首字母S大写,因为它们是类名。辅导教师 成绩 实验日期年月日实验时间1、实验名称 :实验二 Java语言基础训练2、实验目的 :1、学习基本数据类型的定义与使用、数组的定义及使用、枚举类型的定义与使用。2、熟悉Java基本语法,练习使用Java的数据类型、运算符、表达式和控制结构。 3、实验内容 :(学生成绩管理系统之一)编写Java程序,定义一个学生类,并编写主类测试该类的功能。基本要求如下: 1.学生类中包含属性有:学号、姓名、性别(枚举类型)、一个存放上学期成绩的数组(float) 2.学生类包含的方法有:信息的录入、信息的输出、输出学生上学期的总分和均分、查找哪门课考了多少分,对考试成绩排序,输出最高分和最低分等;Studentsex: enumclasses: intnumber: inti:inttelnum: longname: Stringsum: floatgrade4:floatgrade14:float inputInfor():void arrayCalculate():void getSum(): float getAve(): float searchScore():void printInfor():void4、实验原理或流程图 :StuInfor + static main(String args):void5、实验过程或源代码 :/源文件:StuInfor.javaimport java.util.Scanner;import java.util.Arrays; /引入Arrays类enum Sex /枚举类型的声明和定义 男,女; public class StuInfor public static void main(String args) System.out.println(n -中北大学学生成绩管理系统V3.1- ); Student stu1=new Student(); stu1.inputInfor(); stu1.arrayCalculate(); stu1.printInfor(); stu1.searchScore(); class Student /学生类 int classes,number,i; /学生类的属性 long telnum; /基本数据类型的定义 String name; float sum,grade= new float4,grade1=new float4; Sex sex; void inputInfor() /输入信息 System.out.println(n -学生信息录入:- ); Scanner scan = new Scanner(System.in); System.out.println(请输入你的姓名:); name=scan.next(); System.out.println(请输入你的性别(0:男,1:女):); if(scan.nextInt()=0) sex=Sex.男; /引用枚举类型常量“男” elsesex=Sex.女; /引用枚举类型常量“女” System.out.println(请输入班级:); classes=scan.nextInt(); System.out.println(请输入你的学号:); number=scan.nextInt(); System.out.println(请输入你的电话号码:); telnum=scan.nextLong(); System.out.println(请依次输入你的C,高数,线代,英语成绩:); for(int i=0;i4;i+) gradei= scan.nextFloat(); /用循环结构给成绩数组中的元素赋值 System.out.println(n - 信息输入完成!- ); void arrayCalculate() System.arraycopy(grade,0,grade1,0,grade.length); /将grade数组中的元素拷贝到grade1数组中 Arrays.sort(grade1); /将grade1数组排序 float getSum() for(int i=0;i=0) System.out.println(num+和数组中索引为+index+的元素的值相同); /输出分数在数组中对应的索引 else /找不到则提示没有这个数组元素与之相等 System.out.println(num+不与数组中的任何元素值相同); void printInfor() /信息输出 System.out.println(n -该学生基本信息- ); System.out.printf(姓名:%s,name); System.out.printf(n性别:+sex); System.out.printf(n班级:%d,classes); System.out.printf(n学号:%d,number); System.out.printf(n电话:%d,telnum); System.out.println(n你的C,高数,线代,英语成绩依次是:); System.out.println(Arrays.toString(grade); /使用Arrays类的Arrays.toString()方法输出原数组元素 System.out.println(你的成绩由低到高排序依次是:); /使用Arrays类的Arrays.toString()方法输出排序后的数组元素 System.out.println(Arrays.toString(grade1); System.out.println(其中最高分为:+grade13+ 最低分为:+grade10); System.out.printf(总分:%.2f,getSum(); System.out.printf(n均分:%.2f,getAve(); 6、实验结论及心得 :1、学会了如何定义和使用基本数据类型。2、掌握了数组的定义及使用方法,包括数组的声明和创建方法以及给数组元素赋值的方法。3、掌握了枚举类型的定义与使用方法,明白了枚举类型的用途和使用意义。4、掌握了java的命名规则,主要有以下几点: 类名首字母大写,如果是多个单词,每个单词首字母大写。 方法名首字母小写,如果由多个单词构成,除第一个外,每个单词首字母大写。方法命名要使用动+宾结构,要做到见名知意。方法名和变量名必须是合法标识符,不能是关键字。5、明白了printf( )、println( )、print( )三种输出方法之间的区别:printf( )用于格式输出,可以控制输出格式,使输出美观。println( )在输出后会自动换行,但不能实现格式控制输出。print( )既不能控制输出格式也不会自动换行。6、使用二分法时,操作的数组一定是经过排序的,否则会得到错误的结果。如果数组中有两个数值相同的元素,二分法查找该元素只会返回找到的第一个元素的索引。7、以后定义基本的数据类型时必须注意:密切关注数据值的大小:a.如果涉及到数据值过大,比如计算阶乘,计算累乘,保存手机号(11位数)等等,需要根据范围选择取值范围大的数据类型。如果值的超过了定义的数据类型的范围,就有可能发生错误。 b.如果数据值较小,可以考虑使用取值范围较小的数据类型,以便节约内存空间。如果表达式涉及除法操作,一定要定义为浮点型。8、使用数组时要注意循环条件的控制,java对数组边界经行检查,一旦发现数组越界,就有会发生数组越界异常(IndexOutOfBoundsException)。 使用自减时也要注意循环条件的控制,一旦数组索引为负数会引发负值索引异常(NegativeException);辅导教师 成绩 实验日期年月日实验时间1、实验名称 :实验三 面向对象基础程序设计2、实验目的 :1、掌握类的定义、属性、方法、及相关语法规则。2、掌握构造函数的编写、类成员的使用、深入理解类的抽象和封装。3、实验内容 :(学生成绩管理系统之二)在实验二的基础上,如果想记录每个学生每学期的成绩,应该继续抽象哪些类出来,它们之间的关系是什么?请编程实现。4、实验原理或流程图 : Studentsex: enumclasses: intnumber: inti:inttelnum: longname: Stringscore:Score inputInfor():void printInfor():void StuInfor + static main(String args):voidScheduleSemester: bytecourseNum: bytecourse:StringprintInfor():voidScoresum: floatscore:floatscore1:floatschedule: SchedulearrayCalculate():voidgetSum():floatgetAve():floatsearchScore():voidprintInfor():void5、实验过程或源代码 :/源文件:StuInfor.javaimport java.util.Scanner;import java.util.Arrays;enum Sex 男,女; public class StuInfor /主类的声明和定义 public static void main(String args) /主方法的声明和定义 System.out.println(n -中北大学学生成绩管理系统V4.1- ); Student stu1=new Student(); /用学生类创建对象stu1 stu1.inputInfor(); /调用学生类中输入信息的方法 stu1.printInfor(); /调用学生类中输出信息的方法 class Student /学生类的声明和定义 int classes,number,i; long telnum; String name; Sex sex; /学生类的属性 Score score; /声明对象score void inputInfor() /信息输出方法的声明和定义 System.out.println(n -学生信息录入:- ); Scanner scan = new Scanner(System.in); System.out.println(请输入你的姓名:); name=scan.next(); System.out.println(请输入你的性别(0:男,1:女):); if(scan.nextInt()=0) sex=Sex.男; else sex=Sex.女; System.out.println(请输入班级:); classes=scan.nextInt(); System.out.println(请输入你的学号:); number=scan.nextInt(); System.out.println(请输入你的电话号码:); telnum=scan.nextLong(); score=new Score(); /调用score中的构造方法创建对象score System.out.println(n - 信息输入完成!- ); void printInfor() /信息输出方法的声明和定义 System.out.println(n -该学生基本信息- ); System.out.printf(姓名:%s,name); System.out.printf(n性别:+sex); System.out.printf(n班级:%d,classes); System.out.printf(n学号:%d,number); System.out.printf(n电话:%dn,telnum); score.printInfor(); class Schedule /课程时间表类的声明和定义 byte semester,courseNum; String course; /课程时间表类的属性 public Schedule() /Schedule类构造方法的声明和定义 Scanner scan = new Scanner(System.in);/用Scanner类创建一个对象scan System.out.println(本学期是第几学期,请输入数字,并按Enter结束); semester=scan.nextByte();/用scan调用Scanner类的nextByte()方法给semester赋值 System.out.println(本学期共有几门课,请输入数字,并按Enter结束); courseNum=scan.nextByte(); /用scan调用Scanner类的nextByte()方法给courseNum赋值 course=new StringcourseNum; for(byte i=0;icourseNum;i+) System.out.println(请输入第+semester+学期开设的第+(i+1)+门课程,并按Enter结束); coursei=scan.next(); /用scan调用Scanner类的next()方法循环为course的元素赋值 void printInfor() /信息输出方法的声明和定义 System.out.println(第+semester+学期开设的课程如下:+ Arrays.toString(course); class Score /Score类的声明及定义 float sum,score,score1; Schedule schedule; /声明一个对象schedule public Score() /Score类的构造方法 schedule=new Schedule(); /创建对象schedule score=new floatschedule.courseNum; Scanner scan = new Scanner(System.in); for(int i=0;ischedule.courseNum;i+) System.out.println(请输入你的+schedule.coursei+成绩:); scorei = scan.nextFloat(); /用scan调用Scanner类的nextFloat()方法循环为score的元素赋值 void arrayCalculate() /数组计算方法的声明和定义 score1=new floatschedule.courseNum; System.arraycopy(score,0,score1,0,score.length); Arrays.sort(score1); float getSum() /获得总分方法的声明和定义 for(int i=0;i=0) System.out.println(num+和+schedule.courseArrays.binarySearch(score,num)+成绩相同!); else System.out.println(num+不与任何一科成绩相同); void printInfor() /信息输出方法的声明和定义 arrayCalculate();/调用本类中的arrayCalculate()方法 schedule.printInfor(); /调用Schedule类的方法printInfor() System.out.println(你的本学期这些科目的成绩为:); System.out.println(Arrays.toString(score); System.out.println(其中最高分为:+score1(schedule.courseNum)-1+最低分为:+score10); System.out.printf(总分:%.2f,getSum();/调用本类中的getSum()方法 System.out.printf(n均分:%.2f,getAve(); /调用本类中的getAve()方法 searchScore(); /调用本类中的searchScore()方法 6、实验结论及心得 :1、掌握了类的定义方法。2、掌握构造函数的定义和声明方法以及构造方法的重载。3、学会了如何用类创建对象,如何给对象发消息。4、学会了在其他类中调用某个类的方法和成员变量的方法。5、以后要注意,在使用对象调用方法时,不要忘记把对象创建出来,如果只声明了对象而没有创建,对象的引用为Null,使用对象调用方法时将会引发空指针异常(NullPointerException)。6、明白了如何用参数传值,以后要注意: 在使用带参数的构造方法时,形参和实参列表(参数的个数和类型必须保持一致),否则编译时会产生“无法将*构造方法应用到*构造器”的错误。7、构造方法不能有返回值类型,不能写void,返回值为空类型和没有返回值类型是完全不同的两个概念。8、更加深入的理解了面向对象的程序设计思想,学会了抽象和封装的基本方法。辅导教师 成绩 实验日期年月日实验时间1、实验名称 :实验四 深入面向对象程序设计(一)2、实验目的 :1、熟练掌握类的抽象和构造方法的定义。2、掌握对象的组合和对象数组。 3、实验内容 :编写Java程序,构造一个瓶子类(该瓶子由一个长方体和一个球体构成),计算瓶子的体积,并编写主类构造几个瓶子测试该类的功能。BottleGlobal:Global Cuboid:Cuboid- Bottlevolume:float inputInfor():void printInfor():void4、实验原理或流程图 : BottleVolume+ static main(String args):voidGlobalPI:final float- radius:float- volume:float+ getVolume():floatCuboid- length:float- width:float- height:float- volume:float+ getVolume():float5、实验过程或源代码 :/源文件:BottleVolume.javaimport java.util.Scanner;public class BottleVolume public static void main(String args) Global global; /声明对象 Cuboid cuboid; System.out.println(您想创建几个瓶子,请输入您希望的数值(整数),并按Enter结束:); Scanner sc=new Scanner(System.in); int count = sc.nextInt(); Bottle bottle; /对象数组的声明 bottle = new Bottlecount; /对象数组的创建 for(int i=0;i这是您的第+(i+1)+个瓶子,请按提示输入信息,系统会输出瓶子的体积.); global = new Global(); /用构造方法构造球体 global.getVolume(); cuboid = new Cuboid(); /用构造方法构造立方体 cuboid.getVolume(); bottlei = new Bottle(global,cuboid); /为对象数组的元素赋值 System.out.println(第+(i+1)+个瓶子的体积为+bottlei.getVolume(); System.out.println(n); class Bottle /瓶子类的声明和定义 private float bottlevolume; Global global; /对象global声明 Cuboid cuboid; /对象cuboid声明 public Bottle(Global global,Cuboid cuboid) /Bottle类的构造方法 this.global=global; /使用this关键字代指对象global this.cuboid=cuboid;/使用this关键字代指对象cuboid public float getVolume() bottlevolume=global.getVolume()+cuboid.getVolume(); return bottlevolume; class Global /球体类 private float radius,volume; final float PI=3.14f;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年民用建筑行业当前发展趋势与投资机遇洞察报告
- 2025年粉末冶金汽车零部件行业当前发展趋势与投资机遇洞察报告
- 2025年广西壮族自治区南宁市马山县中考二模数学试题含解析
- 2025年医院辐射安全与防护培训考核试题(附答案)
- 2025年全国中学生生物学联赛试题及答案(精校版)
- 山西省晋中市2024-2025学年七年级下学期期末语文试题(解析版)
- 山东省济南市东南片区2024-2025学年八年级下学期期末语文试题(解析版)
- 摄影基础知识培训方案课件
- 设施栽培技术试题及答案
- 2025租赁居间合同模板
- 2025至2030中国婚庆行业发展趋势分析与未来投资战略咨询研究报告
- 2025年职业病诊断医师资格考试(职业性化学中毒)历年参考题库含答案详解(5卷)
- 2025年高校机房管理试题及答案
- ESG基础知识培训课件
- 泌尿系统常见疾病科普讲座
- 山东阿訇管理办法
- 医疗机构环境表面清洁与消毒管理规范试题2025(附答案)
- 城市更新专项规划服务方案投标文件(技术方案)
- 《儿童肺功能检测临床应用常见问题专家共识(2024)》解读
- 2025-2030中国智能访客一体机行业发展动态与应用前景预测报告
- 2025年公招教师特岗教师招聘考试教育公共基础知识真题(含答案)
评论
0/150
提交评论