课程设计JAVA规则几何图形求解.docx
- 文档编号:8018485
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:24
- 大小:37.13KB
课程设计JAVA规则几何图形求解.docx
《课程设计JAVA规则几何图形求解.docx》由会员分享,可在线阅读,更多相关《课程设计JAVA规则几何图形求解.docx(24页珍藏版)》请在冰豆网上搜索。
课程设计JAVA规则几何图形求解
1前言1
2需求分析1
2.1任务和要求1
2.2运行环境1
2.3开发工具1
3分析和设计2
3.1系统分析及设计思路2
3.2主要类图5
3.3函数流程图6
4具体代码实现8
5课程设计总结8..4.
5.1程序运行结果或预期运行结果2.44
5.2设计结论2..4.6
参考文献2..6.7
致谢2..7..7
1前言
图形化界面(GUI)编程,编写一个规则几何问题求解程序。
(1)根据所给参数绘制出图形。
(2)根据条件计算几何图形的面积和周长。
(3)程序至少实现圆、长方形和三角形等规则几何图形的求解。
(4)几何图形的参数可变(如圆的半径、长方形的长和宽、三角形的边长、颜色和线条粗细等)。
2需求分析
2.1任务和要求
要求:
(1)用JAVA语言实现程序设计;
(2)利用结构体、共用体进行相关信息处理;
(3)画出系统的各个类图模块;
(4)画出查询类模块的流程图;
(5)界面友好(良好的人机互交),程序要有注释。
任务:
(1)定义一个抽象类,三个抽象方法,在子类中覆写抽象方法;
(2)通过args输入三个数:
第一个数调用到圆类;第一、二个数调用到长方形类;三个数同时调用到三角形类,并在屏幕上显示计算结果;
(3)画出部分模块的类图和流程图;
(4)编写代码;
(5)程序分析与调试。
2.2运行环境
(1)WINDOWS2000/XP系统
(2)editplus或eclipse
2.3开发工具
Java
3分析和设计
3.1系统分析及设计思路
首先在程序的开头部分引入10包,java.io.*;定义抽象类Shape在其中声明三个抽象方法,check1()、check2()、check3()分别对矩形、圆、三角形实施处理。
并定义一个全局常量Pl=3.14。
禾U用类的继承性,将Shape类的抽象方法覆写。
(1)矩形类继承:
在矩形类Square中定义double型变量,长cl、宽k1、面积和周长len。
第一步:
覆写check1()方法,判断输入的长和宽是否为正数if(c1>0&&k1>0),当为正数时,则可以对该类进行面积和周长的计算:
sum=c1*k1;len=2*(c1+k1);
System.out.println(”长方形面积:
"+sum+"长方形周长:
"+len);
如果不为正数输入没有意义,则输出提示语:
System.out.println("输入不正确,请输入正数");
第二步:
覆写方法,因为在矩形类中需处理的是求矩形的面积和周长的方法,所以这里覆写不考虑输出的具体内容
check2()、check3()
voidcheck2(doublec1){//方法覆写
System.out.println("");
}
voidcheck3(doublec1,doublek1,doublet1){//方法覆写
System.out.println("");
}
(2)圆类继承:
第一步:
覆写方法check2(),定义半径c1、面积sum和周长len。
判断半径是否大于零。
若为正数就计算圆的面积和周长:
通过调用上面定义的函数实现了计算器整个功能。
sum=Pl*c1*c1;
len=2*c1*Pl;
System.out.println(”长方形面积:
"+sum+"长方形周长:
"+len);
如果不为正数输入没有意义,则输出提示语:
System.out.println("输入不正确,请输入正数");
第二步:
覆写方法,因为在圆类中需处理的是求圆的面积和周长的方法,所以这里覆
写不考虑输出的具体内容
check1()、check3()
voidcheck1(doublec1,doublek1){//方法覆写System.out.println("");
}
voidcheck3(doublec1,doublek1,doublet1){//方法覆写System.out.println("");
}
(3)三角形类继承:
第一步:
覆写三角形的方法check3(),定义三边长分别为cl,k1,t1,面积sum和周长len。
同样是判断输入的三边长是否为正数
if((c1>0&&k1>0)&&t1>0){}//判断是否为正数
若为正数还要捕获异常判断是否构成三角形并调用Math类中的sqrt()方法计算面积,输出结果:
try{
if(c1+k1>t1&&c1-k1 //调用Math类的sqrt()方法,利用海伦公式计算面积sum=Math.sqrt((c1+k1+t1)/2*(c1+k1-t1)/2*(t1+c1-k1)/2*(k1+t1-c1)/2); len=c1+k1+t1; }catch(Exceptione){ e.printStackTrace(); }finally{ System.out.println(”三角形面积: "+sum+ "三角形周长: "+len); } 第二步: 覆写方法check1()、check2(),同上在三角形类中不需考虑输出内容: voidcheck1(doublec1,doublek1){//方法覆写 System.out.println(""); voidcheck2(doublec1){//方法覆写 System.out.println(""); } (4)测试类Demo1: 在主方法main中,分别将矩形、圆、三角形实例化对象Squaresqu=newSquare();//实例化长方形对象 Circlecir=newCircle();//实例化圆对象 Triangletri=newTriangle();//实例化三角形对象通过args数组向程序中输入待测的数,先判断数组的长度是否为3,若不为3,提示输入错误: if(args.length! =3){ System.out.println("---输入错误,请输入三个数");} 若输入正确,利用Double类的valueOf()方法将数组元素转换成double型,并赋给c,k,t doublec=Double.valueOf(args[0]); 〃将字符串转换成double形 doublek=Double.valueOf(args[1]) 〃将字符串转换成double形 doublet=Double.valueOf(args[2]); 〃将字符串转换成double形在通过对象调用方法,将程序结果显性化出来: System.out.println("长方形"); System.out.println("长为: "+c+"宽为: "+k); squ.check1(c,k);//长方形方法调用 System.out.println("圆"); System.out.println(”半径为: "+c); cir.check2(c);//圆方法调用 System.out.println("三角形"); System.out.println("边长1为: "+c+"边长2为: "+k+"边长3为: "+t);tri.check3(c,k,t);//三角形方法调用 3.2主要类图 对规则几何图形求解进行系统分析之后,定义抽象类Shape,在其中声明三个抽象方法,check1()、check2()、check3()分别对矩形、圆、三角形实施处理。 并定义一个全局常量Pl=3.14。 禾U用类的继承性,将Shape类的抽象方法覆写。 然后根据分析画出了父类Shape矩形Square圆Circle、三角形Triangle的类图。 如下图所示: Shape Square + PI double + check1() void + check2() void + check3() void + sum double + c1 double + k1 double + check1() void + check2() void + check3() void 图3.1父类Shape类图 Circl +sum double +len double +c1 double +check1() void +check2() void +check3() void 图3.3圆Circle类图 图3.2矩形Square类图 Triangle + sum double + len double + c1 double + k1 double + t1 double + check1() void + check2() void + check3() void 图3.4三角形Triangle类图 3.3函数流程图 图3.5长方形类流程图 图3.6圆形类流程图 图3.7三角形类流程图 4具体代码实现(主要源代码) importjava.applet.*; importjava.awt.*; importjava.awt.event.*; importjava.util.*; importjavax.swing.*; importjava.awt.geom.*; importjava.io.*; classPointimplementsSerializable { intx,y; Colorcol; inttool; intboarder; Point(intx,inty,Colorcol,inttool,intboarder) { this.x=x; this.y=y; this.col=col; this.tool=tool; this.boarder=boarder; } } classpaintboardextendsFrameimplements ActionListener,MouseMotionListener,MouseListener,ItemListener { intx=-1,y=-1; intcon=1;//画笔大小 intEcon=5;//橡皮大小 inttoolFlag=0;//toolFlag: 工具标记 //toolFlag工具对应表: //(0--画笔);(1--橡皮);(2--清除); //(3--直线);(4--圆);(5--矩形); Colorc=newColor(0,0,0);//画笔颜色 BasicStrokesize=new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStrokeJOIN_BEVEL);〃画笔粗细 Pointcutflag=newPoint(-1,-1,c,6,con);//截断标志 VectorpaintInfo=null;//点信息向量组 intn=1; FileInputStreampicIn=null; FileOutputStreampicOut=null; ObjectInputStreamVIn=null; ObjectOutputStreamVOut=null; //*工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/PaneltoolPanel; Buttonerase,rdrLine,drCircle,drRect; Buttonclear,pen; ChoiceColChoice,SizeChoice,EraserChoice; Buttoncolchooser; Label颜色,大小B,大小E; //保存功能 ButtonopenPic,savePic; FileDialogopenPicture,savePicture;paintboard(Strings) { super(s); addMouseMotionListener(this); addMouseListener(this); paintInfo=newVector(); /*各工具按钮及选择项*/ //颜色选择 ColChoice=newChoice(); ColChoice.add("black"); ColChoice.add("red"); ColChoice.add("blue"); ColChoice.add("green"); ColChoice.addItemListener(this);//画笔大小选择 SizeChoice=newChoice(); SizeChoice.add("1"); SizeChoice.add("3"); SizeChoice.add("5"); SizeChoice.add("7"); SizeChoice.add("9"); SizeChoice.addItemListener(this);//橡皮大小选择 EraserChoice=newChoice(); EraserChoice.add("5"); EraserChoice.add("9"); EraserChoice.add("13"); EraserChoice.add("17"); EraserChoice.addItemListener(this);////////////////////////////////////////////////////toolPanel=newPanel(); clear=newButton("清除");eraser=newButton(”橡皮");pen=newButton("画笔");drLine=newButton(”画直线");drCircle=newButton(”画圆形");drRect=newButton(”画矩形");openPic=newButton(”打开图画");savePic=newButton(”保存图画");colchooser=newButton("显示调色板"); //各组件事件监听 clear.addActionListener(this);eraser.addActionListener(this);pen.addActionListener(this);drLine.addActionListener(this);drCircle.addActionListener(this);drRect.addActionListener(this);openPic.addActionListener(this);savePic.addActionListener(this);colchooser.addActionListener(this); 颜色=newLabel("画笔颜色"丄abel.CENTER); 大小B=newLabel("画笔大小"丄abel.CENTER); 大小E=newLabel("橡皮大小"丄abel.CENTER); //面板添加组件toolPanel.add(openPic);toolPanel.add(savePic); toolPanel.add(pen);toolPanel.add(drLine);toolPanel.add(drCircle);toolPanel.add(drRect); toolPanel.add颜色);toolPanel.add(ColChoice); toolPanel.add(大小B);toolPanel.add(SizeChoice); toolPanel.add(colchooser); toolPanel.add(eraser); toolPanel.add(大小E);toolPanel.add(EraserChoice;toolPanel.add(clear); //工具面板到APPLET面板add(toolPanel,BorderLayout.NORTH); setBounds(60,60,900,600);setVisiblet(rue); validate(); //dialogforsaveandload openPicture=newFileDialog(this,"打开图画”,FileDialog.LOAD);openPicture.setVisible(false); savePicture=newFileDialog(this,"保存图画",FileDialog.SAVE);savePicture.setVisible(false); openPicture.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente) {openPicture.setVisible(false);} });savePicture.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente) {savePicture.setVisible(false);} }); addWindowListener(newWindowAdapter() { publicvoidwindowClosing(WindowEvente) {System.exit(0);} }); } publicvoidpaint(Graphicsg) { Graphics2Dg2d=(Graphics2D)g; Pointp1,p2;n=paintInfo.size(); if(toolFlag==2) g.clearRect(O,O,getSize()width,getSize().height);//清除 for(inti=0;i p1=(Point)paintInfo.elementAt(i); p2=(Point)paintInfo.elementAt(i+1); size=newBasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);g2d.setColor(p1.col); g2d.setStroke(size); if(p1.tool==p2.tool) { switch(p1.tool) { caseO: //画笔 Line2Dline1=newLine2D.Double(p1.x,p1.y,p2.x,p2.y);g2d.draw(line1); break; easel: //橡皮 g.clearRect(p1.x,p1.y,p1.boarder,p1.boarder);break; case3: //画直线 Line2Dline2=newLine2D.Double(p1.x,p1.y,p2.x,p2.y);g2d.draw(line2); break; case4: //画圆 Math.abs(p2.x-p1.x) Math.abs(p2.x-p1.x) Ellipse2Dellipse=newEllipse2D.Double(p1.x,p1.y,Math.abs(p2.y-p1.y)); g2d.draw(ellipse); break; case5: //画矩形 Rectangle2Drect=newRectangle2D.Double(p1.x,p1.y,Math.abs(p2.y-p1.y)); g2d.draw(rect); break; case6: //截断,跳过 i=i+1;break; default: }//endswitch }//endif }//endfor } publicvoiditemStateChanged(ItemEvente) { if(e.getSource()==ColChoice)〃预选颜色 { Stringname=ColChoice.getSelectedItem();if(name=="black") {c=newColor(0,0,0);} elseif(name=="red") {c=newColor(255,0,0);} elseif(name=="green") {c=newColor(0,255,0);} elseif(name=="blue") {c=newColor(0,0,255);} } elseif(e.getSource()==SizeChoice)〃画笔大小 { Stringselected=SizeChoice.getSelectedItem(); if(selected=="1") { con=1; size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); } elseif(selected=="3") { con=3; size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); } elseif(selected=="5") {con=5; size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); } elseif(selected=='7") {con=7; size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStrokeJOIN_BEVEL); } elseif(selected=='9") {con=9; size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStrokeJOIN_BEVEL); } } elseif(e.getSource()==EraserChoice〃橡皮大小 { String
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 JAVA 规则 几何图形 求解