
个人总结报告
●专 业: 计算机科学与技术
●班 级: 计08-1
●成 员:
●指导教师:
日期:2011.1.4
2.2概要设计阶段……………………………………………………………………………..7
1前言
1.1题目的选择
在我们小组选择题目的时候我们考虑了有几个题目,包括
师讲的现在最新的Android手机软件开发,HTML5的视频制作,还有就是图书管理系统和教务系统这样的管理系统。但是出于学习的目的我们选择了网络聊天工具。原因有以下几点:
1、网络聊天涉及到网络,对我们当时正在学的计算机
络算是一种应用和学习。
2、聊天工具必须要以多线程来实现,相对于管理系统
可以学到多方知识。
3、聊天工具的信息保存也涉及到数据库的操作,是一种很好的学习项目。
1.2编程语言的选择
由于我们大一的时候学的编程语言是C++,但是我们只学了C++的最基本的语法方面的知识,连MFC方面的学习也不到位。我们在考虑编程语言的时候并没有选择它,而是选择了比较简单的C#语言,对于C#语言的可视化操作和其它的一些封装都很方便。并且我在暑假里面也是学习的C#,感觉上手比较容易。但是在上课的时候听到老师反复说C#是一颗大白菜,我们就开始动摇了,最终我们选择了Java语言,对于Java我还是比较熟悉的,因为我大二的时候选过Java的选修课。在十一月份,我们终于把编程语言确定为Java,由于Java的界面设计比较麻烦,都是全代码实现的,所以最后实现的界面比较粗糙,在以后的学习中还要多多加强Java的界面布局,力求使自己的程序更加的美观,尽量符合用户的习惯。
1.3我参与的模块
在这次项目的设计完成中,我承担了较多的工作。
HD聊天工具的数据库是我设计的,在最开始的构想中,
户的ID是由系统自动生成的,就像QQ号码一样,是由数字组成。但是考虑到聊天工具的局限性,也就是使用的用户比较少,为了方便记忆和减少系统的复杂性,我将用户的ID更改为自己申请,也就是由int型数据更改为String型的数据。
HD聊天工具的服务端和客户端的框架是我搭建的,考虑到用户登录的时候需要保存自己的IP地址,及与服务端连接的通道,我用一个哈希表来保存这个通道(也就是Socket套接字),其中的键是String 型的用户ID,值是该用户登录的套接Socket,这样在以后客户端向该用户转发好友发送来的消息的时候就能通过用户的ID找到好友的socket,从而向好友发送消息了。如:
获得用户lc的socket:
Socket socket = ht.get(“lc”);
在HD聊天工具的开发过程中,我还担任了添加好友,查看好友模块,辅助完成了登录、注册、修改密码、找回密码、聊天、聊天记录等模块,以及后期的各个模块的整合工作都是我完成的。在整个过程中过到了,Java Swing编程,Java线程编程,Java网络编程,数据库连接,事件响应等方面。我从刚开始对系统的一无所知,到现在基本上能够完成这具系统,这个过程中学习了很多知识。比如说吧:在刚开始做的时候我连数据库的连接设置都不会,就是将Sql Server2005的身份验证从Windows身份验证更改为混合身份验证也不会,于是我在网上搜索资料,去CSDN 去Java Eye 等技术论坛找资料。可以说,在这整个过程中我学到了很了东西,软件工程的思想和方法也有所掌握。
1.4参考资料
a. 《Java网络编程技术与实践》 清华大学出版社 杜家荣 马建红 滕振宇 等编著
b. 《Java从初学到精通》 电子工业出版社 辛立伟 张帆 等编著
c. 《数据库应用技术》 机械工业出版社 张蒲生 主编
d. 《Thinking In Java》
f. 《Java高手真经(编程基础卷)》 电子工业出版社 刘中兵Java研究室 编著
g. 《计算机网络》 矿大出版社 姜秀柱 主编
h. 《java线程编程》 人民邮电出版社 [美]Paul Hyde著 周良忠 译
2开发过程
2.1需求分析阶段
我们选定做聊天系统之后就进行了软件的需求分析。参考QQ聊天软件,我们的HD聊天工具有如下功能:用户注册、按密码保护问题找回密码、查找好友、添加好友、修改密码、修改个人信息,查看好友信息,好友聊天,消息记录。
在初期工作中我参与了DFD图的绘制,主要是添加好友模块及个人信息修改,部分成果如下图:
1.21客户端查找好友、添加好友模块
2.2概要设计阶段
系统的IPO图如下:
设计了数据库:名为“我的数据库”数据库只存在于服务端PC上,客户端不需要有数据库,用户及好友信息都存在于服务端数据库中。
2.3详细设计阶段:
模块描述
由于系统是基于C/S模型的架构,每个模块都相应的分为客户端和服务器端。添加好友这个模块是为了以后的好友管理以及消息发送等功能的必须。只有相应的添加了好友以后才能在实际上实现那些功能。这个模块的特点是用一个用户类FriendUser来封装好友的信息,通过网络传输到服务器端进行好加的添加。
功能
客户端功能:可以根据用户的选择,有两种方式添加好友。分别是1:按好友的ID添加好友。2:按好友的昵称添加好友。用户提交添加请求以后,通过网络传送到服务端,服务端返回好友的基本资料,用户可以选择添加好友,向服务端提交请求,服务端相应的添加好友,并且自动为对方加自己为好友。反馈添加结果。
服务端功能:当服务端收到客户端发送来了的好友请求后,按相应的请求在数据库中查找好友的信息,并以FriendUser类的向量(Vector)进行返回,发送到客户端。客户端选择添加好友以后,服务器先要检测双方是否以经是好友,如果是则给出提示信息,并结束添加好友。如果不是则在数据库中的好友表中添加两条好友记录,将双方互加为好友,并向双方发出添加好友成功的提示信息。
注册登录模块的流程逻辑图如下:
2.4编码环节
编码阶段,我完成的工作主要包括以下部分:
C/S的搭建,查好好友、添加好友、修改密码等细节,以及各模块的整合。
具体代码略
2.5测试环节
测试工具我们选用的是JUnit进行白盒测试。主要针对数据库的操作进行测试,能否正确的向 数据库中插入好友。如图示进行测试前、后的好友列表比较:
从图中可以看出,测试前数据库中没有lc,xbb和xbb,lc这两条好友记录,测试以后数据库中新增了这两条记录。
JUnit测试数据库向数据库中插入数据 好友:lc,xbb
3 遇到问题及解决方案
1.Swing窗体的建立
由于各个面板都是由java代码书写的,界面的布局掌握的还不是很好,导致了界面比较粗糙。还有,对其中一些控件,比如JTree控件显示好友的时候如何实现,点击JTree节点显示好友对话窗口时,点击节点与好友的对应,好友信息的保存等问题。
常用的包括如下:
| 事件名称 | 接口 | 实践处理方法 | 对应的事件 |
| 动作事件 | ActionListener | actionPerformed | ActionEvent |
| 选项事件 | ItemListener | itemStateChanged | ItemEvent |
| 列表选择事件 | ListSelectionListener | valueChanged | ListSelectionEvent |
| 键盘事件 | KeyListener | keyPressed | KeyEvent |
| 鼠标事件 | MouseListener | mousePressed | MouseEvent |
在连接数据库时候,一开始什么头绪也没有,在网上找解决方案才知道要下载别的可执行jar(即:java与Sql Server数据库的连接jar),并导入到工作区间。在设置数据库用户sa的时候也遇到不少问题,不过最终还是顺利的解决了。
3.多线程
多线程始终都是Java编程的重点和难点。在服务端和客户端都必须要用到多线程,以前学C#的时候就一直搞不懂线程,在做这个项目的时候边做边学,也懂得了java实现线程的两种方式:1继承Thread,2扩展Runnable接口。当类需要继承其它类的时候就不能继承Thread,改为扩展Runnable接口。多线程的通信及其它问题还需要在以后的学习中加以体会。
4 经验与教训
这次软件开发让我学到了很多的知识。
知识只有转变有实际而有用的东西才能显现出它的价值。学习不只是学习理论知识,更重要的是自己动手操作的能力。在现今的社会上,要想立足,就要有过硬的本领,要有扎实的功底。
这个软件工程的项目实战让我真真切切感受到软件开发的全过程,这让我明白软件的开发是一门艺术,而不是代码的简单叠加。这是一个团体的凝聚力的体现。
通过这次开发,我第一次深入的去思考一个软件的构成与实现,以前上网聊QQ的时候从来没有想过如何实现它的功能,等到让自己来做的时候才发现其中的任何一环都是非常重要的。在实践中,我也学到了很多编程方面的知识。由于是在这学期才开始使用Java编程,加上时间问题,我们的程序还有很多不尽如人意的地方。例如:很多功能没有实现(语音视频,文件传输,个人空间等等),并且界面粗糙生硬。这些都是以后需要努力的地方。从这个过程中,我还体会到一点,那就是交流的重要性,自己知道的东西要怎么样表达出来让别人听懂,听明白,交流也是一门艺术。
最后,感谢老师的指导与教诲。我必将更加努力!
