西安科技大学软件工程课程设计报告题目:画图板应用程序开发班级学号:姓名:2010年12月目录1 绪论 (3)2 可行性研究报告 (3)3 需求分析报告 (4)4 总体设计报告 (7)5 详细设计报告 (8)6 系统实现报告 (12)7软件测试报告 (32)参考文献1、绪论1.1 目的和意义用过微软Windows操作系统的人一定都对Windows自带的画图板非常熟悉了。
同图像处理软件界的老大Photoshop比起来,它虽然不及Photoshop的功能强大,内容丰富,但是作为Windows一直以来都内带的附件程序,它具有小巧玲珑,简单实用等其他绘图软件所不具备的优点。
同时它的风格也被许多其他的绘图软件所仿效。
作为一个软件工程专业的学生自己也想亲自动手编写一个属于自己的,简单实用的绘图程序。
通过本次课程设计可以增加对整个流程的熟悉以及对程序组织结构和框架的理解,对以后开发和设计更大更复杂的程序无疑有更大的帮助。
任务书写开发文档,分析和制定整个开发过程,然后开发一个自己的画图板应用程序。
2、可行性研究报告进行可行性研究的方法本应用程序可行性研究是通过对比windows自带的画板程序的方式进行的,对Windows 里面的画板进行分析研究,分析得出本应用软件应该实现的基本功能,并根据自己的能力进行了功能上的增加。
评价尺度本软件在评价时应从以下几个方面进行分析:开发时间应尽量短;功能实现的代码应尽量少;代码执行效率要高;有较强的容错能力;技术方面的可行性系统现阶段的发展过程中,利用现有人力和物力是完全具备的能力开发出来的,作为阶段性产品,日后的发展空间大,实现方法逐步简单容易,所以画图板应用程序在技术上是完全可行的。
a.在当前的限制条件下,该程序的功能目标能达到;b.利用现有的技术,该程序的功能可以实现;c.由于能力的不足,现阶段的功能不够完美,还可以在日后完善;d.在规定的限期内,本程序能够完成;法律方面的可行性本程序不会在后台扫描用户的磁盘文件;本程序为完全免费,没有任何盈利行为,而且仅在内部流通,不予推广,所以不涉及浸犯微软版权的行为,所以本软件完全合法。
软件服务条款要与中华人民共和国的法律解释相一致,一致同意服从高等法院所有管辖。
如发生软件服务条款与中华人民共和国法律相抵触时,则这些条款将完全按法律规定重新解释,而其它条款则依旧保持对用户产生法律效力和影响。
经济可行行本系统开发成本低,不需要特殊要求。
可行性结论综上所述,本应用程序在技术上可行,经济上可行,操作上可行,因此本应用程序可立即着手开发。
3、需求分析报告对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。
编写目的为开发人员,维护人员,客户之间提供共同的协议而创立基础,对本画图板软件功能的实现做一全面的描述;本说明书预期读者为客户、业务或需求分析人员、测试人员、文档编写者、项目管理人员;任务概述本软件进攻学习、研究之用,目标是让使用该软件的用户感觉能够轻松的掌握本软件的各个功能模块。
为了方便用户使用,本软件在设计时尽量追求可操作性和简洁大方的人机交互界面的设计,力求尽量减少用户直接输入性的东西,大量使用可选框。
功能概述通过各方面的了解,本软件初步设计的功能为:1.新建一个空白图形文件:用于绘制新的图形。
2.打开或保存一个图形文件,便于对图形文件的管理。
3.绘制一些基本的图形组件:直线,矩形,实心矩形,椭圆,实心椭圆,圆,实心圆,圆角矩形,实心圆角矩形等。
4.用鼠标在绘图板上单击拖动进行随笔花。
5.橡皮擦:可以将已绘制的图形擦掉。
6.添加文字:可以在绘图区域内添加文字。
7.选择文字的字体:通过一个下拉式的选择条,可以选中所需要的字体。
本程序中包括:宋体,隶书,华文彩云,仿宋-GB2312,华文行楷,Times New Roman,Serif,Monospaced,SonsSerif,Garamond。
当然,在下面的程序分析中可以看到,由于设置了字体选择数组,使得可以随意添加系统支持的任何字体。
大大方便和简化了程序设计。
8.选择文字的字体风格:通过两个复选框按钮,可以选择需要的字体风格,包括:粗体,斜体,用同时选中两者,只选择其中一种或两者都不选中3种选择方式。
9.设置画笔的颜色:可以选择当前绘制图形的画笔颜色,让图形更加丰富多彩,生动活泼。
10. 设置画笔的粗细:该选项在作用于基本图形组件和文字时,它的效果是不同的。
当作用于绘制图形组建时,它的作用是改变画笔绘制线条的粗细;当作用于文字时,它的作用是改变文字的大小。
由此可以看出,虽然这个画图板程序不如那些专业的绘图程序,但是,“麻雀虽小五脏俱全”,它已经具备了一个绘图软件所应该有的基本功能和操作。
功能结构图图3-1 软件功能层次图用例图用例图4、总体设计报告编写目的总体设计的目的就是回答“概括的说,系统该如何实现”这个问题,也就是说这个说明书的编写目的就是告诉程序员和软件设计人员本软件的系统结构和软件结构。
本软件的系统层次结构图图3-1 是该软件的系统层次结构图。
基本图形按钮基本图形按钮包括:Pencil(随笔画)、Line(直线)、Rect(矩形)、fRect(实心矩形)、Oval(椭圆)、fOval(实心椭圆)、Circle(圆)、fCircle(实心圆)、RoundRect(圆角矩形)、frrect(实心圆角矩形)、Rubber(橡皮擦)、Word(字)。
基本图形都继承自同一个父类:drawings。
Drawings具有的变量(属性):int x1, y1, x2, y2;P5QL-ASUS-SE关键技术本软件的关键技术有主窗体的设计、菜单栏和工具栏的设计、事件响应的处理、画图的基本功能的实现。
运行结果1. 主界面框架主界面类继承自JFrame类,包括构造函数及各种功能的定义,主要代码如下:import .*;import .*;import .*;import .*;public class MiniDrawPad extends JFrame 新建、保存、打开、退出菜单项代码如下:线条宽度、颜色、提示功能代码如下:工具栏图形按钮功能实现创建基本图形按钮、导入图标、加入动作侦听器、字体风格选择、字体选择、画图板等功能的实现。
代码如下:pg");choices[i]=new JButton("",items[i]);choices[i].setToolTipText(tipText[i]);(choices[i]);}ddActionListener(handler);}choices[0].addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){newFile();}});choices[1].addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){loadFile();}});choices[2].addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){saveFile();}});choices[].addActionListener(handler1);choices[].addActionListener(handler1);choices[].addActionListener(handler1);1=itemList[index].x2=();itemList[index].y1=itemList[index].y2=();1=itemList[index].x2=();itemList[index].y1=itemList[index].y2=(); index++;createNewItem();}1=();itemList[index].y1=();String input;input=("Please input the text you want!"); itemList[index].s1=input;itemList[index].x2=f1;itemList[index].y2=f2;itemList[index].s2=style1;index++;currentChoice=14;createNewItem();();}}public void mouseReleased(MouseEvent e){(" Mouse Released @:[" + () +", " + () + "]");if(currentChoice==3||currentChoice==13){itemList[index].x1=();itemList[index].y1=();}itemList[index].x2=();itemList[index].y2=();repaint();index++;createNewItem();}public void mouseEntered(MouseEvent e){(" Mouse Entered @:[" + () +", " + () + "]");}public void mouseExited(MouseEvent e){(" Mouse Exited @:[" + () +", " + () + "]");}}class mouseB extends MouseMotionAdapter{public void mouseDragged(MouseEvent e){(" Mouse Dragged @:[" + () +", " + () + "]");if(currentChoice==3||currentChoice==13){itemList[index-1].x1=itemList[index].x2=itemList[index].x1=();itemList[index-1].y1=itemList[index].y2=itemList[index].y1=(); index++;createNewItem();}else{itemList[index].x2=();itemList[index].y2=();}repaint();}public void mouseMoved(MouseEvent e){(" Mouse Moved @:[" + () +", " + () + "]");}}ype=currentChoice;itemList[index].R=R;itemList[index].G=G;itemList[index].B=B;itemList[index].stroke=stroke;}=R;itemList[index].G=G;itemList[index].B=B;}troke=stroke;}quals(""))(fileChooser,"Invalid File Name","Invalid File Name", ;else{try {();FileOutputStream fos=new FileOutputStream(fileName);output=new ObjectOutputStream(fos);drawings record;( index );for(int i=0;i< index ;i++){drawings p= itemList[ i ] ;(p);(); quals(""))(fileChooser,"Invalid File Name","Invalid File Name", ;else {try {FileInputStream fis=new FileInputStream(fileName);input=new ObjectInputStream(fis);drawings inputRecord;int countNumber=0;countNumber=();for(index=0;index< countNumber ;index++){inputRecord=(drawings)();itemList[ index ] = inputRecord ;}createNewItem();();repaint();}catch(EOFException endofFileException){(this,"no more record in file","class not found", );}catch(ClassNotFoundException classNotFoundException){(this,"Unable to Create Object","end of file", );}catch (IOException ioException){(this,"error during read from file","read Error", );}}}各种画图功能的实现代码如下:各功能运行结果打开、保存、设置线宽、颜色设置功能图分别见5-1, 5-2, 5-3, 5-4,这里不再赘述。