java实验报告 - - 129074

更新时间:2024-05-03 09:13:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Java程序设计实验报告

实验一、安装JDK并熟悉java的运行环境 实验二、基本语法练习 实验三、面向对象编程实验(4) 实验四、异常处理实验 实验五、小应用程序实验 实验六、图形图像实验 实验七、GUI(图形用户接口)实验(4) 实验八、多线程实验 实验九、输入输出流实验(4) 实验十、数据库应用实验(4) 姓名: 学号:129074 班级:计123 指导教师:李伟 2014年12月21日

实验一、安装JDK并熟悉java的运行环境

一、实验目的

熟悉JAVA的运行环境及学习简单的编程。

二、预习内容

安装工具软件的基本方法。

三、实验设备与环境

装有JAVA语言工具软件 (Eclipse )的微机若干

四、实验内容

安装Eclipse及JAVA的核心编译程序J2SDK。 1、打开Eclipse的安装盘安装Eclipse。 2、在相同目录下安装J2SDK。

3、打开Eclipse软件对J2SDK文件进行配置。

4、编写一应用程序,在屏幕上显示“HELLO WORLD”。 public class search_1 {

}

public static void main(String []args){ }

System.out.println(\);

5、编写一小程序实现上述功能:在屏幕上显示“HELLO WORLD”和爱心标志。

实验结果

五、注意事项

⒈认真填写实验报告

⒉遵守实验室各项制度,服从实验指导教师的安排 ⒊按规定的时间完成实验

六、说明

本次实验建议学时数2学时

七、实验总结与体会

通过本次实验,知道如何用eclipse创建Java工程和类,对eclipse有了进一步的了解。明白了凡事应该从小事开始做起。

实验二、基本语法练习

一、实验目的 ⒈熟悉Java的基本语法

⒉编写应用程序接收命令行参数 ⒊编写应用程序接收用户从键盘的输入 ⒋掌握字符串与数组的基本方法

二、预习内容

java编程的基本结构

三、实验设备与环境

装有JAVA语言工具软件 (Eclipse )的微机若干

四、实验内容

⒈编写一个应用程序求若干个数的平均数,原始数字要求从命令行输入。应用程序中main方法的参数String类型的数组args能接受用户从命令行键入的参数。

(1)编辑Average.java。

public class search_2_1_average {

public static void main(String[] args){

double n,sum = 0;

for(int i=0;i

n = args.length; double avg; avg = sum/n;

sum += Double.valueOf(args[i]).doubleValue();

System.out.println(\平均数=\+avg); }

}命令行参数: 12.34 34.45 21212121

注意:

1) 参数的个数可以利用args.length来取得。 2) 参数“12.34”“34.45”“21212121”分别赋给了main方法的参数args[0]、args[1] 和args[2]。

3) 由于args[0]、args[1]和args[2]是String类型的,所以要利用Double.valueOf(String s)方法将String类型

转化成Double类型,再用double Value()方法求出double类型的值。

⒉编写一个应用程序,接受用户从键盘输入的摄氏温度,然后将其转化成等效的华氏度温度。

方法一:利用System.in.read()方法可以接受从键盘输入的unicode码,编写一个循环取键值,循环出口为当输入回车时,即判断键值是否为13,若是,则退出循环。 (1) 编辑Accept.java,设保存在D:\\myjava目录下。

import java.io.*;

public class search_2_2_Accept { public static void main(String [] args){ int c=0; String s=\; System.out.println(\输入摄氏度(0<数值<100):\); try{ while(c!=13){ c = System.in.read(); s += (char)c; } } catch(Exception e){ System.out.println(\输入有误!\); } int celsius = Integer.parseInt(s.trim()); double fashre = 1.8*celsius + 32; System.out.println(\转化成华氏度为:\+fashre); } }

注意:

1)in是System类的一个属性,System.in的返回类型是InputStream类型。输入字节流的父类,InputStream

类中的read()方法可以读取一个用户从键盘上输入的键值。System.im.read()的返回值是整型,因此需要先转化成字符型后再连接成字符串。

2) System.im.read()需要用try/catch机制来捕获异常。

3)将字符串转化成响应的整型数值后再利用公式计算出华氏温度。 运行结果:

方法二:由于InputStream类中的read()方法只能读取一个键值,所以需要利用循环才能读出用户从键盘输入的一串字符,有没有读取一行字符的命令呢?我们可以利用Java中类的嵌套来实现。由于BufferedReader类有读取一行字符串的方法,所以可以这样去定义对象:

BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); (1) 编辑Accpe1.java。

import java.io.*; public class search_2_2_Accept2 { public static void main(String[] args) { String s=\; System.out.println(\输入摄氏度(0<数值<100):\); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try{ s += (String)br.readLine(); } catch(Exception e){} int cel = Integer.parseInt(s.trim()); double f = cel*1.8+32; System.out.println(s+\摄氏度转换成华氏度为:\+f); } } 运行结果:

⒊编写应用程序,按升序顺序输出一维数组中的元素。

排序的方法有很多,常用的有选择法和冒泡法,在此使用选择法。 (1) 编辑Sort.java。

