ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:399.63KB ,
资源ID:4690202      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4690202.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA综合实训报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JAVA综合实训报告.docx

1、JAVA综合实训报告实 训 报 告( 2010 / 2011 学 年 第 一 学 期 )实习名称 JAVA综合实训 班 级 9 0 9 1 6 P 2 9 姓 名 刘 潮 指导老师 初 耀 军 日 期 2010年1月3日 目 录 第一章 需求分析 31.1服务器端需求分析 31.2客户端需求分析 4第二章 设计重点 82.1 设计思路 82.2 具体设计 82.3问题解决 20第三章 测试 21第四章 期望与体会 23参考资料 23第一章 需求分析1.1服务器端需求分析当运行服务器端程序时服务器的界面,如图1-1所示: 图1-1当点击“启动服务”按钮后服务器的界面如图1-2所示,在JTextP

2、ane区域能够显示服务器已经正常启动的消息: 图1-2当在“在此发送系统消息”区域输入信息并点击回车键时,在JTextPane区域能够显示发送的系统消息,如图1-3所示: 图1-3当点击“停止服务”按钮后服务器的界面,在JTextPane区域能够显示服务器已经停止的消息,而且弹出对话框提示:您已经关闭了侦听套接字!如图1-4所示: 图1-4点击“确定”按钮后如图1-5所示: 图1-51.2客户端需求分析客户端客户登陆的界面,如图1-6所示:图1-6当用户输入用户名和密码并选择登陆方式后,点击“确定”按钮,如图1-7。 如果密码或用户名有错误时,将会弹出对话框提醒用户,如图1-8所示:图1-7图

3、1-8当过客点击登陆按钮后在服务器端将显示过客上线的消息,如图1-9所示图1-9当用户输入用户名和密码都正确时,点击以会员的方式登陆后,先出现的界面如图1-10所示,然后出现的是会员界面,如图1-11所示图1-10图1-11选择管理员,如图1-12所示。图1-12确定后,见图1-13所示:图1-13我们可以在第一个文本区域内输入管理员的名称,也可以对第一个进行选择发送的对象,以及点击“悄悄话”单选框发送给自己的消息,我们选择生气的,输入管理员名称,如图1-14所示:图1-14第二章 设计重点2.1 设计思路(1)首先在服务器端应该有启动线程用来启动服务器,并且要有监听线程,只要有用户上线或发送

4、聊天信息,在服务器端都应该能够看到。在服务器端还应该有接收客户端消息的线程,此线程需要接受客户端发来的信息,并对该信息进行分析,执行相应的请求。(2)在客户端应该有用户接收线程用于接收用户发送的消息,图片,表情。(3)在客户端还应该有会员客户端类,供会员登陆聊天,并且有会员接收线程。(4)对于服务器应该有管理员对其进行管理,所以应该有管理员客户端类,同样在管理员客户端也要有管理员接收线程,当管理员登陆时能够及时响应其请求。(5)在过客类中应该有接收消息的进程用来接收服务器端发来的消息。2.2 具体设计第一步 创建数据库创建数据库,创建一张member表,包含两个字段username和passw

5、ord,并且这两个字段都不能为空,创建一张Admin表,也包含两个字段username和password,并且这两个字段也都不能为空,分别为表添加几条记录,代表不同用户。启动Access2003,新建空数据库表,命名为java,选择“使用设计器创建表”然后在表里添加username和password字段,添加几条记录。最后保存表。打开“控制面板”打开“管理工具”,然后选择“数据源(ODBC)”,在弹出的对话框中选择“添加”然后选择“Driver do Microsoft Access(* mdb)”点击完成按钮。在对话框中输入数据源名称“liuchao”,然后选择数据库,选中刚刚在Access

6、 2003中新建的表,确定。第二步 界面的搭建2.2.1服务器端界面设计需要的基本控件如下:final JScrollPane liuchaotscroll = new JScrollPane();final JPanel panel = new JPanel();final JTextPane liuchaotextPane = new JTextPane();final JTextField liuchaosystemmeg = new JTextField();final JButton liuchaostopserver = new JButton();final JButton li

