10面向对象程序设计实验指导书.docx
- 文档编号:10846075
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:18
- 大小:27.35KB
10面向对象程序设计实验指导书.docx
《10面向对象程序设计实验指导书.docx》由会员分享,可在线阅读,更多相关《10面向对象程序设计实验指导书.docx(18页珍藏版)》请在冰豆网上搜索。
10面向对象程序设计实验指导书
面 向 对 象 程 序
设 计 实 验 指 导 书
实验一简单程序设计
一、实验目的
理解JAVA程序运行机制,掌握JAVA基本程序设计,学习使用JDK文档
二、实验内容
1.
使用纯文本编辑器编写一个HelloWorld程序,使用命令行编译并运行;并掌握配置EditPlus使之运行JAVA程序。
思考:
假设HelloWorld.java在目录:
d:
\exercise
将编译后的HelloWorld.class文件移至c:
\下
若在命令行下运行如下命令:
d:
\exercise>javaHelloWorld,
c:
\>javaHelloWorld
有没有问题?
假定需要在d:
\exercise>运行HelloWorld,需要设置什么?
2.设n为自然数,编写方法factorial(int)计算阶程,并在main方法中调用该方法,计算2!
,4!
,6!
并将结果输出到屏幕上。
3.使用java.lang.Math类,生成100个0-99之间的随机整数,找出它们之中的最大者及最小者,并统计大于50的整数个数。
4.创建一个二维数组,初始化为每名学生的四门课程成绩,计算每名学生的总成绩并按总成绩排序并输出每名学生的成绩。
5.编写程序翻转输出此字符串:
HelloWorld!
三、实验指导
1.配置path路径,使得在任意路径下,javac,java等命令均为可识别的命令。
我的电脑属性高级环境变量系统变量
java_home=C:
\ProgramFiles\Java\jdk1.6.0_20(新建)
path:
%java_home%\bin\ (添加)
也可以直接在path中添加:
C:
\ProgramFiles\Java\jdk1.6.0_20\bin
2.配置Editplus:
打开EditPlus,单击菜单中的“工具”,选择“配置用户工具”,在弹出的“参数选择”窗口中,单击按纽“添加工具”,在弹出的菜单中选择“新用户程序”,在“组和工具项目”中,设置如下:
菜单名字:
javac
命令:
D:
\j2sdk1.4.2_04\bin\javac.exe(此为本机上安装的jdk目录)
参数:
$(FileName)
初始目录:
$(FileDir);
选中“捕获输出”。
同样道理“添加工具”,设置如下:
菜单名字:
java
命令:
D:
\j2sdk1.4.2_04\bin\java.exe
参数:
$(FileNameNoExt)
初始目录:
$(FileDir)
选中“捕获输出”。
3.参考:
(1)当在目录d:
\exercise>运行HelloWorld时,考虑配置环境变量。
环境变量的配置:
我的电脑属性高级环境变量系统变量添加名为classpath的环境变量,并设置值为HelloWorld类所在的路径。
另可考虑javac-classpath
(2)类名为“Factorial,添加一个计算阶乘的方法factorial(inti),考虑一个数的阶乘会很大,超过int的范围,将此方法的返回值定义为long型。
此外,由于需要在main方法中直接调用该方法,需要将此方法定义为static型。
计算阶乘使用递归,如if(i!
=1)returnfactorial(i-1)*i;elsereturn1;
也可使用循环来实现。
最好都实现。
3.使用Math.random()方法来生成随机数,由于此方法生成0-1之间的随机小数,故需要用100*Math.random()来生成0-99之间的一个随机数,并且需要用强制转换成整(int)(100*Math.random())。
可先生成两个随机整数,并任意赋给代表最大值的变量maxRandom和代表最小值的变量minRandom,比较它们之间的大小,较大者赋给maxRandom,较小者赋给minRandom。
然后在一个98次的循环体中,每生成一个随机数,放入先定义好的整数数组中,并与maxRandom和minRandom进行比较,若大于maxRandom,则maxRandom被此值所替代,若小于minRandom,则minRandom被此值所替代。
并判断此值是否大于50,是则将用于计数的变量count增1。
4.可预先定义两个变量maxStudent和maxCourse分别记录学生数和课程数量,这里课程数为4。
定义一个二维数组int[][]score=newint[maxStudent][];,每一行代表某一个学生的4门课成绩。
作为实验之用,可利用一个嵌套循环,利用随机数生成的办法,初始化该二维数组。
内循环体中,每生成一个随机数,便进行分数的统计,内循环结束,将该名学生的总成绩放入此行的最后一个元素中。
提高:
(1)利用数据结构中所学的任一种排序,如冒泡法,进行排序输出,任何一种排序方法中,只需要比较每行的最后一个元素来进行行与行的交换。
(2)本例也可以参考第1章中的示例程序,利用键盘输入的方法初始化此二维数组。
5.用两种方法实现。
(1)使用String类的方法,利用循环来实现
(2)使用StringBuilder类,仅仅利用一个方法就可实现
实验二 类与对象
一、实验目的
掌握类的定义,对象的创建,掌握构造函数,封装,static关键字
二、实验内容
1.创建一个Vehicle的类,其UMLclassDiagram如下图所示(其中max_Load和load的单位为kg):
Vehicle
+load:
double
+maxLoad:
double
+Vehicle(max_Load:
double)
+getLoad():
double
+getMaxLoad():
double
编写一个TestVehicle.java程序,使得程序输出为:
creatingavehiclewitha10,000kgmaximumload.
Addbox#1(500kg)
Addbox#2(250kg)
Addbox#3(5000kg)
Addbox#4(4000kg)
Addbox#5(300kg)
Vehicleloadis10050.0kg
2.修改Vehicle类,其UMLclassDiagram如下图所示:
Vehicle
-load:
double
-maxLoad:
double
+Vehicle(max_Load:
double)
+getLoad():
double
+getMaxLoad():
double
+addBox(weight:
double):
boolean
其中,addBox()方法中要检测是否超载,即是否已经超过max_Load,如果超过,该box不能被添加,方法返值为false,否则添加进去,并返值为true。
修改TestVehicle.java程序,使得程序输出为:
creatingavehiclewitha10,000kgmaximumload.
Addbox#1(500kg)
Addbox#2(250kg)
Addbox#3(5000kg)
Addbox#4(4000kg)
Addbox#5(300kg)
Vehicleloadis9750.0kg
3.创建一个类,如下图所示:
Count
-counter:
int=0
-serialNumber:
int
+Count()
+getTotalCount()
其中,counter记录所创建的对象的个数,每次创建一个对象时,其序列号serialNumber为其创建的序号。
设计测试类Count的程序,不使用Count的实例而直接调用getTotalCount()程序输出如下:
Numberofcounteris0
Numberofcounteris1
Numberofcounteris2
4.创建一个二维对象数组,数组中的每个元素为一个学生类的实例,学生类的UML图为:
其中,属性score数组的内容同实验一的第4小题,分数的处理可定义。
Student
-ID:
String
-name:
String
-score[MAXLENGTH]:
float
+Student(ID:
String,name:
String)
+getID():
String
+getName():
String
+setID(Stringid):
void
+setName(Stringname):
void
三、实验步骤:
1.
(1)单击菜单中的“文件”,选择“新建”,在弹出的菜单中选择“JAVA”,出现java程序编辑区域,定义类Vehicle
(2)为类Vehicle按照UML图定义公有成员变量load,maxLoad以及带一个参数的构造函数,在构造函数体中对maxLoad进行初始化。
(3)为类Vehicle按照UML图定义公有成员函数getLoad()和getMaxLoad(),分别返回成员变量load和maxLoad的值。
(4)定义测试类TestVehicle,在main方法中编写代码,实现题目所要求的输出:
可以创建一个Vehicle类的实例,利用System.out.println进行提示输出,每加一个box,增加该实例的成员变量load。
(5)保存为“TestVehicle.java”的文件。
(6)单击菜单中的“工具”,单击“javac“编译此代码,若无误,在“输出窗口”区显示“输出完成(耗时3秒)-正常终止”。
若有误,双击错误提示语句,在程序编辑区光标会自动跳转到有错误的行,检查程序。
记录编译错误提示语句,并写出错误原因及解决方法。
(7)单击菜单中的“工具”,单击“java”执行代码,若无误,会在“输出窗口”区显示所要求的输出结果。
若输出有误,检查程序。
记录运行错误提示语句,并写出错误原因及解决方法。
2.
(1)单击菜单中的“文件”,选择“新建”,在弹出的菜单中选择“JAVA”,出现java程序编辑区域,定义类VehicleUpdate(为与实验一区分开来)
(2)为类Vehicle按照UML图定义私有成员变量load,maxLoad以及带一个参数的构造函数,在构造函数体中对maxLoad进行初始化。
(3)为类Vehicle按照UML图定义公有成员函数getLoad()和getMaxLoad(),分别返回成员变量load和maxLoad的值。
(4)为类Vehicle增加一个成员方法addBox(),在此方法体中,对load进行增加,增加的量为addBox()方法的形参值,并作判断,是否load在添加之后超过了maxLoad所规定的量,若超过,将刚增加的量立即减去,并返回假,否则返回真。
(5)定义测试类TestVehicleUpdate,在main方法中编写代码,实现题目所要求的输出:
可以创建一个VehicleUpdate类的实例,利用System.out.println进行提示输出,每加一个box,调用addBox()方法增加该实例的成员变量load。
(6)保存为“TestVehicleUpdate.java”的文件。
(7)单击菜单中的“工具”,单击“javac“编译此代码,若无误,在“输出窗口”区显示“输出完成(耗时3秒)-正常终止”。
若有误,双击错误提示语句,在程序编辑区光标会自动跳转到有错误的行,检查程序。
记录编译错误提示语句,并写出错误原因及解决方法。
(8)单击菜单中的“工具”,单击“java”执行代码,若无误,会在“输出窗口”区显示所要求的输出结果。
若输出有误,检查程序。
记录运行错误提示语句,并写出错误原因及解决方法。
3.
(1)单击菜单中的“文件”,选择“新建”,在弹出的菜单中选择“JAVA”,出现java程序编辑区域,定义类Count
(2)为类Count按照UML图定义私有成员变量counter,并声明为static型,定义私有成员变量serialNumber,以及无参的构造函数,在构造函数体中,对counter进行增1运算,同时将counter的值赋给serialNumber,以实现题目所要求的“counter记录所创建的对象的个数,每次创建一个对象时,其序列号serialNumber为其创建的序号”
(3)为类Count定义成员方法getTotalCount(),在此需声明为static型,以实现题目所要求的“不使用Count的实例而直接调用getTotalCount()”进行输出
(3)定义测试类TestCount,在main方法中编写代码,实现题目所要求的输出:
可以创建两个VehicleUpdate类的实例,利用System.out.println进行提示输出,在输出中,利用Count.getTotalCount()来返回所创建对象的个数。
(4)保存为“TestCount.java”的文件。
(5)单击菜单中的“工具”,单击“javac“编译此代码,若无误,在“输出窗口”区显示“输出完成(耗时3秒)-正常终止”。
若有误,双击错误提示语句,在程序编辑区光标会自动跳转到有错误的行,检查程序。
记录编译错误提示语句,并写出错误原因及解决方法。
(6)单击菜单中的“工具”,单击“java”执行代码,若无误,会在“输出窗口”区显示所要求的输出结果。
若输出有误,检查程序。
记录运行错误提示语句,并写出错误原因及解决方法。
4.
(1)单击菜单中的“文件”,选择“新建”,在弹出的菜单中选择“JAVA”,出现java程序编辑区域,定义类Student。
(2)为类Student按照UML图定义私有成员变量ID,name,以及一维数组score[]。
(3)为类Student定义带三个参数的构造函数,ID,name分别用于初始化学生的ID号以及name。
在构造函数体中,使用maxCourse的大小来创建score数组,并利用随机数生成的办法初始化此数组(方法同实验一的第4题),并计算总分。
同实验一的第4题,本例也可以在学习了输入输出流后,利用键盘输入的方法初始化此二维数组。
(4)为类Student定义分别取得和设置name,ID,的方法getName(),getID(),setName(),setID()以及返回score数组的方法getScore()
(5)定义测试类TestStudentArray,在main方法体中,创建一个对象数组,对数组的每一个对象元素,使用new进行对象的创建,其参数自行指定,其中学生的数目和课程的数目可以定义两个变量maxStudent和maxCourse来确定,maxStudent任意指定,maxCourse按照题目要求指定为4。
利用Student类提供的成员方法输出排序前的学生ID,姓名以及各科成绩,利用任意一种排序方法进行总成绩的排序,在排序方法中,比较的是每个学生对象的属性-score[]数组的最后一个元素(总分)的值,交换的是每一个对象元素,也即一维数组的每一个元素。
最后同排序前的方法进行排序后的输出。
(6)保存文件名为TestStudentArray.java。
(7)单击菜单中的“工具”,单击“javac“编译此代码,若无误,在“输出窗口”区显示“输出完成(耗时3秒)-正常终止”。
若有误,双击错误提示语句,在程序编辑区光标会自动跳转到有错误的行,检查程序。
记录编译错误提示语句,并写出错误原因及解决方法。
(8)单击菜单中的“工具”,单击“java”执行代码,若无误,会在“输出窗口”区显示所要求的输出结果。
若输出有误,检查程序。
记录运行错误提示语句,并写出错误原因及解决方法。
实验三 继承与多态
一、实验目的
掌握继承、方法重载,方法覆盖,抽象类和接口、super和this关键字,包机制
二、实验内容
1.创建类Employee和类Manager,如下图所示:
Employee
+name:
String=”“
+salary:
double
+birthDate:
Date
+getDetails():
String
Manager
+department:
String
+getDetails():
String
在Employee类中的getDetails()方法输出名字和工资;在Manager类中实现方法覆盖,输出名字、工资及所在部门。
2.修改为类Employee,创建三个构造函数,第一个带一个参数,用以初始化名字;第二个带二个参数,用以初始化名字和工资;第三个带三个参数,初始化名字、工资和出生日期,实现构造函数的重载。
3.在第2题的基础上,修改Manager类,创建三个构造函数,第一个带一个参数,用以初始化部门;第二个带二个参数,用以初始化名字和部门;第三个带三个参数,用以初始化名字、工资和部门;第四个带四个参数,用以初始化名字、工资、出生日期及部门。
练习this和super关键字的应用。
4.创建一个目录,名为banking,类Account(如下图所示)放在banking包中,
Account
-balance:
double
+Account(initbalance:
double)
+getBalance():
double
+deposit(amt:
double)
+withdraw(amt:
double)
建立一个测试程序TestBanking.java,放在缺省包中,完成功能为:
创建一个账户,初始化balance,并做几单简单的交易,最后显示交易后的balance,要求程序运行结果如下:
Creatinganaccountwitha500.00balance.
Withdraw150.00
Deposit22.50
Withdraw47.62
Theaccounthasabalanceof324.88
三、实验步骤
1.
(1)单击菜单中的“文件”,选择“新建”,在弹出的菜单中选择“JAVA”,出现java程序编辑区域,定义类Employee。
为类Student按照UML图定义protected的成员变量name,salary和birthDate,以及公有成员方法getDetails(),此方法用于输出name,salary和birthDate。
(2)定义类Manager,继承Employee,增加一个成员变量department,并覆盖getDetails()方法,用于输出name,salary,birthDate和department。
在getDetails()方法体中使用super关键字调用父类的getDetails()方法,以避免重复代码进行输出name,salary,birthDate。
(3)定义测试类TestEmployeeManager,创建一个Manager实例,调用getDetails()方法进行输出。
(4)保存为TestEmployeeManager.java
(5)单击菜单中的“工具”,单击“javac“编译此代码,若无误,在“输出窗口”区显示“输出完成(耗时3秒)-正常终止”。
若有误,双击错误提示语句,在程序编辑区光标会自动跳转到有错误的行,检查程序。
记录编译错误提示语句,并写出错误原因及解决方法。
(6)单击菜单中的“工具”,单击“java”执行代码,若无误,会在“输出窗口”区显示所要求的输出结果。
若输出有误,检查程序。
记录运行错误提示语句,并写出错误原因及解决方法。
2.
(1)同第1题
(1),并增加三个构造函数,进行构造函数的重载。
在构造函数体中,利用this关键字调用本类的另外的构造函数。
其余步骤同第1题。
3.
(1)同第2题
(2)同第1题
(2),并增加四个构造函数,进行构造函数的重载。
在构造函数体中,使用super关键字调用父类的构造函数。
其余步骤同第1题
4.
(1)单击菜单中的“文件”,选择“新建”,在弹出的菜单中选择“JAVA”,出现java程序编辑区域,定义类为Account
(2)为类Account定义私有成员变量balance,初始化balance的构造函数,以及成员方法getBalance()(返回balance的值),deposit()(存入amt,balance的值增加amt),withdraw()(取出amt,balance的值减少amt)
(3)保存为Account.java。
使用javac–d.Account.java来编译,或者在EditPlus中再配置一个工具,
菜单名字:
javac-d
命令:
D:
\j2sdk1.4.2_04\bin\javac.exe(此为本机上安装的jdk目录)
参数:
-d.$(FileName)
初始目录:
$(FileDir);
选中“捕获输出”。
则会自动在当前目录下创建一个banking子目录,类文件存于此子目录下。
(3)定义测试类TestBanking,引入banking.Account类,创建一个Account的实例,调用其成员方法进行存入取出,最后输出。
保存为TestBanking.java。
注意,如果importbanking.*,则Account.java文件不能和TestBanking.java文件放在同一路径下。
但如果是importbanking.Account,则无此限制。
(4)运行输出。
记录此过程中出现的总是,并记录解决的方法。
实验四综合应用
基于MVC框架进行javaweb编程
一、实验目的
掌握MVC框架进行javaweb编程的基本原理
二、实验内容
创建一个web程序,主页面是登录页面,输入用户名和密码后,与数据库中的记录进行比较,用户名和密码正确,即显示该用户名登录成功,否则显示该用户名登录失败。
基于Myeclipse环境,使用mysql数据库
三、实验步骤
(1)新建webproject
(2)View层代码:
登录页面login.jsp,内容为:
输入用户名和密码
登录成功页面main.jsp,内容为:
提示该用户名登录成功
登录失败页面:
register.jsp,内容为:
提示该用户名登录失败
(3)Controller层代码:
LoginServlet.java:
用来处理从view传来的用户请求,将请求发给业务逻辑代码LoginHandler处理处理完成后,再将处理结果交由view显示
(4)Model层代码
LoginHandler.java:
业务处理逻辑代码,与数据库交互,判断用户名和密码是否一致。
DBPool.java:
用来进行数据库连接
db.properties:
数据库连接属性文件。
(5)配置web.xml
(6)布署到tomcat服务器
(7)浏览器下运行,测试。
附参考代码:
login.jsp:
UserName:
Password:
main.jsp
<%=session.getAttribute("username")%>lo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 面向 对象 程序设计 实验 指导书