创新性实验结题报告书学生结题用.docx

上传人:b****7 文档编号:11057951 上传时间:2023-02-24 格式:DOCX 页数:21 大小:167.03KB
下载 相关 举报
创新性实验结题报告书学生结题用.docx_第1页
第1页 / 共21页
创新性实验结题报告书学生结题用.docx_第2页
第2页 / 共21页
创新性实验结题报告书学生结题用.docx_第3页
第3页 / 共21页
创新性实验结题报告书学生结题用.docx_第4页
第4页 / 共21页
创新性实验结题报告书学生结题用.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

创新性实验结题报告书学生结题用.docx

《创新性实验结题报告书学生结题用.docx》由会员分享,可在线阅读,更多相关《创新性实验结题报告书学生结题用.docx(21页珍藏版)》请在冰豆网上搜索。

创新性实验结题报告书学生结题用.docx

创新性实验结题报告书学生结题用

编号:

数学与计算科学学院

创新性实验结题报告书

实验题目:

实验成绩(教师填写):

学院:

数学与计算科学学院

专业:

学生姓名:

小组成员:

指导教师:

2011年04月15日

一、实验目的及主要创新性点:

目的:

本次实验目的在于通过实践加深我们对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。

创新点:

该实验程序实现局域网内的聊天功能,通过服务器端的消息转发,不仅实现了多用户之间的群聊,还可以和单个用户之间的私聊,完整了一个简单的网络聊天软件的功能。

包括服务器端程序和客户端程序两部分。

客户端程序:

可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。

服务器端程序:

可将消息发送到客户端和接受客户端发送来的信息

二、实验要求:

课程设计可选用NetBeans、Eclipse、JBuilder等作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。

通过这次设计,要求掌握以下内容:

1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用

2)类、包、接口的定义与使用

3)常用工具类与算法的实现(数组、向量、字符串、链表)

4)Java常用标准GUI组件及其事件处理

5)Java的异常处理机制

6)Java的数据库连接技术

7)Java的多线程技术与动画制作

8)Java的网络编程

三、实验原理:

本程序设计为两个部分:

服务器(ChatRoomServer)和客户端(ChatRoom)

聊天的关键在于要将客户端发送过来的消息分发给其他客户端,为了解决这个问题,在服务器程序中建立一个套接口链表,用来保存所有与客户端建立了连接的服务端口。

下面描述了聊天的实现原理:

当客户端ClientN向对应的服务端口N发送了消息Message,服务端口N将Message复制给所有套接口列表(USERLIST)中的套接口缓冲区,然后向每个服务端口发送WRITE消息,使服务端口将Message发送给对应的客户端。

这样,客户端就都获得了Message消息,实现了聊天功能。

以下程序是多人聊功能的实现

BOOLCClientSocketList:

:

Sends(char*buff,intn)

{CClientSocket*curr=Head;

while(curr)

{curr->Send(buff,n);

curr=curr->Next;}

returntrue;}

USERLIST表时多人聊天程序的核心,它是一个动态变化的链表,为空表示没有客户端建立了连接,不为空时每个元素就代表有一个客户端与服务器建立了连接。

以下程序是私聊功能的实现:

BOOLCClientSocketList:

:

OnlySend(char*buff,intn,intwho)

{

CClientSocket*curr=Head;

while(curr&&who>0)

{curr=curr->Next;

who--;}

curr->Send(buff,n);

returntrue;}

四、实验内容与步骤:

1系统分析

1.1可行性分析

经济可行性:

由于本系统的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以不用考虑到经济问题。

技术可行性:

本系统的开发利用MicrosoftSQLServer2000作为本系统的数据库,它是一个支持多用户的新型数据库,适用于大中规模的数据量需求。

学校校园网的建设也为新系统服务器/客户端的结构提供了硬件的支持。

使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。

运行可行性:

本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。

综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的。

1.2需求分析