7、uchaostartserver = new JButton();2.2.2管理员客户端界面设计其基本布局需要的控件如下:final JButton liuchaomessageNote = new JButton();final JButton liuchaologin = new JButton();final JButton liuchaosendMeg = new JButton();final JButton liuchaologout = new JButton();final JButton liuchaoexit = new JButton();final JButton li

8、uchaohideNote = new JButton();final JTextPane liuchaoreceiveMeg = new JTextPane();final JCheckBox liuchaostatusCheckBox = new JCheckBox();final JScrollPane liuchaosendMegScrollPane = new JScrollPane();final JPanel liuchaootherPane = new JPanel();final JSplitPane splitPane = new JSplitPane();final JS

9、crollPane jTreeScrollPane = new JScrollPane();final JScrollPane receiveMegScrollPane = new JScrollPane();2.2.3 会员客户端界面设计其基本布局需要的控件如下:final JButton liuchaohideLogin = new JButton();final JButton liuchaosendMeg = new JButton();final JButton liuchaologout = new JButton();final JButton liuchaoexit = new

10、 JButton();final JButton liuchaomessageNote = new JButton();final JButton liuchaohideNote = new JButton();final JCheckBox liuchaostatusCheckBox = new JCheckBox();final JScrollPane liuchaosendMegScrollPane = new JScrollPane();final JScrollPane receiveMegScrollPane = new JScrollPane();2.2.4过客类界面设计其基本布

11、局需要的控件如下:final JComboBox liuchaouserOnlineList = new JComboBox();final JComboBox liuchaoactionList = new JComboBox();final JButton liuchaologout = new JButton(); final JPanel liuchaootherPane = new JPanel();final JScrollPane liuchaoreceiveMegScrollPane = new JScrollPane();2.2.5 用户登录界面设计其基本布局需要的控件如下:

12、final JButton liuchaologinButton = new JButton();final JButton liuchaoexitButton = new JButton();final JRadioButton loginStyle = new JRadioButton();final JLabel liuchaoUnLabel = new JLabel();final JLabel liuchaopwLabel = new JLabel();第三步 添加类和函数 2.2.6服务器端的类和函数(1)创建用户信息类SingleUserMegData 在server包下创建Si

13、ngleUserMegData类,此类用来描述单个用户的信息,包括:用户名,套接字, 输入流输出流等。服务端每次接受一个用户成功登陆,便会为这个用户窗口一个SingleUserMegData对象,其中存储该用户的信息。并把所有用户的SingleUserMegData对象组成一个列表,作为查询的依据。类包括下面5个成员变量,以及它们的get和set方法,用于存取这些变量:public class liuchaoSingleUserMegData String userName,msg;Socket socket = null;ObjectInputStream dataIn = null;Sin

14、gleUserMegData nextID = null; (2)创建类MyTextPane继承于JTextPanel,为其添加文本方法append,它的功能是取文档共享的默认AttributeContext,将该属性添加到给定的集合中属性,并返回新的有代表性的集合。将滚动条自动拉到JTextArea最底端,将属性应用于字符内容。再用给定字符串所表示的新内容替换当前选定的内容。为其添加方法append,其功能为将滚动条自动拉到JTextArea最底端,将属性应用于字符内容。再用给定字符串所表示的新内容替换当前选定的内容。(3)用户信息链表类 UserInfoList,用户信息链表类要实现对用户

15、信息的添加删除和查询的功能,如果用户离开了,就将存储在服务器端的用户信息删除,同时如果有用户上线,也能够在服务器端添加用户信息。户信息链表类的查找功能可以分为按名字查找和单用户信息数据查找。用户信息链表类声明的全局量: private SingleUserMegData root,rootID; private SingleUserMegData pointer; private int userCount;构造方法UserInfoList算法: 用空参数创建SingleUserMegData,赋值给root;用空参数创建SingleUserMegData,赋值给rootID;使root的ne

