版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机与通信学院软件职业技术学院课程设计说明书规则几何图形问题求解作 者:学 号:专 业:软件班 级:指导教师:答辩时间:2012/6/22规则几何图形问题求解姓名学号目 录一 课设任务及要求4二需求分析42.1要求42.2任务42.3开发工具5三设计思路53.1系统类图和流程图53.2查询类流程图6四详细设计94.1分析和设计9五运行调试与分析讨论38六设计体会与小结39七参考文献40致 谢40一 课设任务及要求任务:图形化界面(GUI)编程,编写一个规则几何问题求解程序要求:(1)根据所给参数绘制出图形。(2)根据条件计算几何图形的面积和周长。(3)程序至少实现圆、长方形和三角形等规则几何
2、图形的求解。(4)几何图形的参数可变(如圆的半径、长方形的长和宽、三角形的边长、颜色和线条粗细等)。二需求分析2.1要求(1)用JAVA语言实现程序设计;(2)利用结构体、共用体进行相关信息处理;(3)画出系统的各个类图模块;(4)画出查询类模块的流程图;(5)界面友好(良好的人机互交),程序要有注释。2.2任务 (1)定义一个抽象类,三个抽象方法,在子类中覆写抽象方法;(2)通过args输入三个数:第一个数调用到圆类;第一、二个数调用到长方形类;三个数同时调用到三角形类,并在屏幕上显示计算结果;(3)画出部分模块的类图和流程图;(4)编写代码;(5)程序分析与调试。2.3开发工具JAVA语言
3、三设计思路3.1系统类图和流程图Square+ sum double+ c1 double+ k1 double+ check1( ) void+ check2( ) void+ check3( ) voidShape+ PI double+ check1( ) void+ check2( ) void+ check3( ) void 父类Shape类图 矩形Square类图Triangle+ sum double+ len double+ c1 double+ k1 double+ t1 double+ check1( ) void+ check2( ) void+ check3( ) vo
4、idCircl+ sum double+ len double+ c1 double+ check1() void+ check2() void+ check3() void 圆Circle类流程图 三角形Triangle类图 3.2查询类流程图(1)长方形类流程图开始定义double型变量面积sum,周长 len,长c1,宽k1c10 & k10check1(c1,k1 )sum=c1*k1len=2*(c1+k1)输出长方形面积sum和周长len长周长lencheck2( )check3( )结束(2)圆类流程图开始定义double型变量面积sum,周长 len,半径c1c10check2
5、(c1 )sum=PI*c1*c1len=2*PI*c1)输出圆面积sum和周长lencheck1( )check3( )结束(3)三角形类流程图:开始定义double型变量面积sum,周长 len,三边长c1,k1,t1c10 & k10& t10check3(c1,k1,t1 )len=c1+k1+t1sum=Math.sqrt(c1+k1+t1)/2*(c1+k1-t1)/2*(t1+c1-k1)/2*(k1+t1-c1)/2);输出三角形面积sum和周长len长周长lencheck2( )check3( )结束四详细设计4.1分析和设计在程序的开头部分引入IO包,java.io.*;定
6、义抽象类Shape,在其中声明三个抽象方法,check1()、check2()、check3()分别对矩形、圆、三角形实施处理。并定义一个全局常量PI=3.14利用类的继承性,将Shape类的抽象方法覆写。一:矩形类继承在矩形类Square中定义double型变量,长c1、宽k1、面积和周长len。第一步:覆写check1()方法,判断输入的长和宽是否为正数if(c10 & k10),当为正数时,则可以对该类进行面积和周长的计算:sum=c1*k1;len=2*(c1+k1); System.out.println(长方形面积:+sum+ 长方形周长:+len) ; 如果不为正数输入没有意义,
7、则输出提示语:System.out.println(-输入不正确,请输入正数-);第二步:覆写check2()、check3()方法,因为在矩形类中需处理的是求矩形的面积和周长的方法,所以这里覆写不考虑输出的具体内容void check2(double c1) /方法覆写 System.out.println(-); void check3(double c1,double k1,double t1) /方法覆写 System.out.println(-); 二:圆类继承第一步:覆写方法check2(),定义半径c1、面积sum和周长len。判断半径是否大于零。若为正数就计算圆的面积和周长:
8、通过调用上面定义的函数实现了计算器整个功能。 sum=PI*c1*c1; len=2*c1*PI;System.out.println(长方形面积:+sum+ 长方形周长:+len) ; 如果不为正数输入没有意义,则输出提示语:System.out.println(-输入不正确,请输入正数-);第二步:覆写check1()、check3()方法,因为在圆类中需处理的是求圆的面积和周长的方法,所以这里覆写不考虑输出的具体内容void check1(double c1,double k1) /方法覆写System.out.println(-); void check3(double c1,doub
9、le k1,double t1) /方法覆写 System.out.println(-); 三:三角形类继承第一步:覆写三角形的方法check3(),定义三边长分别为c1,k1,t1,面积sum和周长len。同样是判断输入的三边长是否为正数if(c10 & k10) & t10) /判断是否为正数若为正数还要捕获异常判断是否构成三角形并调用Math类中的sqrt() 方法计算面积,输出结果:try if(c1+k1t1 & c1-k1t1) /判断是否构成三角形 /调用Math类的sqrt()方法,利用海伦公式计算面积sum=Math.sqrt(c1+k1+t1)/2*(c1+k1-t1)/2
10、*(t1+c1-k1)/2*(k1+t1-c1)/2); len=c1+k1+t1; catch(Exception e) e.printStackTrace(); finally System.out.println(三角形面积:+sum+ 三角形周长:+len) ; 第二步:覆写方法check1()、check2(),同上在三角形类中不需考虑输出内容:void check1(double c1,double k1) /方法覆写System.out.println(-); void check2(double c1) /方法覆写 System.out.println(-); 四、测试类Dem
11、o1在主方法main中,分别将矩形、圆、三角形实例化对象Square squ=new Square(); /实例化长方形对象 Circle cir=new Circle(); /实例化圆对象Triangle tri=new Triangle(); /实例化三角形对象通过args数组向程序中输入待测的数,先判断数组的长度是否为3,若不为3,提示输入错误:if(args.length!=3) System.out.println(-输入错误,请输入三个数-); 若输入正确,利用Double类的valueOf()方法将数组元素转换成double型,并赋给c,k,tdouble c=Double.va
12、lueOf(args0); /将字符串转换成double形 double k=Double.valueOf(args1) /将字符串转换成double形 double t=Double.valueOf(args2); /将字符串转换成double形在通过对象调用方法,将程序结果显性化出来:System.out.println(-长方形-); System.out.println(长为:+c+宽为:+k); squ.check1(c,k); /长方形方法调用 System.out.println(-圆-); System.out.println(半径为:+c); cir.check2(c); /
13、圆方法调用 System.out.println(-三角形-); System.out.println(边长1为:+c+边长2为:+k+边长3为:+t); tri.check3(c,k,t); /三角形方法调用4.2具体代码实现import java.applet.*; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import java.awt.geom.*; import java.io.*; class Point implements Serializable
14、int x,y; Color col; int tool; int boarder; Point(int x, int y, Color col, int tool, int boarder) this.x = x; this.y = y; this.col = col; this.tool = tool; this.boarder = boarder; class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener int x = -1, y = -
15、1; int con = 1;/画笔大小 int Econ = 5;/橡皮大小 int toolFlag = 0;/toolFlag:工具标记 /toolFlag工具对应表: /(0-画笔);(1-橡皮);(2-清除); /(3-直线);(4-圆);(5-矩形); Color c = new Color(0,0,0); /画笔颜色 BasicStroke size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);/画笔粗细 Point cutflag = new Point(-1, -1, c, 6, con
16、);/截断标志 Vector paintInfo = null;/点信息向量组 int n = 1; FileInputStream picIn = null; FileOutputStream picOut = null; ObjectInputStream VIn = null; ObjectOutputStream VOut = null; / *工具面板-画笔,直线,圆,矩形,多边形,橡皮,清除*/ Panel toolPanel; Button eraser, drLine,drCircle,drRect; Button clear ,pen; Choice ColChoice,Si
17、zeChoice,EraserChoice; Button colchooser; Label 颜色,大小B,大小E; /保存功能 Button openPic,savePic; FileDialog openPicture,savePicture; paintboard(String s) super(s); addMouseMotionListener(this); addMouseListener(this); paintInfo = new Vector(); /*各工具按钮及选择项*/ /颜色选择 ColChoice = new Choice(); ColChoice.add(bla
18、ck); ColChoice.add(red); ColChoice.add(blue); ColChoice.add(green); ColChoice.addItemListener(this); /画笔大小选择 SizeChoice = new Choice(); SizeChoice.add(1); SizeChoice.add(3); SizeChoice.add(5); SizeChoice.add(7); SizeChoice.add(9); SizeChoice.addItemListener(this); /橡皮大小选择 EraserChoice = new Choice()
19、; EraserChoice.add(5); EraserChoice.add(9); EraserChoice.add(13); EraserChoice.add(17); EraserChoice.addItemListener(this); / toolPanel = new Panel(); clear = new Button(清除); eraser = new Button(橡皮); pen = new Button(画笔); drLine = new Button(画直线); drCircle = new Button(画圆形); drRect = new Button(画矩形)
20、; openPic = new Button(打开图画); savePic = new Button(保存图画); colchooser = new Button(显示调色板); /各组件事件监听 clear.addActionListener(this); eraser.addActionListener(this); pen.addActionListener(this); drLine.addActionListener(this); drCircle.addActionListener(this); drRect.addActionListener(this); openPic.add
21、ActionListener(this); savePic.addActionListener(this); colchooser.addActionListener(this); 颜色 = new Label(画笔颜色,Label.CENTER); 大小B = new Label(画笔大小,Label.CENTER); 大小E = new Label(橡皮大小,Label.CENTER); /面板添加组件 toolPanel.add(openPic); toolPanel.add(savePic); toolPanel.add(pen); toolPanel.add(drLine); too
22、lPanel.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.
23、NORTH); setBounds(60,60,900,600); setVisible(true); validate(); /dialog for save and load openPicture = new FileDialog(this,打开图画,FileDialog.LOAD); openPicture.setVisible(false); savePicture = new FileDialog(this,保存图画,FileDialog.SAVE); savePicture.setVisible(false); openPicture.addWindowListener(new
24、WindowAdapter() public void windowClosing(WindowEvent e) openPicture.setVisible(false); ); savePicture.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) savePicture.setVisible(false); ); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) Syste
25、m.exit(0); ); public void paint(Graphics g) Graphics2D g2d = (Graphics2D)g; Point p1,p2; n = paintInfo.size(); if(toolFlag=2) g.clearRect(0,0,getSize().width,getSize().height);/清除 for(int i=0; in ;i+) p1 = (Point)paintInfo.elementAt(i); p2 = (Point)paintInfo.elementAt(i+1); size = new BasicStroke(p1
26、.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); g2d.setColor(p1.col); g2d.setStroke(size); if(p1.tool=p2.tool) switch(p1.tool) case 0:/画笔 Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y); g2d.draw(line1); break; case 1:/橡皮 g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder); break; case 3
27、:/画直线 Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y); g2d.draw(line2); break; case 4:/画圆 Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y); g2d.draw(ellipse); break; case 5:/画矩形 Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x
28、-p1.x) , Math.abs(p2.y-p1.y); g2d.draw(rect); break; case 6:/截断,跳过 i=i+1; break; default : /end switch /end if /end for public void itemStateChanged(ItemEvent e) if(e.getSource()=ColChoice)/预选颜色 String name = ColChoice.getSelectedItem(); if(name=black) c = new Color(0,0,0); else if(name=red) c = new
29、 Color(255,0,0); else if(name=green) c = new Color(0,255,0); else if(name=blue) c = new Color(0,0,255); else if(e.getSource()=SizeChoice)/画笔大小 String selected = SizeChoice.getSelectedItem(); if(selected=1) con = 1; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(sele
30、cted=3) con = 3; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=5) con = 5; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=7) con = 7; size=new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(
31、selected=9) con = 9; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(e.getSource()=EraserChoice)/橡皮大小 String Esize = EraserChoice.getSelectedItem(); if(Esize=5) Econ = 5*2; else if(Esize=9) Econ = 9*2; else if(Esize=13) Econ = 13*2; else if(Esize=17) Econ = 17*3; pub
32、lic void mouseDragged(MouseEvent e) Point p1 ; switch(toolFlag) case 0:/画笔 x = (int)e.getX(); y = (int)e.getY(); p1 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p1); repaint(); break; case 1:/橡皮 x = (int)e.getX(); y = (int)e.getY(); p1 = new Point(x, y, null, toolFlag, Econ); paintInfo.
33、addElement(p1); repaint(); break; default : public void mouseMoved(MouseEvent e) public void update(Graphics g) paint(g); public void mousePressed(MouseEvent e) Point p2; switch(toolFlag) case 3:/直线 x = (int)e.getX(); y = (int)e.getY(); p2 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p2
34、); break; case 4: /圆 x = (int)e.getX(); y = (int)e.getY(); p2 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p2); break; case 5: /矩形 x = (int)e.getX(); y = (int)e.getY(); p2 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p2); break; default : public void mouseReleased(MouseEven
35、t e) Point p3; switch(toolFlag) case 0:/画笔 paintInfo.addElement(cutflag); break; case 1: /eraser paintInfo.addElement(cutflag); break; case 3:/直线 x = (int)e.getX(); y = (int)e.getY(); p3 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p3); paintInfo.addElement(cutflag); repaint(); break; c
36、ase 4: /圆 x = (int)e.getX(); y = (int)e.getY(); p3 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p3); paintInfo.addElement(cutflag); repaint(); break; case 5: /矩形 x = (int)e.getX(); y = (int)e.getY(); p3 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p3); paintInfo.addElement(
37、cutflag); repaint(); break; default: public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) public void actionPerformed(ActionEvent e) if(e.getSource()=pen)/画笔 toolFlag = 0; if(e.getSource()=eraser)/橡皮 toolFlag = 1; if(e.getSource()=clear)
38、/清除 toolFlag = 2; paintInfo.removeAllElements(); repaint(); if(e.getSource()=drLine)/画线 toolFlag = 3; if(e.getSource()=drCircle)/画圆 toolFlag = 4; if(e.getSource()=drRect)/画矩形 toolFlag = 5; if(e.getSource()=colchooser)/调色板 Color newColor = JColorChooser.showDialog(this,调色板,c); c = newColor; if(e.getS
39、ource()=openPic)/打开图画 openPicture.setVisible(true); if(openPicture.getFile()!=null) int tempflag; tempflag = toolFlag; toolFlag = 2 ; repaint(); try paintInfo.removeAllElements(); File filein = new File(openPicture.getDirectory(),openPicture.getFile(); picIn = new FileInputStream(filein); VIn = new
40、ObjectInputStream(picIn); paintInfo = (Vector)VIn.readObject(); VIn.close(); repaint(); toolFlag = tempflag; catch(ClassNotFoundException IOe2) repaint(); toolFlag = tempflag; System.out.println(can not read object); catch(IOException IOe) repaint(); toolFlag = tempflag; System.out.println(can not r
41、ead file); if(e.getSource()=savePic)/保存图画 savePicture.setVisible(true); try File fileout = new File(savePicture.getDirectory(),savePicture.getFile(); picOut = new FileOutputStream(fileout); VOut = new ObjectOutputStream(picOut); VOut.writeObject(paintInfo); VOut.close(); catch(IOException IOe) Syste
42、m.out.println(can not write object); /end paintboard abstract class Shapes /定义抽象类abstract double getPerimter();abstract double getArea();interface PerimterArea /定义接口float getarea();float getperimter();class Triangle extends Shapes /三角形类继承抽象类private float a;private float b;private float c;Triangle(float x1,float x2,float x3)a=x1;b=x2;c=x3;double getPerimter()return a+b+c;double getArea()float p=(a+b+c)/2; return Math.sqrt(p*(p-a)*(p-b)*(p-c);class Cicle extends Shapes /圆类继承抽象类private float radius;Cicle(float a)radius=a;double getPerimter()double p;p=2*3.14f*radiu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人工智能金融风险
- 人力资源主管年度工作总结报告
- 做防腐施工方案
- 公招高频考点总结报告
- 水培玉米课程教案
- 感恩主题班会课件(共23张)
- 封闭施工景区施工方案
- 宁夏银川市西夏区2025-2026学年第二学期八年级英语期末考试试卷-文字版-含答案-
- 2026年高压电工证理论考试题库(含答案)
- 2026年二级公共营养师(技师)考试(理论知识)全真冲刺试题及答案
- 现代城市商业综合体规划设计
- 荆防颗粒课件介绍
- 财务共享服务业务处理(全 ) 教案
- 保密协议(中英文对照)
- 【生物】全册教案 2023-2024学年人教版八年级生物下册
- 挂篮施工及安全控制连续梁施工安全培训课件
- 审计国际化进程中的问题及对策
- 民用建筑供暖通风与空气调节设计规范样本
- 第四章组合逻辑电路中的竞争冒险
- 地铁施工梯笼专项施工方案
- GB/T 17207-2012电子设备用固定电容器第18-1部分:空白详细规范表面安装固体(MnO2)电解质铝固定电容器评定水平EZ
评论
0/150
提交评论