上机实践-Java程序设计精编教程(第3版)_第1页
上机实践-Java程序设计精编教程(第3版)_第2页
上机实践-Java程序设计精编教程(第3版)_第3页
上机实践-Java程序设计精编教程(第3版)_第4页
上机实践-Java程序设计精编教程(第3版)_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE3271.7上机实践实验目的本实验的目的是让学生掌握开发Java应用程序的三个步骤:编写源文件、编译源文件和运行应用程序2.实验要求编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“Wearestudents”3.程序模板请按模板要求,将【代码】替换为Java程序代码。Hello.javapublicclassHello{publicstaticvoidmain(Stringargs[]){【代码1】//命令行窗口输出"你好,很高兴学习Java"Studentzhang=newStudent();zhang.speak();}}classStudent{voidspeak(){【代码2】//命令行窗口输出"Wearestudents"}}

2.8上机实践1.实验目的熟悉Java应用程序的基本结构,并能联合编译应用程序所需要的类。2.实验要求编写3个源文件:MainClass.java、A.java和B.java,每个源文件只有一个类。MainClass.java含有应用程序的主类(含有main方法),并使用了A和B。将3个源文件保存到同一目录中,例如c:\1000,然后编译MainClass.java。程序运行参考效果如图2.8所示。3.程序模板图2.8只编译主类请按模板要求,将【代码】替换为Java程序代码。图2.8只编译主类MainClass.javapublicclassMainClass{publicstaticvoidmain(Stringargs[]){【代码1】//命令行窗口输出"你好,只需编译我"Aa=newA();a.fA();Bb=newB();b.fB();}}A.javapublicclassA{voidfA(){【代码2】//命令行窗口输出"IamA"}}B.javapublicclassB{voidfB(){【代码3】//命令行窗口输出"IamB"}}

3.5上机实践1.实验目的掌握从键盘为简单型变量输入数据。掌握使用Scanner类创建一个对象,例如:Scannerreader=newScanner(System.in);学习让reader对象调用下列方法读取用户在命令行(例如,MS-DOS窗口)输入的各种简单类型数据:nextBoolean();nextByte(),nextShort(),nextInt(),nextLong(),nextFloat(),nextDouble()。在调试程序时,体会上述方法都会堵塞,即程序等待用户在命令行输入数据回车确认。图3图3.5从键盘输入数据编写一个Java应用程序,在主类的main方法中声明用于存放产品数量的int型变量amount和产品单价的float型变量,以及存放全部产品总价值float型变量sum。使用Scanner对象调用方法让用户从键盘为amount,price变量输入值,然后程序计算出全部产品总价值,并输出amount,prince,sum的值。程序运行参考效果如图3.5所示。3.程序模板请按模板要求,将【代码】替换为Java程序代码。InputData.javaimportjava.util.Scanner;publicclassInputData{publicstaticvoidmain(Stringargs[]){Scannerreader=newScanner(System.in);intamount=0;floatprice=0,sum=0;System.out.println("输入产品数量(回车确认):");【代码1】//从键盘为amount赋值System.out.println("输入产品单价(回车确认):");【代码2】//从键盘为price赋值sum=price*amount;System.out.printf("数量:%d,单价:%5.2f,总价值:%5.2f",amount,price,sum);}}

4.8上机实践1.实验目的本实验的目的是让学生使用if~else分支和while循环语句解决问题。2.实验要求编写一个Java应用程序,在主类的main方法中实现下列功能:程序随机分配给客户一个1至100之间的整数。用户输入自己的猜测。程序返回提示信息,提示信息分别是:“猜大了”、“猜小了”和“猜对了”。用户可根据提示信息再次输入猜测,直到提示信息是“猜对了”。程序运行参考效果如图4.14所示。3.程序模板请按模板要求,将【代码】替换为Java程序代码。图4.14猜数字GreekAlphabet图4.14猜数字GuessNumber.javaimportjava.util.Scanner;importjava.util.Random;publicclassGuessNumber{publicstaticvoidmain(Stringargs[]){Scannerreader=newScanner(System.in);Randomrandom=newRandom();System.out.println("给你一个1至100之间的整数,请猜测这个数");intrealNumber=random.nextInt(100)+1;//random.nextInt(100)是[0,100)中的一个随机整数intyourGuess=0;System.out.print("输入您的猜测:");yourGuess=reader.nextInt();while(【代码1】)//循环条件{if(【代码2】)//猜大了的条件代码{System.out.print("猜大了,再输入你的猜测:");yourGuess=reader.nextInt();}elseif(【代码3】)//猜小了的条件代码{System.out.print("猜小了,再输入你的猜测:");yourGuess=reader.nextInt();}}System.out.println("猜对了!");}}

5.14上机实践1.实验目的图5.26村庄共享森林图5.26村庄共享森林本实验的目的是让学生掌握类变量与实例变量,以及类方法与实例方法的区别。。2.实验要求编写程序模拟两个村庄共用拥有一片森林。编写一个Village类,该类有一个静态的int型成员变量treeAmount用于模拟森林中树木的数量。在主类MainClass的main方法中创建两个村庄,一个存在改变了treeAmount的值,另一个村庄查看treeAmount的值。程序运行参考效果如图5.26所示。3.程序模板请按模板要求,将【代码】替换为Java程序代码。Village.javaclassVillage{staticinttreeAmount;//模拟森林中树木的数量intpeopleNumber;//村庄的人数Stringname;//村庄的名字Village(Strings){name=s;}voidtreePlanting(intn){treeAmount=treeAmount+n;System.out.println(name+"植树"+n+"颗");}voidfellTree(intn){if(treeAmount-n>=0){treeAmount=treeAmount-n;System.out.println(name+"伐树"+n+"颗");}else{System.out.println("无树木可伐");}}staticintlookTreeAmount(){returntreeAmount;}voidaddPeopleNumber(intn){peopleNumber=peopleNumber+n;System.out.println(name+"增加了"+n+"人");}}MainClass.javapublicclassMainClass{publicstaticvoidmain(Stringargs[]){VillagezhaoZhuang,maJiaHeZhi;zhaoZhuang=newVillage("赵庄");maJiaHeZhi=newVillage("马家河子");zhaoZhuang.peopleNumber=100;maJiaHeZhi.peopleNumber=150;【代码1】//用类名Village访问treeAmount,并赋值200intleftTree=Village.treeAmount;System.out.println("森林中有"+leftTree+"颗树");【代码2】//zhaoZhuang调用treePlanting(intn),并向参数传值50leftTree=【代码3】//maJiaHeZhi调用lookTreeAmount()方法得到树木的数量System.out.println("森林中有"+leftTree+"颗树");【代码4】maJiaHeZhi调用fellTree(intn),并向参数传值70leftTree=Village.lookTreeAmount();System.out.println("森林中有"+leftTree+"颗树");System.out.println("赵庄的人口:"+zhaoZhuang.peopleNumber);zhaoZhuang.addPeopleNumber(12);System.out.println("赵庄的人口:"+zhaoZhuang.peopleNumber);System.out.println("马家河子的人口:"+maJiaHeZhi.peopleNumber);maJiaHeZhi.addPeopleNumber(10);System.out.println("马家河子的人口:"+maJiaHeZhi.peopleNumber);}}

6.11上机实践1.实验目的上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法。上转型对象操作子类继承的方法或子类重写的实例方法,其作用等价于子类对象去调用这些方法。因此,如果子类重写了父类的某个实例方法后,当对象的上转型对象调用这个实例方法时一定是调用了子类重写的实例方法。本实验的目的是让学生掌握上转型对象的使用,理解不同对象的上转型对象调用同一方法可能产生不同的行为,即理解上转型对象在调用方法时可能具有多种形态(多态)。2.实验要求(1)编写一个abstract类,类名为Geometry,该类有一个abstract方法:publicabstractgetArea();(2)编写Geometry的若干个子类,比如Circle子类和Rect子类。(3)编写Student类,该类定义一个publicdoublearea(Geometry...p)方法,该方法的参数是可变参数(有关知识点见5.13),即参数的个数不确定,但类型都是Geometry。该方法返回参数计算的面积之和。(4)在主类MainClass的main方法中创建一个Student对象,让该对象调用publicdoublearea(Geometry...p)计算若干个矩形和若干个圆的面积之和。程序运行参考效果如图6.14所示。3.程序模板图6.14计算面积和请按模板要求,将【代码】替换为图6.14计算面积和Geometry.javapublicabstractclassGeometry{publicabstractdoublegetArea();}Rect.javapublicclassRectextendsGeometry{doublea,b;Rect(doublea,doubleb){this.a=a;this.b=b;}【代码1】//重写getArea()方法,返回矩形面积}Circle.javapublicclassCircleextendsGeometry{doubler;Circle(doubler){this.r=r;}【代码2】//重写getArea()方法,返回圆面积}Student.javapublicclassStudent{publicdoublearea(Geometry...p){doublesum=0;for(inti=0;i<p.length;i++){sum=sum+p[i].getArea();}returnsum;}}MainClass.javapublicclassE{publicstaticvoidmain(Stringargs[]){Studentzhang=newStudent();doublearea=zhang.area(newRect(2,3),newCircle(5.2),newCircle(12));System.out.printf("2个圆和1个矩形图形的面积和:\n%10.3f",area);}}

7.10上机实践1.实验目的接口回调是多态的另一种体现,接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。所谓面向接口编程,是指当设计某种重要的类时,不让该类面向具体的类,而是面向接口,即所设计类中的重要数据是接口声明的变量,而不是具体类声明的对象。本实验的目的是让学生掌握接口回调和面向接口编程思想。2.实验要求小狗在不同环境条件下可能曾现不同的状态,小狗通过调用cry()方法体现自己的当前的状态。要求用接口封装小狗的状态。具体要求如下。(1)编写一个接口DogState,该接口有一个名字为voidshowState()的方法。(2)编写Dog类,该类中有一个DogState接口声明的变量state。另外,该类有一个cry()方法,在该方法中让接口state回调showState()方法。即Dog对象通过cry()方法来体现自己目前的状态。(3)编写若干个实现DogState接口的类,负责刻画小狗的各种状态。(4)编写主类,在主类中用Dog创建小狗,并让小狗调用cry方法体现自己的状态。程序运行参考效果如图7.12所示。图7.12小狗的状态图7.12小狗的状态请按模板要求,将【代码】替换为Java程序代码。CheckDogState.javainterfaceDogState{publicvoidshowState();}classSoftlyStateimplementsDogState{【代码1】//重写publicvoidshowState()}classMeetEnemyStateimplementsDogState{【代码2】//重写publicvoidshowState()}classMeetFriendStateimplementsDogState{【代码3】//重写publicvoidshowState()}classDog{DogStatestate;publicvoidcry(){state.showState();}publicvoidsetState(DogStates){state=s;}}publicclassE{publicstaticvoidmain(Stringargs[]){DogyellowDog=newDog();yellowDog.setState(newSoftlyState());yellowDog.cry();yellowDog.setState(newMeetEnemyState());yellowDog.cry();yellowDog.setState(newMeetFriendState());yellowDog.cry();}}

8.5上机实践1.实验目的Java使用try~catch语句来处理异常,将可能出现的异常操作放在try~catch语句的try部分,一旦try部分抛出异常对象,比如调用某个抛出异常的方法抛出了异常对象,那么,try部分将立刻结束执行,而转向执行相应的catch部分。本实验的目的是让学生掌握使用try~catch语句。2.实验要求车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。(1)编写一个一个Exception的子类DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出:"属于危险品"。(2)编写一个Machine类,该类的方法checkBag(Goodsgoods)当发现参数goods是危险品时(即goods的isDanger属性的值是true时)将抛出DangerException异常。(3)程序在主类的main方法中的try~catch语句的try部分让Machine类的实例调用checkBag(Goodsgoods)方法,一旦发现危险品,就在try~catch语句的catch部分处理危险品。程序运行参考效果如图8.8所示。3.程序模板请按模板要求,将【代码】替换为Java程序代码。图8.8检查危险品Check.java图8.8检查危险品classGoods{booleanisDanger;Stringname;Goods(Stringname){=name;}publicvoidsetIsDanger(booleanboo){isDanger=boo;}publicbooleanisDanger(){returnisDanger;}publicStringgetName(){returnname;}}classDangerExceptionextendsException{Stringmessage;publicDangerException(){message="危险品!";}publicvoidtoShow(){System.out.print(message+"");}}classMachine{publicvoidcheckBag(Goodsgoods)throwsDangerException{if(goods.isDanger()){DangerExceptiondanger=newDangerException();【代码1】//抛出danger}}}publicclassCheck{publicstaticvoidmain(Stringargs[]){Machinemachine=newMachine();Goodsapple=newGoods("苹果");apple.setIsDanger(false);Goodsexplosive=newGoods("炸药");explosive.setIsDanger(true);try{machine.checkBag(explosive);System.out.println(explosive.getName()+"检查通过");}catch(DangerExceptione){【代码2】//e调用toShow()方法System.out.println(explosive.getName()+"被禁止!");}try{machine.checkBag(apple);System.out.println(apple.getName()+"检查通过");}catch(DangerExceptione){e.toShow();System.out.println(apple.getName()+"被禁止!");}}}

9.10上机实践1.实验目的当分析一个字符串并将字符串分解成可被独立使用的单词时,可以使用java.util包中的StringTokenizer类。当我们想分解出字符串的有用的单词时,可以首先把字符串中不需要的单词都统一替换为空格或其他字符,比如“*”,然后再使用StringTokenizer类,并用“*”或空格做分隔标记分解出所需要的单词。本实验的目的是让学生掌握StringTokenizer类。图9.22购物小票的价格2.实验要求图9.22购物小票的价格两张购物小票的内容如下。"苹果56.7圆,香蕉:12圆,芒果:19.8圆";"酱油6.7圆,精盐:0.8圆,榨菜:9.8圆";编写程序分别输出两张购物小票的价格之和。程序运行参考效果如图9.22所示。3.程序模板上机调试模板给出的程序,完成实验后的练习。E.javaimportjava.util.*;publicclassE{publicstaticvoidmain(Stringargs[]){Strings1="苹果:56.7圆,香蕉:12圆,芒果:19.8圆";Strings2="酱油:6.7圆,精盐:0.8圆,榨菜:9.8圆";ComputePicejisuan=newComputePice();Stringregex="[^0123456789.]+";//匹配所有非数字字符串Strings1_number=s1.replaceAll(regex,"*");doublepriceSum=pute(s1_number,"*");System.out.printf("\"%s\"价格总和:\n%f圆\n",s1,priceSum);Strings2_number=s2.replaceAll(regex,"#");priceSum=pute(s2_number,"#");System.out.printf("\"%s\"价格总和:\n%f圆\n",s2,priceSum);}}classComputePice{doublecompute(Strings,Stringfenge){StringTokenizerfenxiOne=newStringTokenizer(s,fenge);doublesum=0;doubledigitItem=0;while(fenxiOne.hasMoreTokens()){Stringstr=fenxiOne.nextToken();digitItem=Double.parseDouble(str);sum=sum+digitItem;}returnsum;}}

10.13上机实践1.实验目的本实验的目的是让学生掌握字符输入、输出流以及缓冲输入、输出流用法。图10.11分析成绩单2.实验要求图10.11分析成绩单现在有如下格式的成绩单(文本格式)score.txt:姓名:张三,数学72分,物理67分,英语70分.姓名:李四,数学92分,物理98分,英语88分.姓名:周五,数学68分,物理80分,英语77分.要求按行读入取成绩单,并在该行的后面尾加上该同学的总成绩,然后再将该行写入到一个名字为socreAnalysis.txt的文件中。程序运行参考效果如图10.11所示。3.程序模板请按模板要求,将【代码】替换为Java程序代码。AnalysisResult.javaimportjava.io.*;importjava.util.*;publicclassAnalysisResult{publicstaticvoidmain(Stringargs[]){FilefRead=newFile("score.txt");FilefWrite=newFile("socreAnalysis.txt");try{Writerout=【代码1】//以尾加方式创建指向文件fWrite的out流BufferedWriterbufferWrite=【代码2】//创建指向out的bufferWrite流Readerin=【代码3】//创建指向文件fRead的in流BufferedReaderbufferRead=【代码4】//创建指向in的bufferRead流Stringstr=null;while((str=bufferRead.readLine())!=null){doubletotalScore=Fenxi.getTotalScore(str);str=str+"总分:"+totalScore;System.out.println(str);bufferWrite.write(str);bufferWrite.newLine();}bufferRead.close();bufferWrite.close();}catch(IOExceptione){System.out.println(e.toString());}}}Fenxi.javaimportjava.util.*;publicclassFenxi{publicstaticdoublegetTotalScore(Strings){Scannerscanner=newScanner(s);scanner.useDelimiter("[^0123456789.]+");doubletotalScore=0;while(scanner.hasNext()){try{doublescore=scanner.nextDouble();totalScore=totalScore+score;}catch(InputMismatchExceptionexp){Stringt=scanner.next();}}returntotalScore;}}

11.8上机实践1.实验目的处理事件时,要很好地掌握事件源、监视器、处理事件的接口之间的关系。事件源是能够产生事件的对象,如文本框、按钮、下拉式列表等。事件源通过调用相应的方法将某个对象作为自己的监视器,事件源增加监视的方法addXXXListener(XXXListenerlistener)中的参数是一个接口,listener可以引用任何实现了该接口的类所创建的对象做为事件源的监视器,当事件源发生事件时,接口listener立刻调用被类实现的接口中的某个方法,即监视器负责处理事件源发生的事件。本实验目的是掌握处理ActionEvent事件。2.实验要求编写一个算术测试小软件,用来训练小学生的算术能力。程序有3个类组成,其中Teacher对象充当监视器,负责给出算术题目,并判断回答者的答案是否正确。ComputerFrame对象负责为算术题目提供视图,比如用户可以通过ComputerFrame对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答案;MailClass是软件的主类。程序运行参考效果如图11.20所示。图1图11.20算术测试3.程序模板请按模板要求,将【代码】替换为Java程序代码。MainClass.javapublicclassMainClass{publicstaticvoidmain(Stringargs[]){ComputerFrameframe;frame=newComputerFrame();frame.setTitle("算术测试");frame.setBounds(100,100,650,180);}}ComputerFrame.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassComputerFrameextendsJFrame{JMenuBarmenubar;JMenuchoiceGrade;//选择级别的菜单JMenuItemgrade1,grade2;JTextFieldtextOne,textTwo,textResult;JButtongetProblem,giveAnswer;JLabeloperatorLabel,message;TeacherteacherZhang;ComputerFrame(){teacherZhang=newTeacher();teacherZhang.setMaxInteger(20);setLayout(newFlowLayout());menubar=newJMenuBar();choiceGrade=newJMenu("选择级别");grade1=newJMenuItem("幼儿级别");grade2=newJMenuItem("儿童级别");grade1.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){teacherZhang.setMaxInteger(10);}});grade2.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){teacherZhang.setMaxInteger(50);}});choiceGrade.add(grade1);choiceGrade.add(grade2);menubar.add(choiceGrade);setJMenuBar(menubar);【代码1】//创建textOne,其可见字符长是5textTwo=newJTextField(5);textResult=newJTextField(5);operatorLabel=newJLabel("+");operatorLabel.setFont(newFont("Arial",Font.BOLD,20));message=newJLabel("你还没有回答呢");getProblem=newJButton("获取题目");giveAnswer=newJButton("确认答案");add(textOne);add(operatorLabel);add(textTwo);add(newJLabel("="));add(textResult);add(giveAnswer);add(message);add(getProblem);textResult.requestFocus();textOne.setEditable(false);textTwo.setEditable(false);getProblem.setActionCommand("getProblem");textResult.setActionCommand("answer");giveAnswer.setActionCommand("answer");teacherZhang.setJTextField(textOne,textTwo,textResult);teacherZhang.setJLabel(operatorLabel,message);【代码2】//将teacherZhang注册为getProblem的ActionEvent事件监视器【代码3】//将teacherZhang注册为giveAnswer的ActionEvent事件监视器【代码4】//将teacherZhang注册为textResult的ActionEvent事件监视器setVisible(true);validate();setDefaultCloseOperation(DISPOSE_ON_CLOSE);}}Teacher.javaimportjava.util.Random;importjava.awt.event.*;importjavax.swing.*;publicclassTeacherimplementsActionListener{intnumberOne,numberTwo;Stringoperator="";booleanisRight;Randomrandom;//用于给出随机数intmaxInteger;//题目中最大的整数JTextFieldtextOne,textTwo,textResult;JLabeloperatorLabel,message;Teacher(){random=newRandom();}publicvoidsetMaxInteger(intn){maxInteger=n;}publicvoidactionPerformed(ActionEvente){Stringstr=e.getActionCommand();if(str.equals("getProblem")){numberOne=random.nextInt(maxInteger)+1;//1至maxInteger之间的随机数;numberTwo=random.nextInt(maxInteger)+1;doubled=Math.random();//获取(0,1)之间的随机数if(d>=0.5)operator="+";elseoperator="-";textOne.setText(""+numberOne);textTwo.setText(""+numberTwo);operatorLabel.setText(operator);message.setText("请回答");textResult.setText(null);}elseif(str.equals("answer")){Stringanswer=textResult.getText();try{intresult=Integer.parseInt(answer);if(operator.equals("+")){if(result==numberOne+numberTwo)message.setText("你回答正确");elsemessage.setText("你回答错误");}elseif(operator.equals("-")){if(result==numberOne-numberTwo)message.setText("你回答正确");elsemessage.setText("你回答错误");}}catch(NumberFormatExceptionex){message.setText("请输入数字字符");}}}publicvoidsetJTextField(JTextField...t){textOne=t[0];textTwo=t[1];textResult=t[2];}publicvoidsetJLabel(JLabel...label){operatorLabel=label[0];message=label[1];}}

12.8上机实践1.实验目的当Java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中有两个重要的线程:AWT-EventQuecue和AWT-Windows。AWT-EventQuecue线程负责处理GUI事件。AWT-EventQuecue线程负责处理GUI事件,AWT-Windows线程负责将窗体或组件绘制到桌面。JVM要保证各个线程都有使用CPU资源的机会,比如,程序中发生GUI界面事件时,JVM就会将CPU资源切换给AWT-EventQuecue线程,AWT-EventQuecue线程就会来处理这个事件,比如,你单击了程序中的按钮,触发ActionEvent事件,AWT-EventQuecue线程就立刻排队等候执行处理事件的代码。本试验的目的是掌握在GUI中使用Thread的子类创建线程。2.实验要求编写一个Java应用程序,在主线程中再创建一个Frame类型的窗口,在该窗口中再创建一个线程giveWord。线程giveWord每隔2秒中给出一个汉字,用户使用一种汉字输入法将该汉字输入到文本框中。程序运行效果如图12.12图12.12打字练习图12.12打字练习3.程序模板请按模板要求,将【代码】替换为Java程序代码。ThreadWordMainClass.javapublicclassThreadWordMainClass{publicstaticvoidmain(Stringargs[]){newThreadFrame().setTitle("汉字打字练习");}}WordThread.javaimportjavax.swing.JTextField;publicclassWordThreadextendsThread{charword;intstartPosition=19968;//Unicode表的19968位置至32320上的汉字intendPosition=32320;JTextFieldshowWord;intsleepLength=6000;publicvoidsetJTextField(JTextFieldt){showWord=t;showWord.setEditable(false);}publicvoidsetSleepLength(intn){sleepLength=n;}publicvoidrun(){intk=startPosition;while(true){word=(char)k;showWord.setText(""+word);try{【代码1】//调用sleep方法使得线程中断sleepLength豪秒}catch(InterruptedExceptione){}k++;if(k>=endPosition)k=startPosition;}}}ThreadFrame.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassThreadFrameextendsJFrameimplementsActionListener{JTextFieldshowWord;JButtonbutton;JTextFieldinputText,showScore;【代码2】//用WordThread声明一个giveWord线程象intscore=0;ThreadFrame(){showWord=newJTextField(6);showWord.setFont(newFont("",Font.BOLD,72));showWord.setHorizontalAlignment(JTextField.CENTER);【代码3】//创建giveWord线程giveWord.setJTextField(showWord);giveWord.setSleepLength(5000);button=newJButton("开始");inputText=newJTextField(10);showScore=newJTextField(5);showScore.setEditable(false);button.addActionListener(this);inputText.addActionListener(this);add(button,BorderLayout.NORTH);add(showWord,BorderLayout.CENTER);JPanelsouthP=newJPanel();southP.add(newJLabel("输入汉字(回车):"));southP.add(inputText);southP.add(showScore);add(southP,BorderLayout.SOUTH);setBounds(100,100,350,180);setVisible(true);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}publicvoidactionPerformed(ActionEvente){if(e.getSource()==button){if(!(giveWord.isAlive())){【代码4】//创建giveWordgiveWord.setJTextField(showWord);giveWord.setSleepLength(5000);}try{【代码5】//giveWord调用方法start()}catch(Exceptionexe){}}elseif(e.getSource()==inputText){if(inputText.getText().equals(showWord.getText()))score++;showScore.setText("得分:"+score);inputText.setText(null);}}}

13.6上机实践1.实验目的通过实践体会网络套接字是基于TCP协议的的有连接通信,套接字连接就是客户端的套接字对象和服务器端的套接字对象通过输入、输出流连接在一起。熟悉怎样在服务器建立ServerSocket对象,并让ServerSocket对象负责等待客户端请求建立套接字连接。熟悉而客户端怎样建立Socket对象、向服务器发出套接字连接请求。2.实验要求客户端和服务器建立套接字连接后,客户将如下格式的账单发送给服务器:"房租:2189元水费:112.9元电费:569元物业费:832元"服务器返回给客户的信息是:您的账单:"房租:2189元水费:112.9元电费:569元物业费:832元总计:3699.9元程序运行效果。3.程序模板请按模板要求,将【代码】替换为Java程序代码。客户端模板:ClientItem.javaimportjava.io.*;import.*;importjava.util.*;publicclassClientItem{publicstaticvoidmain(Stringargs[]){Scannerscanner=newScanner(System.in);SocketclientSocket=null;DataInputStreaminData=null;DataOutputStreamoutData=null;Threadthread;Readread=null;try{clientSocket=newSocket();read=newRead();thread=newThread(read);//负责读取信息的线程System.out.print("输入服务器的IP:");StringIP=scanner.nextLine();System.out.print("输入端口号:");intport=scanner.nextInt();Stringenter=scanner.nextLine();//消耗回车if(clientSocket.isConnected()){}else{InetAddressaddress=InetAddress.getByName(IP);InetSocketAddresssocketAddress=newInetSocketAddress(address,port);clientSocket.connect(socketAddress);InputStreamin=【代码1】//clientSocket调用getInputStream()返回输入流OutputStreamout=【代码2】//clientSocket调用getOutputStream()返回输出流inData=newDataInputStream(in);outData=newDataOutputStream(out);read.setDataInputStream(inData);read.setDataOutputStream(outData);thread.start();//启动负责读信息的线程}}catch(Exceptione){System.out.println("服务器已断开"+e);}}}classReadimplementsRunnable{Scannerscanner=newScanner(System.in);DataInputStreamin;DataOutputStreamout;publicvoidsetDataInputStream(DataInputStreamin){this.in=in;}publicvoidsetDataOutputStream(DataOutputStreamout){this.out=out;}publicvoidrun(){System.out.println("输入账单:");Stringcontent=scanner.nextLine();try{out.writeUTF("账单"+content);Stringstr=in.readUTF();System.out.println(str);str=in.readUTF();System.out.println(str);str=in.readUTF();System.out.println(str);}catch(Exceptione){}}}服务器端模板:ServerItem.javaimportjava.io.*;import.*;importjava.util.*;publicclassServerItem{publicstaticvoidmain(Stringargs[]){ServerSocketserver=null;ServerThreadthread;Socketyou=null;while(true){try{server=【代码3】//创建在端口4331上负责监听的ServerSocket对象}catch(IOExceptione1){System.out.println("正在监听");}try{System.out.println("正在等待客户");you=【代码4】//server调用accept()返回和客户端相连接的Socket对象System.out.println("客户的地址:"+you.getInetAddress());}catch(IOExceptione){System.out.println(""+e);}if(you!=null){newServerThread(you).start();}}}}classServerThreadextendsThread{Socketsocket;DataInputStreamin=null;DataOutputStreamout=null;ServerThread(Sockett){socket=t;try{out=newDataOutputStream(socket.getOutputStream());in=newDataInputStream(socket.getInputStream());}catch(IOExceptione){}}publicvoidrun(){try{Stringitem=in.readUTF();Scannerscanner=newScanner(item);scanner.useDelimiter("[^0123456789.]+");if(item.startsWith("账单")){doublesum=0;while(scanner.hasNext()){try{doubleprice=scanner.nextDouble();sum=sum+price;System.out.println(price);}catch(InputMismatchExceptionexp){Stringt=scanner.next();}}out.writeUTF("您的账单:");out.writeUTF(item);out.writeUTF("总额:"+sum+"元");}}catch(Exceptionexp){}}}

14.9上机实践1.实验目的掌握连接内置Derby数据库的步骤,已经怎样操作数据库中的表。2.实验要求(1)首先检查是否已经将Java安装目录\db\lib(例如E:\jdk1.8\db\lib)下的derby.jar复制到Java运行环境的扩展中,即将该jar文件存放在JDK安装目录的\jre\lib\ext文件夹中。(2)编写一个Java应用程序,负责连接到名字是employee的内置Derby数据库,并在数据库中建立名字是salary的表,该表的字段结构是:numberchar(20)primarykeynotnullmoneydouble然后该程序再负责向salary表中插入记录。程序运行参考效果如图14.13。(3)在编写一个Java应用程序,负责连接到名字是employee的内置Derby数据库,并随机查询salary表中的10条记录,计算这10条记录的中money字段值的平均值(即平均工资)。程序运行参考效果如图14.14所示。14.13输入记录14.13输入记录14.14随机抽取记录14.14随机抽取记录3.程序模板请按模板要求,将【代码】替换为Java程序代码。程序1:E.javaimportjava.util.*;importjava.sql.*;publicclassE{publicstaticvoidmain(Stringargs[]){try{Class.forName("org.apache.derby.jdbc.EmbeddedDriver"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论