校内通信Java课程设计论文Word格式.docx
《校内通信Java课程设计论文Word格式.docx》由会员分享,可在线阅读,更多相关《校内通信Java课程设计论文Word格式.docx(37页珍藏版)》请在冰豆网上搜索。
![校内通信Java课程设计论文Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/22/837489bf-28c0-4155-9158-c5140de7ebd4/837489bf-28c0-4155-9158-c5140de7ebd41.gif)
2、采用B/S架构,即浏览器/服务端形式,这种形式的即时通讯软件,直接借助互联网为媒介、客户端无需安装任何软件,既可以体验服务器端进行沟通对话,一般运用在电子商务网站的服务商,典型的代表、53KF、live800等校园企业内部通信工具可以很好的解决企业通信问题,面对工作目标和团队工作中可能出现的问题,必须加强团队的沟通,使每个用户都能及时地了解自己的工作内容和获取需要的资料。
系统托盘可以在程序主窗体最小化之后,使用托盘控制窗体的相应操作,例如打开主窗体;
JavaDB使用灵活,可以应用到不同的系统平台中,只要该平台有支持Java的环境
2概述
2.1开发背景
近几年,随着网络的迅速发展和全球信息化速度的加快,网络通信已经不算是新鲜事物了,但大多数网络通信需要借助Internet上的服务器,这就给那些具有大规模内部网络的用户造成了许多问题,如遭遇到网络攻击、病毒入侵等等。
由于互联网上的网络通信工具有时会给企业内部信息交流带来不便,所以为了方便校园和内部用户之间的沟通、保证校园内部局域网的安全,需要开发一个基于局域网的信息收发系统的即时通信工具。
2.2课题现状
校园内部通信系统是基于局域网的即时通信工具,可以说是一个internet通信工具的小规模版本,一般采用UDP或者TCP协议体系等来实现,开发技术已经比较成熟,国外的通信工具较有名的有ICQ、MSNMessenger、国产的QQ、新浪UC都实现了广域网的即时通信。
在最近几年,国内的局域网通信工具较有代表性有飞鸽传书、飞秋,这两款软件的快速、实效、迷你、简单的特点受到了广大用户的好评。
这些工具的实现方式具体细节不易得之,但它无非是利用各种平台上的网络通信接口,基于TCP/IP或者UDP/IP协议架构下的软件产品。
对于一个企业内网,这些功能的实现相比于广域网更加简单。
所以还是有很大研究价值的[1]。
2.3软硬件需求
本系统运行时需要以下条件。
硬件平台:
CPU:
Pentium41.8GHz
内存:
128MB以上
硬盘空间:
100MB
软件平台:
操作系统:
Windows2000、WindowsXP、Windows2003等
开发工具:
Eclipse、JDK6.0
数据库:
JavaDB
3系统分析
3.1需求功能分析
本系统的设计目标是实现一个校园局域网通信系统,可以方便的进行交流,可以大大的提高校园企业内部的工作效率。
根据内部局域网通信的需求,本系统主要包括信息通信、系统设置、搜索用户、访问公共资源、访问对方主机五大功能。
各功能概述:
信息通信:
信息通信是内部通信系统的核心功能,它用于不同职工之间的通信,这种通信方式能够实现多个职工之间的通信,而不存在类似电话占线的问题,增加了任务分配的新方式,从而提高企业的工作效率。
系统设置:
系统设置用于设置用户界面、公共路径、公告栏等的功能。
用户搜索:
用户搜索用于搜索局域网内的其他用户,系统会根据用户所设置的IP搜索范围搜索所有计算机上的用户。
访问公共资源:
访问公共资源用于实现内部公共服务器上资源访问的功能。
访问对方主机:
访问对方主机用于两人聊天情况下对对方主机的访问和控制的功能。
3.2可行性分析
3.2.1可行性要求、目标
企业内部通信系统必须提供网络通信功能,在通信过程中禁止使用聊天表情、文件传送等功能,避免资料外泄,或因发送错误而导致上机资料的丢失以及其他损失。
最重要的是必须适应任何操作系统,也就是实现跨平台技术,因为企业内部的工作需要,工作环境中使用了多个操作系统来完成不同的工作。
另外,系统不需要使用服务器中转和记录通信内容,可以独立完成通信任务,排除职工对领导监视工作进度等行为的逆反心理。
企业内部通信系统的目标是实现企业的信息化通信,提高企业通信能力,提高任务理解和执行能力,减少没有必要的人员流动和资金损耗,以最快的速度提升企业的市场竞争力。
3.2.2技术可行性分析
局域网通信系统的技术已经非常成熟,首先,从硬件上讲,计算机硬件速度现在已经不是问题,高速便捷的网络已经十分普遍,这些为本系统的运行打下坚实的基础。
从软件的角度上讲,数据库技术已经相当成熟(目前用得比较多的有SQLServer,JavaDB等),并且处理能力也非常强,这为海量数据的存储和处理打下了坚实的基础,同时,使用java开发图形界面程序也相当普遍。
有了这些技术的支持,我们成功开发一个局域网通信系统没有任何技术风险。
3.2.3经济可行性分析
经济可行性主要是对项目的经济效益进行评价。
本系统开发完成后可缩减工作时间,提高工作效率,而且简单易操作,不需对使用人员进行培训,不管是在资金上还是效率上都能达到预期的效果。
本系统开发经费对于企业在经济上是可以接受的,并且本系统实施后可以显著提高工作效率,有助于企业的信息化管理,所以该企业内部通信系统在经济上是可行的。
4系统设计
4.1系统目标
系统根据企业对内部通信系统的要求,本系统可以实现以下目标:
1.操作简单、界面简洁美观。
2.更方便访问企业公共资源。
3.及时显示企业公共信息。
4.在通信窗口显示对方IP信息。
5.局域网内网用户自动搜索。
6.系统运行稳定、安全可靠。
4.2系统功能
系统功能结构图如下:
图4.1系统功能结构图
4.3数据库结构设计
4.3.1数据库分析
该系统是一个桌面应用程序,它不像web应用那样需要配置到指定的服务器上,所以数据库和该系统应存在于同一计算机中,这样,不仅节省了开销,而且还提高了系统的安全性。
该系统所用数据库为JAVADB数据库。
由于该数据库的运行环境平台要求较低,一般的电脑都可以满足它的硬件条件[2]。
4.3.2校园企业内部通信系统的E-R图
该系统的实体包括用户和窗口位置两个实体,分别记录着通信窗口的绝对位置和用户的信息。
(1)用户实体
用户实体主要包括IP信息、PC名称、用户信息、系统信息等,它记录了搜索到的用户和所有的用户信息。
用户实体的E-R图如下所示:
(2)窗口位置实体
窗口位置实体记录着窗体最后的移动位置和窗体大小等信息,主要包括窗体位置的横坐标和竖坐标(下图用X、Y轴坐标表示)、窗体的高度和宽度。
窗口实体的E-R图如下所示:
图4.3窗口实体E-R图
4.3.3数据库结构设计
在该系统中的数据库db_EQ包含两个数据表,分别为用户信息表tb_users和窗体位置信息表tb_location。
(1)tb_users(用户信息表)
用户信息表用来保存内的通信用户,表tb_users如下所示:
表4.1用户信息表—tb_users
字段名
数据类型
是否为空
是否主键
默认值
描述
iP
Varchar(16)
NO
YES
用户IP
host
Varchar(30)
NULL
主机名称
name
Varchar(20)
姓名
tooltip
Varchar(50)
提示文本
icon
头像图标
(2)tb_location(窗体位置信息表)
窗体位置表用来保存窗体的位置和大小,表tb_location如下所示:
表4.2窗体位置信息表—tb_location
xLocation
Int
X轴坐标
yLocation
Y轴坐标
height
窗体高度
width
窗体宽度
5详细设计和代码实现
5.1主窗体模块的设计与实现代码
publicEQ(){
super(newFrame());
frame=this;
dao=Dao.getDao();
location=dao.getLocation();
setTitle("
郑科校内通"
);
setBounds(location);
progressBar=newJProgressBar();
progressBar.setBorder(newBevelBorder(BevelBorder.LOWERED));
tabbedPane=newJTabbedPane();
popupMenu=newJPopupMenu();
chatTree=newChatTree(this);
user_dir=System.getProperty("
user.dir"
//程序执行路径用于系统更新
localFile=newFile(user_dir+File.separator+"
EQ.jar"
//本地EQ文件
stateLabel=newJLabel();
//状态栏标签
addWindowListener(newFrameWindowListener());
//添加窗体监视器
addComponentListener(newComponentAdapter(){
publicvoidcomponentResized(finalComponentEvente){
saveLocation();
}
publicvoidcomponentMoved(finalComponentEvente){
});
try{//启动通讯服务端口
ss=newDatagramSocket(1111);
}catch(SocketExceptione2){
if(e2.getMessage().startsWith("
Addressalreadyinuse"
))
showMessageDialog("
服务端口被占用,或者本软件已经运行。
"
System.exit(0);
}
{//初始化公共信息按钮
messageAlertIcon=newImageIcon(EQ.class
.getResource("
/image/messageAlert.gif"
));
messageAlertNullIcon=newImageIcon(EQ.class
/image/messageAlertNull20.gif"
messageStack=newStack<
String>
();
messageAlertButton=newJButton();
messageAlertButton.setHorizontalAlignment(SwingConstants.RIGHT);
messageAlertButton.setContentAreaFilled(false);
finalJPanelBannerPanel=newJPanel();
BannerPanel.setLayout(newBorderLayout());
add(BannerPanel,BorderLayout.NORTH);
userInfoButton=newJButton();
BannerPanel.add(userInfoButton,BorderLayout.WEST);
userInfoButton.setMargin(newInsets(0,0,0,10));
initUserInfoButton();
//初始化本地用户头像按钮
BannerPanel.add(messageAlertButton,BorderLayout.CENTER);
messageAlertButton.addActionListener(newActionListener(){
publicvoidactionPerformed(finalActionEvente){
if(!
messageStack.empty()){
showMessageDialog(messageStack.pop());
}
}
});
messageAlertButton.setIcon(messageAlertIcon);
showMessageBar();
add(tabbedPane,BorderLayout.CENTER);
tabbedPane.setTabPlacement(SwingConstants.LEFT);
ImageIconuserTicon=newImageIcon(EQ.class
.getResource("
/image/tabIcon/tabLeft.PNG"
tabbedPane.addTab(null,userTicon,createUserList(),"
用户列表"
ImageIconsysOTicon=newImageIcon(EQ.class
/image/tabIcon/tabLeft2.PNG"
tabbedPane.addTab(null,sysOTicon,createSysToolPanel(),"
系统操作"
ImageIconsysSTicon=newImageIcon(EQ.class
/image/tabIcon/tabLeft3.png"
tabbedPane.addTab(null,sysSTicon,createSysSetPanel(),"
系统设置"
setAlwaysOnTop(true);
}
5.1.1界面设计
主窗体界面是本系统的用户列表,它由用户列表、系统选项卡、公告提示等组成。
其中系统选项卡用于切换不同的管理界面,包括系统设计和系统工具界面[3]。
主窗体的效果图如下所示:
图5.1主窗体界面示意图
5.1.2实现过程
主窗体实现部分包括创建主窗体和记录窗体位置。
其中创建主窗体的步骤如下:
(1)创建JXCFrame类,在类中创建窗体的对象,为窗体添加选项卡面板,并添加用户列表、系统工具、系统设置3个选项卡和状态栏标签、公告按钮等属性。
在构造方法中初始化窗体上的控件。
数据库操作类、首选项对象等属性,为窗体添加时间监听器、为公告信息按钮添加监听器等。
(2)初始化Socket服务器,指定端口为1111,如初始化失败,则提示服务器端口被占用或本软件已运行,并退出本系统。
用于接收其他用户发送的通信信息。
关键代码如下:
try{//启动通讯服务端口
(3)checkPlacard方法,用于检测系统公告,当公告路径中存在系统公告时,将从文件中获取完整信息,调用pushMessage()方法将信息压入公告信息栈中。
privatevoidcheckpacard(){//检测公告信息方法
StringplacardDir=preferences.get("
placardPath"
null);
if(placardDir==null){
pushMessage("
未设置公告路径"
return;
Fileplacard=newFile(placardDir);
try{
if(placard.exists()&
&
placard.isFile()){
StringBuilderplacardStr=newStringBuilder();
Scannersc=newScanner(newFileInputStream(placard));
while(sc.hasNextLine()){
placardStr.append(sc.nextLine());
pushMessage(placardStr.toString());
}catch(FileNotFoundExceptione){
公告路径错误,或公告文件不存在"
(4)initUserInfoButton()方法用于初始化本地用户信息,并在主窗体左上角显示本地用户的头像和名称,会在用户更改本地用户名称时同步更新。
(5)main()方法,本方法首先获取用户设置的界面外观,然后调用UIManager类设置指定的外观,生成主窗体对象。
最后初始化服务器端口和系统栏图标。
publicstaticvoidmain(Stringargs[]){
try{
Stringlaf=preferences.get("
lookAndFeel"
"
java默认"
//获取用户选择的外观
if(laf.indexOf("
当前系统"
)>
-1)
UIManager.setLookAndFeel(UIManager
.getSystemLookAndFeelClassName());
//设置外观
EQframe=newEQ();
frame.setVisible(true);
//显示窗体
frame.SystemTrayInitial();
//初始化系统栏
frame.server();
//启动服务端口
frame.checkPlacard();
//检测系统公告
}catch(Exceptione){
e.printStackTrace();
}
记录窗体的位置步骤如下:
(1)为窗体添加监听器,当改变窗体的位置和大小时,将调用saveLocation()方法将窗体和位置大小保存到数据库中。
(2)saveLocation(),该方法中调用了DAO类中updateLocation将窗体的位置和大小保存到数据库中。
5.2公共模块的设计与实现
5.2.1界面设计
在本系统的项目空间中,有部分模块是公用的,或者多个模块甚至整个系统的配置信息是被多个模块重复调用完成业务的逻辑。
其中有关数据库的操作、连接数据库、创建本机IP的默认用户(并添加到数据库中)、从数据库中获取窗体位置和大小、添加或删除指定用户、更新用户信息等[4]。
5.2.2实现过程
公共模块包括数据库操作类和系统工具类。
其中DAO类主要负责有关数据库的操作,该类在构造方法中驱动并连接数据库,然后将构造方法设置为private私有属性,通过静态的getdao()获取DAO类的实例对象,这是简单的单例模式。
在连接数据库时,可以指定create参数为true直接创建数据库,但在此之前需要调用dbExist()方法判断数据库是否存在。
Dao类的关键代码如下:
publicclassDao{
//数据库驱动
privatestaticfinalStringdriver="
org.apache.derby.jdbc.EmbeddedDriver"
;
privatestaticStringurl="
jdbc:
derby:
db_EQ"
//数据库URL
privatestaticConnectionconn=null;
//数据库连接
privatestaticDaodao=null;
privateDao(){
Class.forName(driver);
if(!
dbExists()){
conn=DriverManager.getConnection(url+"
create=true"
createTable();
}else
conn=DriverManager.getConnection(url);
addDefUser();
}catch(Exceptione){
e.printStackTrace();
JOptionPane.showMessageDialog(null,"
数据库连接异常,或者本软件已经运行。
privateb