public class search_2_3_Sort { public static void main(String[] args) { int [] num = {12,34,32,5,65,90,12,11}; int i,j,temp,t;

for(i=0;i

for(j=i+1;j

五、注意事项

⒈认真填写实验报告

⒉遵守实验室各项制度,服从实验指导教师的安排 ⒊按规定的时间完成实验

六、说明

⒈建议学时数2学时 七、实验总结与体会

通过本实验熟悉Java的基本语法、编写应用程序接收命令行参数、编写应用程序接收用户从键盘的输入和掌握字符串与数组的基本方法等技能,特别的了解了运行配置的使用和功能。

实验三、面向对象编程实验

一、实验目的

⒈掌握接口的编写及使用 ⒉理解继承、多态

⒊掌握包的编写以及如何使用包中的类

二、预习内容

java的基本语法知识

三、实验设备与环境

装有JAVA语言工具软件 (Eclipse )的微机若干

四、实验内容

⒈接口的编写

(1) 编辑Interfaceclass.java。

interface Interfaceclass{ int i=4; int k=5; public void func1(); public int func2(int i); }

(2) 编辑UseInterface。

class search_3_interface implements Interfaceclass {

int j;

public void func1(){ System.out.println(\+i); }

public int func2(int i){

System.out.println(\+i); return i; }

public static void main(String args[]){ search_3_interface x=new search_3_interface(); x.func1(); x.func2(k); } }

运行结果:

⒉多态在工资系统中的应用

设计一个根据雇员类型利用abstract方法和多态性完成工资单计算的程序。 Employee是抽象类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、 CommissionWorker(除基本工资外还根据销售额发放浮动工资)、PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。该例的Employee的每个子类都声明为final,因为不需要再继承它们生成子类。

对所有雇员类型都使用earnings()方法,但每个人挣的工资按他所属的雇员类计算,所有雇员类都是从超类Earnings()派出生的。所有在超类中声明earnings()为抽象方法,并且对于每个子类都提供恰当的earnings()的实现方法。为了计算雇员的工资,程序仅仅使用雇员对象的一个超类引导 并调用earnings()方法。在一个实际的工资系统中,各种Employee对象的引用可以通过一个Employee引用数组来实现。程序依次使用数组的每个元素(Employee引用)调用每个对象的employee()方法。

abstract class Employee{ private String name; private float basicpay; public abstract float earning(); public Employee(String name,float basicpay){ this.name = name; this.basicpay = basicpay; } public String getname(){ return name; } public float getbasicpay(){ return basicpay; } public void showpay(){} }

//Boss类

final class Boss extends Employee{ public Boss(String name,float basicpay){ super(name,basicpay); }//boss工资只有基本工资 public float earning(){ return getbasicpay(); } public void showpay(){ System.out.println(\+getname()+\+earning()); } }

//CommissionWorker类

final class CommissionWorker extends Employee{ private float floatpay;//浮动工资 private float sale;//销售额 public CommissionWorker(String name,float basicpay,float sale){ super(name,basicpay); setsale(sale); setfloatpay(getsale());

} public void setfloatpay(float sale){ floatpay = sale*5/100; }//除基本工资外,还有销售额5%的浮动工资 public float getfloatpay(){ return floatpay; } public void setsale(float sale){ this.sale=sale; } public float getsale(){ return sale; } public float earning(){ return getbasicpay()+getfloatpay(); } public void showpay(){ System.out.println(\+getname()+\+earning()); } }

//PieceWorker类

final class PieceWorker extends Employee{ private long sumwork;//生产的产品数 public PieceWorker(String name,float basicpay,long sumwork){ super(name,basicpay);//basicpay用于记录单件产品工资 setsumwork(sumwork); } public void setsumwork(long sumwork){ this.sumwork=sumwork; } public long getsumwork(){ return sumwork; } public float earning(){ return getbasicpay()*getsumwork(); } public void showpay(){ System.out.println(\+getname()+\+earning()); } }

final class HourlyWorker extends Employee{ private float hour;//工作了多少小时 public HourlyWorker(String name,float basicpay,float hour){ super(name,basicpay);//basicpay为一小时的工资 sethour(hour); } public void sethour(float hour){ this.hour=hour; } public float gethour(){ return hour; } public float earning(){ return getbasicpay()*gethour(); } public void showpay(){ System.out.println(\+getname()+\+earning()); } }

public class search_3_abstract { public static void main(String [] args){ Employee[] emp = new Employee[4]; Boss boss = new Boss(\,15000); CommissionWorker cWorker = new CommissionWorker(\,500,50000); PieceWorker pWorker = new PieceWorker(\,0.5f,4000);

}

}

HourlyWorker hWorker = new HourlyWorker(\,11,67);

emp[0] = boss; emp[1] = cWorker; emp[2] = pWorker; emp[3] = hWorker;

for(int i=0;i

运行结果:

⒊ 包的建立与使用

(1) 编辑Calculate.java。

package mypacage;

public class search_3_Calculate{ public int a; public search_3_Calculate(int a){ this.a=a; System.out.println(\+this.a); } public double volume(double height,double width,double depth){ return height*width*depth; } public int add(int x, int y){ return x+y; } public void a(){ System.out.println(\+a); }

编译,查看目录下是否生成了mypacage文件夹,在该文件夹中是否有Calculate.class文件。

结果:

(2) 编辑使用mypacage的程序。

import mypacage.search_3_Calculate;

public class search_3_3 { public static void main(String ags[ ]){ search_3_Calculate c=new search_3_Calculate(10); double s=c.volume(5,6,7); System.out.println(s); //int b=c.add(5,6); //c.a(); } }

运行结果:

五、注意事项

⒈认真填写实验报告

⒉遵守实验室各项制度,服从实验指导教师的安排

⒊按规定的时间完成实验 六、实验总结与体会

本实验做了关于接口、抽象类及实现和包的的实验,同过这些我掌握了接口的编写及使用;理解继承、多态的内涵 ;掌握了包的编写以及如何使用包中的类的方法。在对第2个问题的编写解决过程中,学会了对于编程问题的分析与解答应从最简入手,但也不能不顾大局。

实验四、异常处理实验

一、实验目的

⒈异常的生产及捕获 ⒉自定义异常及其使用

二、预习内容

面向对象的基本知识

三、实验设备与环境

装有JAVA语言工具软件 (Eclipse )的微机若干

四、实验内容

⒈异常的捕获

计算两数相除并输出结果。使用两个catch子句,分别捕捉除数为0的异常和参数输入有误异常。

编译并运行,当输入除数为0时,将有异常出现,当输入的不是整数时,如将30输成了3o,出现的是另一种异常。

import java.io.*;

import java.io.BufferedReader; import java.io.InputStreamReader; public class search_4_1{ public static void main(String args[]){ try{ BufferedReader strin=new BufferedReader (new InputStreamReader(System.in)); System.out.print(\请输入被除数:\); String str = strin.readLine(); double beichushu=Double.parseDouble(str); System.out.print(\请输入除数:\); str = strin.readLine(); double chushu = Double.parseDouble(str); double shang = beichushu/chushu; System .out .println(\商为:\+shang); } //捕获与I/O有关的异常 catch(IOException e){ e.printStackTrace(); } //捕获数值转化时的异常,如不能将字符转化成数值 catch(NumberFormatException e){ System .out .println(\请输入整数!\); e .printStackTrace(); } //捕获除数为0的异常 catch(ArithmeticException e){ System .out .println(\除数不可以0!\); e .printStackTrace(); } } }

运行结果:正确输入,除数为0

输入有误 ⒉定义异常

编写程序包含自定义异常,当输入数值为13和4时抛出该异常。 编辑Ex2.java,设保存在D:\\myjava目录下。

class Ex2 extends Exception{ Ex2(String msg){ super(msg); }

}

class MyEx{

private int x; void setX(int x){ this.x=x; }

void f1() throws Ex2{ if(x==13)

throw new Ex2(\’t like 13!\); else if(x==4)

throw new Ex2(\’t like 4!\); else

System .out.println(100/x); }

public static void main(String args[ ]){ MyEx a=new MyEx(); try{

a.setX(5); //a.setX(13); //a.setX(4); //a.setX(0); a.f1(); }

catch(Ex2 e){

System .out.println(\+e.getMessage()); }

}

编译并运行,分别取消注释上面程序中被注释的语句。当释放a.setX(13)语句后,查看运行

结果当释放a.setX(4)语句后,查看运行结果

五、注意事项

⒈认真填写实验报告

⒉遵守实验室各项制度,服从实验指导教师的安排 ⒊按规定的时间完成实验

六、说明

⒈建议学时数2学时

七、实验总结与体会

通过这个实验知道了异常产生的基本特性,学会了捕获基本的异常和自定义捕获异常的基本方法。从中体会到没有那个程序是完美的,每一个程序都会产生异常,所以不管是在学习还是以后工作中,对于编程,都应该做到细致入微,防微杜渐,尽量减少程序出错的可能。

实验五、小应用程序实验

一、实验目的

⒈掌握小应用程序的结构及生命周期 ⒉掌握带参数小应用程序的编写

二、预习内容

网页制作的相关知识

三、实验设备与环境

装有JAVA语言工具软件 (Eclipse )的微机若干

四、实验内容

⒈小应用程序生命周期

小应用程序有init()、start()、stop()和detroy()方法,当小应用程序初次加载时,先执行init(),再执行stop()方法。当小应用程序的窗口从后台恢复到前台时,如当小应用程序的窗口被最小化时,会执行stop()方法,窗口还原时会执行start()方法,这时不执行init()和detroy()方法。当小应用程序被关闭时,再执行detroy()方法。

编辑AppLife.java,设保存在D:\\myjava目录下。

import java .applet .*; import java .awt .*;

public class search_5 extends Applet{ static int a,b,c,d;

int x1=150,y1=50,x2=300,y2=50; public void paint (Graphics g){ g.drawLine(x1,y1,x2,y2); g.drawLine(x1,y1,x2,y1+a); g.drawString (\,x1,y1); g.drawLine(x1+50,y1,x1+50,y1+b); g.drawString(\,x1+50,y1); g.drawLine(x1+100,y1,x1+100,y1+c); g.drawString(\,x1+100,y1); g.drawLine(x1+150,y1,x1+150,y1+d); g.drawString(\,x2,y2); }

public void init(){ a+=50;

repaint(); }

public void start(){ b+=50;

repaint(); }

public void stop(){ c+=50;

repaint(); }

public void destroy(){ d+=50;

repaint();

} }

注意问题:

(1) 编译AppLife.java。

(2) 编辑AppLife.htm,要求存放在与AppLife.class相同的目录下。

(3) 运行AppLife.htm。

运行结果:

⒉带参数的小应用程序

编写一个小应用程序,由htm文件向其传递参数。 编写App.java,设保存在D:\\myjava目录下。

import java.applet.*; import java.awt.*;

public class search_5_APP extends Applet{ String name; public void init(){ name=getParameter(\); } public void paint(Graphics g){ g.drawString(\+name,120,50); } }

执行步骤:

(1) 编译App.java。

(2) 编辑App.htm,要求与App.class在同一目录下。

执行App.htm。

运行结果:

五、注意事项

⒈认真填写实验报告

⒉遵守实验室各项制度,服从实验指导教师的安排 ⒊按规定的时间完成实验

六、说明

⒈建议学时数2学时 七、实验总结与体会

这个实验立在让学生掌握小应用程序的结构及生命周期和掌握带参数小应用程序的编写。通过这个实验,对java有了进一步的认识,发现他的有趣一面,也对小应用程序有了初步认识。

实验六、图形图像实验

一、实验目的

⒈了解Java.awt包中提供的Font类、Color类、Graphics类和Image类 ⒉掌握设置控制GUI组件字体和颜色的一般方法

⒊掌握使用Graphics绘制线条、矩形、圆角矩形、椭圆、弧等基本图形 ⒋掌握使用Graphics绘制图象

二、预习内容

绘制图形的基本方法

三、实验设备与环境

装有JAVA语言工具软件 (Eclipse )的微机若干

四、实验内容

⒈绘制图形 编辑Gra.java。

import java.applet.*; import java.awt.*;

public class search_6_Gra extends Applet{ Font f1=new Font(\,Font.PLAIN,28); public void paint(Graphics g){ g.setFont(f1); g.setColor(Color.blue); g.drawString(\我是美丽的大气球!\,120,50); g.setColor(Color.green); g.drawOval(100,20,200,100); g.setColor(Color.black); g.fillOval(180,60,10,10); g.fillOval(180,60,10,10); g.setColor(Color.red); g.drawArc(130,50,50,180,180,120); g.setColor(Color.yellow); g.drawLine(150,120,150,250); } }

(1) 编译Gra.java。

(2) 编辑Gra.java,要求与Gra.class在同一目录下。

(3) 运行Gra.htm。

运行结果:

五、注意事项

⒈认真填写实验报告

⒉遵守实验室各项制度,服从实验指导教师的安排 ⒊按规定的时间完成实验

六、说明

⒈建议学时数2学时

七、实验总结与体会

通过这个实验画图,感受到了编程的乐趣,虽然图很难看,但这是学习的第一步,有了兴趣才有很大的动力继续学习下去,那么乐趣就会越来越有趣,知识就会积累的越来越丰厚。

实验七、GUI(图形用户接口)实验

一、实验目的

⒈掌握用MouseListener和MouseMotionListener接口处理鼠标事件Mouse Event的方法。 ⒉掌握制作菜单及处理菜单事件的方法

⒊掌握创建对话框及定位、显示、激活和关闭对话框的方法

二、预习内容

图形用户接口编程所需的基本类及使用方法

三、实验设备与环境

装有JAVA语言工具软件 (Eclipse )的微机若干

四、实验内容

⒈制作一个简单的画板

编辑Mou.java,设保存在D:\\myjava目录下。

import java.applet.*; import java.awt.*;

import java.awt.event.*;

public class search_7_Mou extends Applet implements MouseMotionListener{ int x= -1,y= -1; public void init(){ setBackground(Color.cyan); addMouseMotionListener(this); } public void paint(Graphics g){ if(x!= -1&&y!= -1){ g.setColor(Color.red); g.drawLine(x,y,x,y); } } public void mouseDragged(MouseEvent e){ x=(int)e.getX(); y=(int)e.getY(); } //由于使用的是Listener,需要将其他不重载的方//法,列举在这里 public void mouseMoved(MouseEvent e){} public void update(Graphics g){ paint(g); } }

编译并运行查看结果.

⒉菜单的编写

编辑TestMenu.java,设保存在D:\\myjava目录下。

import java.awt.*;

import java.awt.event.*;

public class search_7_TestMenu{ public static void main(String args[ ]){

MyMenuFrame mf=new MyMenuFrame(); mf.setSize(new Dimension(300,200)); //指定窗口初始大小 mf.setVisible(true); //使窗口可见,默认为不可见 } }

//定义窗口

class MyMenuFrame extends Frame implements ActionListener,ItemListener{ MenuBar m_MenuBar; Menu menuFile,menuEdit,m_Edit_Pasete; MenuItem mi_File_Open,mi_File_Close,mi_File_Exit,mi_Edit_Copy; MenuItem pi_New,pi_Del,pi_Pro,mi_paste_All,mi_Paste_Part; CheckboxMenuItem mi_Edit_cut; PopupMenu popM; TextArea ta; MyMenuFrame(){ super(\拥有菜单的窗口\); //指定窗口标题 ta=new TextArea(\,5,20); ta.addMouseListener((MouseListener) new HandleMouse(this)); add(\,ta); //创建弹出式菜单 popM=new PopupMenu(); pi_New=new MenuItem(\新建\); pi_New.addActionListener(this); popM.add(pi_New); pi_Del=new MenuItem(\删除\); pi_Del.addActionListener(this); popM.add(pi_Del); pi_Pro=new MenuItem(\属性\); pi_Pro.addActionListener(this); popM.add(pi_Pro); //将弹出式菜单加在文本域上 ta.add(popM); m_MenuBar=new MenuBar(); //创建菜单栏 menuFile=new Menu(\文件\); //创建菜单项、菜单自项并指定快捷键 mi_File_Open=new MenuItem(\打开\,new MenuShortcut('o')); mi_File_Close=new MenuItem(\关闭\); mi_File_Exit=new MenuItem(\退出\); mi_File_Exit.setShortcut(new MenuShortcut('x')); mi_File_Open.setActionCommand(\打开\); mi_File_Close.setActionCommand(\退出\); mi_File_Open.addActionListener(this); mi_File_Close.addActionListener(this); //自身作为监视器 mi_File_Exit.addActionListener(this); menuFile.add(mi_File_Open); menuFile.add(mi_File_Close); menuFile.addSeparator(); menuFile.add(mi_File_Exit); m_MenuBar.add(menuFile); //实现以下菜单,并添加监听 /*(“编辑”)((“复制”);(“剪切”); (“粘贴”)((“全部粘贴”); (“部分粘贴”)))*/ menuEdit=new Menu(\编辑\); mi_Edit_Copy=new MenuItem(\复制\); mi_Edit_cut=new CheckboxMenuItem(\剪切\); m_Edit_Pasete=new Menu(\粘贴\);

//文本域响应鼠标事件

文 } }

MenuItem mi_Paste_All = new MenuItem(\全部粘帖\); MenuItem mi_Paste_Part=new MenuItem(\部分粘贴\);

mi_Edit_Copy.addActionListener(this); mi_Edit_cut.addItemListener(this); m_Edit_Pasete.add(mi_Paste_Part); m_Edit_Pasete.add(mi_Paste_All);

mi_Paste_Part .addActionListener(this); mi_Paste_All.addActionListener(this); menuEdit.add(mi_Edit_Copy); menuEdit.add(mi_Edit_cut); menuEdit.addSeparator();

menuEdit.add(m_Edit_Pasete); m_MenuBar.add(menuEdit);

this.setMenuBar(m_MenuBar); //在窗口中添加菜单栏 }

public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==\退出\){ dispose(); System.exit(0); } else ta.setText(e.getActionCommand()); }

public void itenStateChanged(ItemEvent e){ if(e.getSource()==mi_Edit_cut) if(((CheckboxMenuItem)e.getSource()).getState()) ta.setText(\+((CheckboxMenuItem)e.getSource()).getLabel());//将时间小时在 else//本框中显示 ta.setText(\+((CheckboxMenuItem)e.getSource()).getLabel()); }

@Override

public void itemStateChanged(ItemEvent e) { // TODO Auto-generated method stub }

class HandleMouse extends MouseAdapter{//处理鼠标事件类 MyMenuFrame m_Parent; HandleMouse(MyMenuFrame mf){ m_Parent=mf; }

public void mouseReleased(MouseEvent e){//鼠标按键松开事件弹出菜单 if(e.isPopupTrigger())//检查鼠标事件是否是由弹出菜单引发的 m_Parent.popM.show((Component)e.getSource(),e.getX(),e.getY()); }

编译并运行TestMenu.class查看结果。

⒊使用Dialog实验消息对话框和一般对话框

编辑TestDialog.java,设保存在D:\\myjava目录下。

import java.awt.*;

import java.awt.event.*;

public class search_7_TestDialog { public static void main(String args[ ]){

MyDialogFrame df= new MyDialogFrame(); } }

class MyDialogFrame extends Frame implements ActionListener,ComponentListener{ Dialog MegDlg,InOutDlg; Button btn1,btn2,btnY,btnN,btnR; TextField tf=new TextField(\,45); TextField gerMeg=new TextField(\,10); MyDialogFrame(){ super(\); btn1=new Button(\隐藏\); btn2=new Button(\询问\); btnY=new Button(\是\); btnN=new Button(\否\); btnR=new Button(\返回\); setLayout(new FlowLayout()); add(tf); add(btn1); add(btn2); btn1.addComponentListener(this); this.addWindowListener(new WinAdpt());//Frame响应窗口关闭事件 btn1.addActionListener(this); btn2.addActionListener(this); btnY.addActionListener(this); btnN.addActionListener(this); btnR.addActionListener(this); setSize(350,150); show(); } public void actionPerformed(ActionEvent e){ //实现Action Listener中的方法 if(e.getActionCommand()==\隐藏\){ MegDlg=new Dialog(this, \,true); Panel p1=new Panel(); p1.add(new Label(\)); MegDlg.add(\,p1); Panel p2=new Panel(); p2.add(btnY); p2.add(btnN); MegDlg.add(\,p2); MegDlg.setSize(200,100); MegDlg.show(); } else if(e.getActionCommand()==\响应\){ InOutDlg=new Dialog(this, \); InOutDlg.add(\,gerMeg); InOutDlg.add(\,btnR); InOutDlg.setSize(200,100); InOutDlg.addComponentListener(this); InOutDlg.show(); } else if(e.getActionCommand()==\是\){ MegDlg.dispose(); btn1.setVisible(false); } else if(e.getActionCommand() == \否\){ MegDlg.dispose(); } else if(e.getActionCommand()==\返回\){ tf.setText(gerMeg.getText()+\是对话框的输入\); InOutDlg.dispose(); } } //列举Component Listener中未重载的方法

public void componentShown(ComponentEvent e) {} public void componentResized(ComponentEvent e) {} public void componentMoved(ComponentEvent e) {} public void componentHidden(ComponentEvent e) {//实现ComponentListener中的方法 tf.setText(\按钮\+((Button)e.getComponent()).getLabel()+\获得了注意的焦点\); } public void fousGained(FocusEvent e){ //处理FocusListener中的方法 gerMeg.setText(\对话框\+((Dialog)e.getComponent()).getTitle()+\获得了注意的焦点\); } public void focusLost(FocusEvent e) {} }

class WinAdpt extends WindowAdapter{ public void windowClosing(WindowEvent e){ //处理关闭窗口事件 ((Frame)e.getWindow()).dispose(); System.exit(0); } }

编译并运行查看结果

4、根据上面参考程序, 实现一个登陆系统(在数据库中创建一个用户表(编号,用户名,密码))

1)创建登陆窗口,实现用户名和密码的数据库连接、判断;如果成功,转动第二步;不成功,重新输入用户名和密码。只能输入三次,如果超过三次,则退出系统。

2)如果成功,则进入一个新窗口,原来的登陆窗口关闭。

import java.awt.event.*; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel;

import javax.swing.JOptionPane; import javax.swing.JPanel;

import javax.swing.JPasswordField; import javax.swing.JTextField;

public class Logoin extends JFrame{ static int n = 0; private static JFrame jf = new JFrame(\登陆窗口\); private JPanel jp =new JPanel(); private JLabel l_name = new JLabel(\账号\); private JLabel l_password = new JLabel(\密码\); static JTextField t_name = new JTextField(20); static JPasswordField t_password = new JPasswordField(20); private JButton ok = new JButton(\登陆\); private JButton cancel = new JButton(\退出\); public Logoin(){ ok.addActionListener(new okListener()); cancel.addActionListener(new cancelListener()); jp.add(l_name); jp.add(t_name); jp.add(l_password); jp.add(t_password); jp.add(ok); jp.add(cancel); jf.add(jp);

jf.setVisible(true); jf.setSize(300,150); jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE); jf.setLocation(500,270); } class okListener implements ActionListener{ public void actionPerformed(ActionEvent arg0) { check(); } } class cancelListener implements ActionListener{ public void actionPerformed(ActionEvent arg0){ System.exit(0); } } public static void check(){ char[] ch=t_password.getPassword(); if(t_name.getText().equals(\)){ JOptionPane.showMessageDialog(null, \请输入用户名!\,\,JOptionPane.ERROR_MESSAGE); } else if(t_password.getPassword().equals(\)){ JOptionPane.showMessageDialog(null, \请输入密码\,\,JOptionPane.ERROR_MESSAGE); } else if(t_name.getText()==\&&ch.toString()==\){ JOptionPane.showMessageDialog(null, \登陆成功\,\,JOptionPane.ERROR_MESSAGE); n=0; jf.setVisible(false); JFrame jf2 = new JFrame(\登陆成功窗口\); jf2.setVisible(true); } else{

JOptionPane.showMessageDialog(null, \账号或密码不正确!\,\,JOptionPane.ERROR_MESSAGE); n+=1; if(n>=3) System.exit(1); } }

public static void main(String[] args){ new Logoin();

}

运行结果:

}五、注意事项

⒈认真填写实验报告

⒉遵守实验室各项制度,服从实验指导教师的安排 ⒊按规定的时间完成实验

六、说明

⒈建议学时数6学时 七、实验总结与体会

通过这个实验基本掌握了用MouseListener和MouseMotionListener接口处理鼠标事件Mouse Event的简单方法,掌

握了制作简单菜单及处理菜单事件的基本方法流程,对创建对话框及定位、显示、激活和关闭对话框的方法也有了初步的了解和掌握。感觉java的图形界面很随意,但不缺乏严谨,很容易出错,不过只需要“按部就班”,循着规律认真的去做,问题也就不会是问题。

实验八、多线程实验

一、实验目的

⒈掌握多线程的实现方法 ⒉学会利用多线程来显示动画

二、预习内容

线程与进程的基础知识

三、实验设备与环境

装有JAVA语言工具软件 (Eclipse )的微机若干

四、实验内容

⒈使用Runnable接口的方法实现多线程

编辑TestRunnable.java,保存在D:\\myjava目录下。

import java.applet.*; import java.awt.*;

public class TestRunnable extends Applet implements Runnable{ Label prompt1=new Label(\); Label prompt2=new Label(\); TextField threadFirst=new TextField(14); TextField threadSecond=new TextField(14); Thread thread1, thread2; int count1=0,count2=0; public void init(){ add(prompt1); add(threadFirst); add(prompt2); add(threadSecond); } public void start(){ thread1=new Thread(this, \); thread2=new Thread(this, \); thread1.start(); thread2.start(); } public void run(){ String currentRunning; while(true){ try{ Thread.sleep((int)(Math.random()*10000)); } catch(Exception e) {} currentRunning=Thread.currentThread().getName(); if(currentRunning.equals(\)){ count1++; threadFirst.setText(\+count1+\); } else if(currentRunning.equals(\)){ count2++; threadSecond.setText(\+count2+\); } } } }

(1) 编译TestRunnable.java。

(2) 编辑TestRunnable.htm,要求与TestRunnable.class在同一目录下。

(3) 运行TestRunnable.htm。

⒉ 实现简单动画

实现一个简单动画,效果为一个球由小到大,从屏幕左侧滚动到右侧。

import java.awt.*;

public class Move extends Frame { public void launchFrame(){ int width = 800; int height = 200; setSize(width,height); setVisible(true); setBackground(Color.blue); setTitle(\会变大的球\); new PaintThread().start(); } int x = 0; int y = 150; int w = 6; int h = 6; public int getX(){ return x; } public void paint(Graphics g){ g.setColor(Color.yellow); g.fillOval(x,y,w,h); if(x < 600){ x = x + 10; y=y-2; w+=2; h+=2; } } public static void main(String args[]){ Move mv = new Move(); mv.launchFrame(); } class PaintThread extends Thread { public void run(){ while(true){ if(getX()<600) repaint(); try{ Thread.sleep(100); } catch(Exception e){ e.printStackTrace(); } } } } }

3. 新建一个主Java文件,命名为SallTicket java,使用Runnable接口定义多线程类Ticket.java,在Ticket中定义成员变量ticket=100,用同步方式创建两个线程售票。

}

public class search_8_SallTicket implements Runnable{ int ticket=100; public void run(){ while(true){ try{ Thread.sleep(300); }catch(Exception e){ System.out.println(e); } showLeftedTicket(); } } public synchronized void showLeftedTicket(){ if(Thread.currentThread().getName().equals(\)&&(ticket>0)){ System.out.println(\号窗口售出一张票,目前还剩余票数:\+--ticket); } if(Thread.currentThread().getName().equals(\)&&(ticket>0)){ System.out.println(\号窗口售出一张票,目前还剩余票数:\+--ticket); } if(ticket<=0){ System.out.println(\票已售罄!\); System.exit(1); } }

public static void main(String [] args){ search_8_SallTicket tt = new search_8_SallTicket(); Thread t1,t2; t1=new Thread(tt); t2=new Thread(tt); t1.setName(\); t2.setName(\); t1.start(); t2.start(); }

运行结果:

五、注意事项

⒈认真填写实验报告

⒉遵守实验室各项制度,服从实验指导教师的安排 ⒊按规定的时间完成实验

六、说明

⒈建议学时数2学时 七、实验总结与体会

通过本实验基本掌握了多线程的实现方法,并学会利用多线程来显示简单动画。知道了在对一个实际的应用程序进行开发的时候一定要考虑他的多方因素,不然在使用中会出现大问题。

实验九、输入输出流实验

一、实验目的

⒈了解文件的概念和文件对象的创建方法

⒉了解FileInputStream和FileOutoutStream的基本概念 ⒊学会创建文件输入输出流

⒋掌握使用文件输入输出流读写文件的方法

二、预习内容

输入输出类的使用方法

三、实验设备与环境

装有JAVA语言工具软件 (Eclipse )的微机若干

四、实验内容

⒈编写程序读取文本文件内容

import java.io.*;

import javax.imageio.IIOException; public class search_9_ReadText { public static void main(String args[]){ try{ File infile=new File(\); FileReader reader=new FileReader(infile); @SuppressWarnings(\) BufferedReader br=new BufferedReader(reader); String s=null; while((s=br.readLine())!=null){ System.out.println(s+\); } }catch(IOException e){ System.out.println(e); } } }

运行结果:

⒉ 读取图像文件

编辑ReadPic.java。设保存在D:myjava目录下。设该目录下已经存在一个run.gif文件(可以在此目录下放置一个本机已有的图像文件名字为run.gif。)

import java.io.*;

public class ReadPic{

}

ReadPic(){ try{ File p1=new File(\); File p2=new File(\); FileInputStream inFile=new FileInputStream(p1); BufferedInputStream inB=new BufferedInputStream(inFile); FileOutputStream outFile=new FileOutputStream(p2); BufferedOutputStream putB=new BufferedOutputStream(outFile); byte b[]=new byte[ (int) p1.length()]; while(inB. read(b)!=-1){ putB.write(b); } putB.flush(); inB.close(); putB.close(); }catch(Exception e){ e.printStackTrace(); } }

public static void main(String args[ ]){ new ReadPic(); }

(1) 编译并运行ReadPic..class。

(2) 打开copyrun.gif与run.gif进行对比。 ⒊将内容写入文件

编辑UseStream1.java。 import java.io.*;

public class search_9_UseStream1 { search_9_UseStream1(String path){ try{ File f=new File(path, \); //向文件test1.txt中写入数据 FileWriter putFile=new FileWriter(f); BufferedWriter OutB=new BufferedWriter(putFile); String s=\你们好,这是一个测试写入数据的文件。\; OutB.write(s); //插入一行 OutB.newLine(); OutB.write(\这是利用FileWrite与 BuffereWrite的例题。\); //需要调用flush()方法 OutB.flush(); //写入完毕要关闭流 OutB.close(); //从text.txt中读取数据 FileReader inFile=new FileReader(f); BufferedReader inB=new BufferedReader(inFile); /*inB中含有能够直接读取一行数据的方法raesLine()供我们使用,当然返回值null时,意味着读取结束*/ String fileContent=\,str=\; while((fileContent=inB.readLine())!=null){ str=str+fileContent+\; } System.out.println(str); inB.close(); }catch(Exception e){ e.printStackTrace(); } } public static void main(String args[ ]){ new search_9_UseStream1(\); } }

编译并运行UseStream1.class。

3.使用JFrame或Frame窗体等GUI编程,实现一个记事本程序,实现文件的打开、编辑、保存;文本的全选、复制、剪切、粘贴等功能。

import java.awt.*;

import java.awt.event.*; import java.io.*;

import java.awt.datatransfer.*; class MyMenuBar extends MenuBar{ public MyMenuBar(Frame parent){ parent.setMenuBar(this); }

public void addMenus(String [] menus){ for(int i=0;i

public void addMenuItems(int menuNumber,String[] items){ for(int i=0;i

getMenu(menuNumber).add(new MenuItem(items[i])); else getMenu(menuNumber).addSeparator(); } }

public void addActionListener(ActionListener al){ for(int i=0;i

for(int j=0;j

getMenu(i).getItem(j).addActionListener(al); } }

class MyFile{

private FileDialog fDlg;

public MyFile(Frame parent){

fDlg=new FileDialog(parent,\,FileDialog.LOAD); }

private String getPath(){

return fDlg.getDirectory()+\+fDlg.getFile(); }

public String getData() throws IOException{ fDlg.setTitle(\打开\);

fDlg.setMode(FileDialog.LOAD); fDlg.setVisible(true);

BufferedReader br=new BufferedReader(new FileReader(getPath())); StringBuffer sb=new StringBuffer(); String aline;

while((aline=br.readLine())!=null) sb.append(aline+'\\n'); br.close();

return sb.toString(); }

public void setData(String data) throws IOException{ fDlg.setTitle(\保存\);

fDlg.setMode(FileDialog.SAVE); fDlg.setVisible(true);

BufferedWriter bw=new BufferedWriter(new FileWriter(getPath())); bw.write(data); bw.close(); }

}

class MyClipboard{

private Clipboard cb; public MyClipboard(){

cb=Toolkit.getDefaultToolkit().getSystemClipboard(); }

public void setData(String data){

cb.setContents(new StringSelection(data),null); }

public String getData(){

Transferable content=cb.getContents(null); try{

return (String) content.getTransferData(DataFlavor.stringFlavor); }catch(Exception ue){} return null; } }

class MyFindDialog extends Dialog implements ActionListener{ private Label lFind=new Label(\查找字符串\); private Label lReplace=new Label(\替换字符串\); private TextField tFind=new TextField(10); private TextField tReplace=new TextField(10); private Button bFind=new Button(\查找\); private Button bReplace=new Button(\替换\); private TextArea ta;

public MyFindDialog(Frame owner,TextArea ta){ super(owner,\查找\,false); this.ta=ta;

setLayout(null);

lFind.setBounds(10,30,80,20); lReplace.setBounds(10,70,80,20); tFind.setBounds(90,30,90,20); tReplace.setBounds(90,70,90,20); bFind.setBounds(190,30,80,20); bReplace.setBounds(190,70,80,20); add(lFind); add(tFind); add(bFind); add(lReplace); add(tReplace); add(bReplace);

setResizable(false);

bFind.addActionListener(this); bReplace.addActionListener(this);

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){ MyFindDialog.this.dispose(); } }); }

public void showFind(){ setTitle(\查找\); setSize(280,60); setVisible(true); }

public void showReplace(){ setTitle(\查找替换\); setSize(280,110); setVisible(true); }

private void find(){

String text=ta.getText();

String str=tFind.getText(); int end=text.length(); int len=str.length();

int start=ta.getSelectionEnd(); if(start==end) start=0;

for(;start<=end-len;start++){

if(text.substring(start,start+len).equals(str)){ ta.setSelectionStart(start); ta.setSelectionEnd(start+len); return; } }

ta.setSelectionStart(end); ta.setSelectionEnd(end); }

public Button getBFind() { return bFind; }

private void replace(){

String str=tReplace.getText();

if(ta.getSelectedText().equals(tFind.getText()))

ta.replaceRange(str,ta.getSelectionStart(),ta.getSelectionEnd()); else find(); }

public void actionPerformed(ActionEvent e) { if(e.getSource()==bFind) find();

else if(e.getSource()==bReplace) replace(); } }

public class search_9_Jishiben extends Frame implements ActionListener{ private TextArea editor=new TextArea(); //可编辑的TextArea private MyFile mf=new MyFile(this);//MyFile对象 private MyClipboard cb=new MyClipboard();

private MyFindDialog findDlg=new MyFindDialog(this,editor);

public search_9_Jishiben(String title){ //构造函数 super(title);

MyMenuBar mb=new MyMenuBar(this); //添加需要的菜单及菜单项

mb.addMenus(new String[]{\文件\,\编辑\,\查找\,\帮助\});

mb.addMenuItems(0,new String[]{\新建\,\打开\,\保存\,null,\全选\});

mb.addMenuItems(1,new String[]{\剪贴\,\复制\,\粘贴\,\清除\,null,\全选\}); mb.addMenuItems(2,new String[]{\查找\,null,\查找替换\}); mb.addMenuItems(3,new String[]{\我的记事本信息\});

add(editor); //为菜单项注册动作时间监听器 mb.addActionListener(this);

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){ search_9_Jishiben.this.dispose(); }

}); //分号不能忘了 } //构造函数完

public void actionPerformed(ActionEvent e){

String selected=e.getActionCommand(); //获取菜单项标题 if(selected.equals(\新建\)) editor.setText(\);

else if(selected.equals(\打开\)){

try{

editor.setText(mf.getData()); }catch(IOException ie){} }

else if(selected.equals(\保存\)){ try{

mf.setData(editor.getText()); }catch(IOException ie){} }

else if(selected.equals(\退出\)){ dispose(); }

else if(selected.equals(\剪贴\)){

//将选中的字符串复制到剪贴板中并清除字符串 cb.setData(editor.getSelectedText());

editor.replaceRange(\,editor.getSelectionStart(),editor.getSelectionEnd()); }

else if(selected.equals(\复制\)){

cb.setData(editor.getSelectedText()); }

else if(selected.equals(\粘贴\)){ String str=cb.getData();

editor.replaceRange(str,editor.getSelectionStart(),editor.getSelectionEnd()); //粘贴在光标位置 }

else if(selected.equals(\清除\)){

editor.replaceRange(\,editor.getSelectionStart(),editor.getSelectionEnd()); }

else if(selected.equals(\全选\)){ editor.setSelectionStart(0);

editor.setSelectionEnd(editor.getText().length()); }

else if(selected.equals(\查找\)){ findDlg.showFind(); }

else if(selected.equals(\查找替换\)){ findDlg.showReplace(); } }

public static void main(String[] args){

search_9_Jishiben memo=new search_9_Jishiben(\记事本\); memo.setSize(650,450); memo.setVisible(true); } }

运行结果:

五、注意事项

⒈认真填写实验报告

⒉遵守实验室各项制度,服从实验指导教师的安排 ⒊按规定的时间完成实验

六、说明

⒈建议学时数4学时 七、实验总结与体会

这个实验让我们了解文件的概念和文件对象的创建方法、了解FileInputStream和FileOutoutStream的基本概念,通过这些的学习实践学会了创建文件输入输出流,掌握了使用文件输入输出流读写文件的方法。也进一步的训练了菜单的制作,子项的添加,从中得到了快乐,悟出java其实很简单,都是有章可循的,尽管他的函数很多,但都是一一相关的。

实验十、数据库应用实验

一、实验目的

⒈掌握Java应用程序连接数据库 ⒉掌握Java小应用程序连接数据库

二、预习内容

数据库表的应用

三、实验设备与环境

装有JAVA语言工具软件 (Eclipse )的微机若干

四、实验内容

⒈完成一个系统:实现GUI的学生成绩管理

1) 在数据库创建表:学生表(学号、姓名、性别、出生年月)、课程表(课程号、课程名)、成绩表(学号、课程

号,成绩)

2) 实现用户登陆功能

3) 在主窗口实现学生信息管理、课程信息管理、成绩录入修改查询和提交功能、学生成绩的分析(统计各个分数

段的人数,并画出统计图) 程序实现: //用户登录

import java.awt.*;

import java.awt.event.*; import javax.swing.*; import java.sql.*;

public class User extends JFrame{ private JLabel use,password; private JTextField k1;//用户名输入框 private JPasswordField k2;//密码输入框 private JButton b1,b2;

//登录窗口 public User(JFrame f){ super(\系统登录\); Container c=getContentPane(); c.setLayout(new FlowLayout()); use=new JLabel(\账户\); use.setFont(new Font(\,Font.PLAIN,20)); password=new JLabel(\密码\); password.setFont(new Font(\,Font.PLAIN,20)); k1=new JTextField(14); k2=new JPasswordField(14); b1=new JButton(\登录\); b2=new JButton(\退出\); // 设置登录方法

BHandler b=new BHandler(); EXIT d=new EXIT(); b1.addActionListener(b); b2.addActionListener(d); //添加控件 c.add(use); c.add(k1); c.add(password); c.add(k2); c.add(b1); c.add(b2); setBounds(600,300,250,150); setVisible(true); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //主函数 @SuppressWarnings(\) public static void main(String[] args) { User f1=new User(new JFrame()); } //登录按钮方法 private class BHandler implements ActionListener{ @SuppressWarnings(\) public void actionPerformed(ActionEvent event){ if(k1.getText().equals(\)||k2.getText().equals(\)){ JOptionPane.showMessageDialog(User.this,\用户名密码不能为空!\ ); } else{ Statement stmt=null; ResultSet rs=null; String sql; sql=\+k1.getText()+\; try{ Connection dbConn1=CONN(); stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=stmt.executeQuery(sql); if(rs.next()){ String xm=rs.getString(\); if(k2.getText().equals(xm.trim())){JOptionPane.showMessageDialog(User.this,\登录成功\); dispose(); new Menu();//管理窗口 } else{JOptionPane.showMessageDialog(User.this,\密码错误\);} } else{JOptionPane.showMessageDialog(User.this,\用户名错误\);} rs.close(); stmt.close(); } catch(SQLException e){ JOptionPane.showMessageDialog(User.this,\is:\+e.getMessage()); } } } }

//退出方法结束 private class EXIT implements ActionListener{

}

public void actionPerformed(ActionEvent even){ System.exit(0); }

//主界面

package search_10_3; import java.awt.*;

import java.awt.event.*; import javax.swing.*;

public class Menu extends JFrame implements ActionListener{ Addstu 增加学生界面; Updatastu 修改学生界面; Delstu 删除学生界面; AddC 增加课程界面; DelC 删除课程界面; UpdateC 修改课程界面; AddSC 增加选课界面; DelSC 删除选课界面; UpdateSC 修改选课界面; Selstu 学生查询界面; JPanel pCenter; CardLayout card=null; JLabel label=null; JMenuBar mb=new JMenuBar();//菜单栏 JMenu m1=new JMenu(\学生管理\); JMenuItem add1=new JMenuItem(\); JMenuItem updata1=new JMenuItem(\); JMenuItem delete1=new JMenuItem(\); JMenu m2=new JMenu(\课程管理\); JMenuItem add2=new JMenuItem(\); JMenuItem updata2=new JMenuItem(\); JMenuItem delete2=new JMenuItem(\); JMenu m3=new JMenu(\选课管理\); JMenuItem add3=new JMenuItem(\); JMenuItem updata3=new JMenuItem(\); JMenuItem delete3=new JMenuItem(\); JMenu m4=new JMenu(\查询管理\); JMenuItem 学生查询=new JMenuItem(\查询信息 \); JMenuItem m5=new JMenuItem(\系统退出\); Font t=new Font (\,Font.PLAIN,12); public Menu (){ this.setTitle(\学生成绩管理\); try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch(Exception e){System.err.println(\不能设置外观: \+e);} //组合菜单 addMenu1(); addMenu2(); addMenu3(); addMenu4(); addJMenuBar(); setJMenuBar(mb); label=new JLabel(\欢迎使用学生成绩管理系统\,JLabel.CENTER); label.setFont(new Font(\宋体\,Font.BOLD,36)); label.setHorizontalTextPosition(SwingConstants.CENTER); label.setForeground(Color.blue); //点击事件 add1.addActionListener(this); updata1.addActionListener(this); delete1.addActionListener(this); m5.addActionListener(this); add2.addActionListener(this); delete2.addActionListener(this);

updata2.addActionListener(this); add3.addActionListener(this); delete3.addActionListener(this); updata3.addActionListener(this); 学生查询.addActionListener(this); card=new CardLayout(); pCenter=new JPanel(); pCenter.setLayout(card); 增加学生界面=new Addstu(); 修改学生界面=new Updatastu(); 删除学生界面=new Delstu(); 增加课程界面=new AddC(); 删除课程界面=new DelC(); 修改课程界面=new UpdateC(); 增加选课界面=new AddSC(); 删除选课界面=new DelSC(); 修改选课界面=new UpdateSC(); 学生查询界面=new Selstu();

pCenter.add(\欢迎界面\,label); pCenter.add(\增加学生界面\,增加学生界面); pCenter.add(\修改学生界面\,修改学生界面); pCenter.add(\删除学生界面\,删除学生界面); pCenter.add(\增加课程界面\,增加课程界面); pCenter.add(\删除课程界面\,删除课程界面); pCenter.add(\修改课程界面\,修改课程界面); pCenter.add(\增加选课界面\,增加选课界面); pCenter.add(\删除选课界面\,删除选课界面); pCenter.add(\修改选课界面\,修改选课界面); pCenter.add(\学生查询界面\, 学生查询界面); add(pCenter,BorderLayout.CENTER); validate(); setVisible(true); setBounds(400,150,600,380); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addWindowListener(new WindowAdapter(){//关闭程序时的操作 public void windowClosing(WindowEvent e){System.exit(0);} }); validate(); } private void addJMenuBar() { mb.add(m1);mb.add(m2);mb.add(m3);mb.add(m4);mb.add(m5); } private void addMenu4() { m4.add(学生查询); m4.setFont(t); } private void addMenu3() { m3.add(add3); m3.add(updata3); m3.add(delete3); m3.setFont(t); } private void addMenu2() {//将菜单加入到菜单栏中 m2.add(add2); m2.add(updata2); m2.add(delete2); m2.setFont(t); }

private void addMenu1() { m1.add(add1); m1.add(updata1); m1.add(delete1); m1.setFont(t);//字体 } public void actionPerformed(ActionEvent e){ Object obj=e.getSource(); if(obj==m5){System.exit(0);} else{if(obj==add1){ card.show(pCenter,\增加学生界面\); } else{if(obj==updata1){ card.show(pCenter,\修改学生界面\); } else{if(obj==delete1){ card.show(pCenter, \删除学生界面\); } else{if(obj==add2){ card.show(pCenter, \增加课程界面\); } else{if(obj==delete2){ card.show(pCenter, \删除课程界面\); } else{if(obj==updata2){ card.show(pCenter, \修改课程界面\); } else{if(obj==add3){ card.show(pCenter, \增加选课界面\); } else{if(obj==delete3){ card.show(pCenter, \删除选课界面\); } else{if(obj==updata3){ card.show(pCenter, \修改选课界面\); } else{if(obj==学生查询){ card.show(pCenter, \学生查询界面\); } } }}}}}}}}}} public static void main(String[] args) { new Menu(); } }

//学生类

package search_10_3; import java.sql.*; import javax.swing.*; import java.util.*;

public class Student extends JFrame { @SuppressWarnings(\) Vector rowData, columnNames; Statement stmt=null;

String sql=null; JTable jt = null; JScrollPane jsp = null; PreparedStatement ps=null; ResultSet rs=null; @SuppressWarnings({ \, \ }) public Student(String sql1){

columnNames = new Vector(); // 设置列名 columnNames.add(\学号\); columnNames.add(\姓名\); columnNames.add(\性别\); rowData=new Vector(); sql=sql1; try{ Connection dbConn1=CONN(); stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=stmt.executeQuery(sql); while(rs.next()){ Vector hang = new Vector(); hang.add(rs.getString(\));System.out.print(rs.getString(\)); hang.add(rs.getString(\));System.out.print(rs.getString(\)); hang.add(rs.getString(\));System.out.println(rs.getString(\)); rowData.add(hang);} jt=new JTable(rowData,columnNames); jsp=new JScrollPane(jt); this.add(jsp); this.setSize(400,300); this.setVisible(true); }catch(SQLException e1){ System.out.print(\+e1.getMessage()); } }} //添加学生

package search_10_3;

import java.awt.*; import javax.swing.*; import java.sql.*;

import java.awt.event.*;

public class Addstu extends JPanel implements ActionListener{ JTextField 学号,姓名,系别; JButton 录入;

public Addstu(){ try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch(Exception e){System.err.println(\不能设置外观: \+e);} 学号=new JTextField(12); 姓名=new JTextField(12); 系别=new JTextField(12); 录入=new JButton(\录入\); 录入.addActionListener(this); Box box1=Box.createHorizontalBox();//横放box Box box2=Box.createHorizontalBox(); Box box3=Box.createHorizontalBox(); Box box4=Box.createHorizontalBox(); box1.add(new JLabel(\学号:\/*,JLabel.CENTER*/)); box1.add(学号); box2.add(new JLabel(\姓名:\/*,JLabel.CENTER*/)); box2.add(姓名); box3.add(new JLabel(\系别:\/*,JLabel.CENTER*/)); box3.add(系别);

box4.add(录入); Box boxH=Box.createVerticalBox();//竖放box boxH.add(box1); boxH.add(box2); boxH.add(box3); boxH.add(box4); boxH.add(Box.createVerticalGlue()); JPanel messPanel=new JPanel(); messPanel.add(boxH); setLayout(new BorderLayout()); add(messPanel,BorderLayout.CENTER); validate(); }

public void actionPerformed(ActionEvent c){ Object obj=c.getSource(); if(obj==录入){ if(学号.getText().equals(\)||姓名.getText().equals(\)||系别.getText().equals(\)){ JOptionPane.showMessageDialog(this,\学生信息请填满再录入!\ ); } Statement stmt=null; ResultSet rs1=null; String sql,sql1; sql1=\+学号.getText()+\; sql=\+学号.getText()+\+姓名.getText()+\+系别.getText()+\; try{ Connection dbConn1=CONN(); stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs1=stmt.executeQuery(sql1); if(rs1.next()){JOptionPane.showMessageDialog(this,\该学号以存在,无法添加\);} else{ stmt.executeUpdate(sql); JOptionPane.showMessageDialog(this,\添加成功\); } rs1.close(); stmt.close(); } catch(SQLException e){ System.out.print(\+e.getMessage()); } }}}

//查询学生

package search_10_3; import java.awt.*;

import java.awt.event.*; import java.sql.*;

import javax.swing.*;

public class Selstu extends JPanel implements ActionListener{ /** * */ private static final long serialVersionUID = 1L; JTextField 学号,姓名,系别; JButton 查找; JTextField 课号,课名; JButton 查找1; JTextField 课号1,学号1,成绩; JButton 查找2; public Selstu (){

学号=new JTextField(12); 姓名=new JTextField(12); 系别=new JTextField(12); 课号=new JTextField(12); 课名=new JTextField(12); 课号1=new JTextField(12); 学号1=new JTextField(12); 成绩=new JTextField(12);

查找=new JButton(\查找学生信息\); 查找1=new JButton(\查找课程信息\); 查找2=new JButton(\查找选课信息\);

Box box1=Box.createHorizontalBox();//横放box Box box2=Box.createHorizontalBox(); Box box4=Box.createHorizontalBox(); Box box5=Box.createHorizontalBox(); Box box6=Box.createHorizontalBox(); Box box7=Box.createHorizontalBox();

box1.add(new JLabel(\学号:\,JLabel.CENTER)); box1.add(学号);

box1.add(new JLabel(\姓名:\,JLabel.CENTER)); box1.add(姓名);

box1.add(new JLabel(\系别:\,JLabel.CENTER)); box1.add(系别); box2.add(查找);

box4.add(new JLabel(\课号:\,JLabel.CENTER)); box4.add(课号);

box4.add(new JLabel(\课名:\,JLabel.CENTER)); box4.add(课名); box6.add(查找1);

box5.add(new JLabel(\课号:\,JLabel.CENTER)); box5.add(课号1);

box5.add(new JLabel(\学号:\,JLabel.CENTER)); box5.add(学号1);

box5.add(new JLabel(\成绩:\,JLabel.CENTER)); box5.add(成绩); box7.add(查找2);

Box boxH1=Box.createVerticalBox();//竖放box boxH1.add(box1); boxH1.add(box2);

boxH1.add(Box.createVerticalGlue());

Box boxH2=Box.createVerticalBox();//竖放box boxH2.add(box4); boxH2.add(box6);

boxH2.add(Box.createVerticalGlue());

Box boxH3=Box.createVerticalBox();//竖放box boxH3.add(box5); boxH3.add(box7);

boxH3.add(Box.createVerticalGlue()); 查找.addActionListener(this); 查找1.addActionListener(this); 查找2.addActionListener(this); JPanel messPanel=new JPanel(); JPanel picPanel=new JPanel(); JPanel threePanel=new JPanel(); messPanel.add(boxH1); picPanel.add(boxH2); threePanel.add(boxH3);

setLayout(new BorderLayout());

JSplitPane splitV=new JSplitPane(JSplitPane.VERTICAL_SPLIT,messPanel,picPanel);//分割 add(splitV,BorderLayout.CENTER);

JSplitPane splitV1=new JSplitPane(JSplitPane.VERTICAL_SPLIT,splitV,threePanel);//分割

add(splitV1,BorderLayout.CENTER); validate(); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub } }

//更新学生

package search_10_3; import java.awt.*;

import java.awt.event.*; import java.sql.*; import javax.swing.*;

public class Updatastu extends JPanel implements ActionListener{ String save=null; JTextField 学号1,学号,姓名,系别; JButton 修改,查找;

public Updatastu(){ try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch(Exception e){System.err.println(\不能设置外观: \+e);} 学号1=new JTextField(12); 学号=new JTextField(12); 姓名=new JTextField(12); 系别=new JTextField(12); 修改=new JButton(\修改\); 查找=new JButton(\查找\); Box box1=Box.createHorizontalBox();//横放box Box box2=Box.createHorizontalBox(); Box box3=Box.createHorizontalBox(); Box box4=Box.createHorizontalBox(); Box box5=Box.createHorizontalBox(); box1.add(new JLabel(\学号:\,JLabel.CENTER)); box1.add(学号); box2.add(new JLabel(\姓名:\,JLabel.CENTER)); box2.add(姓名); box3.add(new JLabel(\系别:\,JLabel.CENTER)); box3.add(系别); box4.add(修改); box5.add(new JLabel(\学号:\,JLabel.CENTER)); box5.add(学号1); box5.add(查找); 修改.addActionListener(this); 查找.addActionListener(this); Box boxH=Box.createVerticalBox();//竖放box boxH.add(box1); boxH.add(box2); boxH.add(box3); boxH.add(box4); boxH.add(Box.createVerticalGlue()); JPanel picPanel=new JPanel(); JPanel messPanel=new JPanel(); messPanel.add(box5); picPanel.add(boxH); setLayout(new BorderLayout()); JSplitPane splitV=new JSplitPane(JSplitPane.VERTICAL_SPLIT,messPanel,picPanel);//分割

add(splitV,BorderLayout.CENTER); validate(); }

public void actionPerformed(ActionEvent e){ Object obj=e.getSource(); Statement stmt=null; ResultSet rs=null,rs1=null;

String sql=null,sql1=null,sqlSC; if(obj==查找){if(学号1.getText().equals(\))JOptionPane.showMessageDialog(this,\请填写查询的学号!\ ); else{ sql1=\+学号1.getText()+\; try{ Connection dbConn1=CONN(); stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs1=stmt.executeQuery(sql1); if(rs1.next()){学号.setText(rs1.getString(\).trim()); 姓名.setText(rs1.getString(\).trim()); 系别.setText(rs1.getString(\).trim()); save=学号1.getText(); } else{JOptionPane.showMessageDialog(this,\没有这个学号的学生\ );} stmt.close(); rs1.close(); }catch(SQLException e1){ System.out.print(\+e1.getMessage()); } } } else{ if(obj==修改){if(save==null){JOptionPane.showMessageDialog(this,\还没查找需要修改的学生\ );} else{ if(学号.getText().equals(\)||姓名.getText().equals(\)||系别.getText().equals(\)){ JOptionPane.showMessageDialog(this,\学生信息填满才能修改!\ ); } else{sql=\+学号.getText()+\+姓名.getText()+\+系别.getText()+\+\+save+\; if(save.trim().equals(学号.getText().trim())){ try{ Connection dbConn1=CONN(); stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); stmt.executeUpdate(sql); save=null; JOptionPane.showMessageDialog(this,\修改完成\ ); 学号.setText(\); 姓名.setText(\); 系别.setText(\); stmt.close(); }catch(SQLException e1){ System.out.print(\+e1.getMessage()); } } else{sql1=\+学号.getText()+\; try{ Connection dbConn1=CONN();

stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs1=stmt.executeQuery(sql1); if(rs1.next()){ JOptionPane.showMessageDialog(this,\已存在此学号学生\ ); } else{ sqlSC=\+学号.getText()+\+save+\; stmt.executeUpdate(sql); stmt.executeUpdate(sqlSC); save=null; JOptionPane.showMessageDialog(null,\修改完成\ ); 学号.setText(\); 姓名.setText(\); 系别.setText(\);} stmt.close(); rs1.close(); }catch(SQLException e1){ System.out.print(\+e1.getMessage()); } } }}}} }

//连接数据库方法

public static Connection CONN(){ String driverName = \; //加载JDBC驱动 String dbURL = \; //连接服务器和数据库test String userName = \; //默认用户名 String userPwd = \; //密码 Connection dbConn=null; try { Class.forName(driverName); dbConn = DriverManager.getConnection(dbURL, userName, userPwd); System.out.println(\); //如果连接成功 控制台输出Connection Successful! } catch (Exception e) { e.printStackTrace(); } return dbConn; } }

//删除学生

package search_10_3;

import java.awt.*;

import java.awt.event.*; import java.sql.*; import javax.swing.*;

public class Delstu extends JPanel implements ActionListener{ String save=null;

JTextField 学号1,学号,姓名,系别; JButton 删除,查找;

public Delstu(){

try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch(Exception e){System.err.println(\不能设置外观: \+e);}

本文来源:https://www.bwwdw.com/article/lzjg.html

Top