滨江学院
软件工程课程设计报告
( 20## -- 20## 年度第 2 学期)
课程名称: 软件工程课程设计
题 目: Windows绘图板的设计与实现
院 系:滨江学院计算机系软件工程(动漫)
班 级: 动漫1班
学 号: 20102359024
姓 名: 徐希芝
指导教师: 李振宏
设计周数: 两周
日期:2012 年 5 月 24 日
摘要:
Windows画图板系统的开发最主要包括前端应用程序的开发。对前端应用程序的开发要求应用程序功能完备,易使用,界面美观等特点。
Windows画图板系统主要实现文件的新建,保存,颜色的编辑,在坐标系中画直线、矩形、椭圆、圆形、三角等。图形界面各个按钮如“橡皮”、“铅笔”、“刷子”、“A”、“直线”等的实现。该系统还能调整画笔的大小,橡皮的大小,颜色是否填充,编辑各种颜色的实现。
我们采用Java语言设计编程该系统。
关键词:Windows绘图板 Java、J2SE
一、课程设计的目的与要求
目的:采用面向对象编程技术,设计并实现一个功能完善的Windows绘图板程序。通过实际程序的开发,熟练面向对象程序设计方法,掌握桌面程序设计技巧,熟悉.NET或Java开发环境。
任务:
1. 开发一个功能完善的Windows绘图板程序,功能包括:新建空白文档、文件保存、绘制一些基本的图形组件(直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等)、橡皮擦、添加文字等;
2. 完成软件开发文档编写;
3. 给出程序运行、测试的详细结果。
4. 进一步加强和提高软件工程文档的编写能力;
5. 培养协作能力和团队精神。
二、设计正文
1. 概述
1.1课题题目:Windows绘图板的设计与实现
1.2系统的主要目标:
本系统目标是实现Windows绘图板软件功能概述
(1)新建空白文档;
(2)文件保存;
(3)绘制一些基本的图形组件(直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等)、橡皮擦、添加文字等;
1.3 系统的开发环境及运行环境:
操作系统: Windows XP Pro SP2
建模工具: Rational Rose 2003
数据库系统:SQL Server2000
开发工具: Visual Studio 2005
Web服务器:IIS+ASP.NET 2.0平台
2. 系统需求分析
2.1绘图板的功能分析:
该系统所要实现的功能如下:
(1)“橡皮”的功能:用来画出的图形。
(2)“铅笔”的功能:用来画出的任意直线。
(3)“直线”的功能:用来让用户更好的画出的直线。
(4)“刷子”的功能:用来让用户更好的画出的图形。
(5)“吸管”的功能:用来让用户得到图片的颜色。
(6)“字体”的功能:用来让用户写出自己的字体。
(7)“多边形”的功能:用来让用户更好的画出的多边形。
(8)“椭圆”的功能:用来让用户更好的画出的椭圆。
(9)“画函数”的功能:根据用户的输入画出函数图形。
(10)“圆角矩形”、“矩形”、“填充”、“选择颜色”等功能:用来让用户更好的实用该绘图板功能。
2.2用户界面需求和性能分析:
Windows绘图板主要是为用户提供基本画图工具。所以以提供用户最需要的功能为目的。
设计性能如下:
让用户不管怎样操作都能得到用户的目的,争取做到傻瓜都能使用该软件。
较windows绘图板增加了生成函数图象的功能,能实现绘制一些基本的图形组件(直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等)、橡皮擦、添加文字等。
其他的实现了windows绘图板的大部分功能:铅笔、橡皮、刷子、直线、选择颜色等等功能。
3.Windows绘图板软件总体设计
3.1Windows绘图板软件总体设计思想
画板主要由以下几个部分组成:
主窗体的设计:主类(painter)用来生成主界面,完成画图板的主要框架。主类由JFrame派生出来。主界面由菜单栏、工具栏和画图区域三部分组成,布局格式采用BorderLayout布局形式。
(1)菜单栏的设计。菜单栏包括文件菜单栏、颜色菜单栏、线条粗细菜单栏和提示菜单栏。其中文件菜单栏包括文件的新建、打开、保存等选项;颜色菜单栏可以进行颜色选择;线条粗细菜单栏设置线条的粗细;提示菜单栏给出提示信息。
工具栏由新建、打开和保存文件按钮、基本图形的按钮、选择字体风格复选框和字体下拉列表框组成。在主类中添加并对菜单栏和工具栏添加事件监听。
(2)事件响应的处理。对菜单栏、工具栏和用鼠标画图的事件响应进行处理。
菜单栏中文件的新建、打开和保存菜单事件的处理: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接口,将对象线性化。
3.1总体设计流程图
图2-1 总体设计流程
4.1Windows绘图板软件详细设计
4.1绘制基本图形
基本图形包括以下几种:
Pencil:随笔画,图标为:。 Line:直线,图标为:。
Curve:曲线,图标为:。 Rect:矩形,图标为:。
Ellipse:椭圆,图标为:。 Circle:圆,图标为:。
RoundRect:圆角矩形,图标为:。 Eraser:橡皮擦,图标为:。
RectSelect:椭圆选择工具,图标为:。 PaintBucket:颜色填充,图标为:。
Font:文本,图标为:。 ColorPicker:颜色选取器,图标为:。
绘图时,单击工具栏上相应图形的图标,然后用鼠标拖动,在绘图区域内进行绘图即可。
4.1.1设置工具属性
鼠标单击工具栏相应图形的图标时,在菜单栏下面就会出现各工具相应的属性,例如当选中椭圆工具时,就会出现有关椭圆的属性(设置线条的宽度,线条的样式:实线或虚线,线条的平滑与否,以及内部是否填充颜色),如下图:
4.1.2编辑颜色
点击Line Color(File Color),然后在或者点击Edit Color选择所要的颜色,即可设置线条颜色(矩形等内部的填充颜色)。
点击Edit Color后出现界面:
5.程序测试
5.1主界面
图4-1 主界面
5.1.1 文件菜单界面
图4-2 文件菜单选择界面
如上图所示,该程序为用户提供文件菜单界面,用户可以对程序的各种功能进行选择,方便用户使用。例如选择Open File键进行操作:
图4-2-1 Open File界面
图4-2-2 save/save as界面
5.1.2 Edit界面
图4-3 Edit界面
5.1.3 Help界面
图4-4 Help界面
如上图所示,该功能实现软件的说明。选择About Paint:
4-5 About Paint运行界面
三、课程设计总结或结论
为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再创造,学校特安排我们进行为期二周的java课程设计实习,并安排了指导老师帮助辅导,让我们在规范化、严谨化、实用化上面有了很大进展。
在此次Windows绘图板程序开发过程中,有很多东西值得我们思考并总结。
开发过程大体可分为以下几个步骤:
(1)思考总体设计方案:总体结构和模块外部设计,功能分配。思考要实现整个程序大体需要的几个模块和其中用到的java语言基本操作符、语句等。
(2)画出总体设计方案流程图:用流程图的形式展现你的基本编程思想。
(3)流程图具体化:即将流程图中的几大模块的具体实现思考清楚,可以用流程图的形式展现.并想好实现的关键代码。
(4)编辑程序代码:这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设计和模块思想会存在很多问题,需不断改进.如何实现各函数功能,达到预期效果也将是一项繁复的工作。
(5)代码的调试:在eclipse环境下输入代码并进行调试和正确运行。在调试过程中会遇到很多需要精化的地方,需要十足的耐心与细心,不断改进完善程序。
(6)最后修饰:程序可以正确运行之后,再不影响程序功能的情况下,运用各种辅助性符号,使界面更加美观漂亮,操作更人性化.增强程序的新意与可行性。
通过这次课程设计,使我们更加熟悉的掌握了java语言的运用。帮助我们熟悉了更多java语言的功能,提高了我们的动手能力,学到了许多解决实际问题的宝贵经验.同时也挖掘出了我们潜在的能力,使我们对自己更有自信,对编程也更有兴趣。我相信,只要努力、勤奋、坚持不懈,就没有什么做不到的事,不能还没开始就退缩,要勇于拼搏,敢于创新。
1. 。
四、参考文献
[1] 清华大学出版社的《java2实用教程》(第三版),张跃平、耿祥义著。
[2] 清华大学出版社的《java程序设计》,陈勇孝著。
[3] 清华大学出版社的《Java就业培训教程》,张孝祥著。
[4] CSDN 论坛 网址 http://www.csdn.net/。
第二篇:软件工程课设心得
软件工程课设心得
软件工程是一门实践性很强、交叉性很强的学科,它提供给我们的不仅是一种方法论,更是一种世界观。
在没有接触软件工程这门课时,我一直认为软件就是程序。能编出解决问题的程序就ok了,从没有想过,在写一个程序之前还要构思几份文档(可行性分析、需求分析、概要设计)。不过对于那些大型软件如植物僵尸大战(至少对于我来说是比较大型的了)怎么去实现它,想得我一头雾水。绚丽的界面、40种植物、一大堆不同类型的僵尸,怎样编代码去实现它呢?
第一次上软件工程的课,裴老师问“软件是什么?” 我的第一想法是:这个问题太过愚昧了!谁不知道软件就是程序呀? “软件是由计算机程序、数据及文档组成。”听到这句话,我心里先是一惊,慌忙翻了下书“软件是程序和所有使程序正确运行所需的相关文档和配置信息。”赫然映入我眼帘。突然间我发现,就算是植物僵尸大战这样复杂的游戏,如果设计者实现分模块把每一部分如何实现用文档描叙出来,那这个软件实现起来不是很容易吗?
第一次课后我明白了软件工程是致力于专业化软件开发的理论、方法和工具的研究。虽然我从初中开始信息奥赛,高中继续这个爱好,但在大学二年级下学期才接触在软件开发中这么有引导意义的学科,不觉有种相见恨晚的感觉。自然它的方法学三要素:方法、工具、过程,我牢记于心。
短短的四周,裴老师的课给我留下了深刻的印象,印象尤深的是: 做软件我们首先考虑的是团队的实力。
如果别人给你50万让你们团队开发一个软件,如果他要求你们团队给这个软件永久维护,那么你要去跟他协商付100万。很多软件公司倒闭就是因为维护上的问题。至此我才明白维护软件是软件生存周期中时间最长的一个阶段,它是最花费精力与钱财的一个阶段。
如果将来你们碰到了我,你跟我说你是se那么我会很高兴,如果你告诉我你是软件工程师,我只会“嗯嗯”两下。
其实在我接触软件后,渴望的是当一名软件工程师。现在才知道学软件工程专业后,去当一名软件工程师是最低层的也是最没“技术”含量的。要做就做系统构架师,当然这需要我们的不懈努力才能达到。系统构架师的职责是设计一个公司的基础构架,并提供关于怎样建立和维护系统的指导方针。恍然发现学软件不仅是学软件,相关的管理能力也是需要具备的。
当然理论知识是用来指导实践的,亲身体验才能领悟软件工程的妙用。课设我们选择了图书馆管理系统,主要是这个系统我们接触比较多,对于它的流程还是比较清楚的。虽然如此我们还是花了很大的时间去完成它。记得当时我们定下这个题目是晚上,在讨论用什么语言实现时,大家各自说出自己比较善于的语言。然后均衡了下,定下用java做开发语言。在实现过程中,突然发现java环境连接数据库和tomcat超级麻烦且数据库老是连接不上。趁时间还早我们三再次讨论,决定用c#做开发语言,主要是c#相对于c++与java来说简易写。同时我们定下不管以后遇到什么困难都要坚持下去的准则。在课设期间我们没少跑图书馆,查阅各种资料,对比各本书上实现图书馆管理系统的代码。终于在4月x日把所有课设的所有事情弄好了。当然这只是个概述。 我印象尤深记忆深厚的是最初实现文档那块。刚开始,软件工程这门课还没学多少,基本的设计理念就很模糊。文档到底该怎么写,很纠结。于是我从网上狂下相关文档。通过粘贴与复制终于一份内容乱七八糟的需求分析文档出来了,当然这只是用来借鉴的。后来孟阳分享了十三份关于文档这方面的模板。我们照着那个样子在结合团队项目的相关实例开始了文档的写作。我们的文档总是一个人先写好,再拿给另一个人改,最后由第三个人评审。大家都觉的可以了,才过关。测试报告虽然是我一个人完成了,但也经历了不少时间,当然这时间是按小时算的。首先把大体写出了,然后修改,再增加信息。大量的截图以及思考怎样用例超费脑子,两天的通宵,彻底把我搞垮了,不过在文档出炉后,心里异常开心。
软件工程课程虽已结束,但我对于软件工程的学习才刚刚开始,裴老师的课让我受益匪浅。我体会到项目管理的重要性,随着软件规模、复杂度的不断增加,项目开发中更多的是协作、管理和控制。我学习到很多一般性的方法,例如:需求获取、模块化、分治、估算、计划等等。同时,我也认识到使用计算机解决实际问题的复杂性,在图灵机模型和冯·诺依曼体系的计算机框架下,人们认识表达的过程(不断反复、逐步深化)和计算机的实现过程(顺序执行)相差甚远,软件工程方法要提供给程序员们一种更加有效的对客观世界问题域进行形式化的过程方法。
向se进军!至少这是现在的目标。
谢谢裴老师!您的课通俗易懂,举的例子贴近生活,让我们易于接受。