《Java课程设计》需求分析文档要求文档格式.docx
《《Java课程设计》需求分析文档要求文档格式.docx》由会员分享,可在线阅读,更多相关《《Java课程设计》需求分析文档要求文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
4.1登录界面功能表
表4-1登录功能表
序号
功能内容
控件
对象名
备注
1.
用户名输入框
JTextField
textfield
2.
密码输入框
JPasswordField
password
3.
登录
JButton
b1
4.
取消
b2
5.
注册
b3
6.
存放组件的容器
JPanel
P1
存放b1b2b3
7.
盒式容器
Box
baseBox
存box1box2
8.
box1box2
9.
标签
JLabel
标记用户名密码
4.2注册界面功能表
表4-2注册功能表
TextField
textfield1
Pw1
确认密码输入框
Pw2
年龄输入框
textfield2
复选框男
JCheckBox
C1
选定
复选框女
C2
注册按钮
bsubmit
取消按钮
bcancel
存放信息
10.
P2
存放两个提交取消按钮
11.
P3
存放性别选项
4.3聊天界面功能表
表4-3聊天功能表
12.
聊天内容显示框
TextArea
textareaMessage
13.
用户列表显示框
textareaList
14.
发送内容输入框
15.
用户列表标签
userlist
16.
聊天室标签
chatroom
17.
退出按钮
buttonout
18.
发送按钮
buttonsent
19.
JPanel
panelout
存放退出按钮
20.
p
21.
显示指定组件内容
JScrollPane
messagepanel
22.
listpanel
23.
sendpanel
24.
格式布局
GridBagLayout()
25.
GridBagLayout类布置的组件的约束
GridBagConstraints
bgc
4.4文件功能表
表4-4文件功能表
指定流里面读取对象
ObjectInputStream
br
从流里读取内容
getInputStream
文件写
PrintWriter
pw
读对象
readObject
客户端套接字
Socket
fromClient
建立连接
服务器端套接字
ServerSocket
server
5.系统流程分析
5.1系统总体设计流程图
聊天应用程序包括登录界面和注册界面,当启动登录界面,用户填写信息后登录,登录的信息将反馈给聊天服务器,服务器验证用户信息,若验证成功则跳到聊天界面,否则,服务器反馈给登录界面拒绝登录消息。
启动注册界面,用户在界面填写注册信息,注册信息反馈给服务器,服务器要验证用户信息,验证成功,跳到登录界面,否则,服务器反馈给注册界面,显示错误消息。
图5-1系统总体流程图
5.2详细设计流程图
1.服务器结构
服务器端,处理用户的请求,当收到“来自定时器”消息时,服务器给客户反馈,客户端在聊天界面更新消息和在线用户信息;
服务器收到“登录信息”请求时,验证登录信息,验证成功则更新聊天界面里的消息和在线用户信息,否则给客户端反馈“用户不存在”消息;
当服务器端接收到“注册消息”请求时,服务器验证注册信息,若验证成功,将注册信息写入文件保存,并反馈给客户端“注册成功”信息,跳到登录界面,否则在注册界面给客户端反馈“用户已经存在”消息。
图5-2服务器结构流程图
2.客户端结构
登录界面,将登录消息发送给聊天服务器,聊天服务器验证登录消息,如果验证成功将“欢迎”消息发送给登录界面,登录界面向用户显示聊天界面;
如果验证不成功,则将拒绝消息发送给登录界面,登录界面显示错误对话框。
注册界面,同登录界面。
图5-3登录界面流程图
聊天界面,服务器接收“来自定时器”的消息,随时更新消息和在线用户信息,若用户在聊天界面中单击“发送”按钮,服务器接收用户“发送”请求,服务器将用户的发送信息保存,向聊天界面,若用户退出,服务器收到用户“用户退出”请求,将在线列表中删除用户,并更新聊天界面里的消息和在线用户信息。
图5-4聊天界面流程图
6.界面设计
6.1登录界面
运行Login.java程序会出现如下界面。
图6-1登录界面
6.2注册界面
运行Resigter.java可出现如下界面,注册信息时,用户名不能为中文,程序采用了RandomAccessFile来随机读取文件,为单独设置类来处理中文字符,用户若注册用户名信息含有中文将无法读取,尽管注册成功,登录时将报错:
用户名或密码错误。
图6-2注册界面
6.3聊天界面
用户先注册,在登录,登录成功可以出现如下界面。
图6-3聊天界面
7.系统测试
用户xiaowang和wang注册后登录聊天室,xiaowang在聊天室里发送消息:
你好;
wang发送消息:
好。
两个用户都能看到彼此所发的信息。
图7-1系统测试
图7-2系统测试
8.关键代码说明
表8-1关键代码表
事件内容
事件名
1
2
3
聊天
4
发送
publicConnect(SocketinFromClient){//建立一个用户
//vcList=newVector<
String>
();
Stringmsg="
"
;
Stringmesg="
try{
//服务器端先读再写
streamFromClient=newBufferedReader(newInputStreamReader(
inFromClient.getInputStream()));
//System.out.println("
客户端连接成功"
);
streamtoClient=newObjectOutputStream(
inFromClient.getOutputStream());
服务器反馈信息给用户"
msg=streamFromClient.readLine();
System.out.println("
从客户获得的信息为:
+msg);
if(msg.equals("
来自定时器"
)){
streamtoClient.writeObject(vector);
//将指定的对象写入
//ObjectOutputStream
streamtoClient.writeObject(vcList);
}
elseif(msg.equals("
登录消息"
msg=streamFromClient.readLine();
System.out.println("
客户信息为:
intver=verify(msg);
验证消息为:
+ver);
if(ver==1){
Stringcolon=newString("
:
"
intindex=msg.lastIndexOf(colon);
Stringusername=msg.substring(0,index);
System.out.println("
usernaem-->
>
+username);
if(!
(vcList.indexOf(username)>
=0)){//如果用户列表中不存在该用户则在列表中添加该用户
streamtoClient.writeObject("
欢迎"
//addElement将指定的组件添加到此向量的末尾,将其大小增加
//1。
如果向量的大小比容量大,则增大其容量。
vcList.addElement((String)username);
System.out.println("
用户列表人数为:
+vcList.size());
}else{//已经登录了
//System.out.println("
拒绝登录"
//给客户端反馈信息
}
}else{
streamtoClient.writeObject("
该用户不存在"
}
注册消息"
从客户端接收的信息为:
intret=checkFile(msg);
用户存在为0"
+ret);
if(ret==0){
用户已经存在"
if(ret==1){
//创建在文件中写入的文件流
System.out.println("
在文件中写入信息"
FileOutputStreamout=newFileOutputStream("
UsrPwd.txt"
true);
PrintStreamp=newPrintStream(out);
p.println();
p.println(msg);
p.close();
注册成功"
用户退出"
System.out.println("
Stringremuser=streamFromClient.readLine();
//booleanb=vcList.removeElement(remuser);
//移除退出用户
vcList.removeElement(remuser);
else{//发送信息
message=message+msg;
message:
+message);
vector.addElement(message);
//向聊天列表中添加用户发送的聊天信息
//反馈给用户现在的向量集合
}
catch(Exceptione1){
e1.printStackTrace();
无法获取客户端的流对象"
+e1);
}//try...catch结束
finally{
try{
inFromClient.close();
}catch(IOExceptione2){
e2.printStackTrace();
发生异常"
+e2);
小结
本次系统设计总结,我将对我在做这次系统设计中遇到过的问题以及新学的内容进行总结。
本系统的登录界面,我采用了Box容器来排版界面格式,注册界面与聊天界面采用了GirdBagLayout()布局格式,来排版界面。
用Vector类来实现添加、删除用户的操作,Vector类可以实现可增长的对象数组。
与数组一样,它包含可以使用整数索引进行访问的组件。
但是,Vector的大小可以根据需要增大或缩小,以适应创建Vector后进行添加或移除项的操作。
用RandomAccessFile来实现文件内容的读取,RandomAccessFile创建从中读取和向其中写入的随机访问文件流,类里面有getFilePointer方法来返回文件中的当前偏移量,到此文件开头的偏移量,在该位置发生下一个读取或写入操作。
采用objectOutputStream类来读取流里的对象,用其中的writerObject()方法来向流里传递(写入)一个对象。
最重要的一点,在调用close()方法关闭读写流之前一定要先flush(),flush是清空而不是刷新,一般主要用在Io中,即清空缓冲区数据,当我们用读写流的时候,数据先被读到了内存,然后用数据写到文件中,当数据读完,数据并没有写完,还有一部分可能留在内存这个缓冲区中,如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()(把缓冲区中的内容强制写出),先清空数据。
参考文献
[1]王雷,潘英.J2EE专业项目实例开发[M].北京:
中国水利水电出版社,2006
[2]耿祥义,张跃平.Java程序设计实用教程[M].北京:
电子工业出版社,2007
[3]王保罗.Java面向对象程序设计[M].北京:
清华大学出版社,2003
[4]张珣,杨三成.关键技术JSP与JDBC应用详解[M].中国铁道出版,2010
[5]刘腾红,孙细明.信息系统分析与设计[M].北京:
科学出版社,2003
[6]林邦杰.彻底研究Java[M].北京:
电子工业出版社,2002
[7]毕广吉.Java程序设计实例教程[M].北京:
冶金工业出版社,2007
[8]王保罗.Java面向对象程序设计[M].北京:
[9]耿祥义,张跃平.Java设计模式[M].北京:
清华大学出版社,2009
[10]BruceEckel.Java编程思想[M].北京:
机械工业出版社,2003
Java程序设计课程设计成绩评定
成绩评定:
指导教师签字:
年月日