《Java程序设计》课内实验指导书.docx

上传人:b****2 文档编号:24191648 上传时间:2023-05-25 格式:DOCX 页数:20 大小:489.10KB
下载 相关 举报
《Java程序设计》课内实验指导书.docx_第1页
第1页 / 共20页
《Java程序设计》课内实验指导书.docx_第2页
第2页 / 共20页
《Java程序设计》课内实验指导书.docx_第3页
第3页 / 共20页
《Java程序设计》课内实验指导书.docx_第4页
第4页 / 共20页
《Java程序设计》课内实验指导书.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

《Java程序设计》课内实验指导书.docx

《《Java程序设计》课内实验指导书.docx》由会员分享,可在线阅读,更多相关《《Java程序设计》课内实验指导书.docx(20页珍藏版)》请在冰豆网上搜索。

《Java程序设计》课内实验指导书.docx

《Java程序设计》课内实验指导书

北京理工大学珠海学院

计算机学院

《Java程序设计》课内实验指导书

 

 

撰写:

赵卓君

2015年6月

实验一:

Java基本语法

一、实验目的:

熟悉Java程序的结构,并能完成一些基本的算法操作。

熟悉Java程序的if-else、switch-case语句、循环语句以及数组的用法。

二、实验要求:

1、编写一个JavaApplication程序,循环打印如下图所示图案:

【提示】可以将一个整数看成是ASCII码,转换为对应的字符。

如:

(char)65得到ASCII码65对应的字符“A”

2、

编写一个Java程序,接受用户输入的一个1~12之间的整数月份,利用switch语句输出对应月份的天数。

