Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说即时通讯管理系统(Java+Socket+MySQL)[通俗易懂],希望能够帮助你!!!。
目 录
程序工作原理图如图2所示:
图2 程序工作原理
4 系统设计
4.1 系统功能结构
该即时通讯系统是有两部分组成,服务器端可以通过启动来监听客户端信息的传递与执行各种对客户端的监控,客户端则是通过人性化与美观的界面来使用户可以易上手和舒适的体验快速与简便的通讯[9]。
应用从这两部分分别进行了详细的功能设计,服务器端功能主要为启动对于客户端的监听与关闭监听,还有对于已注册用户的实时监控与管理,客户端功能主要为使用者该软件账号的申请与进入操作界面,还有自己资料的修改以及对于其他账号好友的添加与管理等等。
软件功能层次图如图5所示
图5 软件功能层次图
4.2 数据库设计
数据库是该即时通讯系统的中枢结构,进行信息处理的各个部分都是在数据库的基础上的,从而能够达成对于各类数据安全完整的存储,并进行合理的运用[10]。有必要时可以设置数据字典,数据字典对于开发非常的有效,它的存在避免了程序员之前互相作繁杂的沟通,大家按照统一的标准来进行,即保证了效率也提高了整体的可维护性,下面是必须要注意的一些关键点:
(1)性能:数据库必须具有足够能力进行数据管控;
(2)兼容性:数据库是否支持开发所需的其他环境;
(3)封闭性:数据库对于数据的存储与处理是否足够保密;
(4)可靠性:数据库能不能承担对于数据的管理与传递;
(5)并行性:数据库是否可以并行运行在多节点上;
(6)可操作性:数据库是否在使用前需要大量时间学习。
根据该即时通讯系统开发时的各类现状需求,我们最终选择了MySQL作为信息处理的载体。
4.2.1 概念结构设计
我们将系统中用到的各类数据抽象成各种数据体系,这些数据类型所组建成的体系正是概念结构的构建过程,进而组建全局的概念结构。
package cn.itbaizhan.client;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class SaveChat extends JDialog{
BufferedReader bufr;
JPanel jp=new JPanel();
JLabel jl=new JLabel("聊天记录");
JButton jb=new JButton("关闭");
JTextArea jsave=new JTextArea();
JScrollPane js=new JScrollPane(jsave);
String line_separator=System.getProperty("line.separator");
public SaveChat(JFrame owner, String title, Boolean b, BufferedReader bufr)
{
super(owner,title,b);
this.bufr=bufr;
this.setLocationRelativeTo(null);
this.setLayout(null);
init();
this.add(js);
this.add(jp);
this.setSize(380, 500);
}
public void init()
{
jp.setLayout(null);
jp.setBackground(Color.PINK);
jp.setBounds(0, 0, 380, 30);
jl.setFont(new Font("楷体",Font.BOLD,17));
jl.setForeground(Color.WHITE);
jl.setBounds(5, 3, 100, 25);
jp.add(jl);
jb.setBackground(Color.WHITE);
jb.setForeground(Color.BLACK);
jb.setFont(new Font("楷体",Font.PLAIN,14));
jb.setBounds(290, 3, 70, 23);
jb.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
SaveChat.this.setVisible(false);
}
});
jp.add(jb);
jsave.setEditable(false);//不可编辑
jsave.setLineWrap(true);//自动换行
jsave.setFont(new Font("黑体",Font.PLAIN,15));
jsave.setBackground(Color.WHITE);
jsave.setForeground(Color.BLACK);
js.setBounds(0, 30, 380, 470);
try {
String s=bufr.readLine();
while(s!=null)
{
jsave.append(s+line_separator);
s=bufr.readLine();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}