1.21基本功能需求

新用户注册:

一般用户都想知道其他用户的一些基本资料,比如姓名、年龄、地址、IP地址等一些信息。

查找以及添加好友:

用户为了实现和其他人聊天,必须查找哪些人在线或者查找有哪些人使用该聊天工具.通过查找到的用户号码来实现添加其为好友。

文字聊天:

本聊天工具其实现的目的就是为了实现和用户间的沟通和交流,所以说文字聊天是必须具备的一项基本功能。

用户个性化资料:

用户申请的号码应该可以实现用户根据自己的喜好选择自己喜欢的图象、自我介绍。

查看聊天记录:

用户在聊天的时候,难免会遇到把聊天窗口关掉,这样用户间的聊天信息也就看不到了,这样有可能导致用户不记得和其他用户聊的内容,导致这种结果对用户的聊天带来很大的不便,所以应该实现聊天信息的记录保存和查找。

用户管理:

用户有时候要修改和查看自己的用户资料,这样本系统应该实现用户资料的查询和修改这基本功能。

1.22环境需求

支持WIN95/98/NT/2000/XP操作系统

C200,32M内存以上可以正常运行

其他无特殊要求

1.23性能需求

尽量减少服务器的开销及数据传送负担,提高数据利用效率和数据传送效率,避免无效数据的传输。

1.24界面需求

界面友好,聊天对话框线程支持,实现无限制数量用户聊天。

服务器端无特殊要求

1.25用户需求

现在社会是信息化的社会,什么都追求着快、新、好。

在这种快节奏的生活方式中,人们之间的通讯联系就显得非常的重要了。

商业之间的合作,人们之间的友谊交往,甚至热门谈到的网上恋爱等等都需要通讯联系。

而过去的鸿雁传书已经是满足不了现代人的欲望了。

既然这网络这么的流行,过去的联系方式又这么的落后,因此人们的目光就转向了网络通讯。

聊天工具就是一种网上很普遍但是又很重要的通讯方式。

2,总体设计

2.1功能模块图

2.2系统业务流程图

3,系统模块详细设计

3.1文本聊天模块流程图

3.2文件传输模块流程图

4,详细设计及实现

4.1页面设计

4.1.1登陆框界面设计

欢迎所有本聊天工具—登陆

用户登陆

用户号码

用户注册

用户密码

4.1.2聊天界面的设计

与1000054的聊天

好友网名

好友图像

好友号码

好友IP地址

聊天的信息

要发给对方的信息

4.1.3主界面的设计

QQ头像我的QQ号码

我的好友

陌生人

黑名单

查找好友

我的资料

我的状态

4.1.4注册框的设计

用户得注册

 

 

 

4.2数据输入输出设计

4.2.1数据输入

4.2.11登陆界面数据的输入要求

Number(账号)输入的必须是整型,它是一个用户登陆的账号。

Password(密码)可以是你设置好的字符串,字符串内容可以随便。

如果用户设置不正确,将会导致登陆不成功,系统会弹出相应的对话框。

4.2.12注册界面的输入

Nickname(昵称),password(密码),sign(个性签名)可以是任意的字符串。

Email必须是Email地址格式,也就是中间必须含有“@”,否则提示输入不正确。

4.3.12服务器端监听线程的设计

服务器在监听到一个客户以后,它就会创建一个线程去管理这个客户。

至于如何去管理这个客户,服务器端不做任何干涉,完全由监听线程决定。

监听线程主要对客户端的请求进行响应,做到有求必应。

接收到信息后,首先判断该信息是哪种类型,如果是要访问数据库服务器,则直接根据发送信息内容操作数据库。

如果是聊天内容,服务器会将该信息再次转发到目的地。

这些判断将会全放部在一个线程的run方法中。

4.3代码实现

4.3.1注册功能的部分代码如下:

