还剩20页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
程序设计实验报告Java姓名|学号||成绩实验1实验内容打印出100到1000之间的所有水仙花数实验源码和注释package com.jlu.test;public classPPDI1_1{public staticvoid mainString[]args{int x=0;int a=0;int b=0;int c=0;forint i=100;i1000;i++{a=i/100;b=i/10%10;c=i%10;ifi==a*a*a+b*b*b+c*c*c X++;System.out.printIn“第+x+”个水仙花数+i+;}关键问题解析用循环的方式遍历,取个位、十位、百位的数字时要取整数实验2头验内谷利用JAVA类库中的Point类设计一个三角形类(Triangle),编程求三角形面积//遇见*或/运算符,则将栈顶元素出栈与数组后一元素进行计算,并将其结果重新压入栈中,//直至遍历至数组最后一个元素Qprivate StringcalculateString inputthrowsMyException{//计算函数String[]comput=input.split”;//System.out.printlninput;StackDouble stack=new Stack;Double m=Double.pczrseDot/dLecomput
[0];stack.pushm;//第一个操作数入栈forint i=1;icomput.length;i++{ifi%2==l{ifcomput[i].equals+stack.pushDouble.parseDoubLecomput[i+1];if comput[i].equals,,-M stack.push-Double.pt7rseDot/dLecomput[i+1];if comput[i].equals,*{//将前一个数出栈做乘法再入栈Double d=stack.peek;//取栈顶元素stack.pop;stack.pushd*Double.parseDot/bLecomput[i+1];if comput[i].equals/“{//将前一个数出栈做乘法再入栈double help=Double.pcjrseDoubLecomput[i+l];ifhelp==0throw newMyException被除数不能为0”;〃不会继续执行该函数double d=stack.peek;stack.pop;stack.pushd/help;double d=0d;while!stack.isEmpty{//求和d+=stack.peek;stack.pop;String result=String.vc7/.ue0/d;return result;public staticvoid mainString[]args{JFrame f=new Calculator;f.setTitlef.getClass.getSimpleName;f.setDefaultClose0peration3Frame.EXI7^0/V_CL0SF;f.setBounds400^200,500,300;f.setVisibletrue;关键问题解析主要是流布局方面实验6头验内谷输入若干个整数,并求和,直到遇到结束标志999为止在输入的过程中,自动忽略掉输入的非整数;通过对负数产生异常的方式,对输入的负数不进行累加I_______________实验源码和注释package com.jlu.test;import java.util.InputMismatchException;import java.util.Scanner;class MyExceptionlextends Exception{private staticfinal longseriaLVersionUID=IL;public MyExceptionlSum2sum{sum.b=0;}public classSum2{float b=0;public Sum2{float a=0;Scanner reader=new ScannerSystem.in;dotryb=reader.next工nt;//输入转为整数}catchInputMismatchException e{reader.next;b=0;}ifb0new MyExceptionlthis;elsea+=b;}whileb!=999;a-=999;//999不作为一个数字,应该减去“除去负数后,输入的和为+a;reader.close;public staticvoid mainString[]args{请输入想要求和的数;new Sum2;关键问题解析重写异常实验7头验内谷使用List的任一实现类构造一个队列数据结构,需使用泛型要求有Get O出队列,返回对队列的节点;put入队列;isEmpty判断队列是否为空实验源码和注释package Queue;public classLinearNodeT{//指向下一个节点private LinearNodeT next;〃本节点存储的元素private Telement;〃创建一个空的节点public LinearNode{next=null;element=null;〃创建一个节点存储指定元素,elem要存储的元素public LinearNodeTelem{next=null;element=elem;public LinearNodeTgetNext{return next;〃设置下一个节点public voidsetNextLinearNodeT node{next=node;//返回节点所指向的内容public TgetElement{return element;〃设置节点所存储的内容public voidsetElementT elem{element=elem;package Queue;public interfaceQueueADTT{//入队public voidputT element;//出队public Tget;//查看队首元素public Tfirst;//判断队是否为空public booleanisEmpty;//确定队内元素public int size;package Queue;import jav,util•EmptyStackException;public classLinkedQueueT implementsQueueADTT{〃元素计数器private int count;//定义一个头引用和尾引用private LinearNodeThead,tail;public LinkedQueue{count=0;head=tail=null;@Override/***
1.从链表的末端添加元素,如果链表为空,则head引用也要设置为指向该新元素唯一元素*
2.将当前末端元素tail引用的next引用设置为指向新元素*
3.重新把tail引用设置为指向新添加的末元素*
4.递增元素计数器*/public voidputT element{LinearNodeT node=new LinearNodeelement;if isEmpty{head=node;}else{tail•setNextnode;tail=node;count++;System.out.printIncount:+count;@Override/***
1.确保队列不为空*
2.设置一个临时弓|用等于栈顶元素*
3.设置head引用为队头元素的next引用*
4.递减元素计数器*
5.如果队列为空,将tail引用设置为null*/public Tget throwsEmptyCollectionException{if isEmptyOthrownew EmptyCollectionExceptionqueue;T result=head.getElement;head=head.getNext;count--;if isEmptyOtail=null;return result;0Overridepublic Tfirst{return head.getElement;@Overridepublic booleanisEmptyO{if count==0{System.out.printlnEmpty;return true;}else{System.out.printlnnot Empty;return false;©Override publicintsize{return count;//遍历队内元素public voidsyso{LinearNodeTnext=head.getNext;while next!=null{System.out.printInnext.getElement;next=next.getNext;}package Queue;public classtest{public staticvoid mainString[]args{LinkedQueueString list=new LinkedQueueString;list.putnthe firstelement;list.putnthe secendelement;list.putHthe thirdelement;队歹ij元素:;list.syso;弹出两个元素;String strl=list.get;System.out.printlnstrl;String str2=list.get;System.out.printlnstr2;list.isEmptyO;剩余队列元素;list.syso;弹出剩下元素;String str3=list.get;System.out.printlnstr3;list.isEmpty;关键问题解析清楚队列的特点,进端只能进,出端只能出实验8实验内容设计一个火车销售模拟程序Ticket.java假如火车站有100张火车票要卖出,现在有o五个销售点同时售票,用五个线程模拟这五个销售点的售票情况要求打印出各个售票点的票号,各售票点不能售相同票号实验源码和注释package com.jlu.test;import java.util.*;import java.lang.Thread;//super this均不能引用static private等定义的成员变量public classTicket{public staticvoid mainString[]args{//TODO自动生成的方法存根SellticketTask sellticket=new SellticketTask;//初始化任务Thread sl=new Threadsellticket;〃创建线程1si・setName售票点1”;Thread s2=new Threadsellticket;//创建线程
252.setName售票点2”;Thread s3=new Threadsellticket;//创建线程
353.setName售票点3”;//创建Thread s4=new Threadsellticket;线程
454.setName售票点4;Thread s5=new Threadsellticket;//创建线程5s
5.setName售票点5”;System,ou七.printin开始售票”;System.out.printin售票点票号剩余票数;sl.start;s
2.start;s
3.start;s
4.start;s
5.start;//售票class SellticketTaskimplements Runnablestaticint Ticket_num=lQ0;〃保持票数统一票数要静态public volatilebooleanexit=false;int temp;int flag[]=new int
[101];Random rand=new Random;public SellticketTask{forint i=0;i101;i++{flag[i]=-l;public voidrun{whileTic/et_nu/n0{synchronizedthis{iiTicket_numQ{whiletrue{temp=int rand.nextInt100+1;ifflagftemp]!=0{flag[temp]=0;break;System.out.printlnThread.currentThread{.getName+:,,+temp+,,Ttcket_num;try{Thread.sleepnew Random.nextlnt100;}catchException e{e.printStackTrace;}关键问题解析多线程问题实验9实验内容用JavaDB创建数据库myDB,在其中建立一个employee表并输入相应数据1用JDBC编写程序,显示employee表中所有男员工记录;2用用JDBC编写程序,向employee表中增加一条数据2001,邢雪花,女,6503用JDBC编写程序,将no值为2001的salary改为900,显示结果实验源码和注释package com.jlu.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public classJavaDB{public staticvoid mainString[]args throwsException{Class./or/Vame org.apache,derby.jdbc•EmbeddedDriver;Connection cn=null;cn=DriverManager.getConnectionH jdbc:derby:helloDB;create=trueH;cn.setAutoCommitfalse;//Statement st=cn.createStatement;st.executecreate tableemployeeemno varchar4^name实验源码和注释package com.jlu.test;import java.awt.Point;import java.util.Scanner;public classTriangle{static doublerounddouble value{//四舍五入returnMath.roundvalue*100/
100.0;}public staticvoid mainString[]args{Scanner sc=new ScannerSystem・i〃;//控制台输入doublex1,x2,x3,y1,y2,y3;Point pl=new Point;Point p2=new Point;Point p3=new Point;System.out.printin请输入第一个点的x,y;xl=sc.nextDouble;yl=sc,nextDouble;System.out.printin请输入第二个点的x,y;x2=sc•nextDouble;y2=sc•nextDouble;System.out.printin请输入第三个点的x,y”;x3=sc•nextDouble;y3=sc•nextDouble;pl•setLocationxl yl;p2•setLocationx2,y2;p3•setLocationx3,y3;double sl=pl.distancep2;double s2=p
2.distancep3;double s3=p
3.distancepl;ifsl+s2s3sl+s3s2s2+s3sl varchar
8.,sex varchar2,salary float;st•executeinsert into employee values1001J张强’男,,
675.20;into employeevalues1004‘,‘李香J女st•execute”insert1,
842.00;st.executeinsertinto employeevalues1001J王大山J男,
765.00“;st.executeinsertinto employeevalues1001J赵玉花J女
690.00)”);(创建员工表,插入四条记录”);//列出四条记录ResultSet rsl=st.executeQuerySELECT*FROM employeewheresex=男System.out.printin”筛选出男性员工”;while rsl.next{StringBuilder builder=newStringBuilderrsl.getStringl;builder.appendfAt;builder.appendrsl.getString2;builder.appendXt;builder.appendrsl.getString3;builder.appendXt;builder.appendrsl.getFloatsalary;System.out.printInbuilder.toString;st.execute insertintoemployeevalues2001,开i]雪花’,女’,650”;System.out.printin插入邢雪花的信息”;ResultSet rs2=st.executeQuerySELECT*FROM employee;while rs
2.next{StringBuilder builder=newStringBuilderrs
2.getStringl;builder.appendbuilder.appendrs
2.getString2;builder.appendfAt;builder.appendrs
2.getString3;builder.appendbuilder.appendrs
2.getFloatsalary;System.out.printlnbuilder.toString;st.executeUPDATE employeeSET salary=900WHEREemno=2001,,,jSystem,out.println修改2001号工资为900”;ResultSet rs3=st.executeQuerySELECT*FROM employee;while rs
3.next{StringBuilder builder=newStringBuilderrs
3.getStringl;builder.appendfAt;builder.appendrs
3.getString2;builder.appendfAt;builder.appendrs
3.getString3;builder.appendbuilder.appendrs
3.getFloatsalary;System•out.printInbuilder.toString;st.executedrop tableemployee;System.out.print ln删除表EMPLOYEE”;st.close;rsl.close;rs
2.close;cn.commit;cn.close;关键问题解析连接derby的jar包实验10实验内容设计基于流套接字的客户机/服务器通信程序要求
(1)分别编写服务端程序和客户端程序(端口号用1888)
(2)客户端向服务器发送消息服务器接收到信息并显示出来
2.cat;import unitl_
3.dog;public classunit{public staticvoid mainString[]args{Fish f=new Fish;cat c=new cat;dog d=new dog;System.out.printInf.getClass.getResourceI
7.getPath;Sy stem.out.print Inc.getClass.get Resource/.getPath;System.out.printInd.getClass.getResource,7n.getPath;}关键问题解析还需要输出查看类文件在系统中的组织方式实验4头验内谷编写三个类ComputerTime,Plane,Car007和一个接口程序Common.要求在未来如果增加第三种交通工具,不必修改之前任何程序,只要编写新的交通工具代码.从命令行输入ComputerTime的四个参数,第一个是交通工具的类型,二到三是整数A,B,C.实验源码和注释package test4;public interfaceCommon{public doubleruntimeint Aint B^int C;package test4;public classCar007implements Common{@Overridepublic doubleruntimeint A,int B,int C{ifC==0{Sy stem.out.print In“除数为0;return0;elsereturn A*B/C;package test4;public classPlane implementsCommon{@Overridepublic doubleruntimeint A,int B,int C{return A+B+C;package test4;import java•io•工nputStrnauReadea;import~javo・util.Scunner;public classComputeTime{public staticvoid mainfStringF1args//输入的都是字符串//从命令行输入,run as-run configu rations-argumentsSystem.out.println交通工具:+args
[0];System.out.println参数A:+args[l];Sy stem.out.print InH参数B:+args
[2];Sy stem.out.print InH参数C:+args
[3];〃从命令窗口输入//Scanner sc=new ScannerSystem.in;//System.out.print In交通工具:;//String tool=sc.next;//System.out.println你输入的是”+tool;if args[l]!=nullargs[l].matches,,A[0-9]+$args
[2]!=nullargs
[2].matchesA[0-9]+$args
[3]!=null args
[3].matches,,A[0-9]+$//判断这是否是整数{int a=Integer.parselntargs
[1];int b=Integer.parselntargs
[2];intc=Integer.parselntargs
[3];double v,t;//定义速度、时间tryCommon d=Common Class./or/Vaffle,,test
4.+args
[0].newlnstance;//d为通过test包里的接口,输入的登寻找到类v=d.runtimea,bjC;//v=return的值t=1000/v;速度为+v+km/h;运行时间+t+h;catch ClassNotFoundException|InstantiationException|IllegalAccessException e//没有找到相关类System.out.printInclass notfound;}//if括号结束else{不是整数!+\n;}//if-else结束关键问题解析主函数传参问题,利用正则表达式判断整数实验5头验内谷编写Calculates java,实现一个简单计算器,要求布局,可以完成加减乘除实验源码和注释package com.jlu.test;import javax.swing.import java.awt.*;import java.awt.event.ActionEvent;import java•awt.event.ActionListener;import java.util.Stack;class MyExceptionextends Exception{public MyException{super;public MyExceptionStringmessage{supermessage;public classCalculator extends3Frameprivate JTextFieldtextField;//输入文本框private Stringinput;//结果private Stringoperator;//操作符public Calculator{input=operator=DPanel panel=new3Panel;textField=new3TextField30;textField.setEditablefalse;//文本框禁止编辑textField.setHorizontalAlignmentDTextField•LEFT;//textField.setBounds100,100,20,20;〃在容器布局为空情况下生效textField.setPreferredSizenew Dimension200,30;//设置该组件的初始大小//将textField加入本JFrame中,布局为边界布局,位置为norththis.addtextField,BorderLayout.NORTH;String[]name={“7”8二“9\+”「41”5“6\-//将这个panel的布局设置为网格布局,有四行四列,行间距和列间距为1panel.setLayoutnew GridLayout4,4,1,2;forint i=0;iname.length;i++{JButton button=new JButtonname[i];〃设置按钮的时间监听button•addActionListenernew MyActionListener;//将按钮加入到panel中panel.addbutton;}//将panel加入到本JFrame中,布局为边界布局,位置为centrethis.addpanelBorderLayout.CENTER;class MyActionListenerimplementsActionListener{//内部类实现按钮响应©Overridepublic voidactionPerformedActionEvent e{int cnt=0;String actioncommand=e.getActionCommand;〃获取按钮上的字符串ifactionCommand.equals+||actioncommand.equals||actioncommand.equals*||actioncommand.equals/{input+=+actioncommand+}else ifactioncommand.equalsC{//清除输入input=}else ifactioncommand.equalsM=n{//按下等号try{input+=,,=,,+calculate input;}catch MyExceptionel{ifel.getMessage.equals被除数不能为0input=el.getMessage;elseinput=el.getMessage;textField.setTextinput;input=ent=1;}elseinput+=actioncommand;//按下数字//因为如果不按按钮ent一直未0,所以可以保证显示输入的数字和操作键ifent==0textField•setTextinput;}//这里需要借助栈来完成表达式的计算,首先将字符串分割成字符串数组,//由中缀的定义知数组奇数位为运算符从第0位开始,偶数位为操作数,//因此可将偶数为操作数进栈,遇见+-运算符,则将下一个数以正负的形式压人栈中,。
个人认证
优秀文档
获得点赞 0