中北大学 面向对象程序设计实验报告教材.docx
《中北大学 面向对象程序设计实验报告教材.docx》由会员分享,可在线阅读,更多相关《中北大学 面向对象程序设计实验报告教材.docx(103页珍藏版)》请在冰豆网上搜索。
中北大学面向对象程序设计实验报告教材
这是我自己做的,拿出来供后来人学习,相信你们能比我做的更好
中北大学软件学院《面向对象程序设计实验》教学大纲
课程类别:
学科基础教育课程课程名称:
面向对象的程序设计方法
开课单位:
软件学院课程编号:
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应用程序
2
2
实验二Java语言基础训练
2
2
实验三面向对象基础程序设计
2
2
实验四深入面向对象程序设计
(一)
2
2
实验五深入面向对象程序设计
(二)
2
2
实验六输入输出流程序设计
2
2
实验七图形用户界面与事件处理机制
2
2
实验八综合实验
2
2
四、主要参考书
1.耿祥义.《Java面向对象程序设计实验指导与习题解答》.北京:
清华大学出版社,2013
2.(美)布奇(Booch,G.).《面向对象程序分析与设计》.北京:
电子工业出版社,2012
五、考核方式(包括作业、测验、考试等及其所占比例)
实验报告、出勤率及实验完成质量为考核成绩的依据。
辅导教师成绩
实验日期
年月日
实验时间
1、实验名称:
实验一一个简单的JAVA应用程序
2、实验目的:
1、掌握下载、安装与配置Java程序运行环境。
2、熟悉开发JAVA应用程序的三个步骤:
编写源文件、编译源文件和运行应用程序。
3、实验内容:
1、编写一个程序,输出“欢迎你学习Java语言!
”
2、编写一个程序,从键盘输入一个盒子的长、宽、高,输出盒子的长、宽、高和这个盒子的体积。
4、实验原理或流程图:
1.输出“欢迎你学习Java语言!
”
HelloJava
+staticmain(String[]args):
void
BoxVolume
+staticmain(String[]args):
void
2.计算盒子体积
Box
length:
float
width:
float
height:
float
inputInfor():
void
getVolume():
float
printVolume():
void
5、实验过程或源代码:
1.//源文件:
HelloJava.java
publicclassHelloJava{//主类HelloJava的声明和定义
publicstaticvoidmain(Stringargs[])
{//主方法main的声明和定义
System.out.println("欢迎你学习Java语言!
");
}
}
2.//源文件:
BoxVolume.java
importjava.util.Scanner;//引包语句,引入Scanner类
publicclassBoxVolume//主类BoxVolume的声明和定义
{
publicstaticvoidmain(Stringargs[])
{//主方法main的声明和定义
Boxbox1=newBox();//用Box类创建一个对象box1
box1.inputInfor();//给对象发送消息
box1.printVolume();//给对象发送消息
}
}
classBox//类Box的声明和定义
{
floatlength,width,height;//类的属性
voidinputInfor()//类方法inputInfor的声明和定义
{
Scannerscan=newScanner(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
}
floatgetVolume()//类方法getVolume的声明和定义
{
returnlength*width*height;//返回盒子的体积
}
voidprintVolume()//类方法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时,需要在程序最前面加上引包语句(即:
"importjava.util.Scanner;"),否则编译时会出现无法识别Scanner的错误。
11、Scanner、System、String三个英文单词的首字母S大写,因为它们是类名。
辅导教师成绩
实验日期
年月日
实验时间
1、实验名称:
实验二Java语言基础训练
2、实验目的:
1、学习基本数据类型的定义与使用、数组的定义及使用、枚举类型的定义与使用。
2、熟悉Java基本语法,练习使用Java的数据类型、运算符、表达式和控制结构。
3、实验内容:
(学生成绩管理系统之一)
编写Java程序,定义一个学生类,并编写主类测试该类的功能。
基本要求如下:
1.学生类中包含属性有:
学号、姓名、性别(枚举类型)、一个存放上学期成绩的数组(float)
2.学生类包含的方法有:
信息的录入、信息的输出、输出学生上学期的总分和均分、查找哪门课考了多少分,对考试成绩排序,输出最高分和最低分等;
Student
sex:
enum
classes:
int
number:
int
i:
int
telnum:
long
name:
String
sum:
float
grade[4]:
float
grade1[4]:
float
inputInfor():
void
arrayCalculate():
void
getSum():
float
getAve():
float
searchScore():
void
printInfor():
void
4、实验原理或流程图:
StuInfor
+staticmain(String[]args):
void
5、实验过程或源代码:
//源文件:
StuInfor.java
importjava.util.Scanner;
importjava.util.Arrays;//引入Arrays类
enumSex//枚举类型的声明和定义
{
男,女;
}
publicclassStuInfor
{
publicstaticvoidmain(Stringargs[])
{
System.out.println("\n--------------------------中北大学学生成绩管理系统V3.1------------------------");
Studentstu1=newStudent();
stu1.inputInfor();
stu1.arrayCalculate();
stu1.printInfor();
stu1.searchScore();
}
}
classStudent//学生类
{
intclasses,number,i;//学生类的属性
longtelnum;//基本数据类型的定义
Stringname;
floatsum,grade[]=newfloat[4],grade1[]=newfloat[4];
Sexsex;
voidinputInfor()//输入信息
{
System.out.println("\n----------------------------------学生信息录入:
------------------------------");
Scannerscan=newScanner(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();
System.out.println(">>请依次输入你的C,高数,线代,英语成绩:
");
for(inti=0;i<4;i++){
grade[i]=scan.nextFloat();//用循环结构给成绩数组中的元素赋值
}
System.out.println("\n---------------------------------信息输入完成!
------------------------------");
}
voidarrayCalculate()
{
System.arraycopy(grade,0,grade1,0,grade.length);
//将grade数组中的元素拷贝到grade1数组中
Arrays.sort(grade1);//将grade1数组排序
}
floatgetSum()
{
for(inti=0;i<4;i++)
{
sum=sum+grade[i];//用循环累加器求出sum的值
}
returnsum;
}
floatgetAve()//考虑到平均分的数据类型,使用float作为其返回值类型
{
returnsum/4;//返回平均分的值
}
voidsearchScore()
{
System.out.println("\n你想要查找的成绩是:
");//查找功能
Scannerscan=newScanner(System.in);
intnum=scan.nextInt();
intindex=Arrays.binarySearch(grade1,num);
//使用二分法对已经排序后的grade1进行检索,查找想要的分数
if(index>=0)
{
System.out.println(num+"和数组中索引为"+index+"的元素的值相同");//输出分数在数组中对应的索引
}
else
{//找不到则提示没有这个数组元素与之相等
System.out.println(num+"不与数组中的任何元素值相同");
}
}
voidprintInfor()//信息输出
{
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("其中最高分为:
"+grade1[3]+"最低分为:
"+grade1[0]);
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、实验原理或流程图:
Student
sex:
enum
classes:
int
number:
int
i:
int
telnum:
long
name:
String
score:
Score
inputInfor():
void
printInfor():
void
StuInfor
+staticmain(String[]args):
void
Schedule
Semester:
byte
courseNum:
byte
course[]:
String
printInfor():
void
Score
sum:
float
score[]:
float
score1[]:
float
schedule:
Schedule
arrayCalculate():
void
getSum():
float
getAve():
float
searchScore():
void
printInfor():
void
5、实验过程或源代码:
//源文件:
StuInfor.java
importjava.util.Scanner;
importjava.util.Arrays;
enumSex
{
男,女;
}
publicclassStuInfor
{//主类的声明和定义
publicstaticvoidmain(Stringargs[])//主方法的声明和定义
{
System.out.println("\n--------------------------中北大学学生成绩管理系统V4.1------------------------");
Studentstu1=newStudent();//用学生类创建对象stu1
stu1.inputInfor();//调用学生类中输入信息的方法
stu1.printInfor();//调用学生类中输出信息的方法
}
}
classStudent//学生类的声明和定义
{
intclasses,number,i;
longtelnum;
Stringname;
Sexsex;//学生类的属性
Scorescore;//声明对象score
voidinputInfor()//信息输出方法的声明和定义
{
System.out.println("\n-----------------