JAVA课程设计聊天室系统_第1页
JAVA课程设计聊天室系统_第2页
JAVA课程设计聊天室系统_第3页
JAVA课程设计聊天室系统_第4页
JAVA课程设计聊天室系统_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE14目录1 概述聊天室 22.设计依据 22.1设计平台 22.2设计思想 33.各模块功能简介 34.结构分析 45.界面设计 56.附录源代码 6概述聊天室系统聊天室系统使用JAVA+SQL完成,ECLIPSE完成代码编写,JIGLOO完成界面设计,SQLSERVER完成数据库管理。聊天室通过输入的对方IP,将JTextField中的内容发送到拥有此IP的主机(前提是对方也启动了聊天室程序)。网络的通信使用UDP协议,即时搜寻网络上的短消息,并可恢复对方消息。数据库的表只有一个User_Info,用户通过用户管理模块登录,注册,修改密码。系统有三个类,MainWin、ChatRoom、jdbcodbc。MainWin是程序的入口类,界面是登陆,注册,修改密码的JFrame窗口。ChatRoom是聊天室的主窗口,负责搜发消息。jdbcodbc负责数据库的连接,有一个构造函数,一个查询方法,一个更新方法,三个返回方法。三个类都放在Com包里,Com包在Chat项目里。2.设计依据本系统要求实现一个两人聊天室的Java图形用户界面界面程序,主要包括如下功能:1.主人可以根据输入的IP寻找要聊天的对象。2.主人和客人之间可以互相发送短消息进行即时聊天。2.1设计平台设计平台是j2seJ2se是一个开放源代码的Java的可扩展开发平台。编写代码和运行软件都很方便。编写过程中要是有错误就有提示,非常方便用户修改代码。2.2设计思想程序分为三个部分:数据库连接,聊天室管理,用户管理。其中用户管理分为用户注册,用户登录,用户修改密码。3.各模块功能简介聊天室系统聊天室管理模块数据库管理模块聊天室系统聊天室管理模块数据库管理模块用户管理模块用户管理模块用户管理模块用户管理模块4.结构分析主窗口对象MainWin()方法:构造函数,调用initGUI()方法以及父类JFRAME的构造函数。main()方法:程序的入口。initGUI()方法:加载窗口的各个组件以及事件处理。数据库连接对象jdbcodbc():构造函数,加载数据库驱动,建立数据库连接。CheckInfo():将查询语句得到的数据库内容赋给数据集。UpdateInfo():用插入语句使数据库更新。聊天室对象ChatRoom():构造函数,调用initGUI()方法以及父类JFRAME的构造函数。并用循环实现实时接受数据包里的消息。initGUI():加载窗口的各个组件以及事件处理。5.界面设计用户界面的设计是整个系统设计中比较关键的一环。通过用户界面能更清晰的显示出本系统所具有的功能、简单的错误警告及处理能力。用户界面的友好设计,可以使操作人员更迅速的掌握其操作步骤,便于操作。客户端窗口聊天室界面设计内嵌“私聊”窗口实验总结由于能力及时间的关系,这个Java聊天室程序没能达到其要求,很有点失望,很有点遗憾。在建立通信和连接数据库时,虽然很认真地在做,可总还是失败,这也导致了整个聊天室的无法运作(只有界面而已)。事实如此,不再赘言了。这次Java实习,似乎量上过大,然而坚持做下来,还有很有意义和收获的。也许我的所得,对他人而言,可谓不值一提,但对我来说,它们的确让我在思想和能力上,更上了一层楼。下面我就谈谈我的体会:Jave与C语言编程相比,有着本质的不同.前者面向对象,即面向问题而设计程序,后者则是分析问题后,面向问题解决的过程而设计程序.本质的不同,导致程序设计的明显差异.Java设计的程序,通过划分类,通常都显得通俗易懂,条理清晰,而且很简捷.这是C语言所无法比拟的,除非它有很好的数据结构,但必须承认,就算如此,还是难以与之平行的.用Jave编聊天室,其实也不是那么复杂,但要是换用C语言,我真不知道其工作量有多大了。由此,我看到了Java的优越性,更坚定了我学好Java的决心.用Java解决实际问题,分析问题是至关重要的。分析要合理、全面,只有这样,划分的类就不至于过大或过小。一个复杂的问题,就象这个聊天室吧,一开始不是什么都会做,先就完成简单、容易的,然后再带着小有的成就感,去征服难弄的部分。这种思想是处处适用的。想说的,我已经说完了。最后再说一句:虽然目前我的编程能力很差劲,可我心中已有了目标,也许我走不到终点,但我一定会前进,绝不轻易放弃!梦想来之不易!6.附录源代码程序主界面设计建立服务端窗口类:窗口程序如下importjava.awt.Button;importjava.awt.Color;importjava.awt.FlowLayout;importjava.awt.List; importjava.awt.TextArea;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JScrollPane;importjavax.swing.JTextField;publicclasschatroomW{ JFramef=newJFrame("局域网聊天室"); JLabellabel1=newJLabel("端口"); JLabellabel2=newJLabel("发送"); Buttonbutton1=newButton("启动服务"); Buttonbutton2=newButton("发送"); Buttonbutton3=newButton("刷新用户列表"); JTextFieldtext1=newJTextField(5); JTextFieldtext2=newJTextField(25); TextAreaarea1=newTextArea(26,84); ListuserList=newList(27); JScrollPanescro1,scro2; publicchatroomW(){ chat(); } publicvoidchat(){ area1.setBackground(newColor(204,255,255)); area1.setForeground(Color.black); userList.setBackground(Color.gray); userList.setForeground(Color.white); f.setLayout(newFlowLayout());f.add(area1);f.add(userList);f.add(label1);f.add(text1);f.add(button1);f.add(text2);f.add(button2);f.add(button3); f.setBounds(300,200,750,485); f.setResizable(false); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); area1.setEditable(false);text1.setText("10000"); myEvent(); } publicstaticvoidmain(Stringargs[]){ newchatroomW(); } publicvoidmyEvent(){}}建立客户端窗口importjava.awt.Color;importjava.awt.FlowLayout;importjava.awt.TextArea;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JScrollPane;importjavax.swing.JTextField;publicclassClientW{ JFramef=newJFrame("聊天室"); JScrollPanejs; TextAreaarea=newTextArea(19,67); JTextFieldtext1=newJTextField(12); JTextFieldtext2=newJTextField(5); JTextFieldtext3=newJTextField(5); JTextFieldtext4=newJTextField(20); JButtonbutton1=newJButton("连接"); JButtonbutton2=newJButton("发送"); JButtonbutton3=newJButton("私聊"); JLabellabel1=newJLabel("服务器地址"); JLabellabel2=newJLabel("服务器端口"); JLabellabel3=newJLabel("昵称"); publicClientW(){ chat(); } publicvoidchat(){ area.setBackground(newColor(204,255,255));// area.setForeground(Color.black); f.setLayout(newFlowLayout()); f.setBounds(300,200,500,410); f.add(label1); f.add(text1); f.add(label2); f.add(text2); f.add(button1); f.add(area); f.add(label3); f.add(text3); f.add(text4); f.add(button2); f.add(button3); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setResizable(false); area.setEditable(false); text2.setText("10000"); text4.setText(null); myEvent(); } publicvoidmyEvent(){} publicstaticvoidmain(Stringargs[]){ newClientW(); }}classnetchat{JFramef=newJFrame("私聊"); JLabellabel1,label2,label3; Buttonbutton1,button2; JTextFieldtext1,text2,text3,text4; TextAreatextarea; publicnetchat(){ f.setLayout(newFlowLayout()); f.setBounds(300,200,400,310);//设置窗口大小和位置; f.setResizable(false);//让窗口大小固定; label1=newJLabel("对方主机"); label2=newJLabel("本地端口"); label3=newJLabel("对方端口"); button1=newButton("连接"); button2=newButton("发送"); text1=newJTextField(7); text2=newJTextField(3); text3=newJTextField(3); text4=newJTextField(20); textarea=newTextArea(13,53); textarea.setEditable(false); textarea.setBackground(newColor(204,250,255)); f.add(label1); f.add(text1); f.add(label2); f.add(text2); f.add(label3); f.add(text3); f.add(button1); f.add(textarea); f.add(text4); f.add(button2); f.setVisible(true);// f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);//关闭窗口程序同时关闭; myEvent();}客服端类继承客户端窗口类,并内嵌私聊程序importjava.awt.Button;importjava.awt.Color;importjava.awt.FlowLayout;importjava.awt.TextArea;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintStream;import.DatagramPacket;import.DatagramSocket;import.InetAddress;import.Socket;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JTextField;publicclassClientextendsClientW{ Sockets=null; publicClient(){} publicvoidmyEvent(){ button1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ try{ s=newSocket(text1.getText().toString(),Integer.parseInt(text2.getText())); newThread(newLinkC()).start(); area.append("[系统消息]:连接成功\n"); }catch(Exceptionex){area.append("[系统消息]:连接失败\n");} } }); button2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ newSentC(); } }); button3.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ newnetchat(); } }); } publicstaticvoidmain(Stringargs[]){ newClient(); } classLinkCimplementsRunnable{ publicvoidrun(){ try{ BufferedReaderbufIn= newBufferedReader(newInputStreamReader(s.getInputStream())); Stringmsg=null; PrintStreamps=newPrintStream(s.getOutputStream()); ps.println(text3.getText());while(true){ try{ while((msg=bufIn.readLine())!=null){ area.append(msg+"\n"); } }catch(Exceptionex){break;}} }catch(Exceptione){} }}classSentC{ publicSentC(){ try{PrintStreamps=newPrintStream(s.getOutputStream());if(!text4.getText().equals("")){ ps.println(text4.getText());//area.append(text4.getText());//服务器自动会返回 text4.setText("");} }catch(Exceptione){} }}//私聊类classnetchat{JFramef=newJFrame("私聊"); JLabellabel1,label2,label3; Buttonbutton1,button2; JTextFieldtext1,text2,text3,text4; TextAreatextarea; publicnetchat(){ f.setLayout(newFlowLayout()); f.setBounds(300,200,400,310);//设置窗口大小和位置; f.setResizable(false);//让窗口大小固定; label1=newJLabel("对方主机"); label2=newJLabel("本地端口"); label3=newJLabel("对方端口"); button1=newButton("连接"); button2=newButton("发送"); text1=newJTextField(7); text2=newJTextField(3); text3=newJTextField(3); text4=newJTextField(20); textarea=newTextArea(13,53); textarea.setEditable(false); textarea.setBackground(newColor(204,250,255));text2.setText("10000"); text3.setText("10000"); f.add(label1); f.add(text1); f.add(label2); f.add(text2); f.add(label3); f.add(text3); f.add(button1); f.add(textarea); f.add(text4); f.add(button2); f.setVisible(true);// f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);//关闭窗口程序同时关闭; myEvent();} publicvoidmyEvent(){ f.addWindowListener(newWindowAdapter() { publicvoidwindowClosing(WindowEvente){try{DatagramSocketds=newDatagramSocket();byte[]buf="对方已下线".getBytes(); DatagramPacketdp= newDatagramPacket(buf,buf.length,InetAddress.getByName(text1.getText()),Integer.parseInt(text3.getText())); ds.send(dp); ds.close();}catch(Exceptionex){} } }); button2.addActionListener(newActionListener()//事件源是button2 { publicvoidactionPerformed(ActionEvente) {if(!text4.getText().equals("")) newThread(newSend()).start(); } }); button1.addActionListener(newActionListener()//事件源是button1 { publicvoidactionPerformed(ActionEvente) { newThread(newRece()).start(); } }); }classSendimplementsRunnable{ publicvoidrun(){try{UdpSend();}catch(Exceptione){textarea.append("[系统消息]:发送失败\n");}}publicvoidUdpSend()throws

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论