网络编程课程设计报告图片浏览器.docx
《网络编程课程设计报告图片浏览器.docx》由会员分享,可在线阅读,更多相关《网络编程课程设计报告图片浏览器.docx(11页珍藏版)》请在冰豆网上搜索。
网络编程课程设计报告图片浏览器
课程设计报告
课程名称:
网络编程技术课程设计
设计题目:
图片浏览器
图片浏览器
——文件下一张模块
1需求分析
1.1课程设计题目
图片浏览器课程设计
1.2课程设计要求及功能
本次课程设计主要任务是由我们小组所有人员一起工作利用java语言,编写一个图片浏览器的软件,根据老师的要求我们是每个人负责一个模块,但是最后的组装是由组长来完成的。
该图片浏览器所具有的功能有:
打开图片、上一张、下一张、放大图片、缩小图片、关闭程序、帮助与支持等基本功能。
1.3课程设计思想
本软件主要使用图形用户界面,JAVA的输入输出流,以及鼠标监听等事件监听器等技术。
在具体实现方面大体上将程序分为事件监听类ViewerFrame,程序入口类main,,事件监听处理类ViewerAction,程序功能实现类ViewerService,文件过滤处理类ViewerFileChooser;通过整合是个各类连接起来形成一个统一的整体进而封装成一个整体,形成一个软件可以方便用户的使用。
本软件类似于现在市面上流行的图片浏览软件但是没有流行的软件那么多功能,但是它使用起来比较简单方便。
1.4软硬件运行环境及开发工具
开发环境:
WindowsXP下安装了JDKJRE6.0软件;
开发工具:
Eclipse3.5;
1.5功能设计
本图片浏览器主要功能如下:
打开:
从指定目录中导入选中的图片;
上一张:
导入当前图片所在存储位置的上一张图片;
下一张:
导入当前图片所在存储位置的下一张图片;
放大:
放大显示当前图片;
缩小:
缩小显示当前图片;
退出:
退出软件。
2总体设计
2.1概要设计
本软件主要由以下模块构成:
主模块、界面、文件筛选、服务模块构成。
各模块的主要功能是:
主模块主要用来打开该软件;界面模块主要实现软件界面;文件筛选模块主要对文件的后缀进行判断与过滤,判断文件是否为图片文件;服务模块主要实现软件中的一些关键代码。
比如,文件的打开以及在打开文件的同时调用文件筛选功能;各模块分别在不同的源文件中实现,对软件的界面设计放在ViewerFrame里面。
在软件窗口中主要分为两部分:
菜单部分和图片显示部分;菜单部分使用JMenuBar类实现,图片显示部分使用JLabel类实现;对文件类型以扩展名的方式进行过滤,该部分是在ViewerFileChooser类中实现;事件的监听是在ViewerFrame里面,在菜单栏中,对每一个选项使用二维数组进行编号,在选项内容设置的同时为其设置监听;事件的实现是在ViewerService里面,当所监听到的事件被触发时会自动转入该类中的相应处理方法;功能的实现是在ViewerService里面,在该类中,利用menuDo()方法对当前触发事件进行选择,然后跳转到本类中的响应处理方法来实现功能。
2.2程序执行流程图
图1系统流程图
3设计内容
在该图片浏览器的设计制作中,我所负责的部分是图片下一张的功能的实现。
此功能主要是在事件的监听是在ViewerFrame,这个模块里面实现的。
3.1功能的代码
packagecom.gh;
importjava.awt.Image;
importjava.io.File;
importjava.util.ArrayList;
importjava.util.List;
importjavax.swing.ImageIcon;
importjavax.swing.filechooser.FileFilter;
publicclassViewerService{
privatestaticViewerServiceservice=null;
//新建一个ViewerFileChooser
privateViewerFileChooserfileChooser=newViewerFileChooser();
//放大或者缩小的比例
privatedoublerange=0.2;
//目前的文件夹
privateFilecurrentDirectory=null;
//目前文件夹下的所有图片文件
privateListcurrentFiles=null;
//目前图片文件
privateFilecurrentFile=null;
publicstaticViewerServicegetInstance(){
if(service==null){
service=newViewerService();
}
returnservice;
}
publicvoidopen(ViewerFrameframe){
//如果选择打开
if(fileChooser.showOpenDialog(frame)==ViewerFileChooser.APPROVE_OPTION){
//给目前打开的文件赋值
this.currentFile=fileChooser.getSelectedFile();
//获取文件路径
Stringname=this.currentFile.getPath();
//获取目前文件夹
Filecd=fileChooser.getCurrentDirectory();
//如果文件夹有改变
if(cd!
=this.currentDirectory||this.currentDirectory==null){
//或者fileChooser的所有FileFilter
FileFilter[]fileFilters=fileChooser
.getChoosableFileFilters();
Filefiles[]=cd.listFiles();
this.currentFiles=newArrayList();
for(Filefile:
files){
for(FileFilterfilter:
fileFilters){
//如果是图片文件
if(filter.accept(file)){
//把文件加到currentFiles中
this.currentFiles.add(file);
}
}
}
}
ImageIconicon=newImageIcon(name);
frame.getLabel().setIcon(icon);
}
}
publicvoidzoom(ViewerFrameframe,booleanisEnlarge){
//获取放大或者缩小的乘比
doubleenLargeRange=isEnlarge?
1+range:
1-range;
//获取目前的图片
ImageIconicon=(ImageIcon)frame.getLabel().getIcon();
if(icon!
=null){
intwidth=(int)(icon.getIconWidth()*enLargeRange);
//获取改变大小后的图片
ImageIconnewIcon=newImageIcon(icon.getImage()
.getScaledInstance(width,-1,Image.SCALE_DEFAULT));
//改变显示的图片
frame.getLabel().setIcon(newIcon);
}
}
publicvoidlast(ViewerFrameframe){
//如果有打开包含图片的文件夹
if(this.currentFiles!
=null&&!
this.currentFiles.isEmpty()){
intindex=this.currentFiles.indexOf(this.currentFile);
//打开上一个
if(index>0){
Filefile=(File)this.currentFiles.get(index-1);
ImageIconicon=newImageIcon(file.getPath());
frame.getLabel().setIcon(icon);
this.currentFile=file;
}
}
}
publicvoidnext(ViewerFrameframe){
//如果有打开包含图片的文件夹
if(this.currentFiles!
=null&&!
this.currentFiles.isEmpty()){
intindex=this.currentFiles.indexOf(this.currentFile)+1;
//打开下一个
if(index+1Filefile=(File)this.currentFiles.get(index+1);
ImageIconicon=newImageIcon(file.getPath());
frame.getLabel().setIcon(icon);
this.currentFile=file;
}
}
}
publicvoidmenuDo(ViewerFrameframe,Stringcmd){
//打开
if(cmd.equals("打开(O)")){
open(frame);
}
//放大
if(cmd.equals("放大(M)")){
zoom(frame,true);
}
//缩小
if(cmd.equals("缩小(O)")){
zoom(frame,false);
}
//上一个
if(cmd.equals("上一个(X)")){
last(frame);
}
//下一个
if(cmd.equals("下一个(P)")){
next(frame);
}
//退出
if(cmd.equals("退出(X)")){
System.exit(0);
}
}
3.2效果展示
本功能相关实现截图如图2图3:
图2含有“下一张”功能截图
图3图片进行下一章操作的效果
4调试及操作说明
本模块编写完成后,交由组长进行整合及测试;本软件简单易用,关于下一张操作,只需要在软件成功运行后,选择菜单栏中的文件”下一张”即可。
5课程设计总结与体会
通过这几天的学习,我感觉到了对于网络编程这门课程有了更加深刻的认识,虽然到最后学会的东西不是很多,但是我觉得挺充实的,觉得这几天过的很有意义,在这个过程中才意识到原来编程还是挺有意思的。
以前只是编写C语言等程序感觉是那么的枯燥,即使编写出来也没多少成功的感觉。
但是做了这个课程设计后我的看法改变了。
这次做课程设计,给我最大的收获是锻炼了我编程的能力,增加了我对编程的兴趣,虽然我依然不喜欢编程但是不妨碍我从另一个角度去思考它,最主要的是明白了做什么读不容易,并且在这个过程中我学会了面对一个问题我应该如何入手,如何思考,如何寻找问题的突破口。
而且我应该感谢我的指导老师,是他对我们那么严格要求,才使得我们可以更加精益求精,把我们的程序尽可能的做到完美。
当然,也由于我的经验不足,这次编的程序也不是特别的完美,但是,我依然很高兴,因为我们从这次的实习中学到了对我们来说很重要的东西,这个经历让我感受颇多,我发现耐心的重要性,我更发现了学习的重要性。
没有什么不可能的,什么事情都得自己亲自尝试了,才知道其中的酸甜苦辣。
这不仅可以用到我的学习生活中,也为我将来的工作提供了一次实践的机会。
让我深刻的了解到,学习的要性,并且跟同学的交流也是特别的重要。
在实习过程中组长对我的教导是我在能完成任务的一个必不可少的原因,而且在很多的程序不能运行时,是他及时出现帮助我找到了原因,并且指导我在以后碰到同类型问题应该如何处理,让我获益良多。
在实习即将结束时王老师和我们说了一句自己的人生经验:
“人要学会吃苦吃亏“,因为在将来的工作环境中不如意的事将多如牛毛,又苦又累的工作总的有人做,而且不是每个人都能吃到肉总的有人喝汤,总得有人连汤也喝不上,但是这正是磨砺人得时候如果这时候退缩了,则人生注定一事无成。
在实习结束候我仔细的回味了回味老师的这俩句话,感觉很有哲理,觉得这是老师自己的的人生经验,对我触动挺大的,也许可以这样说这次实习让我学会的人生经验比知识更加宝贵吧!
我仿佛在我的心里种下了个火种,指引着我努力的向前方迈进。
总的来说,这次课程设计真是让我终身难忘啊,这里面的酸甜苦辣也就只有自己知道啊。
这里面有自身的不足,有知识的不够,也有中间耐心的不够,不过,我很高兴有这次做课程设计的经历。
终身难忘!
!
!
6致谢
在本次课程设计过程中,我十分感谢给予我们帮助的马老师、思软科技的王老师以及同学们在我遇到问题时耐心地给我们帮助。
王老师们对我们认真严谨的教学态度和深厚的知识底蕴,让我获益良多。
再次感谢老师们对我们孜孜不倦的教诲,以及同学们无私的帮助。
7参考文献
[1]马晓敏肖明姜远明齐永波,《Java网络编程原理与JSPWeb开发核心技术》中国铁道出版社,2010年1月.
[2]赵如意孙印杰刘斌孙玉强《Java项目开发实用案例》科学出版社
[3]思软科技项目指导手册之图片浏览器
[4]JDKAPI文档
指导教师评语:
指导教师签名:
年月日
成绩评定
项目
权重
成绩
1.设计过程中出勤、学习态度等方面
0.1
2.设计技术水平
0.4
3.编程风格
0.2
4.设计报告书写及图纸规范程度
0.3
总成绩