(提示:

在DOS命令窗口里编译运行该程序,如图所示:

intmonth=Integer.parseInt(args[0]);//在程序中用该行代码获得输入的月份

3、定义一个包含10个整数的数组,求该数组中的最大值、最小值、平均值与总和。

提示:

在DOS命令窗口里编译运行该程序,如图所示:

//获取命令行输入的10个整数

int[]ary=newint[10];

for(inti=0;i

ary[i]=Integer.parseInt(args[i]);

实验二:

面向对象编程

一、实验目的:

熟练掌握类的创建与使用,理解封装与抽象的概念,理解信息隐藏以及4种访问控制修饰符的用法,熟练掌握构造方法的用法。

二、实验要求:

1.问题描述

Ø狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。

狗通常的时候和人打招呼会通过“摇摇尾巴”,在被抚摸感到舒服的时候,会“旺旺叫”,而在受到惊吓情绪烦躁时,会发出“呜呜”声;

Ø猫也生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。

猫通常的时候和人打招呼会发出“喵~”的声音,在被抚摸情绪很好时,会发出“咕噜咕噜”声,而在受到惊吓时,会发出“嘶嘶”声;

Ø青蛙是一种两栖动物(既是水生动物也是陆生动物),既不是哺乳类的也不是肉食性的,属于卵生。

当青蛙情绪好的时候,会在岸边“呱呱呱”的唱歌,而在受到惊吓时,会“扑通一声跳入水中”

2.问题分析

Ø首先需要抽取问题描述中对象

Ø分析每个对象所具有的特征

Ø分析每个对象所发出的动作

Ø从这些对象的特征中,抽取类的属性和方法

Ø分析类之间的关系,画出类结构图

3.抽象类和对象的基本方法:

Ø抽取对象的基本的方法:

找出句子中所使用的名词

例如:

在句子“小猫喵喵叫”中,我们能够确定一个对象:

猫;

Ø确定对象发出的行为动作的基本的方法:

找出句子中的动词

例如:

“旺旺叫”、“喵喵叫”都属于对象发出的动作;

Ø确定对象的属性或者特征的基本的方法:

找出句子中的形容词

例如:

“哺乳性的”、“肉食性的”、“卵生的”等等;

Ø“是”的关系一般抽象为继承

例如:

狗是一种动物,意味着:

“狗”类继承自“动物”类;

Ø“有”的关系一般抽象为类的属性

例如:

动物都有情绪,意味着:

“情绪”是“动物”类的一个属性;

4.类关系图

5.阶段划分

Ø第一阶段:

不考虑情绪影响动物打招呼的方式

⏹编写Animal类,没有mood属性,只有一种SayHello方法;

⏹编写Dog类、Cat类和Frog类,分别继承自Animal类,实现与Animal类不同的功能;

⏹编写main方法,分别实例化以上三个类的三个对象,测试类方法实现的正确性;

Ø第二阶段:

考虑情绪影响动物打招呼的方式

⏹扩充Animal类、Dog类、Cat类和Frog类,增加Animal类的mood属性,并实现sayHello方法的多态性

⏹扩充main方法;

Ø第三阶段:

考虑陆生动物和水生动物

⏹定义LandAnimal接口和WaterAnimal接口;

⏹扩充Dog类、Cat类和Frog类,使其实现相应的接口;

⏹扩充main方法;

6.程序运行结果

三、总结

Ø通过本次项目案例练习了面向对象的Java实现,基本囊括了面向对象的三大特征:

封装、继承、多态

Ø巩固的知识点

⏹Java基本的程序结构;

⏹类和对象;

⏹类的封装,包括修饰符的使用private/public/protected);

⏹抽象类、抽象方法(abstract关键字);

⏹final关键字;

⏹类的继承(extends关键字);

⏹接口的定义和实现(interface/implements关键字);

⏹多态;

实验三:

异常

一、实验目的:

掌握Java异常的处理机制包括多重catch块的使用,理解掌握Java中自定义异常和断言的使用

二、异常处理

1、在以下给出Java代码基础上,添加异常处理机制的代码,使得代码在出现异常时能正常结束程序的运行。

publicclassLab4_1{

publicstaticvoidmain(String[]args){

floata[]=newfloat[5];

floatsum=0;

for(inti=0;i

a[i]=Float.parseFloat(args[i]);

System.out.println("第"+(i+1)+"门课程的成绩是:

"+a[i]);

sum=sum+a[i];

}

System.out.println("总成绩是:

"+sum);

floatavg=sum/a.length;

System.out.println("平均成绩是:

"+avg);

}

}

(提示:

使用多重catch块)

2、为一个公司编写一个奖金计算程序,用2010减去某位员工入职的年份来计算该员工的在该公司工作的工龄,如果工龄为零,即当年才入职的员工,奖金为其一个月的工资;如果工龄没超过3年,奖金为其月工资乘以1.3;如果工龄为3年以上5年以下,奖金为其月工资*1.5;如果工龄为5年以上,奖金为其月工资*2。

计算公式如下:

Ø工龄不足一年:

奖金=工资

Ø工龄不足3年:

奖金=工资*1.3

Ø工龄3年以上、5年以下:

奖金=工资*1.5

Ø工龄5年以上:

奖金=工资*2

该程序需要入职的年份和月工资作为程序的输入数据,输出是该员工的奖金。

如果输入的年份比2010年大或者是负数或无效的字符串,则抛出一个自定义异常(IllegalYearException),并输出“无效入职年份”;如果输入的工资低于500或负数或者抛出一个自定义异常(IllegalSalaryException),并输出“无效月工资”。

因此该程序需要定义两个用户自定义异常。

当有无效的入职年份或月工资数据输入时,程序显式抛出自定义异常。

实验四:

util包和集合框架

一、实验目的:

理解Random类及其中的方法,并能实际应用。

通过实验,熟悉Collection接口、List接口、Set接口的常用方法,并学会应用。

熟悉Map接口的方法,学会运用HashMap、TreeMap类解决实际问题。

二、实验要求:

1、编写程序模拟掷骰子游戏:

同时投掷两个骰子5000次。

每个骰子上共有从1到6的6个数,计算每次投掷结果两个骰子的数值之和,并统计和输出每种可能的结果在模拟过程中出现的总次数。

实验运行效果:

解题思路:

⏹每次掷两个骰子的最小和是2,最大是12,一共有11个可能的和

⏹这11个可能的和出现的次数可以放在一个整型数组里

⏹用随机数每次生成2个1~6之间的随机数表示掷两个骰子

2、有集合A={1,2,3,4}和B={1,3,7,9,11},编写一个应用程序输出A和B交集、并集和差集。

实验运行效果:

试验运行效果:

⏹并集是指两个集合合并,但是去掉重复的元素的集合。

可以使用HashSet类的addAll的方法将两个集合合并

⏹交集是指两个集合中都有的元素组成的集合,可以使用HashSet类的retainAll的方法得到两个集合的交集

⏹差集是指属于A集合但是不属于B集合的元素组成的集合

3、按学生人数对高校排名:

珠海有几所普通高等院校,分别是北京理工大学珠海学院,北京师范大学珠海学院、吉林大学珠海学院、中山大学珠海分校、暨南大学珠海分校,现要求按照他们的学生人数对这几所大学按降序排序,效果如下:

程序结构:

importjava.util.*;

//大学类

classUniversityimplementsComparable{

StringuniName;//学校名称

intpopulation;//学生人数

//构造方法

……

//重写compareTo方法

publicintcompareTo(Objecto){

……

}

}

实验五:

io包和输入输出

一、实验目的:

熟练掌握输入流和输出流的使用方法。

二、实验要求:

1.写入文件:

从标准设备中输入若干行英文句子直到输入“bye”结束,将这些字符串写入文件。

2.实验运行结果:

解题思路:

1)先构造输入输出流

Filef=newFile("myfile.txt");

BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));

BufferedWriterbw=newBufferedWriter(newFileWriter(f));

2)在循环中使用br的readLine()方法从控制台读取一行,将读到的字符串和“bye”进行比较。

3)如果比较结果不等于“bye”则将读到的字符串用bw的write(Strings)写入文件。

4)如果比较结果等于“bye”则break跳出循环

5)整个读写过程需要捕获异常

3.从文件中搜索内容:

