Java异常和界面设计
一、 实验目的
1、掌握异常的概念、作用、分类和进行异常处理的语法结构。
2、了解系统异常类的体系和系统定义的常见标准异常。
3、掌握用户自定义异常类的定义和抛出异常的方法。
4、通过掌握异常来分析调试程序的编译错误和编写更健壮的程序。
5、掌握常用窗体的使用方法,标签上设置图标的方法、应用程序中的布局管理器的方法、常用面板、桉钮组件、列表组件、文本组件。
6、学会常用事件监听器的使用方法
二、实验内容与要求
1、标准异常使用:
(1) 设计一个类,在其main方法中定义一个10个元素的int数组。从键盘输入11个int数,存储到数组中。运行程序,观察是否又异常产生,异常产生时程序运行是否被中断,编译器产生了怎样的提示。
(2) 在main方法中对产生的异常进行捕捉处理,观察程序是否被中断。
2、自定义异常:
设计一个类,在其main方法中,输入任意多个0到100范围的数,并累加10个数的和,要求如果输入不符合这个范围的数则抛出异常。请自定义一个异常类(DataOutOfBoundsException)来表示这种情况,并在用户的输入不符合要求时抛出该异常,同时处理该异常。
3、设计界面程序,
通过界面添加学生信息到StuClass对象中;根据学号从StuClass对象查找学生信息,并在界面显示;对查找到的学生信息通过界面修改,并保存到StuClass对象中。
(1)定义一个学生类Student,包括:
成员变量:no:学号
name:姓名
sex:性别
math:数学成绩
java:java成绩
english:英语成绩
mean:平均分数
成员方法:无参数构造方法 Student();
有参数构造方法Student(String no,String name,boolean sex,float math,float java,float english);
设置除mean外的其他成员变量的方法:setNo(String no);setSex(String sex);setMath(float math);setJava(float java);setEnglish(float english)
获取成员变量的方法:getNo(); getSex(); getMath(); getJave(); getEnglish(); getMean();
(3) 定义一个StuClass类,包括:
成员变量: Student[] stu: 学生数组;
int n:学生数组大小;
int num: 学生人数;
javaMean:Java平均分;
englishMean:英语平均分;
mathMean:数学平均分;
成员方法:构造方法:无参数构造方法:StuClass ():构造可以存放10个学生的对象;有参的构造方法:StuClass(int n):按照指定大小构造学生数组;
Void setStudentAt(int index, Student stu):设置位置index的学生的值;
Student getStudentAt(int index)获取位置index的学生;
Int searchbyNo(String no)根据学生姓名查找学生,返回数组索引号。
boolean addStudent(Student stu):在数组末尾添加一个学生对象
(4) 设计界面实现如下功能:
a) 通过界面添加学生信息到StuClass对象中;
b) 根据学号从StuClass对象查找学生信息,并通过界面显示;
c) 对查找到的学生信息通过界面修改,并保存到StuClass对象中。
三、实验结果
1.
package com;
import java.util.Scanner;
public class shijian51 {
@SuppressWarnings("unused")
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] shuzu = new int[10];
for(int i=0;i<12;i++) {
try{
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
System.out.print("shuzu["+(i+1)+"]=");
shuzu[i]= scan.nextInt();
}catch(Exception e){
System.out.print("捕捉成功");
e.printStackTrace();
}
}
System.out.println("继续运行");
}
}
2.
package com;
import java.util.Scanner;
@SuppressWarnings("serial")
class MyException extends Exception{
public MyException(String string) {
// TODO 自动生成的构造函数存根
super(string);
}
}
public class shijian52 {
public static int qiuhe(int sum,int shu)throws MyException {
if(shu<=0||shu>=100) {
throw new MyException("数字应该在0到100之间");
}
return shu;
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] shuzu = new int[5];
int sum=0;
for(int i=0;i<5;i++) {
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
System.out.print("输入第"+(i+1)+"个=");
shuzu[i]= scan.nextInt();
try{
sum=sum+qiuhe(sum,shuzu[i]);
}catch(Exception e){
System.out.println("捕捉成功");
shuzu[i]=0;
sum=sum+shuzu[i];
}
}
System.out.println("继续执行 sum="+sum);
}
}
3.
package com;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
import javax.swing.*;
class Studts {
String no;
String name;
String sex;
float math;
float java;
float english;
float mean;
public Studts() {
}
@Override
public String toString() {
// TODO 自动生成的方法存根
return no+" "+name+" "+sex+" "+math+" "+english+ " "+java;
}
public Studts(String no,String name,String sex,float math,float java,float english) {
this.no=no;
this.name=name;
this.sex=sex;
this.math=math;
this.java=java;
this.english=english;
this.mean=(math+java+english)/3;
}
public void setNo(String no) {
this.no=no;
}
public void setSex(String string) {
this.sex=string;
}
public void setMath(float math){
this.math=math;
}
public void setJave(float java){
this.java=java;
}
public void setEnglish(float english){
this.english=english;
}
public String getNo(){
return this.no;
}
public String getSex(){
return this.sex;
}
public float getMath(){
return this.math;
}
public float getJave() {
return this.java;
}
public float getEnglish(){
return this.english;
}
public float getMean() {
return this.mean;
}
public void show() {
System.out.println(no+" "+name+" "+sex+" "+math+" "+english+ " "+java);
}
}
class Stu {
int num;
int n;
Studts stu[] =new Studts[50];
float javaMean;
float englishMean;
float mathMean;
public Stu() {
n=50;
num=0;
}
public void show() {
for(int i=0;i<num;i++) {
System.out.println(stu[i]);
}
}
public Stu(int n1) {
n=n1;
}
public void calMean(){
System.out.println("");
int i;
float sumjava=0;
float sumenglish=0;
System.out.print("请输入性别:"+stu[1].java);
System.out.print("请输入性别:");
System.out.print("请输入性别:");
float summath=0;
for(i=0;i<n;i++) {
sumjava = stu[i].java+sumjava;
sumenglish = stu[i].english+sumenglish;
summath = stu[i].math+summath;
}
this.javaMean=sumjava/n;
this.englishMean=sumenglish/n;
this.mathMean=summath/n;
System.out.println("班级平均分为"+(this.mathMean+this.englishMean+this.javaMean)/3);
}
public float getJaveMean() { //获取平均分
System.out.println("");
return this.javaMean;
}
public float getEnglishMean () {
return this.englishMean;
}
public float getMathMean () {
return this.mathMean;
}
public void sortBy(int x) {// x==1按java排序,x==2按英语排序,x==3按数学排序,升序;
if(x!=1&&x!=2&&x!=3) {
System.out.println("选择错误 输入 1按java排序 输入 2按英语排序 输入3按数学排序 升序");
}
switch(x) {
case 1:
for(int i = 0;i<n-1;i++) {
int index=i;
for(int j = i+1;j<n;j++) {
if(stu[index].java>stu[j].java) {
float temp=stu[index].java;
stu[index].java=stu[j].java;
stu[j].java=temp;
}
}
}
//扩展代码串:输出Java成绩排序
System.out.println("按java排序学生的成绩:");
for(int i = 0;i<n;i++) {
System.out.println("第"+(i+1)+"个学生的成绩 "+"java="+stu[i].java+" "+"english="+stu[i].english+" "+"math="+stu[i].math);
}
break;
case 2:
for(int i = 0;i<n-1;i++) {
int index=i;
for(int j = i+1;j<n;j++) {
if(stu[index].english>stu[j].english) {
float temp=stu[index].english;
stu[index].english=stu[j].english;
stu[j].english=temp;
}
}
}
//扩展代码串:输出english成绩排序
System.out.println("按english排序学生的成绩:");
for(int i = 0;i<n;i++) {
System.out.println("第"+(i+1)+"个学生的成绩 "+"english="+stu[i].english+" "+"java="+stu[i].java+" "+"math="+stu[i].math);
}
break;
case 3:
for(int i = 0;i<n-1;i++) {
int index=i;
for(int j = i+1;j<n;j++) {
if(stu[index].math>stu[j].math) {
float temp=stu[index].math;
stu[index].math=stu[j].math;
stu[j].math=temp;
}
}
}
//扩展代码串:输出math成绩排序
System.out.println("按math排序学生的成绩:");
for(int i = 0;i<n;i++) {
System.out.println("第"+(i+1)+"个学生的成绩 "+"math="+stu[i].math+" "+"java="+stu[i].java+" "+"english="+stu[i].english);
}
break;
}
}
public void setStudentAt(int index, Studts stu2) {//设置位置index的学生的值;
System.out.print("Java修改为");
@SuppressWarnings("resource")
Scanner scanner=new Scanner(System.in);
stu2.java=scanner.nextInt();
this.stu[index].java=stu2.java;
System.out.print("english修改为");
stu2.english=scanner.nextInt();
this.stu[index].english=stu2.english;
System.out.print("math修改为");
stu2.math=scanner.nextInt();
this.stu[index].math=stu2.math;
System.out.println("学生的成绩 "+"java="+stu[index].java+" "+"english="+stu[index].english+" "+"math="+stu[index].math);
}
public int getStudentAt(String no) {//获取位置index的学生;
for(int i = 0;i<=n;i++) {
System.out.println("第个学生的成绩" );
if(stu[i].no.equals(no)){
System.out.println("第"+(i+1)+"个学生的成绩 "+"math="+stu[i].math+" "+"java="+stu[i].java+" "+"english="+stu[i].english);
return i;
}
}
return 0;
}
public int searchMaxJava() {//搜索java分数最高的学生,返回学生的序号;
int xuhao=0;
for(int i = 0;i<n-1;i++) {
int index=i;
for(int j = i+1;j<n;j++) {
if(stu[index].java<=stu[j].java) {
xuhao =j;
}
}
}
return xuhao+1;
}
public void addStudent(Studts stu) {//在数组末尾添加一个学生对象
this.stu[num++]=stu;
}
}
//主界面构造
class zhujiemian extends JFrame {
private static final long serialVersionUID = 1L;
private Stu stu;
public zhujiemian() {
stu=new Stu();
setTitle("学生管理系统"); // 设置该窗体的标题
setLayout(null); // 使该窗体取消布局管理器设置
setBounds(600, 100, 400, 700); // 绝对定位窗体的位置与大小
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
Container c = getContentPane(); // 创建容器对象
getContentPane().setLayout(null);
//输入信息提示:
JLabel tssr=new JLabel("添加/修改学生信息");
c.add(tssr);
tssr.setBounds(170,5, 260, 30); // 设置按钮的位置与大小
//姓名提示:
JLabel tsxm=new JLabel("姓名:");
c.add(tsxm);
tsxm.setBounds(50,40, 260, 30); // 设置按钮的位置与大小
//文本输入姓名框
final JTextField a1=new JTextField("",3);
a1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
a1.setText("触发事件");
}
});
a1.setBounds(90, 40, 260, 30); // 设置按钮的位置与大小
c.add(a1);//将文本框添加到容器中
//学号提示:
JLabel tsxh=new JLabel("学号:");
c.add(tsxh);
tsxh.setBounds(50,80, 260, 30); // 设置按钮的位置与大小
//文本输入学号框
final JTextField a2=new JTextField("",12);
a2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
a2.setText("触发事件");
}
});
a2.setBounds(90, 80, 260, 30); // 设置按钮的位置与大小
c.add(a2);//将文本框添加到容器中
//性别提示:
JLabel tsxb=new JLabel("性别:");
c.add(tsxb);
tsxb.setBounds(50,120, 260, 30); // 设置按钮的位置与大小
//性别选择文本输入学号框
//男
JLabel tsnan=new JLabel("男");
JRadioButton dx1=new JRadioButton();
JLabel tsnv=new JLabel("女");
JRadioButton dx2=new JRadioButton();
ButtonGroup group=new ButtonGroup();
tsnan.setBounds(110,120, 40, 30); // 设置按钮的位置与大小
tsnv.setBounds(150,120,40, 30); // 设置按钮的位置与大小
dx1.setBounds(90, 120, 17, 30); // 设置按钮的位置与大小
dx1.setSelected(true);
dx2.setBounds(130, 120, 17, 30); // 设置按钮的位置与大小
group.add(dx1);
group.add(dx2);
c.add(dx1);
c.add(dx2);
c.add(tsnan);
c.add(tsnv);
// dx1.addActionListener(new ActionListener() {
//
// @Override
// public void actionPerformed(ActionEvent e) {
// if()
// }
//
// });
//数学提示:
JLabel tssx=new JLabel("数学成绩:");
c.add(tssx);
tssx.setBounds(25,160, 260, 30); // 设置按钮的位置与大小
//文本输入数学成绩
final JTextField a4=new JTextField("",2);
a4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
a4.setText("触发事件");
}
});
a4.setBounds(90, 160, 260, 30); // 设置按钮的位置与大小
c.add(a4);//将文本框添加到容器中
//Java提示:
JLabel tsja=new JLabel("Java成绩:");
c.add(tsja);
tsja.setBounds(23,200, 260, 30); // 设置按钮的位置与大小
//文本输入Java成绩
final JTextField a5=new JTextField("",2);
a5.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
a5.setText("触发事件");
}
});
a5.setBounds(90, 200, 260, 30); // 设置按钮的位置与大小
c.add(a5);//将文本框添加到容器中
//english提示:
JLabel tsen=new JLabel("english成绩:");
c.add(tsen);
tsen.setBounds(8,240, 260, 30); // 设置按钮的位置与大小
//文本输入英语成绩
final JTextField a6=new JTextField("",2);
a6.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
a6.setText("触发事件");
}
});
a6.setBounds(90, 240, 260, 30); // 设置按钮的位置与大小
c.add(a6);//将文本框添加到容器中
//添加提示:
JButton tj = new JButton("添加信息"); // 创建按钮
tj.setBounds(110, 300, 100, 30); // 设置按钮的位置与大小
c.add(tj); // 将按钮添加到容器中
tj.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
String a1g = a1.getText();
String a2g = a2.getText();
String sex;
if(dx1.isSelected())
sex="男";
else
sex="女";
String a4g = a4.getText();
String a5g = a5.getText();
String a6g = a6.getText();
System.out.print(a1g+" "+a2g+" "+a4g+" "+a5g+" "+a6g);
System.out.println();
Studts s=new Studts(a2g,a1g,sex,Float.valueOf(a4g),Float.valueOf(a5g),Float.valueOf(a6g));
stu.addStudent(s);
stu.show();
}
});
//重置提示:
JButton cz = new JButton("重置输入"); // 创建按钮
cz.setBounds(230, 300, 100, 30);
c.add(cz);
cz.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
a1.setText("");
a2.setText("");
a4.setText("");
a5.setText("");
a6.setText("");
a1.requestFocus();
}
});
//查找学生信息
JLabel czxs=new JLabel("查找学生信息");
c.add(czxs);
czxs.setBounds(170, 350, 100, 30); // 设置按钮的位置与大小
//输入查找学生学号信息
//学号提示:
JLabel tsxh0=new JLabel("输入查找学号:");
c.add(tsxh0);
tsxh0.setBounds(10, 400, 150, 30); // 设置按钮的位置与大小
//文本输入学号框
final JTextField a20=new JTextField("",12);
a20.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
a20.setText("触发事件");
}
});
a20.setBounds(90, 400, 140, 30); // 设置按钮的位置与大小
c.add(a20);//将文本框添加到容器中
//按学号查找提示:
JButton chzh = new JButton("查找"); // 创建按钮
chzh.setBounds(250, 400, 70, 30);
c.add(chzh);
chzh.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String a2g0 = a20.getText();
int i;
// TODO 自动生成的方法存根
for(i = 0;i<stu.num;i++) {
if(stu.stu[i].getNo().compareTo(a2g0)==0) {
stu.stu[i].show();
}
}
System.out.println("修改学生信息,需要重置,然后输入");
/*//修改学生信息
String a1g = a1.getText();
String a2g = a2.getText();
String sex;
if(dx1.isSelected())
sex="男";
else
sex="女";
String a4g = a4.getText();
String a5g = a5.getText();
String a6g = a6.getText();
System.out.print(a1g+" "+a2g+" "+a4g+" "+a5g+" "+a6g);
System.out.println();
stu.stu[i]=new Studts(a2g,a1g,sex,Float.valueOf(a4g),Float.valueOf(a5g),Float.valueOf(a6g));
stu.show();*/
}
});
//按学号修改提示:
JButton xhxg = new JButton("修改信息"); // 创建按钮
xhxg.setBounds(110, 460, 100, 30);
c.add(xhxg);
xhxg.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String a2g0 = a20.getText();
int i;
// TODO 自动生成的方法存根
for(i = 0;i<stu.num;i++) {
if(stu.stu[i].getNo().compareTo(a2g0)==0) {
String a1g = a1.getText();
String a2g = a2.getText();
String sex;
if(dx1.isSelected())
sex="男";
else
sex="女";
String a4g = a4.getText();
String a5g = a5.getText();
String a6g = a6.getText();
System.out.print(a1g+" "+a2g+" "+a4g+" "+a5g+" "+a6g);
System.out.println();
stu.stu[i]=new Studts(a2g,a1g,sex,Float.valueOf(a4g),Float.valueOf(a5g),Float.valueOf(a6g));
stu.show();
}
}
/*//修改学生信息
String a1g = a1.getText();
String a2g = a2.getText();
String sex;
if(dx1.isSelected())
sex="男";
else
sex="女";
String a4g = a4.getText();
String a5g = a5.getText();
String a6g = a6.getText();
System.out.print(a1g+" "+a2g+" "+a4g+" "+a5g+" "+a6g);
System.out.println();
stu.stu[i]=new Studts(a2g,a1g,sex,Float.valueOf(a4g),Float.valueOf(a5g),Float.valueOf(a6g));
stu.show();*/
}
});
setVisible(true); // 使窗体可见
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// 设置窗体关闭方式
}
}
public class shijian531 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
zhujiemian t=new zhujiemian();
}
}

浙公网安备 33010602011771号