资源描述
《Java程序设计实验指导书》
《Java程序设计》
实验指导书
武汉科技大学信息科学与工程学院
《Java程序设计》实验教学大纲
实验课程名称:Java程序设计 英文名称:The Java Programming Language
实验课程性质:非独立设课 应开实验学期:6
课程编码:0402004 实验学时数:10
适用专业:电子信息工程
一、实验教学目的和要求
《JAVA程序设计》是一门实践性很强的专业课程。通过上机实验,不仅可以帮助学生较好地掌握Java语言和面向对象程序设计的基本概念、基本方法和技巧,同时也可培养学生独立设计程序的能力,理解面向对象的编程思想。
实验教学目的:
1. 使学生通过实验,验证书本和课堂教学内容:逐步理解、体会、消化、巩固和补充课堂所学主要内容;
2. 培养学生设计与动手能力:通过设计性的实验任务,通过实践环节理解 Java语言的基本结构和程序设计方法。通过亲手编程掌握 Java 语言编程的方法,从而提高学生的分析问题、解决问题的能力和动手能力。
通过实验,要求学生应达到以下实验能力与标准:
1. 熟练掌握Java程序的编辑、编译、运行步骤及程序调试的方法,熟练运用Java语言进行面向对象程序设计
2. 深入理解面向对象的封装、继承和多态等特性
3. 利用Java语言进行异常处理
4. 能利用Java语言进行磁盘数据文件的建立及读写操作编程。
5. 利用Java语言实现多线程编程。
二、 主要仪器设备(所开实验的主要仪器设备)
每个学生上机使用一台PC机进行程序开发,PC机的硬件、软件环境如下:
1)硬件:CPU P4 3.0GHZ 256M内存,80G 硬盘空间。
2)软件:
操作系统:Windows XP
开发工具:MyEclipse 8.5、Jsdk1.6.1_02软件开发包
三、实验项目名称和学时分配
序号
实验项目名称
学时
分配
实验
属性
实验
类型
实验者类别
必开/选开
1
初步的面向对象的程序设计
2
专业类
设计性
本科生
必开
2
面向对象程序设计
2
专业类
设计性
本科生
必开
3
异常类的定义及处理
2
专业类
设计性
本科生
必开
4
流、文件及基于文本的应用
2
专业类
设计性
本科生
必开
5
综合设计
2
专业类
设计性
本科生
必开
四、实验课考核方式
1.实验报告:
每位同学必须独立书写实验报告,注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。实验报告的内容应包括以下几个部分:
1) 按照实验内容和实验步骤要求完成实验任务后,若程序已通过实验指导教师验收,则只在报告中重点给出调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等);若程序未完全通过验收,则需再此基础上提交包含详细注释的源程序清单。
2) 根据思考题要求,重点描述需求分析、概要设计和详细设计过程,并提交包含详 细注释的源程序清单,最后详细描述程序调试分析过程。
2.考核方式
2.1 实验课成绩根据学生的实验预习、实验纪律、实验动手能力、实验结果和实验报告等几个部分进行综合评定,并给出优、良、中、及格和不及格共五档成绩。
2.2 实验课成绩占课程总成绩的25%。
五、实验指导书及主要参考书
[1] 蔡翠平 主编 唐大仕 编著,ááJAVA程序设计(修订本) ññ ,北方交通大学出版社 清华大学出版社,2007年.
[2] 侯捷译,JAVA编程思想(第二版),机械工业出版社,2002.
[3] 丁振凡,Java语言实用教程,北京邮电大学出版社,2005.
[4] 丁振凡,Java语言实用教程实验指导,北京邮电大学出版社,北京,2006
一、综合设计题目
某小型公司,主要有三类人员:经理、兼职技术人员和兼职推销员。
这三类人员共同拥有的相关属性:姓名、编号; 相关方法:获取当月薪水的getPay()方法、显示个人信息的toString()方法。
人员编号基数为1000,每创建一个人员实例对象,其编号属性的值顺序加1。月薪计算方法:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销人员的月薪按当月的销售额的4%提成。
要求:结合本课程所学知识点,采用面向对象的编程思想,结合题意自己确定需要定义的类及各类的属性、构造方法和其他方法,并编写Java Applcation程序实现功能:
1. 查询职工个人信息,可通过姓名、编号查询
2. 查询部门所有职工的详细信息
3. 修改职工信息;
4. 删除职工信息;
5. 添加职工信息
6. 查询所有职工信息,并将其存储到职工信息文件EmployeeData.txt中;
二、初步的面向对象的程序设计 (实验1)
1、实验目的
1) 掌握类和构造方法的定义。
2) 掌握创建类实例的方法。
3) 初步掌握面向对象的编程思想
2、实验内容
1) 编写一个Java Application,利用JDK软件包中的工具在命令行方式下编译并运行这个程序,使之能够输出字符串信息“Hello World! ”。(注:其后的所有实验如无特别说明,均是在MyEclipse8.5环境下编译执行)
2) 编写程序实现如下功能:已知学生类有域变量(姓名、考号、综合成绩、体育成绩)和方法(获取综合成绩、获取体育成绩、显示基本信息),学校类有静态变量(录取分数线)和方法(设置录取分数、获取录取分数线),录取类有方法(获取学生是否符合录取条件,其中录取条件为综合成绩在录取分数线之上,或体育成绩在96分以上并且综合成绩大于300分)。现要求编写程序输出一组学生对象中被某学校录取的学生基本信息。
3、实验步骤
1) 编写一个Java Application,利用JDK软件包中的工具编译并运行这个程序。
步骤(1):编写、编译Java 源程序。
打开MyEclipse,新建一个java文件,键入如下程序代码:
public class Hello
{
public static void main(String args[])
{System.out.println("Hello,World!");}
}
将文件命名为Hello.java,注意保存文件Hello.java到路径“e:\自己学号\java\”下。
步骤(2):编译Java 源程序
打开命令提示符窗口(MS-DOS 窗口)进入Java 源程序所在路径e:\自己学号\java\”。键入编译器文件名和要编译的源程序文件名,具体如下:
Set path=%path%;c:\program files\jdk1.6.0_02\bin;
javac -d class Hello.java
按回车键开始编译(注意:文件名H 要大写,否则运行会出问题)。如果源程序没有错误,则屏幕上没有输出,键入 “dir”按回车键后可在当前目录中看到生成了class子目录,在class子目录下有一个同名字的.class 文件即“Hello. class”。否则,将显示出错信息。
步骤(3):运行Java 程序
在命令提示符窗口或MS-DOS 窗口键入解释器文件名和要解释的字节码文件名:java –classpath e:\自己学号\java\class Hello
按回车键即开始解释并可看到运行结果。
2) 编写程序实现如下功能:已知学生类有域变量(姓名、考号、综合成绩、体育成绩)和方法(获取综合成绩、获取体育成绩、显示基本信息),学校类有静态变量(录取分数线)和方法(设置录取分数、获取录取分数线),录取类有方法(获取学生是否符合录取条件,其中录取条件为综合成绩在录取分数线之上,或体育成绩在96分以上并且综合成绩大于300分)。现要求编写程序输出一组学生对象中被某学校录取的学生基本信息。(注意:这个程序可以直接在Eclipse集成编辑环境中完成)
步骤(1):定义类Stduent,并添加如下域变量:
String name; String id; float comScore; float score ;
步骤(2):在类Student中添加如下方法,并编写代码实现具体方法的功能:
Student(String name,String id, float comScore, float score){… …}
float getcomScore(){ … …}
float getscore(){… …}
void print(){… …}
步骤(3)定义类School,并添加静态变量
static float scoreLine;
添加静态方法
static float getScoreLine(){……}
static void setScoreLine(float score){……}
步骤(4)定义一个Application程序类Enroll并添加方法:
public static void main(String args[]){……}
static boolean isEnroll(Student s){……}
步骤(5)保存文件名为Enroll.java, 然后编译、调试和运行程序。
4、思考题
围绕综合设计题目,完成第一个任务:
(1)定义三个类Saler、Manager和Techer。
(2)分别创建三个类的对象,实现对象信息的打印输出。
三、面向对象程序设计(实验2)
1、实验目的
1) 掌握类的继承机制。
2) 熟悉类中成员变量和方法的访问控制。
3) 熟悉方法或构造方法多态性。
4) 熟悉接口的定义方法。
2、实验内容
1) 编写程序实现如下功能:已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(修改年龄、显示基本信息)及一个构造方法。定义一组学生对象,并初始化他们的基本信息,然后依次输出。
2) 输入课本例5-4的源程序,观察其运行结果,然后将Shape类分别定义为一个抽象类和接口,然后将源程序进行修改,让其实现相同功能。
3、实验步骤
1) 编写程序实现如下功能:已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(构造方法、修改年龄、显示基本信息)和一个构造方法。定义一组学生对象,并初始化他们的基本信息,然后依次输出。
步骤(1):定义类Person,并添加以下公共域变量
public String name; public char sex; public int age;
添加构造方法Person(String name,char sex,int age){……}
步骤(2):基于类Person派生类Student,并添加如下公共域变量和方法
public String classno; public String sno;
public void updateAge(int age){……}
void toString(){… …}
Student(String name,char sex,int age,String sno,String name)
{ super(name,sex,age);
… ….
}
步骤(3):定义一个包含main方法的Application程序类TestStudentPerson,初
始化一个学生类对象数组,并利用循环语句显示所有学生基本信息。
4、思考题
围绕综合设计题目,完成第二个任务:
(1)思考已定义的三个类Saler、Manager和Techer的公共属性和方法,考虑定义三个类的基类Employer类,然后Saler、Manager和Techer是Employer类的子类。根据系统需求修改实验一的程序,。
(2)定义Employer类对象数组,存储管理一组雇员,并实现遍历所有雇员的信息功能。
(3)定义CEmployerSet类,其有addNewEmployer、updateEmployer、deleteEmployer、listAllEmployer方法
四、 异常类的定义及处理(实验3)
1、实验目的
1) 了解异常处理方法。
2) 熟悉并掌握常见异常的捕获方法。
3) 熟悉JDK中已经定义的若干异常类的层次结构。
4) 掌握自定义异常类的创建方法。
2、实验内容
编写程序实现如下功能:生成并捕获到NegativeArraySizeException和IndexOutOfBoundsException类型的异常,并显示捕获到的异常信息。然后在此基础上生成并捕获到NullPointerException类型的异常,并显示捕获到的异常信息。
参考知识:常见的系统异常
(1) ArithmeticException
(2) ArrayIndexOutOfBandsException
(3) ArrayStoreException
(4) IOException
(5) FileNotFoundException
(6) NullPointerException
(7) MalformedURLException
(8) NumberFormatException
(9) OutOfMemoryException
1)翻译下列常用异常类的描述信息
OutOfMemoryError
A class instance creation expression, array creation expression , or string concatenation operatior expression throws an OutOfMemoryError if there is insufficient memory available.
NegativeArraySizeException
An array creation expression throws a NegativeArraySizeException if the value of any dimension expression is less than zero.
NullPointerException
A field access throws a NullPointerException if the value of the object reference expression is null.
A method invocation expression that invokes an instance method throws a NullPointerException if the target reference is null.
An array access throws a NullPointerException if the value of the array reference expression is null.
ArrayIndexOutOfBoundsException
An array access throws an ArrayIndexOutOfBoundsException if the value of the array index expression is negative or greater than or equal to the length of the array.
ClassCastException
Thrown to indicate that the code has attempted to cast an object to a subclass of which it is not an instance. For example, the following code generates a ClassCastException:
Object x = new Integer(0);
System.out.println((String)x);
ArithmeticException
Thrown when an exceptional arithmetic condition has occurred. For example, an integer "divide by zero" throws an instance of this class.
ArrayStoreException
An assignment to an array component of reference type throws an ArrayStoreException when the value to be assigned is not compatible with the component type of the array.
NoSuchFieldException
Signals that the class doesn't have a field of a specified name.
NoSuchMethodException
Thrown when a particular method cannot be found
NumberFormatException
Thrown to indicate that the application has attempted to convert a string to one of the numeric types, but that the string does not have the appropriate format.
FileNotFoundException
Signals that an attempt to open the file denoted by a specified pathname has failed.
IOException
Signals that an I/O exception of some sort has occurred. This class is the general class of exceptions produced by failed or interrupted I/O operations
3、实验步骤
1)编写程序实现如下功能:生成并捕获到NegativeArraySizeException和IndexOutOfBoundsException类型的异常,并显示捕获到的异常信息。然后在此基础上生成并捕获到NullPointerException类型的异常,并显示捕获到的异常信息。
步骤(1):编写一个包含main方法的Application类TestException,然后定义一个方法
void arraySize(){……}生成并捕获NegativeArraySizeException异常。
步骤(2):添加一个方法
void outofBound(){……}生成并捕获IndexOutOfBoundsException异常。
步骤(3):添加一个方法
void nullPointer(){……}生成并捕获IndexOutOfBoundsException异常。
步骤(4):在main方法中分别调用以上三个方法。
步骤(5):将文件保存为TestException.java,然后编译、调试应用程序。
步骤(6):将outofBound()方法中捕获异常的语句注释掉,重新编译程序,看看会不会有什么语法错误?如果没错误,执行程序看结果有什么不同?
步骤(7):将array方法重新定义为如下形式:
void arraySize() throws NegativeArraySizeException{……}
然后修改arraySize方法中捕获NegativeArraySizeException异常的语句执行部分。
4、思考题
1)编写一个程序,用于根据用户输入的命令行参数数量来计算长方形、正方形、三角形的面积。如果输入的参数个数为1、2、3则它们应分别对应正方形、长方形、三角形,如果参数值为0,则异常处理方法显示错误消息。
[提示]:自己定义一个异常类,表示参数个数0这一异常。然后定义一个抽象的父类,并提供一个抽象的方法area(),再派生出三个子类,重写area方法,最后在main方法中编写测试逻辑。
五 流、文件及基于文本的应用(实验4)
1、实验目的
1) 理解数据流的概念。
2) 理解Java流的层次结构。
3) 理解并掌握文件的读写操作方法。
2、实验内容
1) 编写一个java Application程序,接受用户输入的10个整数,比较并输出其中的最大值和最小值。
3、实验步骤
1) 编写一个java Application程序,接受用户输入的10个整数,比较并输出其中的最大值和最小值。
步骤(1):定义一个包含main方法的Application类MaxMinClass。
步骤(2):在MaxMinClass类中添加如下两个方法,分别求取10个整数的最大值和最小值:
static int maxInt(int data[],int n){……}
static int minInt(int data[],int n){……}
步骤(3):在main方法中从键盘输入10个整数存放到数组data中,然后调用maxInt、minInt方法求取最大值和最小值,最后输出最大值和最小值。
步骤(4):保存文件MaxMinClass.java,然后编译、调试程序。
4、思考题
围绕综合设计题目,完成第四个任务:
(1)思考定义一个CDataAccess类,其有save、load方法。save功能是将所有雇员信息写到外部EmployerData.txt文件中。load功能是读取EmployerData.txt文件数据。
(2)思考如何和前面已经写好的程序关联。即原来写的程序中哪里调用CDataAccess类的以上方法?
六 综合设计(实验5)
1、实验目的
引导学生采用面向对象的编程思想来分析、编写、调试一个综合实验项目程序,培养学生的实际工程应用能力,
2、实验内容
某小型公司,主要有三类人员:经理、兼职技术人员和兼职推销员。
这三类人员共同拥有的相关属性:姓名、编号; 相关方法:获取当月薪水的getPay()方法、显示个人信息的toString()方法。
人员编号基数为1000,每创建一个人员实例对象,其编号属性的值顺序加1。月薪计算方法:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销人员的月薪按当月的销售额的4%提成。
要求:结合本课程所学知识点,采用面向对象的编程思想,结合题意自己确定需要定义的类及各类的属性、构造方法和其他方法,并编写Java Applcation程序实现功能:
(1) 查询职工个人信息,可通过姓名、编号查询
(2) 查询部门所有职工的详细信息
(3) 修改职工信息;
(4) 删除职工信息;
(5) 添加职工信息;
(6) 查询所有职工信息,并将其存储到职工信息文件EmployeeData.txt中;
3、实验要求
(1)在前面已完成综合设计部分的基础上,添加界面程序部分,实现系统所有功能要求。
(2)可选题
l 自学书本第10章,实现图形化界面操作功能。
l 结合你们本学期要学的数据库系统课程、自学书本第11章的数据库编程部分,重写CDataAccess类的save、load方法,将所有雇员信息添加到某一数据库中。(数据库可以是Access、Sqlserver、oracle、mysql中的任何一种)
18
展开阅读全文