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();
		
	}

}
posted @ 2026-01-06 21:54  东血  阅读(1)  评论(0)    收藏  举报

载入天数...载入时分秒...