try{

Socketsocket=newSocket("localhost",8000);

BufferedReaderin=newBufferedReader(newInputStreamReader(socket.

getInputStream()));

PrintWriterout=newPrintWriter(newBufferedWriter(new

OutputStreamWriter(socket.getOutputStream())),true);

out.println("login");

out.println(PNTextField.getText().trim());

out.println(PW.getPassword());

Stringstr="";

str=in.readLine().trim();//从服务器读取消息

in.close();

out.close();

socket.close();

//如果失败就告诉出错

if(str.equals("false"))

JOptionPane.showMessageDialog(this,"对不起,出错了:

-(","ok",

JOptionPane.INFORMATION_MESSAGE);

else{//如果成功就打开主程序

intqno=Integer.parseInt(PNTextField.getText().trim());

this.dispose();

MainFramemainframe=newMainFrame(qno,"localhost",8000);

mainframe.setSize(600,250);

DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();

intscreenWidth=screenSize.width;

intscreenHeight=screenSize.height;

DimensionframeSize=mainframe.getSize();

intx=screenWidth-frameSize.width;

inty=0;

mainframe.setLocation(x,y);

mainframe.setResizable(true);

mainframe.setVisible(true);

}

}catch(IOExceptionex){}

 

4.3.2登陆功能的部分代码如下:

try{

Socketsocket=newSocket("localhost",8000);

BufferedReaderin=

newBufferedReader(newInputStreamReader(socket.getInputStream()));

PrintWriterout=newPrintWriter(

newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);

out.println("new");//发送新建用户请求

out.println(this.petname.getText().trim());

out.println(this.password.getText().trim());

out.println(this.name.getText().trim());

Stringsex="";

if(male.isSelected())

sex+="男";

else

sex+="女";

out.println(sex);

System.out.println(sex);

out.println(this.email.getText().trim());

out.println(headpic.getSelectedIndex());

intno;

no=Integer.parseInt(in.readLine().toString().trim());

System.out.println(no);

Stringstr1="";

str1=in.readLine().trim();//从服务器读取信息

//如果出错

if(str1.equals("false"))

JOptionPane.showMessageDialog(this,"对不起,出错了:

-(","ok",

JOptionPane.INFORMATION_MESSAGE);

else{//如果成功就告诉用户其号码

JOptionPane.showMessageDialog(this,"yourMnumis"+no,"ok",

JOptionPane.INFORMATION_MESSAGE);

this.dispose();//并打开主窗口

MainFramemainframe=newMainFrame(no,"localhost",8000);

mainframe.setResizable(true);

mainframe.setVisible(true);

mainframe.show();

}

out.close();

in.close();

socket.close();

}catch(IOExceptionex)

{

System.err.println(ex);

}

4.3.3查询好友功能的部分代码如下

if(jCheckBox2.isSelected()){

FindResultfs=newFindResult();

fs.setSize(400,200);

DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();

intscreenWidth=screenSize.width;

intscreenHeight=screenSize.height;

DimensionframeSize=fs.getSize();

intx=(screenWidth-frameSize.width)/2;

inty=(screenHeight-frameSize.height)/2;

fs.setLocation(x,y);

fs.setResizable(false);

fs.setVisible(true);

this.dispose();

}

else{

//用号码查找,并添加其为好友

intwant_find_no=Integer.parseInt(this.jTextField1.getText().toString().trim());

try{

Socketsocket=newSocket("localhost",8000);

BufferedReaderin=newBufferedReader(newInputStreamReader(socket.

getInputStream()));

PrintWriterout=newPrintWriter(newBufferedWriter(new

OutputStreamWriter(socket.getOutputStream())),true);

System.out.println("isOn");

out.println("isOn");

out.println(want_find_no);

//对方在线就发送添加好友信息,对方确认后,系统添加

//对发不在线就留言等待,等对方确认后,系统添加

intisOn=Integer.parseInt(in.readLine().toString().trim());

if(isOn==1){

//在线

Stringwant_find_IP=in.readLine().toString().trim();

//添加好友,等待对方确认

System.out.println(want_find_IP);

AddFriendBoxadd=newAddFriendBox(want_find_no,my_no,want_find_IP);

add.setSize(400,400);

DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();

intscreenWidth=screenSize.width;

intscreenHeight=screenSize.height;

DimensionframeSize=add.getSize();

intx=(screenWidth-frameSize.width)/2;

inty=(screenHeight-frameSize.height)/2;

add.setLocation(x,y);

add.setResizable(false);

add.setVisible(true);

}

else{

//不在线,留言

}

out.close();

in.close();

socket.close();

}catch(IOExceptione12){System.err.println(e12);}

this.dispose();

5.3.4客户端的主要代码:

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

import.*;

importjava.io.*;

publicclassNewextendsJFrame{//登录窗口类

JPanelcontentPane;

//*****************

Stringserver;//服务器名

intserport;//端口

privateSocketsocket;

privateBufferedReaderin;//输入输出流

privatePrintWriterout;

程序界面

…………

当点击登陆按纽时代码的实现

voidlogin_mouseClicked(MouseEvente){//登录按扭

try{Socketsocket=newSocket(InetAddress.getByName(server),serport);//连接服务器

BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));

PrintWriterout=newPrintWriter(newBufferedWriter(

newOutputStreamWriter(socket.getOutputStream())),true);

out.println("login");//告诉服务器我要登录

out.println(jicq.getText());

out.println(password.getPassword());

Stringstr="";

//do{

str=in.readLine().trim();//从服务器读取消息

//如果失败就告诉出错

if(str.equals("false"))JOptionPane.showMessageDialog(this,"对不起,出错了:

-(","ok",JOptionPane.INFORMATION_MESSAGE);

else{//如果成功就打开主程序

this.dispose();

intg=Integer.parseInt(jicq.getText());

MainWinf2=newMainWin(g,server,serport);

f2.setVisible(true);

}

//System.out.println("\n");

//}while(!

str.equals("ok"));

}catch(IOExceptione1){}

}

voidnewuser_mouseClicked(MouseEvente){//新建用户按纽

this.dispose();

JDialogd=newRegister(server,serport);//打开新建窗口

d.pack();

d.setLocationRelativeTo(this);

d.setSize(400,400);

d.show();

}

voidquit_mouseClicked(MouseEvente){//关闭按扭

this.dispose();

System.exit(0);

}

}

5,系统测试

由于本设计是一个比较简单的聊天工具,在程序运行后只需要设计几个简单的用例:

 

五,实验结果分析或总结:

本设计在查阅了大量的文献后进行理论研究的同时,借鉴了其他聊天程序、聊天程序的优缺点,在此基础上展开了研究工作,归纳起来,论文取得的成果和创新点主要有以下几个方面:

1)通过网络编程,设计了基本的聊天功能和文件传输功能。

2)将数据库编程和网络编程相结合,利用Java编程,将在大学课外里学到的知识进行了很好的综合。

3)利用TCP/IP协议中的TCP协议,即面向连接的服务,进行数据的传输,对网络中数据的传输过程。

通过这次开发,我们第一次深入的去思考一个软件的构成与实现,以前上网聊QQ的时候从来没有想过如何实现它的功能,等到让自己来做的时候才发现其中的任何一环都是非常重要的。

在实践中,我也学到了很多编程方面的知识。

8,参考文献

[1]张跃平.JAVA2实用教程(第二版)[M].北京:

清华大学出版社

[2]孟凡荣.数据库原理与应用.中国矿业大学,2009(8)28-30

[3]张虹.软件工程与软件开发工具.清华大学出版社.2009

(1)55-75

[4]BruceEckel.ThinkinginJava.机械工业出版社.2009(6)42-64

[5]庞永庆,翟鹏.Java完全自学宝典.清华大学出版

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1