在刚输入的文件中查找单词,打印出包含了欲找单词的所有文本行

解题思路:

1)创建2个输入流,一个输入流从控制台读取用户的输入,一个输入流从文件中读取每一行

2)然后用字符串的indexOf()方法来搜索

System.out.println("Pleaseenterthecharacterwhatyouwanttosearch:

");

while(str!

=null){

if(str.indexOf(strSearch)!

=-1){

System.out.println(str);

}

str=br.readLine();

}

实验六:

GUI+JDBC编程

一、实验目的:

掌握Java图形用户界面的设计,和Java的事件处理机制。

掌握JDBC数据库访问技术,包括对数据库里的数据的增删改查,并开发一个图书信息管理系统。

一、实验要求:

在SQLServer里新建一个名为BookDB的图书数据库,并创建Book、Reader、Borrow三张表,表中字段的设计如下表

表6-1:

数据库表设计说明

表名

字段

数据类型

说明

Book(图书)

BookID

varchar(20)

图书编号(主键)

BookName

varchar(100)

图书名称

Author

varchar(50)

作者

Press

varchar(50)

出版社

PressDate

datetime

出版日期

Status

char(4)

图书在库的状态(在库或借出)

Reader(读者)

ReaderID

varchar(20)

读者编号(主键)

ReaderName

varchar(50)

读者姓名

Sex

char

(2)

性别

Phone

varchar(20)

联系电话

Address

varchar(20)

联系地址

Borrow(借阅)

BorrowID

int

借阅编号(自动增长标识列,主键)

BookID

varchar(20)

图书编号(外键,引用Book表中的BookID)

ReaderID

varchar(20)

读者编号(外键,引用Reader表中的ReadaerID)

BorrowDate

datetime

借阅时间

ReturnDate

datetime

还书时间

Memo

text

备注

三张表之间的关系如图6-1和图6-2:

图6-1图书管理数据库表的设计

图6-2图书管理数据库表的关系图

 

在每张表中分别输入几行数据(便于进行测试),如图6-3:

图6-3Book、Reader、Borrow表中的数据

在NetBean创建一个Java工程,使用纯Java方式连接数据库,并对Book表中的数据进行维护(如图6-4所示)和查询(如图6-5所示)。

Reader和Borrow表中的维护和查询请参照图书信息维护的界面设计。

图6-4图书信息维护界面设计

图6-5图书信息查询界面设计

实验七:

多线程

一、实验目的:

使用线程来控制动画。

熟练掌握线程的创建、状态控制等用法,理解线程的使用机制。

二、进度条

1.要求:

显示一个进度条,开始运行程序时,每隔一秒进度条向前移动一步,当进度条走完毕弹出对话框,点击确定,进入下一个方块移动界面

2.运行效果

三、方块移动倒计时

1.要求:

Ø用JBuilder2006做一个方块移动倒计时游戏,界面设计如图所示:

Ø上面的时钟进行倒计时,每隔一秒就减少一秒。

Ø下面的方块可以在方框里随机漂浮移动,但是不允许移出方框。

Ø当按下“暂停”按钮,倒计时暂停计时,方块也停止移动。

按钮表面上的文字变成“继续计时”。

Ø当按下“继续计时”按钮,倒计时继续计时,方块也继续移动。

Ø当倒计时显示“时间到!

”,方块也停止移动

2.运行效果

进度条组件:

进度条组件重要属性和方法

pgb.setMinimum(0);//设置进度条最小值

pgb.setMaximum(100);//设置进度条最大值

intmin=pgb.getMinimum();//获取进度条最小值

intmax=pgb.getMaximum();//获取进度条最大值

intvalue=pgb.getValue();//获取进度条当前值

进度条功能代码片段:

while(true){

intvalue=pgb.getValue();

value++;

pgb.setValue(value);

if(value

this.sleep(50);//线程休眠50ms

}else{

this.interrupt();

JOptionPane.showMessageDialog(null,"加载完毕","系统提示",

JOptionPane.INFORMATION_MESSAGE);

……//打开方块移动代码

}

}

正方形移动的代码片段

pnl.setLocation(x,y);

try{

Thread.sleep(50);

}catch(InterruptedExceptionex){

ex.printStackTrace();

}

if(flag1){

x++;

if(x>=350){

x=350;

flag1=false;

}

}else{

x--;

if(x<=0){

x=0;

flag1=true;

}

}

if(flag2){

y=y+2;

if(y>=350){

y=350;

flag2=false;

}

}else{

y=y-2;

if(y<=0){

y=0;

flag2=true;

}

}

if(lbl.getText().equals("时间到!

")){

running=false;

}

暂停继续的代码片段:

booleanrunning=true;

publicvoidbtn_actionPerformed(ActionEvente){

if(running){

btn.setText("继续计时");

lbl.setBackground(Color.YELLOW);;

mt.suspend();

t.suspend();

}else{

btn.setText("暂停");

lbl.setBackground(Color.GREEN);

mt.resume();

t.resume();

}

running=!

running;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1