中南林业科技大学课程设计报告设计名称:计算图形面积姓名:学号:专业班级:院(系):计算机与与信息工程设计时间:设计地点:中南林业科技大学一、设计目的1.深入理解Java面向对象的设计思想2.提高用Java语言编程的能力3.学会制作软件开发文二、课程要求分析2.1本课程及程序功能要求课程名称:计算图形面积的制作要求:编写一个体现MVC结构的GUI程序。
首先编写一个图形接口以及实现该接口的圆类、梯形类、三角形类等,然后再编写一个窗口。
要求:1.能够选择具体的图形;2.使用若干文本框和一个文本区为该图形对象中的数据提供视图,其中文本框用来显示和更新图形对象的基本要素(如梯形的上底、下底和高),文本区对象用来显示图形的面积。
窗口中有一个按钮,用户单击该按钮后,程序用文本框中的数据作为图形对象的基本要素,并将计算出的图形面积显示在文本区中。
2.2课程介绍计算图形面积使用的事JavaSE中的GUI和线程基本技术,可以实现三角形、圆、梯形的面积计算。
具体操作如下:1.点击单选按钮选择要计算面积的图形形状。
2.输入所选择图形对象的基本要素(如梯形的上底、下底、高)。
3.点击按钮“确定”,可以在文本区显示计算得出的结果。
4.点击右上角的关闭键可以退出本程序。
三、程序流程图开始四、程序设计介绍4.1本程序所用知识点(1)GUI概念图形用户界面(Graphical User Interface,简称 GUI)是指采用图形方式显示的计算机操作用户接口。
与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。
运行Java程序有两种方式,一是命令行输出,另一种就是图形用户界面输出(2)MVC结构模型-视图-控制器(Model-View-Controller),简称MVC。
MVC是一种先进的设计结构,其目的是以会话框形式提供方便的GUI支持。
(3)布局管理FlowLayout (流式布局管理器)这个简单的“Flow”的组件安装在窗体中,从左到右,直到顶部的空格全部再移去一行,并继续循环这些组件。
(4)创建一个窗体窗口中可以存放各种组件,所以窗体是容器,可以被直接显示、绘制在操作系统所控制的平台上。
(5)事件处理事件处理机制事件:用户对组件的一个操作事件源:发生事件的组件监听器:我们需要处理某个事件的时候,就需要在发生事件的组件上添加监听器。
事件处理器:监听器中的方法,添加监听器后,组件发生了对应的事件就会执行指定的方法(6)所用组件JLabel创建标签;JTextField 创建文本框;JRadioButton创建单选按钮;JTextArea 创建文本区;JButton 创建可单击按钮五、程序代码设计Main.javapublic class Main {public static void main(String[] args) {NewFrame nf=new NewFrame();nf.setVisible(true);}}NewFrame.javaimport java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class NewFrame extends JFrame implements ActionListener { //创建对象int flag;Triangle triangle=new Triangle();//创建对象triangle并分配内存空间Circle circle=new Circle(5);//创建对象circle并分配内存空间Lader lader=new Lader(10,20,10);//创建对象lader并分配内存空间ButtonGroup group;//创建按钮群JLabel label,a,b,c,r,a1,a2,h,result;//创建标签JTextField t1,t2,t3,t4,t5,t6,t7;// 创建文本框JRadioButton radio1,radio2,radio3;//创建单选按钮JTextArea area;//创建文本区JButton button;//创建可单击按钮NewFrame() {//设置窗体风格,包括大小,界面,标题等等this.setSize(400, 500);//设置窗口大小this.setTitle("计算图形面积");//设置窗口标题this.setLayout(null);//设置布局为空this.setResizable(false);//不可改变窗体大小this.setLocationRelativeTo(null);//窗口居中显示this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);//关闭窗口时退出//为对象分配内存group=new ButtonGroup();radio1=new JRadioButton("三角形");radio2=new JRadioButton("圆");radio3=new JRadioButton("梯形");label=new JLabel("选择形状");a=new JLabel("边 a:");b=new JLabel("边b:");c=new JLabel("边c:");r=new JLabel("半径:");a1=new JLabel("上底:");a2=new JLabel("下底:");h=new JLabel("高:");t1=new JTextField(5);t2=new JTextField(5);t3=new JTextField(5);t4=new JTextField(5);t5=new JTextField(5);t6=new JTextField(5);t7=new JTextField(5);area=new JTextArea(400,50);result=new JLabel("输出结果");button=new JButton("确定");////设置单选按钮大小并添加到窗体radio1.setBounds(40,30,80, 50);this.add(radio1);group.add(radio1);radio2.setBounds(40,80,80, 50);this.add(radio2);group.add(radio2);radio3.setBounds(40,130,80, 50);this.add(radio3);group.add(radio3);//设置标签的大小并添加到窗体上label.setBounds(40, 10, 100, 20);this.add(label);a.setBounds(120, 50,40, 10);this.add(a);b.setBounds(210,50, 40, 10);this.add(b);c.setBounds(300, 50, 40, 10);this.add(c);r.setBounds(120,100, 40, 10);this.add(r);a1.setBounds(120, 145, 50, 20);this.add(a1);a2.setBounds(210, 145, 50, 20);this.add(a2);h.setBounds(300, 145, 50, 20);this.add(h);result.setBounds(40, 250, 60, 20);this.add(result);//设置文本框、文本区的大小并添加到窗体上t1.setBounds(150,45, 50, 20);this.add(t1);t2.setBounds(240,45, 50, 20);this.add(t2);t3.setBounds(330,45,50, 20);this.add(t3);t4.setBounds(160, 95, 50, 20);this.add(t4);t5.setBounds(150, 145, 50, 20);this.add(t5);t6.setBounds(240,145,50, 20);this.add(t6);t7.setBounds(330,145,50, 20);this.add(t7);area.setBounds(100, 250, 200, 100);this.add(new JScrollPane(area));//为area绑定一个滚动条并添加到窗体this.add(area);button.setBounds(150, 400, 100, 30);this.add(button);//在按钮上添加命令radio1.addActionListener(this);radio2.addActionListener(this);radio3.addActionListener(this);button.addActionListener(this);}//以下是按钮按下的事件处理public void actionPerformed(ActionEvent e) {if(e.getSource().equals(radio1))//如果按下“三角形”按钮{flag=1;}if(e.getSource().equals(radio2))//如果按下“圆”按钮{flag=2;}if(e.getSource().equals(radio3))//如果按下“梯形”按钮{flag=3;}if(e.getSource().equals(button))//如果按下“确定”按钮{if(flag==1)//按下“三角形”按钮时调用triangle{try{double a=Double.parseDouble(t1.getText());double b=Double.parseDouble(t2.getText());double c=Double.parseDouble(t3.getText());triangle.setA(a);triangle.setB(b);triangle.setC(c);//输入三边长到文本框中area.setText("");if(triangle.getArea()!=0){area.append("三角形的面积是:");area.append("\n");area.append(""+triangle.getArea());//输入结果到文本区}else{area.append("无法计算面积");}}catch(Exception ex){area.append("\n"+"\n");}}if(flag==2)//按下“圆”按钮时调用circle{try{doubler=Double.parseDouble(t4.getText().trim());circle.setRadius(r);//输入半径到文本框中area.setText("");area.append("圆的面积是:");area.append("\n");area.append(""+circle.getArea());//插入结果到文本区}catch(Exception ex){area.append("\n"+"\n");}}if(flag==3)//按下“梯形时”按钮时调用lader{try{doublea1=Double.parseDouble(t5.getText().trim());lader.setAbove(a1);doublea2=Double.parseDouble(t6.getText().trim());lader.setBottom(a2);doubleh=Double.parseDouble(t7.getText().trim());lader.setHeight(h);//输入上底、下底、高到文本框中area.setText("");area.append("梯形的面积是:");area.append("\n");area.append(""+lader.getArea());//输入结果到文本区}catch(Exception ex){area.append("\n"+"\n");}}}}}Picture.javainterface Picture {//创建Picture接口double getArea();}Triangle.javapublic class Triangle implements Picture {//实现 Picture接口double sideA,sideB,sideC,area;boolean isTriangle;public double getArea() {if(isTriangle) {double p=(sideA+sideB+sideC)/2.0;area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));}else{System.out.print("无法计算面积") ;}return area;}//判断a、b、c是否构成三角形public void setA(double a){sideA=a;if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA) {isTriangle=true;}else{isTriangle=false;}}public void setB(double b){sideB=b;if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA) {isTriangle=true;}else{isTriangle=false;}}public void setC(double c){sideC=c;if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA) {isTriangle=true;}else{isTriangle=false;}}}Circle.javapublic class Circle implements Picture{//实现Picture接口double radius,area;Circle(double r) {radius=r;}public double getArea() {return area=3.14*radius*radius;}void setRadius(double newRadius) {radius=newRadius;}double getRadius() {return radius;}}Lader.javapublic class Lader implements Picture{//实现 Picture接口double above,bottom,height,area;Lader(double a1,double a2,double h) {above=a1;bottom=a2;height=h;}void setAbove(double newAbove) {above=newAbove;}double getAbove() {return above;}void setBottom(double newBottom){bottom=newBottom;}double getBottom(){return bottom;}void setHeight(double newHeight){ height=newHeight;}double getHeight(){return height;}public double getArea() {area=(above+bottom)*height/2;return area;}}六、程序效果演示运行后的初始效果计算三角形面积计算圆的面积计算梯形的面积七、总结报告a.课程设计中所遇到的主要问题和解决方法。