计算表图形面积课程设计报告doc.docx
《计算表图形面积课程设计报告doc.docx》由会员分享,可在线阅读,更多相关《计算表图形面积课程设计报告doc.docx(20页珍藏版)》请在冰点文库上搜索。
计算表图形面积课程设计报告doc
中南林业科技大学
课程设计报告
设计名称:
计算图形面积
姓名:
学号:
专业班级:
院(系):
计算机与与信息工程
设计时间:
设计地点:
中南林业科技大学
指导教师评语:
成绩:
签名:
2013年1月11日
1、设计目的
1.深入理解Java面向对象的设计思想
2.提高用Java语言编程的能力
3.学会制作软件开发文
二、课程要求分析
2.1本课程及程序功能要求
课程名称:
计算图形面积的制作
要求:
编写一个体现MVC结构的GUI程序。
首先编写一个图形接口以及实现该接口的圆类、梯形类、三角形类等,然后再编写一个窗口。
要求:
1.能够选择具体的图形;
2.使用若干文本框和一个文本区为该图形对象中的数据提供视图,其中文本框用来显示和更新图形对象的基本要素(如梯形的上底、下底和高),文本区对象用来显示图形的面积。
窗口中有一个按钮,用户单击该按钮后,程序用文本框中的数据作为图形对象的基本要素,并将计算出的图形面积显示在文本区中。
2.2课程介绍
计算图形面积使用的事JavaSE中的GUI和线程基本技术,可以实现三角形、圆、梯形的面积计算。
具体操作如下:
1.点击单选按钮选择要计算面积的图形形状。
2.输入所选择图形对象的基本要素(如梯形的上底、下底、高)。
3.点击按钮“确定”,可以在文本区显示计算得出的结果。
4.点击右上角的关闭键可以退出本程序。
三、程序流程图
Y
四、程序设计介绍
4.1本程序所用知识点
(1)GUI概念
图形用户界面(GraphicalUserInterface,简称GUI)是指采用图形方式显示的计算机操作用户接口。
与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。
运行Java程序有两种方式,一是命令行输出,另一种就是图形用户界面输出
(2)MVC结构
模型-视图-控制器(Model-View-Controller),简称MVC。
MVC是一种先进的设计结构,其目的是以会话框形式提供方便的GUI支持。
(3)布局管理
FlowLayout(流式布局管理器)这个简单的“Flow”的组件安装在窗体中,从左到右,直到顶部的空格全部再移去一行,并继续循环这些组件。
(4)创建一个窗体
窗口中可以存放各种组件,所以窗体是容器,可以被直接显示、绘制在操作系统所控制的平台上。
(5)事件处理
事件处理机制
事件:
用户对组件的一个操作
事件源:
发生事件的组件
监听器:
我们需要处理某个事件的时候,就需要在发生事件的组件上添加监听器。
事件处理器:
监听器中的方法,添加监听器后,组件发生了对应的事件就会执行指定的方法
(6)所用组件
JLabel创建标签;JTextField创建文本框;JRadioButton创建单选按钮;
JTextArea创建文本区;JButton创建可单击按钮
5、程序代码设计
Main.java
publicclassMain{
publicstaticvoidmain(String[]args){
NewFramenf=newNewFrame();
nf.setVisible(true);
}
}
NewFrame.java
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.ButtonGroup;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JRadioButton;
importjavax.swing.JScrollPane;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
publicclassNewFrameextendsJFrameimplementsActionListener{
//创建对象
intflag;
Triangletriangle=newTriangle();//创建对象triangle并分配内存空间
Circlecircle=newCircle(5);//创建对象circle并分配内存空间
Laderlader=newLader(10,20,10);//创建对象lader并分配内存空间
ButtonGroupgroup;//创建按钮群
JLabellabel,a,b,c,r,a1,a2,h,result;//创建标签
JTextFieldt1,t2,t3,t4,t5,t6,t7;//创建文本框
JRadioButtonradio1,radio2,radio3;//创建单选按钮
JTextAreaarea;//创建文本区
JButtonbutton;//创建可单击按钮
NewFrame(){
//设置窗体风格,包括大小,界面,标题等等
this.setSize(400,500);//设置窗口大小
this.setTitle("计算图形面积");//设置窗口标题
this.setLayout(null);//设置布局为空
this.setResizable(false);//不可改变窗体大小
this.setLocationRelativeTo(null);//窗口居中显示
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);//关闭窗口时退出
//为对象分配内存
group=newButtonGroup();
radio1=newJRadioButton("三角形");
radio2=newJRadioButton("圆");
radio3=newJRadioButton("梯形");
label=newJLabel("选择形状");
a=newJLabel("边a:
");
b=newJLabel("边b:
");
c=newJLabel("边c:
");
r=newJLabel("半径:
");
a1=newJLabel("上底:
");
a2=newJLabel("下底:
");
h=newJLabel("高:
");
t1=newJTextField(5);
t2=newJTextField(5);
t3=newJTextField(5);
t4=newJTextField(5);
t5=newJTextField(5);
t6=newJTextField(5);
t7=newJTextField(5);
area=newJTextArea(400,50);
result=newJLabel("输出结果");
button=newJButton("确定");
////设置单选按钮大小并添加到窗体
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(newJScrollPane(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);
}
//以下是按钮按下的事件处理
publicvoidactionPerformed(ActionEvente){
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{doublea=Double.parseDouble(t1.getText());
doubleb=Double.parseDouble(t2.getText());
doublec=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(Exceptionex){
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(Exceptionex){
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(Exceptionex){
area.append("\n"+"\n");
}
}
}
}
}
Picture.java
interfacePicture{//创建Picture接口
doublegetArea();
}
Triangle.java
publicclassTriangleimplementsPicture{//实现Picture接口
doublesideA,sideB,sideC,area;
booleanisTriangle;
publicdoublegetArea(){
if(isTriangle){
doublep=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
}
else{
System.out.print("无法计算面积");
}
returnarea;
}
//判断a、b、c是否构成三角形
publicvoidsetA(doublea){
sideA=a;
if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){
isTriangle=true;
}
else{
isTriangle=false;
}
}
publicvoidsetB(doubleb){
sideB=b;
if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){
isTriangle=true;
}
else{
isTriangle=false;
}
}
publicvoidsetC(doublec){
sideC=c;
if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){
isTriangle=true;
}
else{
isTriangle=false;
}
}
}
Circle.java
publicclassCircleimplementsPicture{//实现Picture接口
doubleradius,area;
Circle(doubler){
radius=r;
}
publicdoublegetArea(){
returnarea=3.14*radius*radius;
}
voidsetRadius(doublenewRadius){
radius=newRadius;
}
doublegetRadius(){
returnradius;
}
}
Lader.java
publicclassLaderimplementsPicture{//实现Picture接口
doubleabove,bottom,height,area;
Lader(doublea1,doublea2,doubleh){
above=a1;
bottom=a2;
height=h;
}
voidsetAbove(doublenewAbove){
above=newAbove;
}
doublegetAbove(){
returnabove;
}
voidsetBottom(doublenewBottom){
bottom=newBottom;
}
doublegetBottom(){
returnbottom;
}
voidsetHeight(doublenewHeight){
height=newHeight;
}
doublegetHeight(){
returnheight;
}
publicdoublegetArea(){
area=(above+bottom)*height/2;
returnarea;
}
}
6、程序效果演示
运行后的初始效果
计算三角形面积
计算圆的面积
计算梯形的面积
7、总结报告
a.课程设计中所遇到的主要问题和解决方法。
问题:
1.标签不显示
2.不知道怎么监听
3.输出结果不显示在文本区,输出结果被覆盖
4.文本区换行
解决办法:
1.给标签设置大小,并移到合适的位置
2在发生事件的组件上添加监听器,在监听器中定义方法使组件发上来对应的
事件就会执行指定的方法
3使用setText(""),并用append("")追加序列。
4使用append("\n")在文本区换行
b.创新和得意之处。
1.窗口不改变大小,居中显示,较美观。
2.被监听的组件之间不混乱,命令清晰
c.课程设计中存在的不足,需要进一步改进的设想。
1.变换另一个图形的操作时,以前输入文本的数据没能释放掉
2.选择图形时用下拉列表做,更美观方便
d.课程设计的感想和心得体会。
经过一个星期的课程设计,我再老师和同学的帮助下,顺利完成了该课程设计,通过本次课程设计,我了解了java语言用途广泛,加深了对java语言的理论知识的理解,让我更加熟练的掌握了以前很多没掌握的知识并做出了一个解决实际问题的程序,加深了我对java的学习兴趣和好感。
8、参考文献
1.Java程序设计教程(第2版)雍俊海编著清华大学出版社
2.Java2实用教程(第4版)耿祥义等编著清华大学出版社