16、xt为空;使rootID的nextID为空;使pointer为空;(4)接收客户端信息类ServerReceiveThread(5)服务器侦听类ServerListenThread类的实现。在server包下创建ServerListenThread类,让其继承Threadpublic class ServerListenThread extends Thread 为ServerListenThread类添加函数startListen。为ServerListenThread类添加发送数据方法sendObject为ServerListenThread类添加run函数如下public void ru

17、n() startListen(); 该类用来验证客户端传来的用户名和密码是否在服务器端的数据库中存在,如果存在表示为合法用户,准予登陆;如果不存在,表示无此用户,不准登陆。如果是合法用户登录,还要将该用户的信息对象SingleUserMegData加入列表userInfoList中,同时在服务器界面的下拉框中增加该用户的名字。2.2.7管理员客户端的类和函数(1)为管理员客户端添加界面布局IMPanelAdminClient类。为“登陆”按钮添加事件监听器,当用户点击“登陆”按钮后,立刻连接服务器并到指定的端口,然后设置“登陆”按钮的状态为假,即此刻如果用户没有下线就不能使用此按钮,设置“发

18、送”按钮、“离线”按钮和“退出”按钮的状态为真,即用户可以使用这三个按钮。 为IMPanelAdminCli ent类添加连接到服务器的方法connect。首先获取服务器的IP地址和端口号然后建立客户端套接字并获取套接字的数据输出流和数据输入流。创建一个新的客户接收线程并利用参(clientSocket,dataOut,dataIn,receiveMeg, userOnlineList,getSendMeg(),geminate(),getSendMegTextField()向该线程发送数据。然后启动该监听线程。为“发送”按钮添加事件监听器算法:设置sendMeg的侦听,并侦听: 如果clie

19、ntSocket为空,返回;如果clientSocket.isClosed()为假,则:设置各个按钮的状态:调用sendMessage函数,向所有用户发送消息;设定sendMegTextField为空;否则 返回 为“退出”按钮添加事件监听器,如果侦听到套接字已经关闭,直接退出。如果套接字没有关闭或者服务器没有关闭,说明用户已经下线。(2)为管理员客户端添加接收线程的AdminClientReceiveThread类public class AdminClientReceiveThread extends Thread 在管理员接收线程类AdminClientReceiveThread中应该包

20、含如下函数:线程的运行方法runpublic void run() recevThread(); 接收线程的函数recevThread。主要用来读取服务器发送过来的聊天消息并处理。具体实现代码如下:public void recevThread() while(!isStop & !liuchaoclientSocket.isClosed() try/读取服务器发送过来的聊天信息 String megType = (String)dataIn.readObject(); if(megType.equalsIgnoreCase(系统信息)/处理系统信息 String systemMeg = (S

21、tring)dataIn.readObject(); liuchaoreceiveMeg.setText(系统信息); liuchaoreceiveMeg.setText(systemMeg); mn.liuchaogetMegNote().setText(系统消息 + systemMeg); /自动下滚receiveMeg.setCaretPosition(liuchaoreceiveMeg.getDocument().getLength();(3)为管理员客户端添加聊天记录类MessageNote,方便管理员观看自己的聊天记录,由自己决定是否保存聊天记录。为“清除”按钮添加事件监听器cle

22、ar.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) 如果clear为空null,则clear为JButton();设置clear的文本为clear;为clear添加侦听,点击clear,geminate()的文本设置为空字符串;);2.2.8会员客户端的类和函数(1)为会员客户端添加界面布局IMPanelClient类 。(2)当会员关闭聊天窗口时在服务器端应该断开与会员的连接,释放其占有的资源,因此需要为IMPanelClient类添加窗口关闭事件,保证窗口关闭时,关闭和服务

23、器端的连接。(3)为Client 添加聊天用户接收线程类ClientReceiveThreadPublic class ClientReceiveThread extends Thread在用户接收线程类ClientReceiveThread中应该包含如下函数:接收消息的方法recevMsg,能够接收用户名,表情,聊天对象,接收信息的发送日期。增加对于聊天消息的判断。if(megType.equalsIgnoreCase(聊天信息) 接收消息显示在文本区域中 else if(megType.equalsIgnoreCase(用户列表) 已实现(4)为IMPanelClient类添加连接到服务器

24、的方法connect,其算法和管理员客户端的connect方法类似。(5)会员的聊天信息应该由会员自己选择是否保存,因此需要为会员客户端添加MessageNote类,在该类中应该包含两个按钮“保存”和“清除”,其按钮的监听事件和管理员客户端的一样。(6)为“登陆”按钮添加监听事件,当用户点击“登陆”按钮后,用户能够登陆服务器。login.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) try 调用connect函数登陆到指定的服务器并定位到指定的端口号,设定各个按钮的状态;

25、使聊天记录为可见;catch(IOException e1)e1.printStackTrace(); );(7)为“发送”信息按钮添加监听事件,当用户点击按钮后用户可以向其他用户发送聊天信息。该按钮的功能和管理员客户端的类似。 (8)为IMPanelClient类添加接收消息方法receiveMeg,当其他用户发送聊天消息或管理员发送系统消息时在TextPanel区域可以显示。该函数返回的参数类型是MyTextPane类型如果(receiveMeg = null)为真,就创建空参数MyTextPane,并赋值给receiveMeg;然后利用setCursor为receiveMeg设置鼠标形状

26、(new Cursor(Cursor.TEXT_CURSOR)并侦听鼠标,对鼠标的每一个动作都能响应,例如:鼠标单击,鼠标按下,鼠标释放,鼠标进入,鼠标退出。(9)为“隐身登陆“按钮添加监听事件,用户不想让其他人看到自己在线时点击此按钮,但是他并没有离线,而是隐藏起来,他仍然占用系统资源。hideLogin.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) try 获取隐藏登录帐号赋值给整型量count,初始化随机函数;连接到connect(服务器的IP,服务器的端口号);利

27、用writeObject为dataOut输出(匿名用户 + count);利用flush刷新dataOut;匿名用户 + count赋值给yourHideLoginName;利用setEnabled使hideNote使能为真;利用setEnabled使mn使能为真;利用setText为userName设置文本为空字符串;以上出现异常,则 显示JOptionPane.showMessageDialog(null,匿名登陆失败!,系统警告,JOptionPane.WARNING_MESSAGE);(10)为“离线”按钮添加监听事件,用户点击此按钮后立即离开,但是他并没有关闭对话框,只要他点击登陆按

28、钮就可以上线。logout.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) if (liuchaoclientSocket = null) return; liuchaologin.setEnabled(true); liuchaosendMeg.setEnabled(false); liuchaoexit.setEnabled(true); liuchaohideNote.setEnabled(false); liuchaomessageNote.setEnabled(t

29、rue); liuchaomn.setVisible(false); if (liuchaoclientSocket.isClosed() JOptionPane.showMessageDialog(null, 客户端套接字已经关闭! + 请退出, 系统警告, JOptionPane.ERROR_MESSAGE); liuchaoClientReceiveThread.isStop = true; else if (!liuchaoclientSocket.isClosed() try liuchaodataOut.writeObject(用户下线); liuchaoClientReceive

30、Thread.isStop = true; liuchaouserOnlineList.removeAllItems(); catch (IOException ex) ex.printStackTrace(); );2.2.9过客类和函数(1)为过客添加界面布局IMGuestClient类 。(2)为Guest添加聊天用户接收线程类ClientReceiveThreadpublic class ClientReceiveThread extends Thread 在用户接收线程类ClientReceiveThread中应该包含如下函数:1 线程的运行方法runpublic void run() recevThread(); 2 接收线程的函数recevThread。接收消息的方法recevMsg,能够接收用户名,表情,聊天对象,接收信息的发送日期。增加对于聊天消息的判断。只给出了部分代码。 public void recevThread() /若套接字没有关闭,则?直执行循环体 while(!isStop&!clientSocket.isClosed() try

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1