计算机网络课程设计—通讯录软件系统设计Word文件下载.docx
《计算机网络课程设计—通讯录软件系统设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计—通讯录软件系统设计Word文件下载.docx(50页珍藏版)》请在冰豆网上搜索。
2.3流程图 4
第三章详细设计 5
3.1客户端 5
3.2服务器端 8
3.3函数调用关系 11
第四章调试分析 12
第五章运行结果 13
5.1登录功能 13
5.2查询本机通讯录 14
5.3备份每个用户的通讯录 15
5.4更新每个用户的通讯录 16
5.5加密功能 18
第六章课程设计总结 18
参考文献 20
附录 20
第一章需求分析
本设计要求完成一个基于C/S模式的通讯录备份软件。
采用C/S架构。
应该具有易用、美观的图形界面。
1.1服务器端功能要求
(1)能够验证客户身份,接收客户端的备份通讯录的请求,能够实时备份和更新客户的通讯录。
(2)加密存储每个用户的通讯录
1.2客户端功能要求
(1)能登陆连接到服务器,回应:
连接成功/失败。
(2)能备份本机通讯录。
(3)能实时更新本机通讯录。
(4)能查询本机通讯录。
第二章总体设计
2.1总体结构
客户端建立一个本地文件存储本地数据,通过对文件进行读写操作,实现本地数据的增、删、查等功能。
登录成功后,可以将本地联系人信息备份到服务器,当本地文件中的联系人信息意外丢失时,可以将服务器端的备份内容更新到本地联系人信息,类似于微信的联系人备份和导出功能。
服务器负责验证客户端的登录账号和密码,并通过JDBC与Mysql建立连接。
在客户登录成功后,响应客户端的备份请求,实现联系人数据的加密存储;
响应客户端的更新要求,将客户联系人信息导入到本地文件中。
2.2模块关系
本地增删查改
图2.2通讯录系统模块关系图
2.3流程图
图2.3通讯录系统流程图
第三章详细设计
如图3.1所示,一共建立了两个包,客户端和服务器。
图3.1通讯录软件工程包展开图
3.1客户端
客户端的三个类分别为Login,LoginListener,Operation。
3.1.1Login类
实现登录界面,如图3.2所示,并实例化LoginListener类给登录按钮添加ActionListner监听方法。
图3.2通讯录系统客户端登录界面
3.1.2LoginListener类
实现ActionListener类,重写抽象函数ActionPerformed。
当单击登录按钮时,利用Socket连接到服务器,将客户的账号和密码传给服务器,等待服务器传来的验证结果。
验证通过则弹出操作主界面,失败则弹出用户名或密码错误的窗体。
响应单击登录按钮的代码如下所示。
publicvoidactionPerformed(ActionEvente){
try{
//发送密码和用户名到客户端
Stringuser=text.getText();
Stringpass=pw.getText();
Sockets=newSocket("
127.0.0.1"
8000);
OutputStreamos=s.getOutputStream();
OutputStreamWriterosw=newOutputStreamWriter(os);
PrintWriterpw=newPrintWriter(osw,true);
pw.println(user+"
%"
+pass);
//接收服务器发回来的确认信息
InputStreamis=s.getInputStream();
InputStreamReaderisr=newInputStreamReader(is);
BufferedReaderbr=newBufferedReader(isr);
Stringyorn=br.readLine();
//显示登录成功界面或密码错误界面
if(yorn.equals("
ok"
)){
Operationo=newOperation();
o.SetSocket(s);
frame.dispose();
}
else{
JTextFieldtext=newJTextField("
用户名或密码错误"
);
JFrameframe=newJFrame();
frame.setTitle("
错误"
frame.setLocation(550,300);
frame.setSize(200,100);
frame.setDefaultCloseOperation
(2);
frame.add(text);
frame.setVisible(true);
}
}catch(Exceptione1){}
}
3.1.3Operation类
实现操作主界面,如图3.3所示,同样implementsActionListener类,重写抽象方法ActionPerfomed。
实现监听的代码风格不同于登录按钮,没有重新创建一个类,直接在构造方法中实现。
图3.3通讯录系统客户端主界面
Operation中重要的一点是实现Socket的传递,在单击登录后,客户端会实Socket对象而不能重新实例化一个新的对象,实现值传递的方法如下。
在Operation中定义一个方法SetSocket,在LoginListener中收到服务器传来验证成功的指令后,实例化Operation对象,并调用SetSocket函数实现Socket的传递。
SetSocket方法及其调用如下所示。
publicSockets;
publicvoidSetSocket(Sockets){
this.s=s;
}
if(yorn.equals("
3.2服务器端
服务器端的三个类分别实现为ServerFrame、Sever、DESPlus。
3.2.1SeverFrame类
简单实现了一个服务器端的窗体,用来显示客户端是否登录成功和客户端发来的指令。
如图3.4所示。
图3.4通讯录备份软件服务器端显示窗体
3.2.2Server类
是服务器端的主体部分,实现的功能有响应客户端的登录请求,连接Mysql,响应客户端的备份、更新请求。
响应登录代码:
//服务器在8000端口监听
@SuppressWarnings("
resource"
)
ServerSocketss=newServerSocket(8000);
System.out.println("
服务器正在8000端口监听……"
Sockets=ss.accept();
//接收用户名和密码
InputStreamis=s.getInputStream();
InputStreamReaderisr=newInputStreamReader(is);
BufferedReaderbr=newBufferedReader(isr);
Stringuandp=br.readLine();
Stringu=uandp.split("
)[0];
Stringp=uandp.split("
)[1];
//将用户名密码的验证结果传送到客户端
OutputStreamos=s.getOutputStream();
OutputStreamWriterosw=newOutputStreamWriter(os);
PrintWriterpw=newPrintWriter(osw,true);
if(u.equals("
siru"
)&
&
p.equals("
123"
pw.println("
sf.text.append("
客户登录成功"
+"
\n"
}else{
//发送错误信号到客户端
error"
}
响应客户端备份和更新指令的代码:
//响应客户端备份命令
if(message.equals("
备份"
备份联系人信息"
Class.forName("
org.gjt.mm.mysql.Driver"
Connectioncn=DriverManager.getConnection("
jdbc:
mysql:
//127.0.0.1:
3306/通讯录"
"
root"
"
Statementst=cn.createStatement();
st.executeUpdate("
deletefrom联系人wherenameisnotnull"
Stringstring=br.readLine();
while(!
string.equals("
end"
Stringname=string.split("
"
Stringtelephone=string.split("
PreparedStatementps=cn.prepareStatement("
insertinto联系人(name,telephone)values(?
?
)"
ps.setString(1,desPlus.encrypt(name));
ps.setString(2,desPlus.encrypt(telephone));
ps.executeUpdate();
string=br.readLine();
}
备份成功"
}
//响应客户端更新的命令
更新"
更新联系人信息"
Co