中原工学院软件学院.docx
- 文档编号:11342516
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:36
- 大小:174.24KB
中原工学院软件学院.docx
《中原工学院软件学院.docx》由会员分享,可在线阅读,更多相关《中原工学院软件学院.docx(36页珍藏版)》请在冰点文库上搜索。
中原工学院软件学院
中原工学院软件学院
二级课题设计任务书
姓名
王灿佩
软件技术(日文软件开发)专业061班
题目
Windows画图板的设计与开发
设
计
任
务
本课题要实现的是画图板功能,在设计该系统时,应尽可能的贴近用户,便于用户操作。
系统在实现上应该具有如下功能:
本课题要实现的是用JAVA语言实现Windows画图板的大部分功能以及
画出常见数学函数的图像。
1.上网搜索相关信息,积累方法,理清类与类,方法与方法之间的关系。
2.完成软件的基本数据结构模式的规划和窗体的布局。
3.添加所有功能所对应的代码,查找JDK文档,逐步实现个个部分的功能。
4.对软件进行最后的测试,纠正代码、窗体、数据上的错误。
书写软件设计文档。
时
间
进
度
第17周
1~2天认真做好软件的需求分析,设计软件所具备的功能。
3~6天设计软件的窗体,作到合理规划,布局合理,界面美观。
第18周
7~9天实现软件,图标,按钮的代码,颜色的更改,并测试成功。
10~12天实现软件画图功能的代码,测试,保证功能的快速和准确。
13~15天对软件的所有功能进行测试。
纠正错误、修补漏洞。
第19周
15~18天对软件进行后期维护。
19~21天编写程序设计文档。
原
始参
资考
料文
和献
主
要
[1]Y.DanielLiang.Java语言程序设计(基础篇),机械工业出版社2006.8
[2]Y.DanielLiang.Java语言程序设计(进阶篇),机械工业出版社2006.8
指导教师签字:
Windows画图板的设计与开发
摘要
Windows画图板系统的开发最主要包括前端应用程序的开发。
对前端应用程序的开发要求应用程序功能完备,易使用,界面美观等特点。
Windoows画图板系统主要实现文件的新建,保存,颜色的编辑,在坐标系中画抛物线,双曲线,椭圆,直线等。
图形界面各个按钮如“橡皮”、“铅笔”、“刷子”、“A”、“直线”等的实现。
该系统还能调整画笔的大小,橡皮的大小,颜色是否填充,编辑各种颜色的实现。
我们采用Java语言设计编程该系统,其实本系统假如采用VB语言编写功能会更好实现。
关键词:
画图板;Java,J2SE
目录
摘要II
第1章绪论1
第2章需求分析2
2.1画图板功能分析2
2.2用户界面需求和性能2
2.3编程环境的选择3
第3章总体规划4
3.1Windows画图板的设计分析4
3.2界面总体设计4
3.2主窗体的设计5
3.3工具栏的功能6
3.4菜单栏的功能7
第4章调试11
4.1软件找错11
第5章结论12
致谢:
13
附录:
主要源程序16
第1章绪论
计算机已经成为我们学习和工作的得力助手:
今天,计算机的价格已经十分低廉,性能却有了长足的进步。
它已经被应用于许多领域,计算机之所以如此流行的原因主要有以下几个方面:
首先,计算机可以代替人工进行许多繁杂的劳动;
其次,计算机可以节省许多资源;
第三,计算机可以大大的提高人们的工作效率;
第四,计算机可以使敏感文档更加安全,等等。
既然计算机有这么多优点。
所以我就梦想着能用我的双手和智慧让计算机能听我的使唤,计算机我认为最成熟的程序就是Windows了。
所以我就模仿Windows的画图板,自己做了一个画图板。
也有一部分成分是为了完成学校的课题任务,但我也是很愉快的作了这个课题。
用java做Windows的画图板确实有一些难做。
因为有很多编程语言都有比java好的多的界面设计功能。
如:
VB,C#等。
他们都是微软公司设计的语言有很好的界面设计功能。
并且C#也有java所拥有的类库功能。
我在这并不是说java不好,只是说明java在做界面程序时。
并不占优势。
特别是做Windows的软件。
第2章需求分析
需求分析是一个软件的基础。
如果没有正确的需求分析就不能做出满意的软件。
所以可以说需求分析是一个软件设计的灵魂。
所以在任何系统的开发之前,都应该进行相应的需求分析。
需求分析的准确度越高,开发出来的程序稳靠性越强,所需的费用将会越低。
反之,做出来的程序安全系数不高,还会增加开发费用,造成人力物力资源的严重浪费。
2.1画图板功能分析
我们作的是Windows画图板。
在设计时应该考虑到用户的需要和画图的习惯。
所以我们需求分析的主要任务就是来了解用户画图时的习惯。
尽量让用户满意。
在此我们是先设计一个大概的程序模型让别人试我的画图板。
用这种方法我们收集到了用户的画图习惯。
并以此来设计自己的画图板。
并且了解到这个系统所要实现的功能如下:
1.“橡皮”的功能。
以来修改画出的图形。
2.“铅笔”的功能,用来让用户画任意图形。
3.“直线”的功能,用来让用户更好的画出直线。
4.“刷子”的功能,用来让用户更好的画出图形。
5.“吸管”的功能,用来让用户得到图片的颜色(由于某种原因,没能实现)。
6.“字体”的功能,用来让用户画出自己写的字体。
7.“多边形”的功能,用来让用户更好的画出多边形。
8.“椭圆”的功能,用来让用户更好的画出椭圆。
9.“画函数”的功能,能根据用户的输入画出函数图形。
10.“圆角矩形”,“矩形”,“填充”,“选择颜色”等功能。
总之一句话是让用户更好的使用我做的软件。
2.2用户界面需求和性能
Windows画图板主要是为用户提供基本画图工具。
所以以提供用户最需要的功能为目的。
设计的性能如下:
让用户不管怎样操作都能得到用户的目的。
争取做到傻瓜都能用我的软件
较Windows画图板增加了生成函数图像的功能。
能实现画“椭圆”的函数图像,“直线”的函数图像,“双曲线”的函数图像,“抛物线”的函数图像。
其他的实现了Windows画图板大部分功能,如:
铅笔、橡皮、刷子、直线、字体、等功能。
还能让用户选择颜色等功能。
2.3编程环境的选择
我前面已经说过java并不是做Windows画图板的最好的语言,甚至可以说用它来编Windows画图板是非常蹩脚的。
但我学的就是java语言。
无选择的只能用Java来编写这个软件,但通过这三个星期的编写也不是无所收获。
他让我懂得了类和方法,java语言并不像VB那样含有大量的控件,这就要求我们用java语言来实现这些功能,从而有效的提高了应用程序的运行效率和可靠性。
故而,实现本系统使用java语言并不是一个相对较好的选择,但是我们通过java语言来实现,也是一种学习和提高的过程。
第3章总体规划
3.1Windows画图板的设计分析
根据实际情况,我们使用原型法即以少量代价快速地构造一个可执行的软件系统模型。
使用户和开发人员可以较快地确定需求,然后采用循环进化的开发方式,对系统模型作连续的改进,将系统需具备的性能逐渐增加上去,直到所有的性能全部满足。
直到所有的性能全部满足。
总体规划主要实现想法和作编写代码的工作。
3.2界面总体设计
图3.1界面分析图
3.2主窗体的设计
图3.2:
画图板主窗体
主窗体主要由工具栏、画图区、菜单栏组成。
其中画图区是一个JPanel。
他是添加在Frame这个窗体上的。
而工具栏是添加在画图区上的。
3.3工具栏的功能
图3.3:
工具栏工具的演示
铅笔是由画直线的方法实现的。
铅笔还可以由下面的画笔大小来调大小,而铅笔的粗细是用画椭圆的方法来实现的。
橡皮是由画椭圆的方法实现的。
橡皮也可以由下面的橡皮大小来调大小,大小也是用画椭圆的方法实现的。
刷子也是用画椭圆的方法实现的。
字体是用java自带的画字体的方法来实现的。
画直线是用画直线的方法来实现的。
只要找到起点和终点就能画出来直线了。
画椭圆和画矩形、圆角矩形都是用java自带的方法来实现的。
也是记住起点和终点就能画出来了。
颜料栏也是一个工具栏。
可以让用户来选颜色。
实现颜色的改变还有一个方法。
在菜单栏中,下面再介绍。
3.4菜单栏的功能
图3.4:
菜单栏的演示
菜单栏可以实现打开、保存、退出等功能。
图3.5打开演示图
还有保存的图片就不一一演示了。
菜单栏中的文件中的新建功能,可以像Windows中的画图板一样提示用户是否保存上一次的页面。
还有上面讲过还有一种来改变颜色的方法就是在菜单栏中:
当点击菜单栏中的颜色这一项时就会出来一个调颜板(如图3.6)。
菜单栏中的生成项可以生成椭圆、双曲线、直线、抛物线(如图3.7)等。
图3.6:
调色板
图3.7:
生成函数界面
图3.8:
画抛物线演示图
画抛物线用到了画多边形的方法。
定义了一个变量来记录点数和用到了一些算法。
来实现了这个画抛物线的功能。
画椭圆、画直线、还有话双曲线用到了方法几乎一样,在此就不一一演示了。
当你用到了我的软件就能体会到了。
帮助项作了一个这个软件的版本的介绍(如图:
3.9):
图3.9:
帮助演示图
第4章调试
调试可以说是一个软件设计中最费时的也是最重要的工作。
你可以画一天把代码写出来,但你必须用三天的时间来调试你的程序。
4.1软件找错
软件找错我们先用自己来试软件和别人来试软件来测试软件的性能,我们采用了设置断点、掩蔽部分程序的方法,首先是设置断点,在错误的代码行设置断点,然后运行程序,看提示的错误是否与代码有关,然后进行纠正。
其次是掩蔽部分代码,在可疑区把认为是错误的代码掩蔽,看程序是否能继续执行,功能是否能够实现,然后对代码进行纠正。
下面列出测试后的几点错误的纠正:
我们在测试中发现了当点颜色工具栏以后必须再点工具栏中的工具才能画图。
这是一个毛病,我们用设置断点和屏蔽代码等方法,发现了事因为工具栏和颜色栏是继承了一个监听器。
当点颜色栏时就把工具栏的焦点给覆盖了。
最后我们设置了两个监听器把这个问题给解决了。
还有一个问题是当我们不选工具栏上的工具时,点击画图区时就会报错,这一问题经过我们的分析和测试发现是应为在没选定工具时。
鼠标的点击事件不执行任何代码,这样就会报错。
我们最好在点击事件设置了一个默认值。
用boolean来记住他。
并随着点击事件而改变。
把这个bug给解决了。
还有一个问题是到现在还没解决的问题。
就是画图时可以把画的图画到工具栏上和颜色栏上。
经过我们的思考觉得是因为工具栏是动得,无法把他固定在某一个位置。
而导致的问题。
但现在我们还没想到方法解决这个问题。
还有很多问题都是在测试中发现的,在此就不一一介绍了。
每个程序都要经过测试这一关。
只有这样才能保证你的软件是健康的。
就像给人做体检一样。
软件测试是给软件做体检。
第5章结论
历时三个星期的课程设计终于完成了,回想起这三个星期的日子,感觉收获颇多。
这次我们作的是Windows画图板系统。
他用到的是主要是java的AWT和swing这两个类。
在设计的开始阶段为了尽快熟悉JAVA语言,我重新阅读了一遍课本,对书中的基本理论知识逐章逐节地分析,同时还上机操作来加深理解。
特别是对书中的一些典型实例,认真学习它的编程思想,吸取它的编程技巧,弄懂程序中每句话的含义。
认真听老师对设计要求的讲解,根据任务书的要求将整个系统分为几个模块,每个模块具体又要实现哪些功能,然后就逐个模块去一一详细设计,设计的过程中不时地翻阅资料,有时花费一天时间就只能完成一个功能。
程序代码完成之后,要进行运行调试,刚开始由于没有调试经验和方法效率很低,同时发现了许多错误,最后在老师和同学的帮助下,终于顺利完成了,自己也从中学到了不少东西。
更重要的是,在测试过程中的往往发现自己粗心大意犯了很多不必要的错误,通过这次课题,也使我认识到了认真在学习中的重要。
本系统还有很多不足的地方,与真正的Windows画图板相比真是相差甚远。
但这也是我通过自己的努力做出来的。
看着自己写的代码能在自己的意志下运行真有一种说不出来的高兴。
通过作这个课题也让我感到了自己的不足与欠缺。
致谢:
经过三个星期的课程设计让我学到了许多以前不想去学的知识,同时也学会了怎样与他人共同努力做好一件事情。
为以后的工作提供了帮助。
让我真真明白了知识用于实践的重要性。
在这酷热的夏日里,高亮老师不惧炎热,对我们精心辅导,告诉我们设计软件要注意的问题,并给我们安排了设计任务,让我们有目的的对软件进行设计,缩短了软件开发的周期。
高亮老师同时也给我们提出了许多实质性的问题,并帮助我们查阅资料,共同解决问题,我们非常感动,在这里我作为团队的一员向高亮老师表达我们诚挚的谢意!
道一句:
老师你辛苦了!
参考文献
[1]Y.DanielLiang.Java语言程序设计(基础篇),机械工业出版社2006.8
[2]Y.DanielLiang.Java语言程序设计(进阶篇),机械工业出版社2006.8
指导教师评语
成绩:
指导教师签名:
2007年月日
附录:
主要源程序
Windows软件的源程序
//菜单类
publicclassMainlei{
publicstatichuatuquhuatu=newhuatuqu();
publicstaticvoidmain(String[]args){
caidanleiframe=newcaidanlei();
frame.getContentPane().setLayout(newBorderLayout());
frame.getContentPane().add(huatu,BorderLayout.CENTER);
frame.setSize(700,600);
frame.setTitle("huatuban");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
staticJButtonyanseRed,yanseBlack,yanseBule,yanseDarkGray,yanseGray,yansePink,
yanseGreen,yanseLightGray,yanseMagenta,yanseOrange,yanseYellow,yanseCyan;
staticColorcc;
staticStringtext1String;
staticinttext1Int=-1;
staticStringtext2String;
staticinttext2Int=-1;
staticStringtext3String;
staticinttext3Int=-1;
staticStringtext4String;
staticinttext4Int=-1;
staticStringtext5String;
staticinttext5Int=-1;
staticStringtext6String;
staticinttext6Int=-1;
staticJButtonjbo1;
staticJButtonjbo2;
staticJButtonjbo3;
staticJTextFieldtext1;
staticJTextFieldtext2;
staticJTextFieldtext3;
staticJTextFieldtext4;
staticJTextFieldtext5;
staticJTextFieldtext6;
//菜单项
staticclasscaidanleiextendsJFrameimplementsActionListener{
privateJMenuItemjmxinjian,jmbaocun,jmbianji,jmdakai,jmiClose,jmbangzhu,
jmpaowuxian,jmzhixian,jmshuangqu;
huatuquhutu=newhuatuqu();
FileDialogopenPicture,savePicture;
VectorpaintInfo=null;//点信息向量组
intn=1;
JFrameframe1;
JFrameframe2;
JFrameframe3;
FileInputStreampicIn=null;
FileOutputStreampicOut=null;
ObjectInputStreamVIn=null;
ObjectOutputStreamVOut=null;
publiccaidanlei(){
JMenuBarjm=newJMenuBar();
setJMenuBar(jm);
JMenufileJmenu=newJMenu("文件",false);
JMenuyeseJmenu=newJMenu("颜色",true);
JMenushengchengMenu=newJMenu("生成");
JMenubangzhumenu=newJMenu("帮助",false);
jm.add(fileJmenu);
jm.add(yeseJmenu);
jm.add(shengchengMenu);
jm.add(bangzhumenu);
fileJmenu.add(jmxinjian=newJMenuItem("新建"));
fileJmenu.add(jmdakai=newJMenuItem("打开"));
fileJmenu.add(jmbaocun=newJMenuItem("保存"));
fileJmenu.addSeparator();
fileJmenu.add(jmiClose=newJMenuItem("退出"));
fileJmenu.addSeparator();
yeseJmenu.add(jmbianji=newJMenuItem("编辑颜色"));
shengchengMenu.add(jmpaowuxian=newJMenuItem("画抛物线"));
shengchengMenu.add(jmzhixian=newJMenuItem("画直线"));
shengchengMenu.add(jmshuangqu=newJMenuItem("画双曲线"));
bangzhumenu.add(jmbangzhu=newJMenuItem("帮助主题"));
jmxinjian.addActionListener(this);
jmbaocun.addActionListener(this);
jmdakai.addActionListener(this);
jmiClose.addActionListener(this);
jmbianji.addActionListener(this);
jmpaowuxian.addActionListener(this);
jmzhixian.addActionListener(this);
jmshuangqu.addActionListener(this);
jmbangzhu.addActionListener(this);
openPicture=newFileDialog(this,"打开图画",FileDialog.LOAD);
openPicture.setVisible(false);
savePicture=newFileDialog(this,"保存图画",FileDialog.SAVE);
savePicture.setVisible(false);
openPicture.addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{openPicture.setVisible(false);}
});
savePicture.addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{savePicture.setVisible(false);}
});
addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{System.exit(0);}
});
}
publicvoidactionPerformed(ActionEvente){
StringactionCommand=e.getActionCommand();
if(e.getSource()instanceofJMenuItem){
if("新建".equals(actionCommand)){
huatu.setForeground(Color.white);
JOptionPane.showMessageDialog(null,"是否保存此界面");
}
elseif("打开".equals(actionCommand)){
openPicture.setVisible(true);
if(openPicture.getFile()!
=null){
try{
paintInfo.removeAllElements();
Filefilein=newFile(openPicture.getDirectory(),openPicture.getFile());
picIn=newFileInputStream(filein);
VIn=newObjectInputStream(picIn);
paintInfo=(Vector)VIn.readObject();
VIn.close();
repaint();
}
catch(ClassNotFoundExceptionIOe2)
{
repaint();
System.out.println("cannotreadobject");
}
catch(IOExceptionIOe)
{
repaint();
System.out.println("cannotreadfile");
}
}
}
elseif("保存".equals(actionCommand)){
savePicture.setVisible(true);
try{
Filefileout=newFile(savePicture.getDirectory(),savePicture.getFile());
picOut=newFileOutputStream(fileout);
VOut=newObjectOutputStream(picOut);
VOut.writeObject(paintInfo);
VOut.close();
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中原 工学院 软件 学院