Java面向对象课程设计报告画图板毕业设计(论文)word格式 本文关键词:毕业设计,面向对象,课程设计,格式,报告
Java面向对象课程设计报告画图板毕业设计(论文)word格式 本文简介:《面向对象程序设计课程设计》指导书课程设计名称:面向对象程序设计课程设计指导老师:牛志毅课程设计周(时)数:2周指导方式:集体辅导与个别辅导相结合课程设计适用专业:信息与计算机科学课程设计教材及主要参考资料:《Java程序设计与案例》刘宝林主编,高等教育出版社服务课程名称:面向对象程序设计一、课程设
Java面向对象课程设计报告画图板毕业设计(论文)word格式 本文内容:
《面向对象程序设计课程设计》指导书
课程设计名称:面向对象程序设计课程设计
指导老师:牛志毅
课程设计周(时)数:2周
指导方式:集体辅导与个别辅导相结合
课程设计适用专业:信息与计算机科学
课程设计教材及主要参考资料:
《Java程序设计与案例》刘宝林主编,高等教育出版社
服务课程名称:面向对象程序设计
一、课程设计教学目的及基本要求
通过本课程设计,使学生了解面向对象程序的开发思想、方法和步骤,掌握开发工具的使用,提高综合运用所学的理论知识和方法独立分析和解决问题的能力,进一步提高其开发应用程序的能力。
要求明确本次课程设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。通过编写一个基于JAVA的应用系统综合实例,来掌握Java语言编程技巧。并学会编制结构清晰、风格良好的、数据结构适当的Java语言程序,从而具备解决综合性实际问题的能力。
二、设计题目及要求(二选一)
⑴
设计一个图书信息管理系统
①图书信息包括图书编号、书名、作者、出版社、出版日期、图书简介及图书类别等。
②本系统功能描述:
图书信息录入功能;
图书信息浏览功能;
查询功能(至少一种查询方式);
图书信息修改功能;
及其它你认为必要的功能。
⑵
设计一个画图软件
①用户界面友好;
②能绘制基本形状的图形;
③可设置图形的颜色、线条的粗细和填充等属性;
④可将画好的图保存至文件,并能从文件中读取。
三、设计报告的要求
设计结束后要写出课程设计报告,以作为整个课程设计评分的书面依据和存档材料。设计报告以规定格式的电子文档书写、打印并装订,排版及图、表要清楚、工整。内容及要求如下:
封面:题目、班级、姓名、学号、指导教师和完成日期。
正文包括以下7个内容:
①课题说明
以无歧义的陈述说明程序设计的任务。
②程序设计思路
简要说明程序设计的思路。
③程序源代码
给出源代码及注释。
④程序测试
给出程序主要运行界面截图。
⑤设计总结
经验和体会等。
⑥参考文献
列出参考的相关资料和书籍。
五、课程设计考核方法及成绩评定
课程设计结束时,要求学生提交课程设计报告(附源程序)及可运行的软件系统。
课程设计成绩分两部分,设计报告占50%,设计作品占50%。
附件:课程设计报告封面和参考程序。
32
湖南科技学院
课程设计报告
课程名称:
面向对象程序设计课程设计
课程设计题目:
画图板
系:
专
业:
年级、班:
姓
名:
学
号:
指导教师:
职
称:
2012年6月
1.
课题的任务和要求
设计一个画图软件
①用户界面友好;
②能绘制基本形状的图形;
③可设置图形的颜色、线条的粗细和填充等属性;
④可将画好的图保存至文件,并能从文件中读取。
2.
程序设计思路
该课题的任务是设计一个画图软件,要求能绘制基本形状的图形;同时可以设置图形的颜色、线条的粗细和是否填充等属性;并且可以将画好的图形以某种格式,比如说JPG保存至文件,并能从文件中读取某种格式的图像文件并显示出来。
首先,作为画图板,应该能够绘制基本的图形,像“铅笔“,“直线“,“矩形“,“椭圆“,”圆”,同时考虑到实用性,画图板应该能够提供橡皮擦,设置线条粗细,颜色,背景颜色的功能。在鼠标停留在按钮上时,按钮上应该提供显示提示文字,通过设置JButton的setText方法即可达到要求,在使用线条工具来绘制线条时,如果设置图形过于粗大,要求绘制出来图形能够消除锯齿,思路是在设置Graphics2D的大小时,设置Graphics2D,setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);即可达到要求
第二,考虑到平时画图时,总是喜欢按住shift来绘制45°,90°的线条,为方便用户,画图板也必须提供相应的功能,思路是判断线条的角度,如果角度大于0°同时小于45°,则绘制45°的斜线,如果线条的角度大于45°小于90°,则绘制90度的直线。
第三,关于设置背景颜色,考虑到美观,使用了渐变背景色,思路是在设置Graphics2D的背景色时,通过绘制不同透明度的条纹背景,与设置不同级别的透明度来达到绘制渐变背景色的目的。
第四,关于画图板,在提供通用的功能的同时,应该能够提供一些扩展功能,这是课程设计的一项基本要求,对于扩展功能我提供了绘制圆角矩阵,三角形,3D立方体,和绘制f(x)=A*sin(Bx)+C*cos(Cx),绘制重叠椭圆等扩展功能,绘制圆角矩阵是通过Graphics2D的drawRoundRect来实现的,而3D立方体则是通过fill3DRect实现的,而三角形是通过绘制首尾相连的三条直线来实现的。而正余弦曲线则完全是通过计算出曲线的值,然后绘制一小段直线,通过绘制很多这样的小直线相连来达到绘制正余弦曲线的目的。的值,然后绘制一小段直线,通过绘制很多这样的小直线相连来达到绘制正余弦曲线的目的。而重叠椭圆的实现则是通过Graphics2D的draw(new
Ellipse2D.Double(x1,y1,85,90);绘制一个椭圆,然后translate(x1,y1);
将
Graphics2D
上下文的原点平移到当前坐标系中的点(x1,y1),在计算d=m*mathPI/180的值,rotate(d);
将当前的
Graphics2D
Transform
与旋转转换连接,然后,translate(-x1,-y1);
将Graphics2D
上下文的原点平移到当前坐标系中的点(-x1,-y1)。draw(new
Ellipse2D.Double(x1,y1,85,90));再来绘制一个椭圆,通过这样的处理,来绘制一个在一个圆平面且重叠的椭圆图形。
第五,关于设置是否填充的问题,对于直线来说,是否填充是没有实际意义的,所以不予考虑,释放填充应该考虑圆,椭圆,圆角矩阵,三角形,对于圆和椭圆的填充是通过调用
Graphics2D
的drawOval方法实现的,圆角矩阵则是通过调用Graphics2D的drawRoundRect来实现的,而三角行的填充则是通过调用Graphics2D的fillPolygon方法来实现的.而填充与否的判断则是通过isfill的真与假来实现的.
第六,要求能够保存图形与打开已有的图形,这是通过使用BufferedImage来缓存绘制的图形,然后使用ImageIO将绘制的图形在重新绘制一次再保存到指定的位置,从而实现了文件的保存,打开文件时,考虑到实用性与方便,提供了预览图像的功能,通过继承Jpanel,将选得的图片通过setIcon绘制在出来,实现预览的功能。打开是通过ImageIO将图片绘制在面板上。为方便用户,提供了一个File的菜单,菜单中提供了新建,保存,打开,退出的功能。
第七,考虑到美观,使用了观感器的图形界面。主要是通过观感管理器来实现的。UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());对于背景颜色则是通过设置渐变背景颜色来实现的。
第八,在用户退出时,要求能询问用户是否保存作品,考虑到菜单中有保存的选项,所以通过菜单退出时没有提供询问是否保存的功能,而在实际生活中,考虑到有时候会忘记保存,所以通过右上角窗口退出时必须询问是否保存,是否保存则是通过JOptionPane.showConfirmDialog来实现的,当用户选择Yes时,保存文件。其他则直接退出。
根据课题要求,首先对要实现的功能类型抽象出一个公共的基类Drawing,子类Line,Rectange,Oval,Pencil,RoundRect,Circle,Rect3D,Triangle,SinCos,Tuo,Eraser通过继承基类来实现不同的功能,在使用时,通过基类来调用不同的子类,很好地体现了面向对象的Java语言的多态,抽象,继承的思想。用户通过选择不同的按钮来绘制图形,这主要是利用按钮监听将不同的绘图功能绑定到不同的按钮上,通过监听用户的选择来创建不同的子类,通过子类绘制不同的图形。
3.
源代码及注释
package
myclass;
import
java.awt.*;
import
java.awt.event.*;
import
java.awt.geom.Ellipse2D;
import
java.awt.geom.Rectangle2D;
import
java.awt.image.BufferedImage;
import
java.beans.PropertyChangeEvent;
import
java.beans.PropertyChangeListener;
import
java.io.*;
import
java.util.ArrayList;
import
java.util.Random;
import
javax.imageio.ImageIO;
import
javax.swing.*;
import
javax.swing.event.*;
import
javax.swing.filechooser.FileFilter;
import
javax.swing.filechooser.FileNameExtensionFilter;
import
javax.swing.filechooser.FileView;
import
javax.swing.text.StyledEditorKit.ForegroundAction;
import
org.omg.CORBA.FREE_MEM;
import
org.w3c.dom.css.Rect;
public
class
DrawingBoard
{
public
static
void
main(String[]
args)
{
DrawGraphic
newPad
=
new
DrawGraphic();
//创建窗口对象
}
}
class
DrawGraphic
extends
JFrame
{
private
JButton
choices[];
//
按钮数组
private
String
names[]
=
{
“铅笔“,“直线“,“矩形“,“椭圆“,“圆角矩阵“,“圆“,“3D立方体“,“三角形“,“椭圆重叠“,“正余弦曲线“,“橡皮擦“,“背景色“,“颜色“};
//
按钮上的文本
private
String
tipText[]
=
{
“自由绘制“,“绘制直线“,“绘制矩形“,“绘制椭圆“,“绘制圆角矩阵“,“绘制圆“,“绘制3D立方体“,“绘制三角形“,“椭圆重叠“,“正余弦曲线“,“橡皮檫“,“设置透明背景色“,“选择颜色“};
//
按钮的提示字串
JToolBar
buttonBar;
//
工具条
Drawing
[]itemlist=new
Drawing[1000];
JCheckBox
fillCheckBox;//复选框
JSlider
strokeSlider;//滑动条
int
index=0;
private
int
currentType=1;//当前选择
private
Color
color=Color.black;//颜色
private
float
currentstroke=1.0f;//线条粗细
private
boolean
currentfill=false;//是否填充
private
boolean
isShiftDown
=
false;//释放按下shift键
private
JLabel
statusBar;
//
状态栏
private
double
A=0,B1=0,C=0,D=0;//f(x)=A*sin(B*x)+C*cos(D*x);
private
DrawPanel
drawingArea;
//
画图区域
private
JPanel
sliderPanel;//放置滑动条的面板
private
int
width
=
1000,height
=
600;
//
画图区域初始大小
private
JFileChooser
chooser;//颜色选择
private
BufferedImage
bi=null;//
最后的图形要保存下来,使用缓冲图像
private
Graphics
gg;//
图像专用画笔
public
DrawGraphic()
{
//窗口的构造方法
//super(“画板“);
//显式调用父类的带参构造方法,设置窗口标题为“画板“this.setTitle(“画板“);
//窗口的标题也通过窗口的属性来设置
JMenuBar
menuBar
=
new
JMenuBar();
//
创建菜单条
choices
=
new
JButton[names.length];
//
创建按钮数组
buttonBar
=
new
JToolBar(JToolBar.HORIZONTAL);
//
创建工具条对象,水平
drawingArea
=
new
DrawPanel();
//
创建画图区域
for
(int
i
=
0;
i
getWidth())
icon
=
new
ImageIcon(icon.getImage()
.getScaledInstance(getWidth(),-1,Image.SCALE_DEFAULT));//图片太大,设置为缩略图
setIcon(icon);
}
}
});
}
}
void
SaveFile()//保存文件功能
{
int
s
=
chooser.showSaveDialog(null);
Graphics2D
g2d=(Graphics2D)gg;
for(int
i=0;i
0))
{
try{
A=Double.parseDouble(s);//将String类型转换为double类型
}catch(NumberFormatException
e)
{
flag=false;
}
itemlist[index].A=A;
}
else
flag=false;
if(flag)//A正确设置B的值
{
s
=
(String)JOptionPane.showInputDialog(“请输入Sin(BX)中的参数B)“);
}
if((s
!=
null)
//将String类型转换为double类型
}catch(NumberFormatException
e)
{
flag=false;
}
itemlist[index].B1=B1;
}
else
flag=false;
if(flag)
{
s=(String)JOptionPane.showInputDialog(“请输入Sin(AX)*C中的参数
C“);
}
if((s
!=
null)
//将String类型转换为double类型
}catch(NumberFormatException
e)
{
flag=false;
}
itemlist[index].C=C;
}
else
flag=false;
if(flag)
{
s=(String)JOptionPane.showInputDialog(“请输入Cos(BX)*D中的参数
D“);
}
if((s
!=
null)
//将String类型转换为double类型
}catch(NumberFormatException
e)
{
flag=false;
}
itemlist[index].D=D;
}
}
}
class
Drawing
implements
Serializable
{
int
x1,x2,y1,y2;
ArrayList
pointList=new
ArrayList(
);
Color
color;//颜色
float
stroke;//粗细
int
type;//选择
boolean
fill=false;//是否填充
boolean
isShiftDown=false;//释放按下shift键
public
double
A,B1,C,D,sum;//正余弦曲线参数值
void
draw(Graphics2D
g2d){}//画图函数
}
class
Line
extends
Drawing//绘制直线
{
void
draw(Graphics2D
g2d)
{
g2d.setPaint(color);
g2d.setStroke(new
BasicStroke(stroke,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL));
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);//防止锯齿
if(isShiftDown)//按下shift键
{
double
x
=
x2
-
x1;
double
y
=
y2
-
y1;
double
length
=
Math.hypot(x,y);
double
sin
=
Math.abs(y
/
length);
if
(0
0)
y
=
x;
else
y
=
-x;
}
else
{
if
(x
y
>
0)
x
=
y;