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(valuethis.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;
}