软件工程课程设计报告完成.docx
- 文档编号:9066135
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:20
- 大小:505.71KB
软件工程课程设计报告完成.docx
《软件工程课程设计报告完成.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计报告完成.docx(20页珍藏版)》请在冰点文库上搜索。
软件工程课程设计报告完成
滨江学院
软件工程课程设计报告
(2012--2013年度第2学期)
课程名称:
软件工程课程设计
题目:
Windows绘图板的设计与实现
院系:
计算机系
班级:
10软工3班
学号:
20102344920
姓名:
吴天娇
指导教师:
李振宏
设计周数:
两周
日期:
2013年6月4日
摘要:
Windows画图板系统的开发最主要包括前端应用程序的开发。
对前端应用程序的开发要求应用程序功能完备,易使用,界面美观等特点。
本次课程设计主要是用JAVA实现画笔系统,其系统主要完成以下功能:
Windows画图板系统主要实现文件的新建,保存,颜色的编辑,设计一个画图程序,能够实现画笔、画箭头、画直线、画圆形、画椭圆、画矩形、画多边形、书写文字修改该画笔的大小以及颜色。
该画图程序还需具有橡皮擦功能以及清空整个画面的功能。
关键词:
Windows绘图板Java
一、课程设计的目的与要求
目的:
采用面向对象编程技术,设计并实现一个功能完善的Windows绘图板程序。
通过实际程序的开发,熟练面向对象程序设计方法,掌握桌面程序设计技巧,熟悉.NET或Java开发环境。
任务:
1.开发一个功能完善的Windows绘图板程序,功能包括:
新建空白文档、文件保存、绘制一些基本的图形组件(直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等)、橡皮擦、添加文字等;
2.完成软件开发文档编写;
3.给出程序运行、测试的详细结果。
4.进一步加强和提高软件工程文档的编写能力;
5.培养协作能力和团队精神。
二、设计正文
1.概述
1.1课题题目:
Windows绘图板的设计与实现
1.2系统的主要目标:
本系统目标是实现Windows绘图板软件功能概述
●新建一个空白图形文件:
用于绘制新的图形。
●打开或保存一个图形文件,便于对图形文件的管理。
●绘制一些基本的图形组件:
直线,矩形,实心矩形,椭圆,实心椭圆,圆,实心圆,圆角矩形,实心圆角矩形等。
●用鼠标在绘图板上单击拖动进行随笔花。
●橡皮擦:
可以将已绘制的图形擦掉。
●添加文字:
可以在绘图区域内添加文字。
●选择文字的字体:
通过一个下拉式的选择条,可以选中所需要的字体。
本程序中包括:
宋体,隶书,华文彩云,仿宋-GB2312,华文行楷,TimesNewRoman,Serif,Monospaced,SonsSerif,Garamond。
当然,在下面的程序分析中可以看到,由于设置了字体选择数组,使得可以随意添加系统支持的任何字体。
大大方便和简化了程序设计。
●选择文字的字体风格:
通过两个复选框按钮,可以选择需要的字体风格,包括:
粗体,斜体,用同时选中两者,只选择其中一种或两者都不选中3种选择方式。
●设置画笔的颜色:
可以选择当前绘制图形的画笔颜色,让图形更加丰富多彩,生动活泼。
●设置画笔的粗细:
该选项在作用于基本图形组件和文字时,它的效果是不同的。
当作用于绘制图形组建时,它的作用是改变画笔绘制线条的粗细;当作用于文字时,它的作用是改变文字的大小。
1.3系统的开发环境及运行环境:
操作系统:
WindowsXPProSP2
建模工具:
RationalRose2003
开发工具:
eclipse
Web服务器:
IIS+ASP.NET2.0平台
2.系统需求分析
2.1绘图板的功能分析:
该系统所要实现的功能如下:
(1)“橡皮”的功能:
用来画出的图形。
(2)“铅笔”的功能:
用来画出的任意直线。
(3)“直线”的功能:
用来让用户更好的画出的直线。
(4)“刷子”的功能:
用来让用户更好的画出的图形。
(5)“吸管”的功能:
用来让用户得到图片的颜色。
(6)“字体”的功能:
用来让用户写出自己的字体。
(7)“多边形”的功能:
用来让用户更好的画出的多边形。
(8)“椭圆”的功能:
用来让用户更好的画出的椭圆。
(9)“画函数”的功能:
根据用户的输入画出函数图形。
(10)“圆角矩形”、“矩形”、“填充”、“选择颜色”等功能:
用来让用户更好的实用该绘图板功能。
2.2用户界面需求和性能分析:
Windows绘图板主要是为用户提供基本画图工具。
所以以提供用户最需要的功能为目的。
设计性能如下:
(1)让用户不管怎样操作都能得到用户的目的,争取做到傻瓜都能使用该软件。
(2)较windows绘图板增加了生成函数图象的功能,能实现绘制一些基本的图形组件(直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等)、橡皮擦、添加文字等。
(3)其他的实现了windows绘图板的大部分功能:
铅笔、橡皮、刷子、直线、选择颜色等等功能。
2.3用例图
图2绘图板用例图
用例图说明:
(1)系统的外部角色有:
paintings。
(2)系统主要用例的文档描述:
painting可见的功能,包含了pencil、word、circle、fillcircle、painting、rubber、filloval、filloval、fillrect、oval、line、reck。
2.4类图
图2绘图板类图
类图说明:
1.工具接口Tool:
从图中可以看到,工具接口Tool定义了鼠标动作的四个方法,分别是拖动mouseDrapped()、移动mouseMoved()、松开mouseReleased()、按下mousePressed()、点击mouseClicked()五个动作,并用String类型的常量属性来定义工具的类型。
这个接口只有一个实现类AbstractTool,而每个工具类
都是去扩展AbstractTool类,在图中表现为Tool1、Tool2…….ToolN。
2.Tool的实现类AbstractTool
AbstractTool是Tool的实现类,也是一个抽像类,所以并不能被创建,只能被继承。
此类实现Tool
中定义的所有方法,并扩展了其它方法,让其子类继承或者重写。
该类中为其他的工具类提供了大部分的实现,那么它的子类就可以不必再做重复的实现,只关心与本类相关的逻辑,
3.AbstractTool的子类
AbstractTool一共有ArrowTool(箭头)、PencilTool(铅笔)、BrushTool(刷子)、EraserTool(橡皮擦)、LineTool(直线)、RectTool(矩形)、PolygonTool(多边形)、RoundTool(椭圆形)、RoundRectTool(圆矩形)、AtomizerTool(喷墨)、ColorPickedTool(颜色选择)11个子类,
4.界面类ImageFrame
这个画图工具的界面的主要放在这个类中实现
5.业务逻辑类ImageService
除鼠标的画图功能外(画图功能由Tool的实现类完成),初始化画板、图片的新建打开与保存、各种面板的显示与隐藏、颜色的编辑、整个界面的刷新、菜单等业务逻辑都放在这个类中实现,
对象,它并没有保存一些状态属性。
6.文件选择类ImageFileChooser
ImageFileChooser类继承了JFleChooser类,JFleChooser是Java提供的一个简单的文件选择机制,我们这里扩展这个类,是为了增加我们自己的文件过滤器。
3.系统总体设计
3.1设计准备
(1)此程序为实现这些功能模块,必须首先定义一个工具面板,将这些画笔、画箭头、椭圆、圆、多边形直线、画矩形、画笔颜色、画笔大小、橡皮等功能组件放入这个工具面板中。
(2)此程序为实现利用鼠标做画笔的功能,必会产生鼠标事件MouseEvent。
因此,为实现鼠标画图的功能,必须用到鼠标触发事件,故在此程序中,必须实现“委托事件模型”,用到事件源、事件对象以及监听者对象。
(3)此程序中,必须用到的包如下:
importjava.awt.*;
importjava.awt.geom.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.io.*;
importjava.util.*;
(4)需用到的类
●classDrawPad
这个类是主类,是程序得以运行的入口。
在这个主类中定义了主方法,是该程序执行的入口。
●classSimpleDrawPad
此类用于实现这个程序的大部分功能,在这个类中除了定义一些基本变量以及构造函数外,还定义了很多成员方法,这些成员方法将实现鼠标触发事件的一系列绘图功能。
●classButtonDealer(SimpleDrawPad内部类)
按钮侦听器ButtonDealer类,内部类,用来侦听基本按钮的操作。
●classButtonDealer1(SimpleDrawPad内部类)
按钮侦听器ButtonDealer1类,用来侦听颜色选择、画笔粗细设置、文字输入按钮的操作。
●classmouseA(SimpleDrawPad内部类)
鼠标事件mouseA类,继承了MouseAdapter,用来完成鼠标相应事件操作。
●classmouseB(SimpleDrawPad内部类)
鼠标事件mouseB类继承了MouseMotionAdapter,用来完成鼠标拖动和鼠标移动时的相应操作。
●classcheckBoxHandler(SimpleDrawPad内部类)
选择字体风格时候用到的事件侦听器类,加入到字体风格的选择框中
●classDrawPanel(SimpleDrawPad内部类)
画图面板类,用来画图。
●classdrawings
定义画图的基本图形单元。
●classLine
继承classdrawings实现画直线功能。
●classRect
继承classdrawings实现画矩形功能。
●classfillRect
继承classdrawings实现画实心矩形功能。
●classOval
继承classdrawings实现画椭圆功能。
●classfillOval
继承classdrawings实现画实心椭圆功能。
●classCircle
继承classdrawings实现画圆功能。
●classfillCircle
继承classdrawings实现画实心圆功能。
●classPencil
继承classdrawings实现自定义绘画功能。
●classRubber
继承classdrawings实现清除图案功能。
●classword
继承classdrawings实现输入文字功能。
(5)画板主要由以下几个部分组成:
主窗体的设计:
主类(painter)用来生成主界面,完成画图板的主要框架。
主类由JFrame派生出来。
主界面由菜单栏、工具栏和画图区域三部分组成,布局格式采用BorderLayout布局形式。
●菜单栏的设计。
菜单栏包括文件菜单栏、颜色菜单栏、线条粗细菜单栏和提示菜单栏。
其中文件菜单栏包括文件的新建、打开、保存等选项;颜色菜单栏可以进行颜色选择;线条粗细菜单栏设置线条的粗细;提示菜单栏给出提示信息。
工具栏由新建、打开和保存文件按钮、基本图形的按钮、选择字体风格复选框和字体下拉列表框组成。
主类中添加并对菜单栏和工具栏添加事件监听。
●事件响应的处理。
对菜单栏、工具栏和用鼠标画图的事件响应进行处理。
菜单栏中文件的新建、打开和保存菜单事件的处理:
Java把每个文件都视作顺序字节流。
如果要在Java中进行文件处理,则必须用到Java.io包。
这个包定义了一些流类,选用FileInputStream(从文件中读入数据)和FIleOutputStream(向文件输出数据),通过建立这些文件的对象便可以打开文件。
这些流相应地从InputStream和OutputStream派生,这些文件均使用文件流,所以必须将文件结构化以适应程序的要求。
我们需要对保存的对象序列化,然后以输出流的方式保存。
在程序中用newFile()、loadFile()和saveFile()三个函数分别实现文件的新建、打开和保存。
●工具栏事件的处理:
主要有一些Button组成。
我们用ButtonHandler内部类处理基本单元事件,ButtonHandler1内部类处理新建、打开和保存文件按钮,在画图类DrawPanel中定义CreateNewItem()函数处理工具栏中的画图事件。
●鼠标画图:
由于画图板主要是用来画图,所以需要在程序中添加对鼠标按下、拖动、进入、退出、移动和单机事件进行监听并进行处理。
内部类mouseA定义了完成鼠标按下、松开、进入、退出事件响应。
内部类mouseB完成鼠标拖动和移动事件响应。
画图的基本功能。
在程序设计中用到了动态绑定,我们可以提取他们的公共属性,先建立一个父类,然后建立各个子类,继承父类中的方法并将父类中的draw函数重写。
一些关于图形形状的类,最主要是用于画图、字体和橡皮擦等基本类型。
如Circle、Triangle、Rectangle,它们都是有超类(Object类)派生的。
在面向对象编程中,每个类都有画出自己的能力,每个类都有自己的draw函数,但每种形状的draw函数都不一样,但在绘制任何形状时,只需简单调用父类drawing的draw方法,然后让程序动态地根据对象的类型决定使用哪个子类的draw方法。
为了使画出的图形更加美观,我们在draw函数中使用了Graphics2D的对象的引用。
这样可以在不改变原程序的情况下,添加扩展的图形,是程序变得更加强大。
同时,为了文件的保存,父类实现Serialize接口,将对象线性化。
(1)总体设计图
图2-1 总体设计流程
(2)各模块功能
表3-1绘图板系统功能模块表
功能模块
包含子功能模块
功能
文件模块
新建模块
新建画图板
打开模块
打开已经存在的模板
保存和退出模块
对画图板进行保存,保存之后退出
颜色选择模块
实现颜色的选取
设直线条粗细模块
实现颜色线条粗细的选择
帮助模块
包括绘图板的使用说明
4.详细设计
4.1系统各功能实现
(1)一组基本图形按钮,包括:
Pencil(随笔画)、Line(直线)、Rect(矩形)、FRect(实心矩形)、Ov(椭圆)、FOval(实心椭圆)、Circle(圆)、FCircle(实心圆)、RoundRect(圆角矩形)、FrRect(实心圆角矩形)、Rubber(橡皮擦)、Word(文字)。
这些基本图形都继承于同一个父类:
drawings。
drawings具有变量(属性):
intx1,x2,y1,y2;//用来存放相应图形元素的坐标
intR,G,B;//用来存放图形色彩颜色信息
floatstroke;//用来存放画笔粗细
inttype;//用来保存图形类型
Strings1;//用来保存输入文字字符串
Strings2;//用来保存字体类型字符串
voiddraw(Graphics2Dg2d){};
draw()方法中用到了Java绘图里面的Graphics2D类,所有继承drawings类的图形子类都重写了此方法。
这就是Java程序中类的继承的概念。
它对于程序代码的重用是很重要的,将极大的方便和简略程序代码。
(2)程序中还包括一下三个基本操作按钮:
a)新建(New):
新建一个图形文件。
b)打开(Open):
打开一个图形文件。
c)保存(Save):
保存当前图形文件。
(3)选择颜色和设置当前画笔粗细的按钮分别为:
颜色(Color)、线条粗细(Stroke)。
(4)选择当前字体风格的选择框为:
粗体(BOLD)、斜体(ITALIC),用以设置当前字体的风格。
(5)选择当前字体的下拉式复选框为:
Styles。
4.2菜单条及其组成:
a)文件(File)菜单项,包括:
New(新建一个图形文件)、Load(打开一个图形文件)、Save(保存当前图形文件)、Exit(退出程序)。
b)颜色(Color)菜单项:
用来设置当前颜色。
c)线条粗细(Stroke)菜单项:
用来设置当前画笔粗细。
d)帮助(Help)菜单项:
有关的程序帮助提示。
本程序主体为一个文件:
MiniDrawPad.java。
其中包括的程序段有:
1MiniDrawPad():
构造函数,用以初始化。
2chooseColor():
选择当前绘图颜色程序段。
3setStroke():
设置当前画笔粗细程序段。
4loadFile():
调用图形文件程序段。
5newFile():
新建一个图形文件程序段。
6saveFile():
保存当前所绘制图形程序段。
7creatNewItem():
新建一个基本图形单元程序段。
相应的内部类有:
1ButtonHandler:
用来处理基本图形单元的按钮事件。
2ButtonHandler1:
用来处理颜色、画壁粗细、文字输入三个操作按钮的按钮事件。
3DrawPanel:
用来创建绘图区域的子类。
4MouseA:
继承了MouseAdapter,用来完成鼠标相应事件的操作,如单击、松开、进入和离开等。
5MouseB:
继承MouseMotionAdapter,用来完成鼠标拖动和鼠标移动的相应事件操作。
此外,还继承了父类drawings的基本图形子类,如前所述,这里不再重复。
6打开菜单栏编辑器添加菜单项目,添加可见控件
控件名
要更改的属性名
更改后的属性名
Picture3(0)
backcolor
选黑色
Picture3
(1)
backcolor
选红色
Picture3
(2)
backcolor
选黄色
Picture3(3)
backcolor
选蓝色
Prame1
Caption
颜色
Prame2
Caption
线型
Prame3
Caption
线宽
Command1
Caption
清空
Command2
Caption
涂鸦
CommonDialog1
Filename
我的画图
CommonDialog2
Filter
.bmp
7打开菜单栏编辑器添加菜单项目,添加图片框控件里line及shape,现在相应位置画好图形再按下表更改属性
控件名
要改的属性名
更改后的属性名
Line2
borderstyle
2-Dash
Line3
borderstyle
3-Dot
Line6
borderwidth
2
Line7
borderwidth
3
Shape1
shape
3-Circle
Shape2
shape
0-Rectangle
Shape3
shape
2-Oval
8DrawPanel:
用来创建绘图区域的子类。
文件名
功能
ImageAction.java
按键处理类
ImageFileChooser.java
文件选择
ImageFrame.java
界面显示,布局
ImageService.java
除界面外的其他功能(文件保存打开等)
Main.java
主函数
MyImage.java
创建图片类对象
AbstractTool.java
所用工具共同的方法(抽象类)
AtomizerTool.java
喷枪工具
BrushTool.java
刷子工具
ColorPickedTool.java
拾色器
EraserTool.java
橡皮工具
LineTool.java
直线工具
PencilTool.java
铅笔工具
PolygonTool.java
多边形工具
RectTool.java
矩形工具
RoundRectTool.java
圆矩形工具
RoundTool.java
椭圆形工具
Tool.java
定义工具类
5.2类的方法介绍
1定义的变量:
在这个类中,首先定义了画笔的大小、画笔的颜色、画笔的粗细、橡皮的大小、工具的选择等一些变量,并且还用到了系统中自带的一些类初使化了一些面板工具对象,用于完成对面板工具、画直线、画椭圆、画矩形、橡皮擦、清除等一些工具按钮的定义。
2初使化构造函数:
在这个初使化构造函数中,首先继承了父类Frame,然后初使化了各工具按钮以及各个选择项,包括颜色选择、画笔大小选择、橡皮大小选择,并且将这些组件添加到了工具面板中,最后还对各个组件注册了事件监听者对象。
3paint()方法:
这个方法主要用于在Applet的界面中显示文字、图形和其它界面元素。
本程序中,在这个方法中,定义了一些工具选项设置,给用户选择画笔、画直线、画圆、橡皮擦等一些功能。
4itemStateChanged()方法:
这个方法用来实现的功能很简单,主要是用来改变画笔大小、画笔颜色、橡皮大小的。
在此方法中,设置了大小以及颜色的一些预选项,以供用户对大小以及颜色做出选择。
5mouseDragged()方法:
此方法是处理MouseEvent事件以实现MouseMotionListener接口的对象。
MouseMotionListener是事件监听者,mouseDragged(MouseEvente)是成员方法,代表鼠标拖动事件,在这个方法中,还用到了MouseEvent类常用成员方法:
publicintgetX()以及publicintgetY(),用来返回发生鼠标事件的X及Y的坐标。
这个方法中,主要用来控件画笔和橡皮的转换。
6mousePressed()方法:
此方法是处理MouseEvent事件以实现MouseListener接口的对象。
MouseListener是事件监听者,mouseDPressed(MouseEvente)是成员方法,代表鼠标按下事件。
这个方法主要用来控件用户画直线、画圆、画矩形这些功能之间的转换。
⑦mouseReleased()方法:
mouseEntered()方法:
mouseExited()方法:
mouseClicked()方法:
这些方法和mousePressed()方法属于同一类,他主要用来表示鼠标释放事件,是对上述各个功能完成后对鼠标事件的又一次触发。
(二)画图板相关操作
1.新建一个图形文件
单击工具栏上的图标
,或选择File→New菜单,则清除当前所绘制的图像,回到初始画面。
2.打开已有的文件
单击工具栏上的图标
,或选择File→Load菜单,则清除当前所绘制的图像,并弹出打开文件对话框要求选择要打开的文件。
3.保存
单击工具栏上的图标
,或选择File→Save菜单,则弹出要求保存文件对话框。
鼠标单击工具栏相应图形的图标时,在菜单栏下面就会出现各工具相应的属性,例如当选中椭圆工具时,就会出现有关椭圆的属性(设置线条的宽度,线条的样式:
实线或虚线,线条的平滑与否,以及内部是否填充颜色)
4.基本图形包括以下几种:
Pencil:
随笔画,图标为:
。
Line:
直线,图标为:
。
Curv
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 课程设计 报告 完成
![提示](https://static.bingdoc.com/images/bang_tan.gif)